算数运算指令实验报告.docx
- 文档编号:17301601
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:17
- 大小:87.91KB
算数运算指令实验报告.docx
《算数运算指令实验报告.docx》由会员分享,可在线阅读,更多相关《算数运算指令实验报告.docx(17页珍藏版)》请在冰点文库上搜索。
算数运算指令实验报告
实验三算数运算指令编程设计
1、计算下面各式中两个无符号数的和及差,观察CY,并记录运算结果,并求出结果的真值。
(1)计算200+200
(2)计算36589+46542
(3)计算100-200及200-100
(4)计算36589-16542及16542-36589
1)加法的参考程序:
(1)计算两个单字节数的和的参考程序:
A=(D:
0XE0)
Cy
C8H
90H
1
ORG0000H
MAIN:
MOVA,#200
ADDA,#200
SJMP$
END
结果分析:
Cy=1,有进位,真值=1×256+90H=256+9×16=400
(2)计算两个双字节数的和的参考程序:
ORG0100H
MAIN:
MOVA,#low(36589)(A)=(D:
0XE0)=EDH
ADDA,#low(46542)(A)=(D:
0XE0)=BBHCy=1
MOV30H,A(D:
0X30)=BBH
MOVA,#HIGH(36589)(A)=(D:
0XE0)=8EH
ADDCA,#HIGH(46542)(A)=(D:
0XE0)=44HCy=1
MOV31H,A(D:
0X31)=44H
MOVA,#0(A)=(D:
0XE0)=00H
ADDCA,#0(A)=(D:
0XE0)=01HCy=1
MOV32H,A(D:
0X32)=01H
SJMP$
END
结果分析:
(D:
0X30)=BBH,(D:
0X31)=44H,(D:
0X32)=01H,
真值=144BBH=83131
2)减法的参考程序
(A)=(D:
0XE0)
Cy
0
64H
9CH
1
(1)两个单字节数的减法程序
100-200
ORG0000H
MAIN:
CLRC
MOVA,#100
SUBBA,#200
SJMP$
END
结果分析:
Cy=1,有借位,(A)=9CH
真值=-1×256+9CH=-256+156=-100
200-100
ORG0000H
(A)=(D:
0XE0)
Cy
0
C8H
64H
0
MAIN:
CLRC
MOVA,#200
SUBBA,#100
SJMP$
END
结果分析:
Cy=0,无借位,(A)=64H
真值=64H=100
(2)两个双字节数的减法程序
36589-16542
ORG0100H
MAIN:
CLRCCy=0
MOVA,#low(36589)(A)=(D:
0XE0)=EDH
SUBBA,#low(16542)(A)=(D:
0XE0)=4FHCy=0
MOV30H,A(D:
0X30)=4FH
MOVA,#HIGH(36589)(A)=(D:
0XE0)=8EHCy=0
SUBBA,#HIGH(16542)(A)=(D:
0XE0)=4EHCy=0
MOV31H,A(D:
0X31)=4EH
MOVA,#0(A)=(D:
0XE0)=00H
SUBBA,#0(A)=(D:
0XE0)=00HCy=0
MOV32H,A(D:
0X32)=00H
SJMP$
END
结果分析:
(D:
0X32)=00H,(D:
0X31)=4EH,(D:
0X30)=4FH
真值=4E4FH=20047
16542-36589
ORG0100H
MAIN:
CLRCCy=0
MOVA,#low(16542)(A)=(D:
0XE0)=9EH
SUBBA,#low(36589)(A)=(D:
0XE0)=B1HCy=1
MOV30H,A(D:
0X30)=B1H
MOVA,#HIGH(16542)(A)=(D:
0XE0)=40HCy=1
SUBBA,#HIGH(36589)(A)=(D:
0XE0)=B1HCy=1
MOV31H,A(D:
0X31)=B1H
MOVA,#0(A)=(D:
0XE0)=00H
SUBBA,#0(A)=(D:
0XE0)=FFHCy=1
MOV32H,A(D:
0X32)=FFH
SJMP$
END
结果分析:
(D:
0X32)=FFH,(D:
0X31)=B1H,(D:
0X30)=B1H,最高位有借位
真值=B1B1H-16^4=45489-65536=-20047
2、计算下面各式中两个带符号数的和及差,观察OV,并记录运算结果,并求出结果的真值。
(1)计算56+78
(2)计算120+120
(3)计算-56-78
(4)计算-120-123
1)计算56+78
A=(D:
0XE0)
OV
38H
86H
1
ORG0000H
MAIN:
MOVA,#56
ADDA,#78
SJMP$
END
结果分析:
OV=1,发生溢出,结果错误。
真值≠86H=-6
扩大字节后:
ORG0100H
MAIN:
MOVA,#low(56)(A)=(D:
0XE0)=38H
ADDA,#low(78)(A)=(D:
0XE0)=86HOV=1
MOV30H,A(D:
0X30)=86H
MOVA,#HIGH(56)(A)=(D:
0XE0)=00H
ADDCA,#HIGH(78)(A)=(D:
0XE0)=00HOV=0
MOV31H,A(D:
0X31)=00H
SJMP$
END
结果分析:
(D:
0X31)=00H,(D:
0X30)=86H,OV=0
无溢出,真值=86H=134
2)计算120+120
ORG0100H
MAIN:
MOVA,#low(120)
ADDA,#low(120)
MOV30H,A
MOVA,#HIGH(120)
ADDCA,#HIGH(120)
MOV31H,A
SJMP$
END
连续运行后:
(D:
0X30)=F0H,(D:
0X31)=00H,OV=0
结果分析:
(D:
0X32)=00H,(D:
0X31)=00H,(D:
0X30)=F0H,OV=0
无溢出,真值=F0H=240
3)计算-56-78
-56的补码是0FFC8H,-78的补码是0FFB2H
ORG0100H
MAIN:
CLRC
MOVA,#low(0FFC8H)
ADDCA,#low(0FFB2H)
MOV30H,A
MOVA,#HIGH(0FFC8H)
ADDCA,#HIGH(0FFB2H)
MOV31H,A
SJMP$
END
连续运行后:
(D:
0X30)=7AH,(D:
0X31)=0FFH,0V=0
结果分析:
0V=0,无溢出,0FF7AH的补码是0086H,真值=-0086H=-134
4)计算-120-123
-120的补码是0FF88H,-123的补码是0FF85H
ORG0100H
MAIN:
CLRC
MOVA,#low(0FF88H)
ADDCA,#low(0FF85H)
MOV30H,A
MOVA,#HIGH(0FF88H)
ADDCA,#HIGH(0FF85H)
MOV31H,A
SJMP$
END
连续运行后:
(D:
0X30)=0DH,(D:
0X31)=0FFH,0V=0
结果分析:
0V=0,无溢出,0FF0DH的补码是00F3H,真值=-00F3H=-243
3、BCD码运算,观察CY、AC,并记录运行结果,求出结果的真值。
1)计算56+99
(A)=(D:
0XE0)
AC
Cy
56H
EFH
0
0
55H
1
参考程序:
ORG0000H
MAIN:
MOVA,#56H
ADDA,#99H
DAA
MOV30H,A(D:
0X30)=55H
SJMP$
END
结果分析:
Cy=1,真值=100+55=155
2)计算56-99
(A)=(D:
0XE0)
AC
Cy
0
9AH
01H
0
0
57H
0
0
参考程序:
ORG0000H
MAIN:
CLRC
MOVA,#9AH
SUBBA,#99H
ADDA,#56H
DAA
MOV30H,A(D:
0X30)=57H
CPLCCy=1
SJMP$
END
结果分析:
Cy=1,真值=-100+57=-43
3)计算36826529+29541265
多字节十进制加法参考程序:
ORG0000H
MAIN:
MOVR0,#30H(D:
0X00)=30H
MOVR1,#20H(D:
0X01)=20H
MOV2FH,#04H(D:
0X2F)=04H加法次数=4
CLRCCy=0
DA1:
MOVA,@R0(D:
0XE0)=29H……(D:
0XE0)=36H
ADDCA,@R1(D:
0XE0)=8EHAC=0Cy=0(D:
0XE0)=60H
DAA(D:
0XE0)=94HAC=0Cy=0……(D:
0XE0)=66H
MOV@R1,A(D:
0X20)=94H(D:
0X23)=66H
INCR0(D:
0X00)=31H……(D:
0X00)=34H
INCR1(D:
0X01)=21H……(D:
0X01)=24H
DJNZ2FH,DA1(D:
0X2F)=00H
MOV7FH,C(D:
0X7F)=00H
SJMP$
END
结果分析:
(D:
0X7F)=00H,(D:
0X20)=94H,(D:
0X21)=77H,(D:
0X22)=36H,(D:
0X23)=66H
真值=66367794H(BCD码)=66367794
思考题
1)如果求两个带符号数的和或差出现了溢出,如何将两个运算数扩大字节后再做一遍,再观察OV,记录结果,求出真值,计算结果还溢出吗?
。
答:
如果是正数,在高8位扩展8个0;如果是负数,求其补码(扩1个字节),再做加法运算,结果为补码,求结果的补码,即得最后结果。
2)在多字节十进制加法程序,若两数的和存放到从40H开始的单元,如何修改程序?
答:
ORG0000H
MAIN:
MOVR0,#30H
MOVR1,#20H
MOV2FH,#04H
MOVSP,#3FH
CLRC
DA1:
MOVA,@R0
ADDCA,@R1
DAA
PUSHA
INCR0
INCR1
DJNZ2FH,DA1
MOV7FH,C
SJMP$
END
实验四逻辑运算及位操作指令编程设计
1.字节逻辑运算程序
在片内RAM的FIRST和SECOND单元中各有一符号数X和Y,要求按下列条件算出Z,存入RESULT单元中(设运算结果仍为8位数)。
FIRSTEQU30H
SECONDEQU31H
RESULTEQU32H
ORG0000H
START:
MOVR0,FIRST
MOVA,R0
JBACC.7,NEG判断X的正负,为负则转移到NEG
MOVB,#2
DIVAB
MOVA,B
JZTEMP1判奇偶,若X为正偶数,则转移到TEMP1
MOVA,R0
ADDA,SECOND
SJMPRES
TEMP1:
MOVA,R0
ANLA,SECOND
SJMPRES
NEG:
CPLACC.7
MOVB,#2
DIVAB
MOVA,B
JZTEMP2判奇偶,若X为负偶数,则转移到TEMP2
MOVA,R0
ORLA,SECOND
SJMPRES
TEMP2:
MOVA,R0
XRLA,SECOND
RES:
MOVRESULT,A
SJMP$
END
1)X=5BH=91,Y=69H运行结果:
(A)=(D:
0XE0)=C4H,OV=1,(D:
0X32)=C4H
结果分析:
X+Y≠C4H,OV=1,有溢出,结果错误。
2)X=5AH=90,Y=69H运行结果:
(A)=(D:
0XE0)=48H,(D:
0X32)=48H
结果分析:
X∧Y=(D:
0X32)=48H=01011010∧01101001=01001000
3)X=ABH=-43,Y=69H运行结果:
(A)=(D:
0XE0)=EBH,(D:
0X32)=EBH
结果分析:
X∨Y=(D:
0X32)=EBH=10101011∨01101001=11101011
4)X=AAH=-42,Y=69H运行结果:
(A)=(D:
0XE0)=C3H,(D:
0X32)=C3H
结果分析:
XY=(D:
0X32)=C3H=1010101001101001=11000011
2.位操作程序
布尔电路图如下:
XBIT00H
YBIT01H
ZBIT02H
FBIT03H
ORG0000H
START:
MOVC,Z
ANLC,/Y
MOVF,C
MOVC,Y
ANLC,/Z
ORLC,F
MOVF,C
MOVC,X
ANLC,Y
ORLC,/F
MOVF,C
SJMP$
END
AB=A∧/B+/A∧B
结果分析如下表:
思考题
1.字节与位逻辑运算指令在编程上什么区别?
应注意什么?
答:
字节逻辑运算指令:
有与、或、异或,寄存器寻址,寄存器间接寻址,立即寻址,直接寻址;位逻辑运算指令:
有与、或,只有为寻址。
2.如何用断点方式调试本程序?
实验五代码转换及移位操作
1.二进制数BCD码
将二进制数10011011B转换成BCD码数,存入30H和31H单元中;再将30H单元中的数据加16H后,转换成二进制数据,存入40H单元中。
ORG0000H
MOVA,#10011011B(A)=(D:
0XE0)=9BH
MOVB,#100(B)=(D:
0XF0)=64H
DIVAB(A)=(D:
0XE0)=01H(B)=(D:
0XF0)=37H
MOV30H,A(D:
0X30)=01H
MOVA,B(A)=(D:
0XE0)=37H
MOVB,#10(B)=(D:
0XF0)=0AH
DIVAB(A)=(D:
0XE0)=05H(B)=(D:
0XF0)=05H
SWAPA(A)=(D:
0XE0)=50H
ORLA,B(A)=(D:
0XE0)=55H
MOV31H,A(D:
0X31)=55H
MOVA,30H(A)=(D:
0XE0)=01H
ADDA,#16H(A)=(D:
0XE0)=17HAC=Cy=0
DAA(A)=(D:
0XE0)=17HAC=Cy=0
PUSHACC(SP)=(D:
0X81)=08H(D:
0X81)=17H
ANLA,#00001111B(A)=(D:
0XE0)=07H析取低四位
MOV40H,A(D:
0X40)=07H
POPACC(A)=(D:
0XE0)=17H(SP)=(D:
0X81)=07H
ANLA,#11110000B(A)=(D:
0XE0)=10H析取高四位
SWAPA(A)=(D:
0XE0)=01H
MOVB,#10(B)=(D:
0XF0)=0AH
MULAB(A)=(D:
0XE0)=0AH(B)=(D:
0XF0)=00H
ADDA,40H(A)=(D:
0XE0)=11HAC=1Cy=0
MOV40H,A(D:
0X40)=11H
SJMP$
END
结果分析:
10011011B转化为BCD码,(D:
0X30)=01H,(D:
0X31)=55H,10011011B对应的BCD码为155H;30H单元中的数据加16H后,其BCD码为(A)=(D:
0XE0)=17H,转化为二进制后为(D:
0X40)=11H。
2.多字节二进制数右移一位
将三个内部RAM32H、31H和30H单元中的内容组成的三字节数通过Cy右移一位。
功能示意图如图3-4所示:
以(D:
0X32)=32H,(D:
0X31)=31H,(D:
0X30)=30H为例进行实验:
ORG0000H
CLRCCy=0
MOVA,32H(A)=(D:
0XE0)=32H
RRCA(A)=(D:
0XE0)=19HCy=0
MOV32H,A(D:
0X32)=19H
MOVA,31H(A)=(D:
0XE0)=31H
RRCA(A)=(D:
0XE0)=18HCy=1
MOV31H,A(D:
0X31)=18H
MOVA,30H(A)=(D:
0XE0)=30H
RRCA(A)=(D:
0XE0)=98HCy=0
MOV30H,A(D:
0X30)=98HCy=0
SJMP$
END
结果分析:
(D:
0X32)=32H=00110010B,(D:
0X31)=31H=00110001B,(D:
0X30)=30H=00110000B,通过Cy=0右移后得Cy=0,(D:
0X32)=19H=00011001B,(D:
0X31)=18H=00011000B,(D:
0X30)=98H=10011000B.
四、思考题
1.多于三个字节的移位操作如何进行?
利用循环可做,令循环次数为N=字节数
ORG0000H
CLRC
MOVR0,#32H
MOVR1,#N
A1:
MOVA,@R0
RRCA
MOV@R0,A
DECR0
DJNZR1,A1
SJMP$
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算数 运算 指令 实验 报告