十进制算术运算指令

合集下载

算术运算类指令

算术运算类指令

2009年6月2日星期二
15
2.双寄存器符号扩展指令CWD/CDQ/CQO
指令格式:CWD
CDQ
CQO 功能:CWD功能为将AX寄存器的内容符号扩展到DX中;
CDQ指令的功能为将EAX寄存器的内容符号扩展到EDX中; CQO指令的功能为将RAX寄存器的内容符号扩展到RDX中,只 能在64位方式下使用。 它们都不影响标志位。 一般来说符号扩展指令大都与除法指令相结合,为达到被除数的位数要 求而扩展。 【例3.29】 求0ABCH÷0200H(带符号数相除) 由于除数为字,则必须将原来的被除数进行符号扩展后才能相除。
2009年6月2日星期二
10
AL ╳ src (8位源操作数)
AX
(16位乘积)
字节乘法
AX

src (16位源操作数)
DX AX 字乘法
(32位乘积)


src (32位源操作数)
EDX EAX (64位乘积)
RAX

src (64位源操作数)
RDX RAX (128位乘积)
32位乘法
64位乘法
【例】 设AX=65A0H,BX=B79EH,指令ADD BX,AX的执行情况如下:
0110010110100000 +)1011011110011110
10001110100111110
结果非零:ZF=0
最高位有进位:CF=1 最高位为0:SF=0
OF=最高位进位1⊕次高位进位1,则OF=0
无进位: AF=0 低8位为偶数个1:PF=0
状态标志位
OF SF ZF AF PF CF
Y **** Y Y **** Y Y **** Y Y **** Y

3.3.2 算术运算类指令

3.3.2 算术运算类指令

1. 加法指令(s 代表源操作数,d 代表目标操作数)(1)不带进位的加法指令add d,ss和d相加的结果存入d。

(2)带进位的加法指令adc d,sS和d相加后再加上标志位CF,结果存入dAdd主要用来计算低位字加法,adc用来计算高位字加法,实现32位加法比如一个32位数,高16位存在dx中,低16位存在ax中另一个32位数,高16位置存在cx中,低16位存在bx中计算加法add ax,bxAdc dx,cx(3)加1指令inc d 则d=d+1Inc axInc bl2. 减法指令(1)不带借位的减法sub d, sd-s结果存入d(2)带借位的减法sbb d,sd-s-CF,结果存入d比如一个32位数,高16位存在dx中,低16位存在ax中另一个32位数,高16位置存在cx中,低16位存在bx中计算减法,第一个数减第二个数sub ax,bxsbb dx,cx(3)减1指令dec d 则d=d-1dec axdec bl(4)求补NEG d将d包括符号位在内各位取反,末位加1相当于d=0-d比如字节型-5计算机中存的是11111011求补后是00000101,即5比如字节型+7计算机中存的是00000111求补后是11111001即-7 (5)比较cmp d,s类似做减法sub,但不保存结果,只用来影响标志位,主要通过执行后的标志位来判断两个数的大小关系比如cmp ax,bx (类似做ax-bx)Jz label1 (JZ意思是两数相等则跳转, jmp if zf=1)3. 乘法指令(1)无符号数乘法(用于正数)Mul s (该指令隐含了操作数ax或al)s为无符号word型,将s与AX相乘,结果存入DX,AX;s为无符号byte型,将s与AL相乘,结果存入AX(2)有符号数乘法(用于负数)imul s (该指令隐含了操作数ax或al)s为有符号word型,将s与AX相乘,结果存入DX,AX;s为有符号byte型,将s与AL相乘,结果存入AX乘法指令影响of位和cf位,乘积结果用到高字(节)寄存器,则of=1,cf=1;没用到高字(节)寄存器(结果在8位或16位范围内) 则of=0,cf=0 书p974. 除法指令(隐含被除数在ax或dx,ax中)(1)无符号数除法Div sS为无符号byte型,则用ax/s ,商存在al中,余数存在ah中S为无符号word型,则用dx,ax/s,商存在ax中,余数存在dx中(2)有符号数除法idiv s和无符号数除法类似,用于有符号数假设用30001/2 ,代码如下Mov ax, 30001Mov bl, 2Div bl得到的是divide override,这样的情况暂不考虑,只考虑结果能够存放到相应寄存器中的情况(3)字节转换成字(隐含操作数为al)CBW将al中的符号位扩展到ah中,比如-5,mov al,-5<=> mov al, 11111011bal中的11111011b经cbw扩展后AX中为1111111111111011b;al存的如果是正数,直接在ah中存入00000000b(4)字转换成双字(隐含操作数为ax)Cwd (convert word to dword)和cbw类似,将ax中的符号位扩展到dx中。

(完整版)BCD码指令

(完整版)BCD码指令

BCD码指令 AAA DAA AAS DAS AAM AAD( 四 )十进制数(BCD码)运算指令以上我们介绍的是二进制数的算术运算指令,二进制数在计算机长进行运算是特别简单的。

可是,往常人们习惯于用十进制数。

在计算机中十进制数是用 BCD码来表示的, BCD码有两类:一类叫压缩型BCD码,一类叫非压缩型BCD码。

用 BCD码进行加、减、乘、除运算,往常采纳两种方法:一种是在指令系统中设置一套专用于BCD码运算的指令;另一种是利用二进制数的运算指令算出结果,而后再用特意的指令对结果进行修正(调整),使之转变成正确的BCD码表示的结果。

8086/8088指令系统所采纳的是后一种方法。

在进行十进制数算术运算时,应分两步进行:①先按二进制数运算规则进行运算,获得中间结果。

②再用十进制调整指令对中间结果进行修正,获得正确的结果。

下边经过几个例子说明BCD码运算为何要调整以及如何调整。

结果正确,这时调整指令不需要做什么。

结果不正确,由于在进行二进制加法运算时,低4 位向高4 位有一个进位,这个进位是按十六进制进行的,即低4 位逢十六才进一,而十进制数应是逢十进一。

所以,比正确结果少 6,这时,调整指令应在低 4 位上加 6。

即:加法运算后,低 4 位若向高 4 位有进位(即 AF=1)时,调整指令应做加 06H办理。

加法运算后,低4位 >9时,调整指令需做加 06H 办理;高4位 >9时,调整指令需做加 60H办理。

加法运算后,当CF=1(有进位产生)时,调整指令应做加60H办理。

前方我们已经详尽地介绍了二进制数的算术运算指令,下边主要介绍十进制数( BCD码)的调整指令。

⒈十进制加法的调整指令依据 BCD码的种类,对 BCD码加法进行十进制调整的指令有两条AAA 和 DAA。

⑴非压缩型 BCD码加法调整指令AAA (ASCII Adjust for Addition)指令格式:AAAAAA也称为加法的 ASCII 调整指令。

二、算术逻辑运算指令

二、算术逻辑运算指令

二、算术运算指令
• • • • • • • •
MOV ADD DA MOV MOV ADDC DA MOV
A,50H A,60H A 40H,A A,51H A,61H A 41H,A
;(A)←(50H) ;(A)←(A)+(60H) ;BCD码修正
二、算术运算指令 ⑷加1指令
• • • • • INC INC INC INC INC A Rn direct @Ri DPTR ;(A)←(A)+1 ;(Rn)←(Rn)+1 ;(direct)←(direct)+1 ;((Ri))←((Ri))+1 ;(DPTR)←(DPTR)+1
• 功能是将累加器A内容减去源地址单元内容,再减去 进位位Cy的内容,结果放入累加器A中 • 问题:如何应用此指令对两个单字节数相减?
二、算术运算指令
•主要用于多字节数的减法 如果要进行单字节或多字节数低8位数的减法运算,应先 清除进位位Cy。 • 对于PSW的影响CY、AC、OV、P • 例3-15:设累加器A的内容为0C9H,寄存器R2内容为 54H,进位标志Cy=1,执行指令:SUBB A,R2
二、算术运算指令
⑵减1 指令 • • • • DEC DEC DEC DEC A ;(A)←(A)-1 Rn ;(Rn)←(Rn)-1 direct ;(direct)←(diect)-1 @Ri ;((Ri))←((Ri))-1
• 注:执行结果只影响PSW的奇偶校验位P (以A为操 作数时 )
二、算术运算指令
二、算术运算指令
• (3) 二-十进制调正指令(BCD码修正指令) DA A ; • 若[(A3~0)>9]或[(AC)=1] 则(A3~0)←(A3~0)+06H; 若[(A7~4)>9]或[(Cy)=1] 则(A7~4)←(A7~4)+60H 注: • 本指令不能单独使用,只能用在加法指令之后 • 本指令不能直接用于十进制数减法的调正 • 本指令不能简单的把累加器A中的16进制数变换成 BCD码

算数运算指令

算数运算指令

算数运算指令展开全文算数运算指令算术运算指令的主要功能是实现算术加、减、乘、除等运算。

1.ADD类指令是不带进位的加法运算指令(4条)。

ADD A,Rn ;A+Rn→A, A与Rn寄存器内容相加,结果送到A中ADD A,direct ;(direct)+A→A, A与直接地址内容相加,和送AADD A, @Ri ;(Ri)+A→A, A与Ri间址内容相加,和送AADD A, #data ;data+A→A, A与立即数相加,和送A注意:ADD类指令相加结果均在A中,相加后源操作数不变。

若A中最高位有进位,Cy置1;若半加位有进位,AC置1。

A的结果还影响奇偶标志位P。

例 A=30H, R0=10H执行 ADD A,R0 结果:A=40H, R0=10H,标志位 P=1, Cy=0, OV=0, AC=02.ADDC类指令(带进位加法4条)ADDC A, Rn ;A+Rn+Cy→A, A与R n内容、进位状态相加,和送到A中ADDC A, direct ;(direct)+Cy+A→A, A与直接地址中内容、进位状态相加,和送AADDC A, @Ri ;(Ri)+Cy+A→A, A与Ri间址单元中内容、进位状态相加,和送AADDC A, #data ;data+Cy+A→A, A与立即数、进位状态相加,和送A与ADD类指令的区别是,ADDC指令相加时连同进位标志Cy内容一起相加,主要用于多字节加法中的高位字节的相加,而最低位字节相加用ADD指令。

进位位Cy加到字节的最低位。

例写计算1234H+0FE7H的程序,将结果存入内部RAM的41H 和40H单元,40H存低8位,41H存高8位。

程序MOV A, #34H ;被加数低8位数34H送AADD A, #0E7H ;加数低8位数E7H与之相加,A=1BH,Cy=1 MOV 40H, A ;A→40H即34H+E7H结果存入40H中(40H=1BH)MOV A, #12H ;被加数高8位数12H送AADDC A, #0FH ;加数高8位0FH和Cy与A相加,A=22H MOV 41H, A ;高8位与进位位之和存入41H中(41H)=22H ;总和为221BH,总结果在41H,40H单元中3.SUBB类指令(4条)SUBB类指令是带借位减法指令,其功能是将A中被减数减去源操作数指出的内容,再减去借位标志Cy(原进位标志)状态,差值在A中。

51单片机汇编程序设计之算数运算指令

51单片机汇编程序设计之算数运算指令

1) 逻辑“与”指令
汇编指令格式 机器指令格式
操作
ANL A,Rn
58H~5FH
A ← (A)∧(Rn)
ANL A,direct 55H direct
A ← (A)∧(direct)
B←(A)÷(B)的余数
注意:若除数(B)=00H,则结果无法确定,OV置1。 CY总是 被清0。该操作也影响标志位P。
3 加1、减1指令
1) 加1指令 汇编指令格式 INC A INC Rn INC direct INC @Ri INC DPTR
机器代码 04H 08H~0FH 05H direct 06H~07H A3H
操作 A ← (A)-1 Rn ← (Rn)-l direct←(direct)-1 (Ri) ← ((Ri))-1
注意:1.该操作不影响PSW标志位。 2. 51单片机无DEC DPTR指令。
4 十进制调整指令
汇编指令格式 机器码格式 操 作
DA A
D4H
对A进行BCD调整
注意:这条指令一般跟在ADD或ADDC指令后,对累 加器A中的结果进行BCD调整。 该操作影响标志位P。
2 乘法、除法指令
1) 乘法指令
汇编指令格式 机器指令格式
操作
MUL AB
A4H
BA ← (A)×(B)
注意:若乘积大于0FFH,则OV置1,否则清0(此时B的内容为 0)。CY总是被清0。该操作也影响标志位P。
2) 除法指令
汇编指令格式 机器指令格式
操作
DIV AB
84H
A←(A)÷(B)的商,
【例2】 试编程计算5678H – 1234H的值,结果保存在R6、 R5中。
解:减数和被减数都是16位二进制数,计算时要先进行低8 位的减法,然后再进行高8位的减法,在进行低8位减

十进制数的算术运算程序

十进制数的算术运算程序

INC
SI
INC
DI;准备高位相加
LOOP BCDADD1
MOV AL,0 ADC AL,0 MOV [DI],AL ;保存最高位的结果
POP DI POP CX POP AX RET BCDADD ENDP
;恢复现场
<>
1.2 十进制数的减法运算程序
转换原理:
减法运算可以通过求补码的形式转换为加法运算。求N位十BCDQB1: MOV AL,99H
SUB AL,[DI]
MOV [DI],AL ;保存结果
INC
DI
;准备高位求补
LOOP BCDQB1 ;X的十进制补码=99┅9A-X
POP
DI
POP
CX
POP
AX
RET
BCDQB ENDP
<>
汇编语言程序设计
可见,若能够求出减数的十进制补码,则可将减法运算变为加法运算。而一个 十进制数的补码,可由相应位数的9与该数相减,结果最后+1即可求得。最后+1 运算也可直接使个位为A(9┅9+1=9┅A)直接减去减数实现。
<>
运算程序
例9-4:编写一段子程序,实现两个压缩BCD码十进制数的减法。 设十进制的被减数与减数存放于SI、DI指示的存储器中,CX表示十进制数的位 数,结果存储于DI指示的连续存储空间中。子程序如下: ;程序功能:将两个十进制数(压缩BCD码表示)相减。 ;入口参数:CX存放十进制数的位数,SI指向被减数的地址指针,DI指向减数 的地址指针。
<>
运算程序
例9-3:编写一段子程序,实现两个压缩BCD码十进制数的加法。 设十进制的被加数与加数存放于SI、DI指示的存储器中,CX表示十进制数的位 数,结果存储于DI指示的连续存储空间中。子程序如下: ;程序功能:将两个十进制数(压缩BCD码表示)相加。 ;入口参数:CX存放十进制数的位数,SI指向被加数的地址指针,DI指向加数 的地址指针。

汇编语言设计-算术运算指令

汇编语言设计-算术运算指令

NEG指令是对指令中的操作数取补,再将结果送回。因 对一个操作数求2的补码,相当于0减去此操作数,所以NEG 指令执行的也是减法操作。
说明:0 – OPRD 又相当于: ①、FFH-OPRD+1 (字节操作)或
②、FFFFH-OPRD+1(字操作)。即将OPRD内容变反加1
例:若(AL)=13H 0000 0000 执行 NEG AL – 0001 0011
0000 0110 + 1111 1100 1← 0000 0010
6 + 252
258>255
+6 + (–4)
+2
CF=1 溢出
OF=0 不溢出
ⅲ、无符号数不溢出,带符号数溢出:
二进制加法 认作无符号 认作带符号数
0000 1000 + 0111 1011
1000 0011
8 + 123
131 CF=0 无溢出
2、带进位位的加法指令ADC ADC dest , src ; dest←dest+src+CF
ADC主要用于多字节运算,ADC对标志位的影响同ADD。 例:计算 1234FEDCH+33128765H 分别存于数据段指
定的区域中,低位在前,高位在后,相加后其和存入前一个双 字所在的区域中。 (SI)→1000H DCH (41H)
+ 39H 0011 1001
0110 1110
则(AL)=6EH,低4位为非法码,故需调整。
4、组合十进制加法调整指令DAA
(BCD码的加法十进制调整指令)
格式:DAA
功能:对组合BCD码相加的结果进行调整,使结果仍为 组合的BCD码。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
80X86提指令需要与相应的二进制运算指令配合,确保操作数为十进制数的编码形式,才能得到正确的十进制结果。其中,ASCII码或非压缩BCD码调整指令包括加法、减法、乘法和除法的调整指令。加法调整指令AAA用于调整二进制加法后的结果为非压缩BCD码。减法调整指令AAS用于调整二进制减法后的结果。乘法和除法也有相应的调整指令AAM和AAD。此外,还有压缩BCD码调整指令,包括加法的DAA和减法的DAS。这些指令在调整后会设置相应的标志位。除了十进制算术运算指令,文档还介绍了逻辑指令,包括NOT、AND、TEST、OR和XOR等,这些指令可用于二进制位的控制。同时,位测试指令如BT、BTS、BTR和BTC以及位扫描指令BSF和BSR也被简要提及,它们用于测试和扫描操作数中的特定位。
相关文档
最新文档