河北工业大学 单片机实验第二次实验内容实验三算数运算Word文档格式.docx
《河北工业大学 单片机实验第二次实验内容实验三算数运算Word文档格式.docx》由会员分享,可在线阅读,更多相关《河北工业大学 单片机实验第二次实验内容实验三算数运算Word文档格式.docx(34页珍藏版)》请在冰豆网上搜索。
0X07
0XC8
1
(A)的地址D:
0X00E0
ADDA,#200
0X0002
0XC0
0X90
SJMP$
结果
(A)=0X90,(cy)=1,结果为400
(2)计算两个双字节数的和的参考程序:
ORG0100H
MOVA,#low(36589)
ADDA,#low(46542)
MOV30H,A
MOVA,#HIGH(36589)
ADDCA,#HIGH(46542)
MOV31H,A
MOVA,#0
ADDCA,#0
MOV32H,A
(OV)
(30H)
(31H)
(32H)
ORG0100H
MOVA,#low(36589)
0x0100
0X00
0XED
ADDA,#low(46542)
0x0102
0XBB
MOV30H,A
0x0104
MOVA,#HIGH(36589)
0x0106
0X8E
ADDCA,#HIGH(46542)
0x0108
0XC4
0X44
MOV31H,A
0x010A
MOVA,#0
0x010C
ADDCA,#0
0x010E
MOV32H,A
0x0110
0x0112
:
83131
地址
D:
0X0030
0X0031
0X0032
2)减法的参考程序
(1)两个单字节数的减法程序
CLRC
MOVA,#100
SUBBA,#200
(SP)
0x0000
0x0001
0X64
SUBBA,#200
0x0003
0X9C
0x0005
-100
(2)两个双字节数的减法程序
MAIN:
SUBBA,#low(16542)
MOVA,#HIGH(36589)
SUBBA,#HIGH(16542)
SUBBA,#0
MOV,#low(36589)
0x0101
SUBBA,#low(16542)
0x0103
0X41
0X4F
0x0105
MOVA,#HIGH(36589)
0x0107
0X40
SUBBA,#HIGH(16542)
0x0109
0X04
0X4E
0x010B
0x010D
SUBBA,#0
0x010F
0x0111
0x0113
2047
2、计算下面各式中两个带符号数的和及差,观察OV,并记录运算结果,并求出结果的真值。
(1)计算56+78
MAIN:
MOVA,#56
ADDA,#78
(PC)
(AC)
(PSW)
0X0000
0X38
ADDA,#78
0X0002
0X86
0X45
0X0004
134
(2)计算120+120
MOVA,#120
ADDA,#120
0X78
ADDA,#120
0XF0
240
(3)计算-56-78
MOVA,#-56
SUBBA,#78
0X0001
SUBBA,#78
0X0003
0X7A
0X0005
-134
(4)计算-120-123
MOVA,#-120
SUBBA,#123
(DPTR)
0X88
SUBBA,#123
0X0D
-243
参考程序见无符号数的加法和减法程序。
3、BCD码运算,观察CY、AC,并记录运行结果,求出结果的真值。
1)计算56+99
参考程序:
MOVA,#56H
ADDA,#99H
DAA
0X56
ADDA,#99H
0x0002
0XEF
DAA
0x0004
0X80
0X55
0x0007
155
2)计算56-99
MOVA,#9AH
SUBBA,#99H
ADDA,#56H
CPLC
0X9A
ADDA,#56H
0X57
0x0008
CPLC
0x000A
0X81
0x000B
-43
3)计算36826529+29541265
被加数
(33H)
36H
82H
65H
29H
加数
(23H)
(22H)
(21H)
(20H)
54H
12H
和
多字节十进制加法参考程序:
MOVR0,#30H
MOVR1,#20H
MOV2FH,#04H
DA1:
MOVA,@R0
ADDCA,@R1
MOV@R1,A
INCR0
INCR1
DJNZ2FH,DA1
MOV7FH,C
END
(R0)
((R0))
(R1)
((R1))
(D:
0X002F)
0X30
0X29
0X65
MOVR1,#20H
0X20
MOV2FH,#04H
CLRC
0X0007
DA1:
0X0008
0X0009
0X000A
0X94
0X05
MOV@R1,A
0X000B
INCR0
0X000C
0X31
INCR1
0X000D
0X21
0X12
DJNZ2FH,DA1
0X000E
进行循环,第35步循环结果为(21H)=77H,(22H)=36H,(23H)=66H
MOV7FH,C
0X0011
0X66
0X33
0X36
0X23
0X0013
END
0X0033
0X0023
0X0022
0X0021
0X0020
最后结果为:
66267794
思考题
1)如果求两个带符号数的和或差出现了溢出,如何将两个运算数扩大字节后再做一遍,再观察OV,记录结果,求出真值,计算结果还溢出吗?
。
答:
不会溢出。
如何将两个运算数扩大字节后再做一遍,OV为0,计算结果不会溢出。
2)在多字节十进制加法程序,若两数的和存放到从40H开始的单元,如何修改程序?
在MAIN中加一条MOVR2,40H指令。
并将DA1中的MOV@R1,A改为MOV@R2,A并在INCR1后加一条INCR2。
实验四逻辑运算及位操作指令编程设计
(1)熟悉字节逻辑运算指令功能。
(2)熟悉位操作指令运算功能。
(3)从而更深入的掌握汇编语言程序设计。
(4)学会观察CPU窗口中BIT区的变化。
1.字节逻辑运算程序
在片内RAM的FIRST和SECOND单元中各有一符号数X和Y,要求按下列条件算出Z,存入RESULT单元中(设运算结果仍为8位数)。
FIRSTEQU30H
SECONDEQU31H
RESULTEQU32H
START:
MOVR0,FIRST
MOVA,R0
JBACC.7,NEG
MOVB,#2
DIVAB
MOVA,B
JZTEMP1
MOVA,R0
ADDA,SECOND
SJMPRES
TEMP1:
MOVA,R0
ANLA,SECOND
NEG:
CPLACC.7
JZTEMP2
ORLA,SECOND
TEMP2:
XRLA,SECOND
RES:
MOVRESULT,A
手动设置(d:
0x0030)=0x01,(d:
0x0031)=0x02
(B)
START:
MOVA,R0
JBACC.7,NEG
MOVB,#2
0X0006
0X02
DIVAB
MOVA,B
JZTEMP1
MOVA,R0
ADDA,SECOND
0X000F
0X03
SJMPRES
TEMP1:
ANLA,SECOND
0X0014
0X0017
NEG:
0X0018
0X001A
0X001D
0X001E
JZTEMP2
MOVA,R0
ORLA,SECOND
0X0025
TEMP2:
0X0027
XRLA,SECOND
0X0028
0X002A
0X002C
结果
Z=X+Y,即(d:
0x0032)=0x03
2.位操作程序
布尔电路图如下:
XBIT00H
YBIT01H
ZBIT02H
FBIT03H
START:
MOVC,Z
ANLC,/Y
MOVF,C
MOVC,Y
ANLC,/Z
ORLC,F
MOVC,X
ANLC,Y
ORLC,/F
(F)
初值:
(20H)=07H
START:
ANLC,/Y
MOVF,C
MOVC,Y
ANLC,/Z
ORLC,F
MOVC,X
ANLC,Y
0X0010
ORLC,/F
0X0012
0X0016
结果:
(20H)=0X0F
三、思考题
1.字节与位逻辑运算指令在编程上什么区别?
应注意什么?
主要在寻址方式的不同,使得命令使用也不同。
应注意逻辑运算的寻址方式是位寻址,改变的数只能是0或1。
2.如何用断点方式调试本程序?
在开始调试时用断点按钮和光标配合设定断点然后开始调试。
实验五代码转换及移位操作
一、实验目的