鱼C论坛

 找回密码
 立即注册
查看: 7203|回复: 6

关于检测点11.1 mul al不能理解啊

[复制链接]
发表于 2011-9-18 00:32:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. sub al,al zf=1 pf=1 sf=0
  2. 运算结果为0
  3. —————————————————————
  4. mov al,1 zf=1 pf=1 sf=0
  5. 不影响标志位
  6. —————————————————————
  7. push ax zf=1 pf=1 sf=0
  8. 不影响标志位
  9. —————————————————————
  10. pop bx zf=1 pf=1 sf=0
  11. 不影响标志位
  12. —————————————————————
  13. add al,bl zf=0 pf=0 sf=0
  14. 结果为2,(al)=0000 0010B
  15. —————————————————————
  16. add al,10 zf=0 pf=1 sf=0
  17. 结果为12,(al)=0000 1100B
  18. —————————————————————
  19. mul al
  20. MUL指令执行后,乘积高位无有效数据则CF=OF=0;乘积高位含有效数据则CF=OF=1,对其它标志位无定义
  21. 结果为144,(ax)=0000 0000 1001 0000B
复制代码
结果在ax中是144  ax=0000 0001 0100 0100 为什么说是溢出呢?pf为什么就为1呢
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-9-18 01:30:34 | 显示全部楼层

回帖奖励 +3 鱼币

本帖最后由 ytrfamli 于 2011-9-18 14:56 编辑

>>ax中是144
>>ax=0000 0001 0100 0100
LZ,把BCD跟2进制混淆了,
144用0001 0100 0100那是BCD才如此表示

ax是144时,内部应该是
      ah               al
0000 0000 1001 0000
这是在第7,第4bit为1,也就是2^7+2^4=128+16=144

>>为什么说是溢出呢?"
恩...感觉前後接不太上来,你的意思好像是
" 为什么不说是溢出呢?"
吧?
溢出是在乘法结果超过所能存的容量才发生*,
这里mul al 是 12*12=144,结果存在ax中
没有超过ax的容量(ax有16bit,对於正整数能存0~65535)

*:第一次读该帖的注意!显然这是我理解错误,溢出不是这麽回事.

>>pf为什么就为1呢?
读到这里应该你也了解了,
0000 0000 1001 0000
两个1,所以PF为1

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-9-18 06:47:04 | 显示全部楼层

                               
登录/注册后可看大图
我只是路过,不发表意见





















                               
登录/注册后可看大图

防辐射服品牌排名
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-9-18 13:58:02 | 显示全部楼层
本帖最后由 sslas 于 2011-9-18 13:59 编辑
yt**mli 发表于 2011-9-18 01:30
>>ax中是144
>>ax=0000 0001 0100 0100
LZ,把BCD跟2进制混淆了,


感谢您的回答,还有个问题在debug中执行到最后mul al 时
  1. sub al,al
  2. mov al,1
  3. push ax
  4. pop bx
  5. add al,bl
  6. add al,10
  7. mul al
  8. 在debug 中执行到最后mul al 时
  9. AX=0002 BX=0001 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
  10. DS=1381 ES=1381 SS=1381 CS=1381 IP=0108 NV UP EI PL NZ NA PO NC
  11. 1381:0108 0410 ADD AL,10
  12. -t

  13. AX=0012 BX=0001 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
  14. DS=1381 ES=1381 SS=1381 CS=1381 IP=010A NV UP EI PL NZ NA PE NC
  15. 1381:010A F6E0 MUL AL
  16. -t

  17. AX=0144 BX=0001 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
  18. DS=1381 ES=1381 SS=1381 CS=1381 IP=010C OV UP EI PL NZ NA PE CY
  19. 1381:010C 0000 ADD [BX+SI],AL DS:0001=20

  20. 我又没借位或溢出为什么程序状态字 cf和of的值会变化呢?NV UP EI PL NZ NA PE NC变成OV UP EI PL NZ NA PE CY
  21. 问题补充:
  22. 结果为144,(ax)=0000 0000 1001 0000B
复制代码

怎么会变成
ov和cy呢?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-9-18 14:25:55 | 显示全部楼层
本帖最后由 ytrfamli 于 2011-9-18 14:27 编辑
  1. AX=0002 BX=0001 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
  2. DS=1381 ES=1381 SS=1381 CS=1381 IP=0108 NV UP EI PL NZ NA PO NC
  3. 1381:0108 0410 ADD AL,10
  4. -t

  5. AX=0012 BX=0001 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
  6. DS=1381 ES=1381 SS=1381 CS=1381 IP=010A NV UP EI PL NZ NA PE NC
  7. 1381:010A F6E0 MUL AL
  8. -t
复制代码


恩...这里不太对阿...LZ确定代码里面是
add al,10
而不是
add al,10h
吗?

注意看一下ax值的改变,在debug中,寄存器的值都是以16进制表示的,
在add执行前ax为16进制0002h,就是10进制的2,
但add执行後ax为16进制0012h,那是10进制的18了,
这里肯定有问题,如果是add al,10在ax中的值应该是16进制的000CH,那才是10进制的12


>>怎么会变成ov和cy呢?
汗...看来我理解有错,本来以为结果存的下就不会有CY,
但是就算你的运算是18*18=324,也在ax的范围,仍然有CY.
而且还有OV...OV估计是跟补码有关,而CY...
唉其实我这边也不是顶熟,还是先好好研究下,免得又说错.


小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-9-18 15:02:51 | 显示全部楼层
确定代码里面是
add al,10
我debug试过了啊 debug中
  1. -a
  2. sub al,al
  3. mov al,1
  4. push ax
  5. pop bx
  6. add al,bl
  7. add al,10
  8. mul al
复制代码
一步步T试了啊  困惑
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-9-18 16:18:10 | 显示全部楼层
本帖最后由 ytrfamli 于 2011-9-18 17:40 编辑
debug中
-a

喔,原来你是在debug中直接输入指令,在debug中输入指令的时候,像是add al,10
机器是解释成add al,10h的,如果你要在debug中输入10进制的10你要用A,
也就是 add al,0A


关於CY,看起来好像是针对mul提供的乘数大小而定(被乘数一律在al或是dx,ax中)
如果结果的位數比乘數大,例如提供了8bit乘数,但結果超過8bit,那麽就会有CY,
以下为实机测试的具体证明
(想在debug中直接测试记得是mov al, 10,如果写mov al,16那麽读进al的其实是10进制22)
mov al,1
mov bl,16
mul bl
16*1=16,16进制是10h,依然是8bit,CY=0

mov al,16
mov bl,16
mul bl
16*16=256,在16进制是写作100h,超过了原本的8bit,CY=1

mov al,16
mov bl,16
mul bx
bx原本就是16bit,100h没有超过16bit,CY=0

关於OV嘛...纠结中.有請潛水中的高手們跟帖发表一下高见吧.


小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 07:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表