在汇编语言中,有些操作指令分为有符号指令和无符号指令,为什么要这样,开始的时候肯定大家都会有些不理解,不过不要紧,我们慢慢来说,先看一段简单的示例:
mov ah,200
mov ch,2
mul ch ;div 为乘法无符号指令,结果ah的值为144(就是110010000的低8位)
我们再看下面的代码:
mov ah,200 ;ah为 -56
mov ch,2
imul ch ;idiv 为乘法有符号指令,结果ah的值为144
大家觉得很奇怪吧,为什么ah变成了144呢,呵呵,-56乘以2为-112,-112在内存存放为16进制的90h,即144。
还有更加要注意的就是条件转移指令,因为条件转移指令也分为了有符号和无符号的。我们再看下面的例子:
mov ah,200
cmp ah,100
ja @@2 ;无符号跳转指令,由于ah为200大于100,直接跳转到@@2,
@@1:
mov dx,1
@@2:
mov dx,2
继续看下面:
mov ah,200
cmp ah,100
ja @@2 ;有符号跳转指令,由于ah为-56小于100,不会跳转到@@2,
@@1:
mov dx,1
@@2:
mov dx,2
看了这个例子大家就知道了,有无符号指令会影响程序的执行,所以是很重要的,大家在写汇编或反跟踪的时候一定要注意细节。