实验二数传指令和算数运算指令编程设计
一、实验目的
1.掌握数据块的传送操作和算术运算指令的应用。
2.进一步掌握汇编语言设计和调试方法。
3.掌握观察窗口的使用方法。
4.学会给存储单元赋初值的方法。
二、实验内容
1.数据区传送
(1)把内部RAM 40H~4FH置初值0A0H~0AFH;
(2)而后把40H~4FH内容传送到外部RAM 9800H~980FH中;
(3)再把 9800H~980FH内容传送到 50H~5FH中。
2.多字节十进制加法
加数放在30H开始的单元中(最低位放在30H,按从小到大的顺序存放),被加数和结果存放在20H 开始的单元(最低位在20H中),字节数放在2FH中,最高进位位放在位地址7FH单元中。
三、实验步骤
1.分别用单步和连续运行方式,调试上述两个程序;
2.在执行第二个程序之前,给被加数和加数单元赋初值;
3.在观察窗口中观察结果。
四、实验程序清单
1.数据块传送程序:
命令行命令结果备注
MAIN MOV R0,
#40H
MOV R2,
#10H
MOV A,
#0A0H
MOV @R0, A A1
INC R0
INC A
DJNZ R2,
A1
循环判定命令,重复执行A1共R2次,,DPTR指针递增,PC指针循
环
0x0006---0x0
009
MOV R0, #40H
MOV DPTR, #9800H
MOV R2,
#10H
MOV A, @R0 A2
MOVX @DPTR,
A
INC R0 INC DPTR
循环判定命
令,重复执行
A2共R2次,
DPTR指针递
增, PC指针循
环
0x0012---0x0
016 DJNZ R2, A2
MOV R0,
#50H
MOV DPTR, #9800H
MOV R2, #10H
A3 MOVX A, @DPTR
MOV @R0, A INC DPTR
INC R0
DJNZ R2, A3
循环判定命令,重复执行A3共R2次,DPTR指针递增, PC指针循
环
0x001F---0x0
023
2.多字节十进制加法:
初始赋值:
20H 21H 22H 23H 24H 41 25 50 24 37 30H 31H 32H 33H 34H 23 27 13 12 40
命令行命令结果
MAIN MOV R0, #30H
MOV R1, #20H
MOV
2FH,#04H
CLR C
DA1
MOV A,@R0
ADDC
A, @R1
DA A 没有进位,因此调整命令没有引起变化
MOV
@R1, A
INC R0 INC R1
DJNZ
循环判定命令,PC指针循环0x0008---0x0011 2FH, DA1
MOV 7FH,
C
五、思考题
1若两个数据块都在外部数据存储器中,如何实现数据块的传送?
答:选择R0和DPTR两个指针,用MOVX命令经过A累加器进行数据块传输。
2在调试第一个程序时,若不用程序给40H~4FH赋初值,而用键盘在CPU DATA区给40H~4FH单元预赋初值,如何做?
答:在存储器窗口d:0x00处键入d:0x40然后键入所需要的初值。
3若把第二个程序改为无符号数的减法,怎样修改程序?
答:将ADDC命令改为SUBB命令,去掉DA命令行
4在第二个程序中,若两数的和存放到从40H开始的单元,如何修改程序?
答:ORG 0000H
MAIN: MOV R0,#30H
MOV R1,#20H
MOV R3,#40H
MOV 2FH,#04H
CLR C
DA1: MOV A,@R0
ADDC A,@R1
DA A
MOV @R3,A
INC R0
INC R1
INC R3
DJNZ 2FH,DA1 MOV 7FH,C
SJMP $
END
程序修改处如绿字v。