汇编语言乘除法问题

fwx0413 2009-04-12 11:53:40
1.AL=FEH,CL=11H,两数均为有符号数,求AL与CL的乘积。
2.用除法指令计算7FA2H÷03DDH。

要求有具体步骤和结果,刚学汇编语言,希望大家多多指教。
...全文
1634 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tzs7008 2012-05-21
  • 打赏
  • 举报
回复
求解,16位有符号数除以8位得到的商的符号位在哪里?比如:
ax是-9
bx是3
ax除以bx:
idiv bx
其中ah是余数,al是商,但是商的符号位在哪里?求解答。。。
cnzdgs 2009-04-14
  • 打赏
  • 举报
回复
友情提示:CSDN论坛是禁止倒分了,如果倒分被人举报,所有得分都会被扣除。
「已注销」 2009-04-13
  • 打赏
  • 举报
回复
1.AL=FEH=-2,CL=11H=17
结果保存在AX=FFDEH=-34

2.AX=7FA2H,BX=03DDH
商AX=0021H,余数DX=0025H
先全部化成十进制数进行除法计算,得到的商和余数再分别化为十六进制即为结果
cnzdgs 2009-04-12
  • 打赏
  • 举报
回复
1.
IMUL CL,结果在AX里面。
2.
MOV AX,7FA2H
CWD
MOV CX,03DDH
IDIV CX
执行后AX是商,DX是余数。
rookie001 2009-04-12
  • 打赏
  • 举报
回复
帮你找了些资料:
1. 乘法指令

在乘法指令中,一个操作数总是隐含在寄存器AL(8位)或AX(16位)中

另一个操作数可采用除立即寻址之外的任一寻址方式

(1)无符号数乘法指令MUL

MUL OPRD

两个8位数相乘得16位放在AX中,两个16位数相乘得32位,高位字放在DX,低位字存放AX中。

若乘积高半部分不等于0,则CF=1,OF=1,否则CF=OF=0

(2)有符号数乘法指令IMUL

IMUL OPRD

把乘数和被乘数均作为有符号数对待

操作与MUL类似

如果乘积的高半部分不是低半部分的符号扩展,则CF=OF=1,否则CF=OF=0

2. 除法指令

被除数总是隐含在AX(除数是8位)或DX和AX(除数是16位)中,寻址方式同乘法指令。

(1)无符号数除法指令DIV

DIV OPRD

16位: AX / OPRD(8位) = AL(商) … AH(余数)

32位:DXAX / OPRD(16位) = AX(商)… DX(余数)

若除数为0,或在8位数除时商超过8位,或16位时商超过16位,则认为是溢出,引起0号中断。

(2)有符号数除法指令IDIV

IDIV OPRD

把被除数和除数作为有符号数,操作与DIV类似

当除数为0,或商太大((8位)>127,(16位)>32767),或商太小((8位)<-127,(16位)<-32767),引起0号中断



3. 符号扩展指令

不影响标志位

(1)字节转换为字指令CBW

CBW

把AL中的符号扩展到AH

AL>0,则(AH)=00H;若AL>0,则(AH)=FFH

(2)字转换为双字指令CWD

CWD

把AX中的符号到DX

类似CBW。
rookie001 2009-04-12
  • 打赏
  • 举报
回复
有符号数乘法用imul,除法用idiv
1.MOV AL,0FEH
MOV CL,11H
IMUL CL
因为源操作数cl是字节,结果在AX中

ps:有符号是补码系统
2.无符号数的:
SUB DX,DX
MOV AX,7FA2H
MOV BX,03DDH
DIV BX

结果:商在AX中,余数在DX中

有符号数同理
chenweiqing2008 2009-04-12
  • 打赏
  • 举报
回复
支持一下吧。2楼3楼说得很清楚了。
wujianwxj 2009-04-12
  • 打赏
  • 举报
回复
请教楼上各位,为什么在51的乘除法指令前加个I啊?使用的哪款单片机啊?
小弟一直只用过PIC和C51的单片机。
IMUL使用的是PC上的汇编语言吗?
huayangcvj 2009-04-12
  • 打赏
  • 举报
回复
1,2楼已经说得很好,不在多说了

21,459

社区成员

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

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