amo*_*luc 0 x86 assembly att addressing-mode
我试图弄清楚下面的汇编代码是否无效.
movb $0xF, (%bl)
Run Code Online (Sandbox Code Playgroud)
它无效吗?如果是这样,为什么?谢谢.
你不说什么处理器.bl至少在x86处理器中是一个8位寄存器,但它不能用于寻址.
为什么无效指令?那么,汇编指令无效的原因是给定处理器没有这样的指令.没有可能的方法来编码该指令.在这种情况下(假设为x86),使用bl或任何其他8位寄存器都不被认为是必要的.在16位的代码唯一的16位寄存器bx,bp,si和di可用于存储器寻址.维基百科有一个有用的列表,列出了所有可能的寻址模式(请注意它是使用英特尔语法,您的代码是AT&T语法).
编辑:在AT&T语法信b中movb定义它用8位操作数的交易.
为了获得或多或少的目标(bl用于寻址),你可以做其中一个(这些是英特尔YASM/NASM语法,包括GNU .intel_syntax noprefix想要的MASM风格的汇编程序byte ptr):
对于16位代码:
xor bh,bh
mov byte [bx], 0x0f
Run Code Online (Sandbox Code Playgroud)
对于32位代码:
movzx ebx,bl
mov byte [ebx], 0x0f
Run Code Online (Sandbox Code Playgroud)
对于64位代码:
movzx ebx,bl ; with implicit zero-extension to 64-bit
mov byte [rbx], 0x0f
Run Code Online (Sandbox Code Playgroud)
您很少想要将任何内容存储到0..255(一个字节)的线性地址.在64位模式中,主要禁用分段,因此DS基址固定为0,这绝对是指令正在执行的操作,但特别是在16位模式下,DS基数可能为非零.
| 归档时间: |
|
| 查看次数: |
680 次 |
| 最近记录: |