udsky 发表于 2011-6-10 23:23:41

汇编语言检测点11.1求助!!!

这个检测点很难理解,望高人解惑!
sub al,al    zf=1(为0)pf=1(0为偶)sf=0(不是负数)
mov al,1同上不变,传送指令不影响flag寄存器
push ax同上
pop bx 同上
add al,bl    /1+1=2zf=0pf=0sf=0    // 2转化为二进制为10,而补全二进制位为00000010,所以这里是0
add al,10/ 2+10=12 zf=0 pf=1 sf=0 //sf同上
mul al/12*12=144=10010000   zf=0 pf=1 sf=1(应该为1啊,为什么标准答案为0呢?????????????)
想了好久就是没想明白!!
是不是进位的问题?

udsky 发表于 2011-6-10 23:31:17

看了后面的视频,是否是 al容纳的只能是-127到128,mul al,的结果144,al容纳不下,然后前面的1就到ah中去了?
还是说超过了AL能容纳的数据,这个数对AL来说只能是正数?

困惑灵魂 发表于 2011-6-10 23:39:19

本帖最后由 困惑灵魂 于 2011-6-11 00:12 编辑

sf是符号位吧

CZSOPA
r??r??

Unsigned multiply. (注意这个!!无符号)

r - 标志值取决于指令的结果
? - 标志的值是不确定的(可能是1或0)。

CF=OF=0 when high section of the result is zero.

上面说明
mul 指令 只对 cfof有确定作用
sf 是不确定的


你应该明白滴-MUL就是无符号乘法


困惑灵魂 发表于 2011-6-11 00:01:30

本帖最后由 困惑灵魂 于 2011-6-11 00:02 编辑

MUL
REGmemory

Unsigned multiply.

Algorithm:


when operand is a byte:
AX = AL * operand.

when operand is a word:
(DX AX) = AX * operand.

Example:

MOV AL, 200   ; AL = 0C8h
MOV BL, 4
MUL BL      ; AX = 0320h (800)
RET


C Z S O P A
r ? ? r ? ?
CF=OF=0 when high section of the result is zero.

udsky 发表于 2011-6-14 10:32:59

哦,这样啊!谢谢了!
页: [1]
查看完整版本: 汇编语言检测点11.1求助!!!