在x86指令集中,索引1处的位可以是指定目标和源操作数的方向位,也可以是符号扩展位.我想知道最简单的逻辑方法是什么,以确定它是哪种情况.有没有办法检查除了检查指令操作码并比较它们以找出它是什么(对于指令的符号扩展或方向位变体)?还有一些指令忽略了这一位,但由于它被设置为0,因此它并不重要.
编辑:事实证明,对于写入错误(这是我的代码所针对的),reg-> r/m始终是这种情况,因为ar/m-> reg指令永远不会触发写入错误.但是,如果其他人遇到类似的问题,任何信息仍然会很好.
以下是示例程序的objdump输出,
080483b4 <display>:
80483b4: 55 push %ebp
80483b5: 89 e5 mov %esp,%ebp
80483b7: 83 ec 18 sub $0x18,%esp
80483ba: 8b 45 0c mov 0xc(%ebp),%eax
80483bd: 89 44 24 04 mov %eax,0x4(%esp)
80483c1: 8d 45 fe lea 0xfffffffe(%ebp),%eax
80483c4: 89 04 24 mov %eax,(%esp)
80483c7: e8 ec fe ff ff call 80482b8 <strcpy@plt>
80483cc: 8b 45 08 mov 0x8(%ebp),%eax
80483cf: 89 44 24 04 mov %eax,0x4(%esp)
80483d3: c7 04 24 f0 84 04 08 movl $0x80484f0,(%esp)
80483da: e8 e9 fe ff …Run Code Online (Sandbox Code Playgroud) 来自高级编程背景,我有兴趣学习低级编程.我想知道如何编译编译器?
在查看wiki中的一些文章后,数字机器代码被认为是最低级语言,但必须有一个编译器来编译这个机器代码.编写的编译器是什么语言?
我真的很困惑,这个问题可能听起来很愚蠢,但是当我们说指令大小是 32 位或 16 位时,我真的不确定这意味着什么。
如果操作数大小是 32 位,那么我们说它是 32 位指令,如果操作数大小是 16 位指令。
或者每条指令都有操作码,如果操作码地址是 32 位,那么我们说指令是 32 位。
我也在浏览 ARM 架构,在那里我读到的所有拇指指令都是 16 位的,但 ARM 模式指令是 32 位的。
指令大小完全取决于所使用的架构还是取决于 CPU 的运行模式?
http://www.xgc-tek.com/manuals/m1750-ada/m1750/x524.html
给定的链接表明,16 位指令由 8 位操作码和 4+4 位两个通用寄存器组成。
ARM拇指指令集是怎么回事??
我想知道,是否可以了解HotSpot编译器在编译给定的Java字节码类或方法时生成的实际机器代码?
我是编程新手,我从C++语言开始,据我所知,C++编译器将C++语言转换为汇编语言(例如:Visual Studio),但我试着查找将汇编语言转换为机器代码的内容.由计算机理解和执行,但我找不到答案.
所以问题是汇编语言在何处以及如何转换为机器码?它是由OS中集成的某种编译器吗?
提前致谢.
我已经开始为Gameboy经典编写一个模拟器,这是我在成功的Chip 8模拟器之后的下一个项目.
作为参考,我使用GameBoy CPU手册.
现在在第66页它说:
LD A,(HL) 7E 8
Run Code Online (Sandbox Code Playgroud)
基本上,将值HL加载到寄存器A.
但是,据我所知,这会将16位值HL加载到8位寄存器A中.这当然不合适.
你知道这是怎么回事吗?所有其他参考文献只是简单的表格,没有解释,但说同样的事情.
谢谢你的回答!
我很快就有了一个组装测试,在准备的时候,我注意到了一些奇怪的事情。
repe movsb在 ZF=0 时重复,我被教导repe应该在 CX 不等于 0 和 ZF=1 时重复。
我做了一些测试,发现之前movsb的rep,repe和repne指令的工作方式相同。
对此有何解释?
编辑:这是代码:
.model small
.data
A db ' This is a test '
N db 27
.stack 10h
.code
mov ax,@data
mov ds,ax
mov es,ax
cld
mov al,' '
mov cl,N
xor ch,ch
mov di,offset A
next: repe scasb
jcxz cont ; jump if cx=0
dec di
inc cx
xchg si,di ; swap between si and di …Run Code Online (Sandbox Code Playgroud) 从Intel 的 SDM 中,第 2.2.1 节指定 REX 前缀用于:
但是首字母缩略词中的字母 REX 代表什么?
machine-code ×10
assembly ×6
x86 ×4
instructions ×2
x86-64 ×2
arm ×1
bytecode ×1
emulation ×1
gameboy ×1
intel ×1
java ×1
jit ×1
linux ×1
low-level ×1
native ×1
object-code ×1
opcode ×1
performance ×1
repeat ×1
thumb ×1