karlfriedrich 发表于 2009-2-3 23:13

问个汇编的小问题

mov bx,1000h    //ip递增3
mov ds,bx         //ip递增2,这里为什么是递增2啊?
mov al,         //ip递增3

这个问题困惑偶好几个小时了:(

jiefei 发表于 2009-2-6 22:08

同样是mov指令
翻译成机器代码的时候 应该会因为不同的寻址模式 生成不同的指令
之所以RISC的指令简单因为RISC的寻址方式有限

karlfriedrich 发表于 2009-2-10 21:00

可是这是一段连续的代码啊
还是register 到register 就是2 呢?

karlfriedrich 发表于 2009-2-10 21:03

可是这是一段连续的代码啊
还是register 到register 就是2 呢?

recbio 发表于 2009-2-10 22:55

可是这是一段连续的代码啊
还是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)

karlfriedrich 发表于 2009-2-14 15:59



不知道是什么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]
查看完整版本: 问个汇编的小问题