用汇编语言乘法指令实现两个字节相乘的程序并转换成十六进制数显示出结果(11H×12H)

用汇编语言乘法指令实现两个字节相乘的程序并转换成十六进制数显示出结果(11H×12H),第1张

code  segment

      assume cs:code

      org 100h

start:

      jmp bbb

x     db 11h

y     db 12h

z     dw 

msg1  db 13,10,'     ','$'

bbb:

      push cs

      pop ds

      push cs

      pop es

      mov al,x

      mov bl,y

      mul bl

      mov z,ax

      lea di,msg1

      inc di

      inc di

      mov cx,4

again1:

      mov ax,word ptr[z]

      rol ax,1

      rol ax,1

      rol ax,1

      rol ax,1

      mov word ptr[z],ax

      and ax,000Fh

      cmp al,9

      jg line1

      add al,30h

      mov byte ptr[di],al

      jmp line2

line1:

      add al,37h

      mov byte ptr[di],al

line2:

      inc di

      loop again1

      lea dx,msg1

      mov ah,9

      int 21h

      mov ah,8

      int 21h

      mov ah,4ch

      int 21h

code  ends

      end start

汇编语言有符号乘法指令大全

MOV(MOVE)

传送指令P28

PUSH

入栈指令P32

POP

出栈指令P33

XCHG(eXCHanG)

交换指令P34

XLAT(TRANSLATE)

换码指令P34

LEA

(Load

Effective

Address)

有效地址送寄存器指令P35

LDS(Load

DS

with

pointer)

指针送寄存器和DS指令P35

LES(Load

ES

with

pointer)

指针送寄存器和ES指令P35

LAHF(Load

AH

with

Flags)

标志位送AH指令P36

SAHF(Store

AH

into

Flgs)

AH送标志寄存器指令P36

PUSHF(PUSH

the

Flags)

标志进栈指令P36

POPF(POP

the

Flags)

标志出栈指令P37

ADD

加法指令P38

ADC

带进位加法指令P39

INC

加1指令P39

SUB(SUBtract)

不带借位的减法指令P40

SBB(SuVtrach

with

borrow)

带借位的减法指令P40

DEC(DECrement)

减1指领P41

NEG(NEGate)

求补指令P41

CMP(CoMPare)

比较指令P42

MUL(unsinged

MULtiple)

无符号数乘法指令P46

IMUL(sIgned

MUL

tiple)

有符号数乘法指令P46

DIV(unsigned

DIVide)

无符号数除法指令P48

IDIV(sIgned

DIVide)

有符号数除法指令P48

CBW(Count

Byte

to

Word)

字节转换为字指令P50

CWD(Count

Word

to

Doble

word)

字转换为双字指令P50

DAA

压缩的BCD码加法十进制调整指令P53

DAS

压缩的BCD码减法十进制调整指令P53

AAA

非压缩的BCD码加法十进制调整指令P54

AAS

非压缩的BCD码加法十进制调整指令P54

AND

逻辑与指令P54

OR

逻辑或指令P55

XOR

逻辑异或指令P56

NOT

逻辑非指令P56

TEST

测试指令P57

SHL(SHift

logical

Letf)

逻辑左移指令P57

SHR(SHift

logical

Right)

逻辑右移指令P57

汇编语言是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的 *** 作码,用地址符号(Symbol)或标号(Label)代替指令或 *** 作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。

是微体系结构需要考虑的问题。如何实现乘法指令是微体系结构需要考虑的问题,如何实现乘法指令是计算机组成的功能。实现乘法指令可以采用一个专门的乘法电路,也可以采用连续相加的加法电路来实现,这两者的区别就是计算机组成的区别。

先看看这个,还没看你的程序,可能就是BCD与ASCII运算的问题,你自己看了检查一下有问题可以再讨论

十进制调整指令

80x86微型机提供了一组十进制调整指令,用来处理ASCII码和BCD码表示的数。

BCD码:

BCD(Binary Coded Decimal)是用二进制编码表示的十进制数(见表33),十进制数采用0~9十个数字,是人们最常用的。在计算机中,同一个数可以用两种BCD格式来表示:①压缩的BCD码 ②非压缩的BCD码

压缩的BCD码:

压缩的BCD码用4位二进制数表示一个十进制数位,整个十进制数用一串BCD码来表示。例如,十进制数59表示成压缩的BCD码为0101 1001,十进制数1946表示成压缩的BCD码为0001 1001 0100 0110。

非压缩的BCD码:

非压缩的BCD码用8位二进制数表示一个十进制数位,其中低4位是BCD码,高4位是0。例如,十进制数78表示成压缩的BCD码为0000 0111 0000 1000。

从键盘输入数据时,计算机接收的是ASCII码,要将ASCII码表示的数转换成BCD码是很简单的,只要把ASCII码的高4位清零即可。

压缩的BCD码调整指令

DAA和DAS指令完成加法和减法的调整功能。

DAA 加法的十进制调整(decimal adjust for addition)

执行 *** 作:(AL)← 把AL中的和调整为压缩的BCD格式

DAS 减法的十进制调整(decimal adjust for subtraction)

执行 *** 作:(AL)← 把AL中的差调整为压缩的BCD格式

DAA和DAS指令的调整方法如下:

执行加法指令(ADD、ADC)或减法指令(SUB、SBB)后,

1.如果结果的低4位 (AL)0~3>9或AF=1,则(AL)←(AL)±06H,且AF置1;

2.如果结果的高4位 (AL)4~7>9或CF=1,则(AL)←(AL)±60H,且CF置1。

对上述方法,加法调整作+06H和+60H,减法调整作-06H和-60H。这两个调整的条件,如果满足其一,则±06H或±60H;如果同时满足,则±06H后,再±60H。

非压缩的BCD码调整指令

AAA 加法的ASCII调整(ASCII adjust for add)

执行 *** 作:

(AL)← 把AL中的和调整为非压缩的BCD格式

(AH)←(AH)+ 调整产生的进位值

AAS 减法的ASCII调整(ASCII adjust for sub)

执行 *** 作:

(AL)← 把AL中的差调整为非压缩的BCD格式

(AH)←(AH)- 调整产生的借位值

加法和减法的 *** 作数可以直接使用ASCII码,而不必把高位0011清为0000,AAA和AAS指令就是专门为ASCII码 *** 作数或非压缩BCD码 *** 作数的加减法而设计的。

AAA和AAS的调整方法如下:

执行加法指令(ADD、ADC)或减法指令(SUB、SBB)后,结果存放在AL寄存器中:

(1)如果(AL)0~3= 0~9,且AF=0,则(AL)4~7= 0,AF的值送CF;

(2)如果(AL)0~3=A~F,或AF=1,则(AL)←(AL)±06H,(AL)4~7= 0,(AH)←(AH)±1,AF的值送CF。

AAA和AAS指令除影响AF和CF标志外,其余标志位均无定义。

AAM 乘法的ASCII调整(ASCII adjust for mul)

执行 *** 作:(AX)← 把AX中的积调整为非压缩的BCD格式

AAD 除法的ASCII调整(ASCII adjust for div)

执行 *** 作:(AX)← AX中的被除数(非压缩的BCD格式)转化为二进制数

以上两条指令是专为非压缩的BCD码的乘除法而设计的,它们将乘法和除法的结果转换为非压缩的BCD码。

注意:AAM和AAD都只对AX寄存器中的数进行调整,它们只影响SF、ZF和PF标志位,其它标志位无定义。

AAM的调整方法为:

执行乘法指令(MUL)后,调整存放在AL寄存器中的乘积:

(AH)←(AL)/ 0AH的商

(AL)←(AL)/ 0AH的余数

AAM实际上是将两个一位数的非压缩BCD码相乘后得到的乘积进行二化十的转换,十位数放在AH中,个位数放在AL中,那么AX中就是乘积的非压缩BCD码。

注意:如果是两个ASCII码数相乘,要先将它们转换成非压缩BCD码。

AAD的调整方法为:

执行除法指令之前,对AX中的非压缩BCD码(被除数)执行:

(AL)←(AH)×10+(AL)

(AH)← 0

与其它调整指令不同的是,AAD用在DIV指令之前,即先将AX中的被除数调整成二进制数,并存放在AL中,再用DIV指令作二进制数的除法。AX中的被除数是二位非压缩BCD码,AH中的十位数乘10,再加上AL中的个位数,即转换为二进制数。

PCL乘法指令是将指定的源元件中的二进制数相乘,结果送到指定的目标元件中去。PCL乘法指令分16位和32位两种情况。

当为 16 位运算,执行条件 X0 由 OFF → ON 时, [D0]x[D2] → [D5 , D4] 。源 *** 作数是 16 位,目标 *** 作数是 32 位。当 [D0]=8 , [D2]=9 时, [D5 , D4]=72 。最高位为符号位, 0 为正, 1 为负。

当为 32 位运算,执行条件 X0 由 OFF → ON 时, [D1 、 D0]x[D3 、 D2] → [D7 、 D6 、 D5 、D4] 。源 *** 作数是 32 位,目标 *** 作数是 64 位。当 [D1 、 D0]=238 , [D3 、 D2]=189 时, [D7 、 D6 、 D5 、 D4]=44982 。

扩展资料

PLC的常见基本指令:

1、LD:取指令(常开触点)

2、LDI:取反指令(常闭触点)

3、AND:串指令(常开触点)

4、ANI:串反指令(常闭触点)

5、OR:并指令(常开触点)

参考资料来源:百度百科——三菱PLC

乘法指令MUL和加法指令是一样的,可以增加输入IN的管脚,实现多个数据相乘的运算(IN1×IN2×IN3×……×INn=OUT)。mul是乘法指令,两个相乘的数:两个相乘的数,要么都是8位,要么都是16位。如果是8位,个默认放在AL中,另个放在8位寄存器或内存字节单元中。如果是16位,个默认在AX中,另个放在16位寄存器或内存字单元中。

以上就是关于用汇编语言乘法指令实现两个字节相乘的程序并转换成十六进制数显示出结果(11H×12H)全部的内容,包括:用汇编语言乘法指令实现两个字节相乘的程序并转换成十六进制数显示出结果(11H×12H)、汇编语言有符号乘法指令、如何实现乘法指令是什么的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10129402.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存