算数运算指令
算术运算指令

2. 减法指令
(1) 不考虑借位的减法指令SUB 格式: SUB dest, src 操作: dest←(dest)-(src)
注:1.源和目的操作数不能同时为存储器操作数 2.不能把段寄存器作为操作数
指令例子:
SUB AL,60H SUB [BX+20H],DX SUB AX,CX
14
(2) 考虑借位的减法指令SBB SBB指令主要用于多字节的减法。 格式: SBB dest, src 操作: dest←(dest)-(src)-(CF)
思考: 程序的结果? (AL、BL、CL中数据的大小顺序22 )
3. 乘法指令
进行乘法时: 8位 8位→ 16位乘积 (即 AL mem8/reg8 → AX) 16位 16位→ 32位乘积
(即 AX mem16/reg16 → DX AX) (1) 无符号数的乘法指令MUL mem/reg
9
BUFFER1
ACH F8H 56H 2CH
BUFFER2
BEH 47H 9EH 30H
被 加 数
数 据 段
加 数
...
多字节加法示意图
10
程序段如下:
MOV CX,4 ;置循环次数
MOV SI,0 ;置SI初值为零
CLC
;清进位标志CF
LL: MOV AL,BUFFER2[SI]
ADC BUFFER1[SI],AL ;带进位加
8
ADC指令主要用于多字节加法运算中
例:有两个4字节的无符号数相加: 2C 56 F8 AC + 30 9E 47 BE = ? 设被加数、加数分别存放在BUFFER1及
BUFFER2开始的两个存储区内,结果放回 BUFFER1存储区,如下页图所示。
算术运算类指令

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章(09.2)

4.加1指令(5条) INC INC INC INC INC A Rn direct @Ri DPTR
指令功能:使操作数所指定的单元的内容加1 例:已知A=12H,R0=33H,(21H)=32H,(34H)=22H, DPTR=1234H,连续执行下面的指令。 说明:除了“INC A”影响奇偶标志位外,其余操作均 INC A 不影响PSW;“INC DPTR”是一条16位加1指令,这条 INC R0 指令在加1过程中,若低8位有进位可直接向高8位进位, INC 21H 不需要通过进位位Cy传送。 INC @R0 INC DPTR
4.清0与取反指令(2条) 取反: CPL A 5.循环移位指令(4条) RL A RR A RLC A RRC A 清零: C0
A.0 A.7 A.7 A.0 A.0
CY
CY
后两条指令,影响P标志和CY。
综合举例: 例1:把累加器A中的低4位状态,通过P1口的高4 位输出, P1口的低4位状态不变。 ANL A,#0FH ;屏蔽A的高4位 SWAP A ANL P1,#0FH ;清P1口高4位 ORL P1,A ;P1口高4位输出A的低4位; 例2:编制程序将存放在片外RAM的30H单元中某 数的低4位取反,高2位置1,其余2位清0。 例3:编制程序求片内RAM的20H,21H,22H单元 中的数的补码,并将结果仍放回到20H,21H, 22H中。
(40H)= (41H)=
H H
(50H) = (51H)=
H H
A= R0=
H H
5.减1指令(4条) DEC DEC DEC DEC A Rn direct @Ri
指令功能:使操作数所指定的单元的内容减1
说明:减1指令中没有DPTR减1指令.
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中。
第三节算术运算指令

1、 ADD(Addition)加法指令
指令格式:ADD dest , src ;(dest) (dest)+(src) Src:立即数,寄存器,存储器。 dest:寄存器,存储器。
例:
ADD CL,10 ADD DX,SI ADD AX, MEM ADD DATA[BX], AL ;寄存器+立即数 ;寄存器+寄存器 ;寄存器+存储器 ;存储器+寄存器
双高位判别法
(2)无符号数相加溢出 根据CF判断无符号数产生溢出? CF=1无符号数相加产生溢出,但考虑进位所代表的数 值后,结果并没有错。
(一)加法指令(Arithmetic)
8088具有5种加法操作指令:
1、 ADD(Addition)加法指令 2、 ADC(Add with carry)带进位加法指令 3、 INC(Increment by 1)加 1指令
SUB WORD PTRALPHA[BX][DI],512H;存储器减立即数
这种指令影响标志位: AF、CF、OF、PF、SF、ZF标志。
2、SBB(Subtraction with borrow)带进位减法指令 格式::SBB dest,src;(dest)←(dest)-(src)-CF CF: 进位标志CF的现行值(上条指令CF值)
;存储器+1(字操作)
INC WORD PTR [DI]
INC
DS
; 错
(二)减法指令(Subtraction)
8088有7条减法指令 :
1、SUB(Subtraction)减法指令
2、SBB(Subtraction with borrow)带进位减法指令 3、DEC(Decrement by 1 ) 减 1 指令 4、NEG(Negate) 求补指令 5、CMP(Compare) 比较指令
算术运算Arithmetic指令

MOV AL,7
MOV BL,8
ADD AL,BL;(AL=0FH);
AAA;
(AH=1,AL=5) 连加?
打*指令一般了解
2
算术运算(Arithmetic)指令(4)
DAA*(Decimal adjust for Addition) 压缩BCD加法调整
(单字节)只对Packed BCD (00-99H) 有意义;
8位除法 DIV CL; DIV BYTE PTR [BX+1]
注意:
除0/溢出 (字节除: 商>255 OR 字:商>65535) 除零中断
默认AX/OPRD(字节) 结果 AH=余数 AL=商
7
算术运算(Arithmetic)指令(八)
IMUL/IDIV 有符号数乘/除法
CBW/CWD 符号扩展
INC BYTE PTR[BX]; INC WORD PTR CS:[DI+20]
1
算术运算(Arithmetic)指令(3)
AAA*(ASCII adjust for Addition) 非压缩BCD加法调整
(单字节)只对Unpacked BCD (00-09H)有意义;
隐含为:AL,AH(AH:00~08,AL:00~09) 等效:IF((AL)&(0FH)>9)OR (AF)=1 THEN (AL)+6; AH+1;AF=CF=1; (AL)&0FH ELSE (AL)&0FH; (应AH=00~08,AL=00~09) 例:MOV AH,0
9
逻辑运算与移位(Logical & shifting)
逻辑运算 . 8086/8088无直接位操作:
二、算术逻辑运算指令

二、算术运算指令
• • • • • • • •
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中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DIV AB ; A÷B 商→A,余数→B 注意:当除数为 0 时结果不确定,则溢出将 OV 置 1。 5.INC(加 1)和 DEC(减 1)类指令 加 1 类指令共 5 条,其功能是将操作数内容加 1。 INC A ;A+1→A, A 加 1 INC Rn ;Rn+1→Rn, Rn 中内容加 1 INC direct ;(direct)+1→(direct), 直接地址中内容加 1 INC @Ri ;(Ri)+1→(Ri), Ri 间址中的内容加 1 INC DPTR ;DPTR+1→DPTR, 数据指针加 1 例 判断 INC R0 和 INC @R0 两条指令结果,比较两者的区别。设 R0=30H,(30H)=00H。 执行 INC R0 ;R0+1=30H+1→R0, 结果 R0=31H 执行 INC @R0 ;(R0)+1=(30H)+1→(R0),结果(30H)=01H,R0 中内
程序 MOV A, #34H ;被加数低 8 位数 34H 送 A ADD A, #0E7H ;加数低 8 位数 E7H 与之相加,A=1BH,Cy=1 MOV 40H, A ;A→40H 即 34H+E7H 结果存入 40H 中(40H=1BH) MOV A, #12H ;被加数高 8 位数 12H 送 A ADDC 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 中。 SUBB A, Rn ;A-Rn-Cy→A ,A 减寄存器 Rn 内容及进位标志 SUBB A, direct ;A-(direct)-Cy→A,A 减直接地址内容和位标志
执行 ADD A,R0 结果:A=40H, R0=10H,标志位 P=1, Cy=0, OV=0, AC=0 2.ADDC 类指令(带进位加法 4 条) ADDC A, Rn ;A+Rn+Cy→A, A 与 R n 内容、进位状态相加,和送 到 A 中 ADDC A, direct ;(direct)+Cy+A→A, A 与直接地址中内容、进位状态 相加,和送 A ADDC A, @Ri ;(Ri)+Cy+A→A, A 与 Ri 间址单元中内容、进位状态 相加,和送 A ADDC A, #data ;data+Cy+A→A, A 与 立即数、进位状态相加,和送 A 与 ADD 类指令的区别是,ADDC 指令相加时连同进位标志 Cy 内容一起相 加,主要用于多字节加法中的高位字节的相加,而最低位字节相加用 ADD 指令。进位位 Cy 加到字节的最低位。 例 写计算 1234H+0FE7H 的程序,将结果存入内部 RAM 的 41H 和 40H 单 元,40H 存低 8 位,41H 存高 8 位。
SUBB A, Ri ;A-(Ri)-Cy→A, A 减 Ri 间址单元内容和进位位标志 SUBB A, #data ;A-data-Cy→A, A 减立即数和进位标志 说明: 1) 多字节减法时,低位相减有借位则把 Cy 置 1,否则 Cy 为 0。 2) MCS-51 系列指令中没有不带借位的减法指令,所以在单字节或低位 字节减法时用 SUBB 类指令前要先将 Cy 清 0。 3)减去一个数实际上是加上这个数的相反数(负数),减法运算常常用补 码相加方式。 4.MUL(乘)和 DIV(除)指令 乘法指令只有一条: MUL AB ;A 乘以 B→B 和 A,结果 16 位,高 8 位存入 B,低 8 位在 A中 若乘积大于 FFH 则将溢出标志 OV 置 1。 除法指令也只有一条:
算数运算指令
算数运算指令 算术运算指令的主要功能是实现算术加、减、乘、除等运算。 1.ADD 类指令是不带进位的加法运算指令(4 条)。 ADD A,Rn ;A+Rn→A, A 与 Rn 寄存器内容相加,结果送到 A 中 ADD A,direct ;(direct)+A→A, A 与直接地址内容相加,和送 A ADD A, @Ri ;(Ri)+A→A, A 与 Ri 间址内容相加,和送 A ADD A, #data ;data+A→A, A 与立即数相加,和送 A 注意:ADD 类指令相加结果均在 A 中,相加后源操作数不变。若 A 中最 高位有进位,Cy 置 1;若半加位有进位,AC 置 1。A 的结果还影响奇偶标志 位 P。 例 A=30H, R0=10H
容不变,仍为 30H 减 1 类指令共 4 条,其功能是将操作数指定单元内容减 1。 DEC A ;A-1→A, A 中内容减 1 DEC Rn ;Rn-1→Rn, Rn 中内容减 1 DEC direct ;(direct)-1→(direct), 直接地址中内容减 1 DEC @Ri ;(Ri)-1→(Ri), Ri 间址中的内容减 1 操作过程与加 1 指令类似,这里不再举例。 6.十进制加法调整指令(1 条) DA A 功能:在加法指令后,把 A 中二进制码自动调整成 BCD 码。 例 MOV A, #05H ;05H→A ADD A, #08H ;05H+08H→A=0DH