关于imul用法的问题

逝庸 2017-12-25 10:58:26
这是教材的一个例题,结合代码的注释一并给出,主要是注释的说法不明白。
例题是判断(b²-4ac)的
代码如下:
.model small
.stack
.data
_a db ?
_b db ?
_c db ?
tag db ?
.code
.startup
mov al,_b
imul al
mov bx,ax; bx=_b*_b
mov al,_a
imul _c; ax=_a*_c
mov cx,4
imul cx; ax中为4_a*_c (*)
cmp bx,ax ;比较_b*_b和4*_a*_c大小
jge yes
mov tag,0
jmp done
yes:mov tag,1
done:.exit 0
end


我的困惑在(*),lmul cx应该是imul ax,cx;那么4ac应该是DX.AX,可教材的注释为什么是ax为4ac???
...全文
675 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这里dx:ax保存一个32位有符号数,dx最高位是符号,其他位最好不要假定。
逝庸 2017-12-29
  • 打赏
  • 举报
回复
引用 3 楼 DelphiGuy 的回复:
呃,还真是不一定,你这里的abc没有初始化具体值,三者都是字节值,从使用imul指令看,是有符号数,所以4ac最大65536(4x-128x-128),则dx为1、ax为0。
对于指不超过范围的情况下,dx保存符号,ax保存数值对吗
  • 打赏
  • 举报
回复
呃,还真是不一定,你这里的abc没有初始化具体值,三者都是字节值,从使用imul指令看,是有符号数,所以4ac最大65536(4x-128x-128),则dx为1、ax为0。
逝庸 2017-12-25
  • 打赏
  • 举报
回复
引用 1 楼 DelphiGuy 的回复:
lmul cx是cx * ax ->dx:ax,在你这里结果dx:ax=0:4ac
为什么dx是0?
  • 打赏
  • 举报
回复
lmul cx是cx * ax ->dx:ax,在你这里结果dx:ax=0:4ac

21,453

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧