汇编语言乘除法问题

时间:2022-02-05 01:28:35
1.AL=FEH,CL=11H,两数均为有符号数,求AL与CL的乘积。
2.用除法指令计算7FA2H÷03DDH。

要求有具体步骤和结果,刚学汇编语言,希望大家多多指教。

9 个解决方案

#1


有符号数乘法用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中
  
  有符号数同理

#2


帮你找了些资料:
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。

#3


1.
IMUL CL,结果在AX里面。
2.
MOV AX,7FA2H
CWD
MOV CX,03DDH
IDIV CX
执行后AX是商,DX是余数。

#4


1,2楼已经说得很好,不在多说了

#5


请教楼上各位,为什么在51的乘除法指令前加个I啊?使用的哪款单片机啊?
小弟一直只用过PIC和C51的单片机。
IMUL使用的是PC上的汇编语言吗?

#6


支持一下吧。2楼3楼说得很清楚了。

#7


1.AL=FEH=-2,CL=11H=17
结果保存在AX=FFDEH=-34

2.AX=7FA2H,BX=03DDH
商AX=0021H,余数DX=0025H
先全部化成十进制数进行除法计算,得到的商和余数再分别化为十六进制即为结果

#8


友情提示:CSDN论坛是禁止倒分了,如果倒分被人举报,所有得分都会被扣除。

#9


求解,16位有符号数除以8位得到的商的符号位在哪里?比如:
ax是-9
bx是3
ax除以bx:
idiv bx
其中ah是余数,al是商,但是商的符号位在哪里?求解答。。。

#1


有符号数乘法用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中
  
  有符号数同理

#2


帮你找了些资料:
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。

#3


1.
IMUL CL,结果在AX里面。
2.
MOV AX,7FA2H
CWD
MOV CX,03DDH
IDIV CX
执行后AX是商,DX是余数。

#4


1,2楼已经说得很好,不在多说了

#5


请教楼上各位,为什么在51的乘除法指令前加个I啊?使用的哪款单片机啊?
小弟一直只用过PIC和C51的单片机。
IMUL使用的是PC上的汇编语言吗?

#6


支持一下吧。2楼3楼说得很清楚了。

#7


1.AL=FEH=-2,CL=11H=17
结果保存在AX=FFDEH=-34

2.AX=7FA2H,BX=03DDH
商AX=0021H,余数DX=0025H
先全部化成十进制数进行除法计算,得到的商和余数再分别化为十六进制即为结果

#8


友情提示:CSDN论坛是禁止倒分了,如果倒分被人举报,所有得分都会被扣除。

#9


求解,16位有符号数除以8位得到的商的符号位在哪里?比如:
ax是-9
bx是3
ax除以bx:
idiv bx
其中ah是余数,al是商,但是商的符号位在哪里?求解答。。。