算术运算类指令

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

练习:
1、求内部RAM20 H单元和30 H单元的和,结果保存 至内部RAM50单元?(假设两个单元的值相加不超 过255)
• MOV A,20H • ADD A,30H • MOV 50H,A
• 1、求外部RAM2000H单元和3000单元的和,结果 保存至内部RAM50单元?(假设两个单元的值相 加不超过255) • (2000H)+(3000H)→内部(50H) • MOV DPTR,#2000H • MOVX A,@DPTR • MOV R1,A • MOV DPTR,#3000H • MOVX A,@DPTR • ADD A,R1 • MOV 50H,R1
例2:将外部RAM1000H单元和1001单元的和保存至 外部 RAM1001H单元,平均值送至1002H单元?(假 设两个单元的值相加不超过255)
• • • • • • • •
MOV DPTR,#1000H MOVX A,@DPTR MOV R0,A INC DPTR MOVX A,@DPTR ADD A , R0 INC DPTR MOVX @DPTR,A
例:编程实现将4位BCD码相加,加数存放在30H、 31H和32h、33h。结果存至30H、31H
• • • • • •
MOV R0,#30H MOV R1,#32H MOV A,@R0 ADD A,@R1 DA A MOV @R0,A
• • • • • •
INC R0 INC R1 MOV A,@R0 ADDC A,@R1 DA A MOV @R0,A
• 1题改为:求外部RAM2000H单元和3000单 元的平均值,结果保存至内部RAM50单元? (假设两个单元的值相加不超过255)
• • • • • • • MOV DPTR,#2000H MOVX A,@DPTR MOV R1,A MOV DPTR,#3000H MOVX A,@DPTR ADD A,R1 MOV 50H,R1
• 如果乘积超过0FFH,则溢出标志OV置“1”,否则清“0”。 乘法指令执行后进位标志Cy 总是清零,即CY=0。 • • • • • Eg: MOV A, #5H; MOV B, #10H MUL AB 则:A= ?(50H) A初始值改为10h?
B=? (00H) OV=?0
七、除法运算
• DIV AB • 指令含义:将(A) ÷(Leabharlann Baidu),将商放入A,余数放入寄存器B 中。 • 对PSW标志位的影响: • Cy位被清0 • 如果除数(B)=0,则OV位被置1,表示除法无意 • 义,不能进行。 • EG:MOV A,#100 • MOV B,#26 • DIV AB • 则:A= ? 03 B=?22(16H) CY=?0
• • • • • • • • • • • •
MOV SWAP MOV MOV SWAP MOV XCHD SWAP MOV MOV SWAP MOV
A, 30H A 30H,A A,31H A /*先处理成低四位交换 R0,#30H A,@R0 /*执行低四位交换 A /*即为31单元最后值 31H, A A,30H A 30H,A
1、将外部RAM2000H单元和内部RAM20H(外部 3000H)单元数据交换 • MOV DPTR,#2000H • MOV DPTR,#2000H • MOVX A, @DPTR • MOV R1, A • MOVX A,@DPTR • MOV DPTR,#3000H • XCH A,20H • MOVX A,@DPTR • MOVX @DPTR,A • XCH A , R1 • MOVX @DPTR,A • MOV DPTR ,#2000H • MOV A,R1 • MOVX @DPTR,A
• 例:将内部RAM中40H和41H单元的数相加,再把和送到42H 单元。 • MOV A, 40H • ADD A, 41H • MOV 42H, A • 如果运算结果超出FFH(255),将产生进位——PSW的CY位 将被置1。
二、带进位的加法运算
• 该类指令主要用于多字节的加法运算 • ADDC A,Rn ; A←(A)+(Rn)+(CY) • ADDC A, direct ; A ←(A)+(direct)+(CY) • ADDC A, @Ri ; A ←(A)+((Ri))+(CY) • ADDC A, #data ;A ←(A)+data+(CY) • 例子:书本 • 从上述两组加法指令中可看出,加法指令的一个源操 作数总是A,且运算结果也放在A中。 • 加法指令影响PSW中的Cy、AC、OV及P位。带进位加法 指令的功能与普通加法指令类似,唯一的不同之处是,在 执行带进位加法时,还要将上一次进位标志Cy的内容也一 起加进去
算术运算指令 • 算术运算指令有加法、减法、乘法和除法 四类, • 包括: • 加法:带进位add/不带进位addc,自加inc; • 减法:带进位减法subb,自减dec; • 乘法mul和除法div;
一、不带进位的加法指令
• • • • ADD ADD ADD ADD A,Rn A, direct A, @Ri A, #data ;A ←(A)+(Rn) ;A ←(A)+(direct) ;A ←(A)+((Ri)) ;A ←(A)+data
• • • • • • •
例:设(A)=C9H,(R2)=54H,(CY)=1,执行指令 SUBB A, R2 11001001 01010100 1 01110100 结果:(A)=74H,借位位(CY)=0。
六、乘法运算
• MUL AB
• 指令的功能是:A和B中各存放一个8位无符号数,将累加 器A的内容与寄存器B的内容相乘,16位乘积的低8位存放在累 加器A中,高 8位存放于寄存器B中。即将(A) ×(B),乘积的 低位字节放在A中,高位字节放在寄存器B中。
• 这组指令的功能是:将累加器A的内容与第二操作数及 进位标志相减, 结果送回到累加器A中。在执行减法过程 中,如果位7(D7)有借位,则进位标志Cy置“1”, 否则 清“0”; 如果位 3(D3)有借位,则辅助进位标志AC置 “1”,否则清“0”; • 由于减法指令只有带借位减法指令,因此,若要进行不 带借位的减法操作,需先清借位位(cy标志位),即置CY=0。

• 2、将(31H)(30H)两个单元的数和(41H) (40H)相减(加),结果保存在(31H)(30H) 两个单元,高字节放在高地址。
MOV A,30H CLR CY SUBB A,40H MOV 30H,A MOV A,31H SUBB A,41H MOV 31H,A
• • • •
MOV B,#02H DIV AB INC DPTR MOVX @DPTR,A


小结:
• • • • •
算术运算指令有加法、减法、乘法和除法四类, 包括: 加法:带进位add/不带进位addc,自加inc; 减法:带进位减法subb,自减dec; 其中,加法指令(带进位/不带进位)、 减法指令都是以A作为目的操作数,源操作数 为“#D,Direct,Rn,@Ri”. • 乘法mul和除法div;操作数结构为“AB”
• • • • •
例如:设(A)=52H, (R0)=B4H 执行指令: CLR C ; (CY)←0 , C3 SUBB A, R0 ; (A) ← (A)-(CY)-(R0) , 98 结果为:(A)=9EH, CY=1,
五、减1指令
DEC A ;A←(A)-1 DEC Rn ;Rn ←(Rn)-1 DEC direct ;direct ←(direct)-1 DEC @Ri ;(Ri) ←((Ri))-1 • 注意:减1指令也不会影响PSW的各个标志位。 • 思考:设(A)=FFH,(R0)=27H,(26H)=3AH 执行程序: • DEC A DEC R0 DEC @R0 • 结果(A)=____ ,(R0)=______ ,(26H)=______ 。
• 例:加数存放在内部RAM的41H(高位)和40H(低 位),被加数存放在43H(高位)和42H(低位),将它们 相加,和存放在46H~44H中。 • 程序: • CLR C • MOV A, 40H • ADD A, 42H • MOV 44H,A • MOV A, 41H • ADDC A, 43H • MOV 45H,A • CLR A • ADDC A, #00H /*表示进位*/ • MOV 46H,A • 如果更多字节相加呢?如30H开始连续十个单元?
• 例:设 (A)=FFH,(R0)=25H,(26H)=3AH,(DPTR)=2000H • 执行程序:(顺序执行) • INC A INC R0 INC @R0 INC DPTR 结果为: • (A)=00H,(R0)=26H,(26H)=3BH,(DPTR)=2001H
四、减法指令
• SUBB SUBB SUBB SUBB A, Rn ;A ←(A)-(Rn)-(CY) A, direct ;A ←(A)-(direct)-(CY) A, @Ri ;A ←(A)-((Ri))-(CY) A, #data ;A ←(A)-data-(CY)
例1、编写程序实现将片内30H单元的内容和31H单 元低四位交换。(高四位与低四位交换) • • • • MOV MOV XCHD MOV A, 30H R0, #31H A, @R0 30H, A
• • • • • • MOV SWAP MOV XCHD SWAP MOV A, 30H A R0 , #31H A ,@R0 A 30H , A
八、十进制调整指令
• DA A • 这条指令用于对BCD编码的十进制数相加结果进行调整。 例: 10010011 (93)BCD + 00111000 (38)BCD 11001011(CBH) 131 相应程序: MOV R2,#93H MOV A,#38H ADD A, R2 DA A
• • • • • •
三、加1指令(自加)
INC INC INC INC A Rn direct @Ri ;A ←(A)+1 ;Rn ←(Rn)+1 ; direct ←(direct)+1 ;(Ri) ←((Ri))+1
INC
DPTR
;DPTR ←(DPTR)+1
• 指令的功能是:将指令中所指出操作数的内容加1。 若 原来的内容为0FFH, 则加1后将产生溢出,使操作数的内 容变成00H,但不影响任何标志。 • 最后一条指令是对16 位的数据指针寄存器DPTR执行加1 操作,指令执行时,先对低 8 位指针 DPL的内容加1,当 产生溢出时就对高8位指针DPH加1,但不影响任何标志。 •注意:以上所有指令不会影响PSW中的各个标志位。
相关文档
最新文档