|
主题 : : 检测点11.1最后一句mul al疑问 [待解决] |
回复[ 16次 ]
点击[ 1240次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-09-03 10:42 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-07-16 17:50 |
sub al,al ZF=1 PF=1 SF=0
mov al,1 ZF=1 PF=1 SF=0
push ax ZF=1 PF=1 SF=0
pop bx ZF=1 PF=1 SF=0
add al,bl ZF=0 PF=0 SF=0
add al,10 ZF=0 PF=1 SF=0
mul al ZF=0 PF=1 SF=0
其实有疑惑: 最后一句 mul al 最后结果al=10010000最高位不是为1吗SF难道不是1?
求解答! | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-09-13 22:39 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-09-13 22:29 |
最后结果 mul al 其结果放在ax中 为0000000010010000b最高位为0 那么非负sf=0 | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-10-23 14:18 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-10-16 19:16 |
我也有同样的疑问。。。书上说的运算的结果,是要考虑整一个运算指令的操作的。如果我们细心看的话,mul 8位运算中明确写着——8位乘法,其结果在AX中,所以运算的结果如1楼所说。 | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-10-23 17:02 ]
[引用]
[回复]
[ top ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
|
|
|
|
|
[第4楼]
[ 回复时间:2010-11-23 20:50 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-11-13 03:06 |
sub al,al ZF=1 PF=1 SF=0 ;ax=0000 sub运算指令对标志寄存器有影响
mov al,1 ZF=1 PF=1 SF=0 ;ax=0001 mov传送指令对标志寄存器无影响
push ax ZF=1 PF=1 SF=0 ;ax=0001 push入栈指令对标志寄存器无影响
pop bx ZF=1 PF=1 SF=0 ;ax=0001 bx=0001 pop出栈指令对标志寄存器无影响
add al,bl ZF=0 PF=0 SF=0 ;ax=0002 add指令对标志寄存器有影响,转成二进制0010有1个1为倚数
add al,10 ZF=0 PF=1 SF=0 ;ax=0012 add指令对标志寄存器有影响,转成二进制1100有2个1为偶数
mul al ZF=0 PF=1 SF=0 ;ax=0144 add指令对标志寄存器有影响,转成二进制10010000有2个1为偶数
以上ax值为10进制值,非16进制 | | |
|
|
|
|
[第5楼]
[ 回复时间:2010-12-14 13:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-12-06 12:31 |
那么也就是说相关指令影响标志寄存器,不是看指令中的寄存器,而是看指令的结果寄存器吗? | | |
|
|
|
|
[第6楼]
[ 回复时间:2011-04-14 10:20 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-01-07 15:45 |
书上原文:
SF 记录相关指令执行后,其结果是否为负
----------------------------------------
mul al 执行后 ax = 144 = 0090H
ax是执行后结果,最高位是0,所有sf =0 | | |
|
|
|
|
[第7楼]
[ 回复时间:2011-04-14 22:18 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-04-14 22:05 |
mul al 后,ax=144(90H),(10010000)B,最高为1结果为负。SF=1 PF=1 | | |
|
|
|
|
[第8楼]
[ 回复时间:2011-04-26 15:14 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-01-15 22:31 |
看书 P227页
比如:
mov al,10000001b
add al,1
执行后,结果为10000010b,sf=1,表示指令进行是有符号运算,那么结果为负数。
假设 ax=1000 0000 0000 0000 AL完成以上指令 AX=1000 0000 1001 0000
我就怀疑了 你们怎么确定 AH 的第8位 是1或是0呢 | | |
|
|
|
|
[第9楼]
[ 回复时间:2011-05-22 18:11 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-05-11 17:26 |
mul al执行后,将结果存在ax中,
所以是整个ax的值为0000 0000 1001 0000 ,就算是结果用不到前面的ah部分,也会将其修改掉。 | | |
|
|
|
|
[第10楼]
[ 回复时间:2011-06-16 20:51 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-06-23 00:14 |
SF应该看的是第7位而不是最高位,是转换成二进制数的第7位。 | | |
|
|
|
|
[第11楼]
[ 回复时间:2011-06-16 21:15 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-06-23 00:14 |
|
|
|
|
|
[第12楼]
[ 回复时间:2012-01-07 19:16 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-01-07 19:11 |
结果要看AX,另外答案有错误的地方后两个al和AX应是12和144后面不加H,都是10进制的。
在DEBUG里任何没有后缀的常熟都被认为是16进制,但是正统的汇编语言如果不行后缀会识别为10进制,答案作者可能有纰漏! | | |
|
|
|
|
[第13楼]
[ 回复时间:2014-04-21 17:49 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2014-02-17 17:20 |
请各位去查mul指令的详细说明,实际上mul指令只影响cf和of,对其它的条件码位无定义,即指令执行后这些条件码位的状态不定。本题中mul al我上机验证的结果为zf=0,pf=1,sf=1,但实际上是无意义的。
另外,第2版P214中认为div会影响标志寄存器,实际上div对所有条件码均无定义。
条件码指:of,sf,zf,cf,af,pf. | | |
|
|
|
|
[第14楼]
[ 回复时间:2014-07-19 21:51 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2014-07-06 15:04 |
144为16进制 转化为2进制 1 01000100 从0开始第七位为0 所以sf为0 | | |
|
|
|
|
[第15楼]
[ 回复时间:2016-01-08 12:30 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2016-01-08 12:24 |
13楼正解,乘法指令对sf无意义,sf那个值还是上条指令的,我忙了两天才搞明白晕啊 | | |
|
|
|
|
[第16楼]
[ 回复时间:2017-04-11 20:09 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2017-03-09 22:45 |
dos7.1的debug是NG,即是1,但是xp里面debug是0 | | |