王爽汇编 标志寄存器 监测点11.2 求解?
本帖最后由 wjp9981 于 2012-11-07 17:09:54 编辑 检测点11.2
写出下面每条指令执行后,ZF、PF、SF、CF、OF等标志位的值。
al CF OF SF ZF PF
sub al,al 0h/0000 0000b 0 0 0 1 1
mov al,10h 10h/0010 0000b 0 0 0 1 1
add al,90h a0h/1010 0000b 0 0 1 0 1
mov al,80h 80h/1000 0000b 0 0 1 0 1
add al,80h 0h/0000 0000b 1 1 0 1 1
mov al,0fch 0fch/1111 1100b 1 1 0 1 1
add al,05h 1h/0000 0001b 1 0 0 0 0
mov al,7dh 7dh/1111 1101b 1 0 0 0 0
add al,0bh 88h/1000 1000b 0 1 1 0 1
如何判断 一个运算 是 有符号运算还是无符号运算?
mov al, 80h
add al ,80h 结果 应该是 100h cf=1 of=1
mov al, ofch
add al,05h 结果 应该是 101h cf=1 of =0 为什么两次运算 cf of 值不同?
mov al,7dh
add al,0bh 如何判断是有符号还是无符号运算 ,
[解决办法]
add al ,80h 结果 应该是 100h cf=1 of=1
al是8位寄存器,只能存放八位二进制数据,100h显然存不下,
如果做为无符号数来运算,相当于128+128=256则进位,cf=1 如果做为有符号数来运算,80h是-128的补码,-128-128 = -256显然溢出,OF=1mov al, ofch
add al,05h 结果 应该是 101h cf=1 of =0 为什么两次运算 cf of 值不同?
同理,做为无符号数来运算,有进位,CF=1 但是如果做为有符号数来运算,0fch是-4的补码,-4+5=1 没有溢出,OF=0mov al,7dh
add al,0bh 如何判断是有符号还是无符号运算 ,
这个问题我的理解是,机器本身是不知道你要用到的是无符号数还是有符号数,所有才有OF和CF,
对于无符号和有有符号数的使用,应该取决于你在编译器中的定义,然后编译器再根据你的定义和机器中对于CF和OF的判断来给出最终的结果(高级语言)
而汇编语言,本身是不区分有符号数和无符号数的,对于任意一个数它代表符号数还是无符号数不取决于数本身 而是与它参与的运算有关
我也是刚学,我是这么理解的,也不知道对不对.