ziyuemusic 发表于 2009-4-28 07:54:42

sub 指令小问题,谁帮分析下,谢谢!

http://cache.amobbs.com/bbs_upload782111/files_14/ourdev_440382.jpg
其中的的标志位C,“当无符号运算结果大于或等于零时,标志位置 1 ,否则清零”这个怎么理解?还有就是要是带符号运算时情况又是怎么样的?谁能举个例子吗?谢谢! (原文件名:未命名.jpg)

sye85 发表于 2009-4-28 23:11:09

汇编语言中SUB减法指令对两个数的相减时不自动区分是有符号数还是无符号数,这点和C语言有点不同。
对于符号数相减,通过进位标志位OF(O)来判断,当两个符号相反的数相减,如果差的符号与减数符号相同时出现了溢出OF=1,即正数减负数得负数或者负数减正数得正数的情况。
对于无符号数相减(比较),通过进位(错位)标志位CF(C)来判断,当前操作数大于或等于后一个操作数时,没有出现错位CF清零,当前操作数小于后一个操作数时会出现错误CF置1.它说明无符号数小的减去大的是会出现错位(进位)的。
这仅是个人的理解。呵呵!

sye85 发表于 2009-4-28 23:12:02

执行的操作:(DST)←(DST)-(SRC)

  这条指令的执行影响所有的标志位。

  例 假定有AX=9543H,BX=28A7H,那么执行指令:

  SUB AX,BX

  即是做如下的减法运算:

  1001010101000011 (AX)=9543H

  -) 0010100010100111 (BX)=28A7H

  0110110010011100 (AX)=6C9CH

  看作无符号数相减时,没有借位,因此CF=0,结果是对的;看作有符号数相减时,负数减正数应该得负数,但指令执行结果却是正的,结果错。结果产生溢出,则OF=1。这是因为AX-BX=-27325-10407=-37732,这个数已超出最小负数-32768。

  注意:在判定减法运算是否溢出时,若最高位有借位,即CF=1,则结果错;若两个相减的数在运算前符号位相反,但运算结果与减数的符号位相同,则OF=1,结果错,即结果产生溢出,否则OF=0。
/****这个是我从网上复制的***/http://www.soft6.com/tech/11/119370.html

ziyuemusic 发表于 2009-4-29 12:50:48

谢谢
页: [1]
查看完整版本: sub 指令小问题,谁帮分析下,谢谢!