问个汇编的小问题
mov bx,1000h //ip递增3mov ds,bx //ip递增2,这里为什么是递增2啊?
mov al, //ip递增3
这个问题困惑偶好几个小时了:( 同样是mov指令
翻译成机器代码的时候 应该会因为不同的寻址模式 生成不同的指令
之所以RISC的指令简单因为RISC的寻址方式有限 可是这是一段连续的代码啊
还是register 到register 就是2 呢? 可是这是一段连续的代码啊
还是register 到register 就是2 呢? 可是这是一段连续的代码啊
还是register 到register 就是2 呢?
karlfriedrich 发表于 2009-2-10 21:03 http://www.dolc.de/forum/images/common/back.gif
不知道是什么cpu的汇编。如果是x86的,的确是这样。因为,翻译成86的指令,
0000: bb 00 10 mov bx,1000h //ip递增3,因为,这条指令有3个字节
0003: 8e db mov ds,bx //ip递增2,因为,这条指令有2个字节
0005: a0 00 00 mov al, //ip递增3
有时候,寄存器寻址,ip只增加1都有可能。所以,有时候,为了节约存储空间,不用mov ax, 0 (b8 00 00)
而是 xor ax, ax(33 c0)
不知道是什么cpu的汇编。如果是x86的,的确是这样。因为,翻译成86的指令,
0000: bb 00 10 mov bx,1000h //ip递增3,因为,这条指令有3个字节
0003: 8e db mov ds,bx //ip递增2,因为, ...
recbio 发表于 2009-2-10 22:55 http://www.dolc.de/forum/images/common/back.gif
看来从寄存器到寄存器就是ip递增2了,不论寄存器里有多少个字节
xor eax,eax可读性好像不太强,呵呵,除非只是做递增
页:
[1]