微机原理单片机汇编实验报告.docx
《微机原理单片机汇编实验报告.docx》由会员分享,可在线阅读,更多相关《微机原理单片机汇编实验报告.docx(7页珍藏版)》请在冰豆网上搜索。
微机原理单片机汇编实验报告
微机原理(单片机汇编)实验报告
软件实验报告
软件实验一
一、实验目的
1.熟悉软件实验的基本步骤和汇编程序的调试方法;2.了解内存块的移动方法;
3.了解将十六进制数转换成ASCII值的方法。
二、实验原理
用MOV和MOVX指令可以进行数据的赋值和移动,用循环可以完成大量数据的复制。
三、实验内容及步骤
1、软件设置为模拟调试状态,在所建的Project文件中添加例程1的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。
打开CPU窗口,观察CPU窗口各寄存器的变化。
打开View菜单中的MemoryWindow,可以观察内部RAM、外部RAM的数据和程序存储器中的程序。
在Address窗口输入X:
8000H后回车,观察8000H-800FF起始的256个字节单元的内容。
2、新建一个Project文件,添加例程2的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。
打开View菜单中的MemoryWindow,在Address窗口的Memory#1输入X:
3000H后回车,点击运行按钮后,在Memory#2输入X:
4000H后回车,观察外部RAM3000H和4000H中的内容。
3、添加将片内30H-3FH单元的内容复制片外片外1030H~103FH中的源程序,编译运行,观察比较30-3FH单元中的内容和片外1030H-103FH中的内容。
4、添加将30H、31H单元中的十六进制数,转换成ASCII码,存放到40H开始的4个单元中的源程序,编译运行,观察结果。
5、添加求内部RAM30H—37H单元中8个无符号数的算术和的源程序,8个无符号数设定为25H,36H,4AH,65H,7FH,82H,9BH,1DH,观察39H,38H中的数字是否分别为02H,C3H。
四、实验结果1.2.
步骤1的结果为8000H-80FFH的内容都为1.
步骤2的结果为3000H起始的256个字节存储块与4000H起始的256个字节存
储块各单元内数据对应相同。
1
3.4.5.
步骤3的结果为片外1030H-103FH中的内容与片内30H-3FH单元的内容相同。
步骤4的结果为将30H、31H中的十六进制数转换成了ASCII码,并存入到40H步骤5的结果为8个无符号数的和为02C3H。
开始的4个单元中。
五、思考题
1、如何将存储器块的内容置成某固定值(例全填充为0FFH)请用户修改程序,完成此操作。
答:
程序修改如下:
将MAIN修改如下即可:
MAIN:
MOVDPTR,#START MOVR0,#0 MOVA,#0FFH
2、若源块地址和目标块地址有重叠,程序该如何设计?
假设源块地址20XXH,目标块地址2050H,移动块长度80H。
答:
程序修改如下:
ORG0000HMOVDPTR,#20XXHMOVA,#01HMOVR5,#0LOOP:
MOVX@DPTR,AINCDPTRDJNZR5,LOOPMOVR0,#20HMOVR1,#00HMOVR2,#20HMOVR3,#50HMOVR7,#7FHLOOP1:
MOVDPH,R0
2
MOVDPL,R3MOVX@DPTR,ACLRCMOVA,R1SUBBA,#0MOVR1,ACLRCMOVA,R3SUBBA,#0MOVR3,AMOVA,R0SUBBA,#0MOVR0,AMOVA,R2SUBBA,#0MOVR2,ADJNZR7,LOOP1SJMP$END
MOVDPL,R1MOVXA,@DPTRMOVDPH,R2
六、源程序
1、将片内30H-3FH单元的内容复制片外片外1030H~103FH中ORG0000H
MOVR0,#30H MOVDPTR,#1030H MOVR7,#10HLOOP1:
MOVA,#0FH MOV@R0,A INCR0
DJNZR7,LOOP1 MOVR0,#30H MOVR7,#10HLOOP:
MOVA,@R0 INCR0
MOVX@DPTR,A INCDPTR
DJNZR7,LOOP SJMP$ END
2、将30H、31H单元中的十六进制数,转换成ASCII码,存放到40H开始的4个单元中
ORG 0100HMOV 30H,#0FHMOV 31H,#11HMOV R0,#41HMOV @R0,#00HMOV A,30HXCHDA,@R0ORL 41H,#30HSWAPA
ORL A,#30H
3
MOV 40H,AMOV R0,#43HMOV @R0,#00HMOV A,31HXCHDA,@R0ORL 43H,#30HSWAPA
ORL A,#30HMOV 42H,AEND
3、求内部RAM30H—37H单元中8个无符号数的算术和ORG0000H
MOV30H,#25H MOV31H,#36H MOV32H,#4AH MOV33H,#65H MOV34H,#7FH MOV35H,#82H MOV36H,#9BH MOV37H,#1DH MOVR0,#30H MOV39H,#0 MOVR7,#8H CLRC
MOVA,@R0Loop:
INCR0 ADDA,@R0 MOV38H,A MOVA,39H ADDCA,#0 MOV39H,A MOVA,38H CLRC
DJNZR7,Loop SJMP$ END
4
软件实验二
一、实验目的
1、熟悉软件实验的基本步骤和汇编程序的调试方法;2、掌握简单的数值算法;
3、掌握多分支结构程序的编程方法。
二、实验原理
将给定的一字节二进制数,转换成十进制码的方法为将数除以100,得百位数,保存百位数,再将余数除以10,得十位数并保存,最后的余数为个位数,将其保存。
用A和B两个寄存器来完成除法,被除数和商放在A,除数和余数放在B。
三、实验及步骤
1、在所建的Project文件中添加例程的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。
打开CPU窗口,观察CPU窗口各寄存器的变化。
打开View菜单中的MemoryWindow,在Address窗口输入D:
30H后回车,点击运行按钮,观察地址30H、31H、32H的数据变化。
2、添加实验书实验内容1的源程序,编译,运行,观察(33H)=0x58,(32H)=0xA2,(31H)=0x34,(30H)=0x7E和(43H)=0x07,(42H)=0x68,(41H)=0x85,(40H)=0x3B的差是否为(33H)=0x51,(32H)=0x39,(31H)=0xAF,(30H)=0x43。
3、添加实验书实验内容2的源程序,编译,运行,观察(0100H)=0x10,(0101H)=0x32,(0102H)=0x54,(0103H)=0x76和(0110H)=0x78,(0111H)=0x56,(0112H)=0x34,(0113H)=0x92的和是否为(0120)=0x88,(0121)=0x88,(0122)=0x88,(0123)=0x68,(0124)=0x01。
4、添加实验书实验内容3的源程序,编译,运行。
四、实验结果1.2.3.
步骤1的结果为,30H内容将更新为01,31H更新为02,32H更新为03。
步骤2的结果为,33H,32H,31H,30H中的数字分别为0x51,0x39,0xAF,0x43.步骤3的结果为,0120,0121,0122,0123中的数分别为0x88,0x88,0x88。
0x68,0x01.
5
4.
步骤4的结果为,A中显示的为R3中的数的平方。
五、思考题
BCD码转换成二进制数的算法是什么?
答:
BCD码转换成二进制的算法和二进制数转换成BCD码的算法相反,是高位乘10再与低位相加。
六、源程序
1、无符号多字节二进制数据减法。
被减数放在30H开始的4个单元中,减数放在40H开始的4个单元中,差放入30H开始处ORG0000HMOVR0,#30HMOVR1,#40HMOVR7,#04HCLRCLOOP:
MOVA,@R0SUBBA,@R1MOV@R0,AINCR0INCR1DJNZR7,LOOPSJMP$END
2、多字节BCD码加法运算。
两个4字节长的BCD码加数分别存放在外部RAM0100H和0110H开始的单元中,计算两数之和,结果保存在0120H开始的9个单元中。
ORG0MOVDPH#1H
6
MOVDPL#0MOVR0,#30HMOVR7,#04HLOOP1:
MOVXA,@DPTRMOV@R0,AINCDPTRINCR0DJNZR7,LOOP1MOVDPL,#10HMOVR0,#40HMOVR7,#04HLOOP2:
MOVXA,@DPTRMOV@R0,AINCDPTRINCR0DJNZR7,LOOP2MOVDPL,#20HMOVR0,#30HMOVR1,#40HCLRCLOOP3:
2、分别用近程查表指令和远程查表指令,查找R3内容的平方值。
R3内容小于等于
0FH。
近程查表指令:
ORG0MOVA,R3ADDA,#2MOVCA,@A+PC
7
MOVA,@R0ADDCA,@R1DAAINCR0INCR1MOVX@DPTR,AINCDPTRDJNZR7,LOOP3MOVA,#0ADDCA,#0MOVX@DPTR,ASJMP$END
SJMP$
TABL:
DB00H,01H,04H,09H DB10H,19H,24H,31H DB40H,41H,64H,79H DB0A9H,0C4H,0E1HEND
远程查表指令:
ORG0
MOVDPTR,#TABLMOVA,R3MOVCA,@A+DPTRSJMP$ORG4000H
TABL:
DB00H,01H,04H,09H DB10H,19H,24H,31H DB40H,41H,64H,79H DB0A9H,0C4H,0E1H
END
8
软件实验三
一、实验目的
1、熟悉软件实验的基本步骤和汇编程序的调试方法;2、掌握数值的加减运算;
3、掌握用查表的方法将BCD值转换成ASCII值。
二、实验原理
将一个BCD数转换成ASCII值的方法为:
先将高四位用查表法转成ASCII码,再将低四位用查表法转成ASCII码。
三、实验及步骤
1、在所建的Project文件中添加例程的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。
打开CPU窗口,观察CPU窗口各寄存器的变化,打开View菜单中的MemoryWindow,在Address窗口输入D:
30H后回车,点击运行按钮,观察地址30H、31H的数据变化。
2、添加实验书实验内容1的源程序,选两组数据,一组含有要查找的字节,一组不含要查找的字节,编译,运行,观察程序运行后A的内容。
3、添加实验书实验内容2的源程序,输入-69H,65H,-7H,-25H,-47H,56H,-3H,17H,6H,-5H,-45H,-1H,-57H,23H,-5H,-13H,编译,运行,观察2FH与2EH单元中的内容。
4、添加实验书实验内容3的源程序,输入61H,-19H,12H,0,78,3,-13H,0,17H,-69H,-5H,-14H,-31H,-43H,-67H,0编译,运行,观察2FH,2EH,2DH单元中的结果。
四、实验结果1.2.3.4.
五、思考题
步骤1的结果为30H更新为31,31H更新为41。
步骤2的结果为,当数据中含有要查找的字节时,A中为要查找的字节;当数据步骤3的结果为,正数的和为89,负数的和为-199.步骤4的结果为,2FH、2EH、2DH单元的值分别为5,8,3.
中不含要查找的字节时,A中显示FFH。
9
BCD码和ASCII码有哪些区别?
答:
BCD码是用二进制数来表示十进制数的表示方法。
有压缩BCD码和非压缩BCD码两种。
ASCII码是美国国家信息交换标准字符码的字头缩码。
采用7位二进制代码对字符进行编码。
BCD码和ASCII码是两种不同的编码方法,BCD码只能表示数字,ASCII码除了表示数字之外还可以表示通用控制字符,英文字母和专用符号。
六、源程序
1、查找关键字节,要查找的字节在R3中,一串字节存放在30H开始的20个单元中,查找结果放入A,若查找不到,则将FFH放入A.ORG0MOVR0,#30HMOVR7,#14HLOOP:
MOVA,@R0CLRCSUBBA,R3JZDONEINCR0DJNZR7,LOOPMOVA,#0FFHSJMPOVERDONE:
MOVA,R0OVER:
SJMPOVEREND
2、在内部RAM的30H单元开始,有一串带符号数据块,其长度在10H单元中。
编程求其中正数与负数的和,并分别存入2FH与2EH开始的2个单元中。
ORG0
MOV30H,#-69H MOV31H,#65H
10
软件实验报告
软件实验一
一、实验目的
1.熟悉软件实验的基本步骤和汇编程序的调试方法;2.了解内存块的移动方法;
3.了解将十六进制数转换成ASCII值的方法。
二、实验原理
用MOV和MOVX指令可以进行数据的赋值和移动,用循环可以完成大量数据的复制。
三、实验内容及步骤
1、软件设置为模拟调试状态,在所建的Project文件中添加例程1的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。
打开CPU窗口,观察CPU窗口各寄存器的变化。
打开View菜单中的MemoryWindow,可以观察内部RAM、外部RAM的数据和程序存储器中的程序。
在Address窗口输入X:
8000H后回车,观察8000H-800FF起始的256个字节单元的内容。
2、新建一个Project文件,添加例程2的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。
打开View菜单中的MemoryWindow,在Address窗口的Memory#1输入X:
3000H后回车,点击运行按钮后,在Memory#2输入X:
4000H后回车,观察外部RAM3000H和4000H中的内容。
3、添加将片内30H-3FH单元的内容复制片外片外1030H~103FH中的源程序,编译运行,观察比较30-3FH单元中的内容和片外1030H-103FH中的内容。
4、添加将30H、31H单元中的十六进制数,转换成ASCII码,存放到40H开始的4个单元中的源程序,编译运行,观察结果。
5、添加求内部RAM30H—37H单元中8个无符号数的算术和的源程序,8个无符号数设定为25H,36H,4AH,65H,7FH,82H,9BH,1DH,观察39H,38H中的数字是否分别为02H,C3H。
四、实验结果1.2.
步骤1的结果为8000H-80FFH的内容都为1.
步骤2的结果为3000H起始的256个字节存储块与4000H起始的256个字节存
储块各单元内数据对应相同。
1
3.4.5.
步骤3的结果为片外1030H-103FH中的内容与片内30H-3FH单元的内容相同。
步骤4的结果为将30H、31H中的十六进制数转换成了ASCII码,并存入到40H步骤5的结果为8个无符号数的和为02C3H。
开始的4个单元中。
五、思考题
1、如何将存储器块的内容置成某固定值(例全填充为0FFH)请用户修改程序,完成此操作。
答:
程序修改如下:
将MAIN修改如下即可:
MAIN:
MOVDPTR,#START MOVR0,#0 MOVA,#0FFH
2、若源块地址和目标块地址有重叠,程序该如何设计?
假设源块地址20XXH,目标块地址2050H,移动块长度80H。
答:
程序修改如下:
ORG0000HMOVDPTR,#20XXHMOVA,#01HMOVR5,#0LOOP:
MOVX@DPTR,AINCDPTRDJNZR5,LOOPMOVR0,#20HMOVR1,#00HMOVR2,#20HMOVR3,#50HMOVR7,#7FHLOOP1:
MOVDPH,R0
2
MOVDPL,R3MOVX@DPTR,ACLRCMOVA,R1SUBBA,#0MOVR1,ACLRCMOVA,R3SUBBA,#0MOVR3,AMOVA,R0SUBBA,#0MOVR0,AMOVA,R2SUBBA,#0MOVR2,ADJNZR7,LOOP1SJMP$END
MOVDPL,R1MOVXA,@DPTRMOVDPH,R2
六、源程序
1、将片内30H-3FH单元的内容复制片外片外1030H~103FH中ORG0000H
MOVR0,#30H MOVDPTR,#1030H MOVR7,#10HLOOP1:
MOVA,#0FH MOV@R0,A INCR0
DJNZR7,LOOP1 MOVR0,#30H MOVR7,#10HLOOP:
MOVA,@R0 INCR0
MOVX@DPTR,A INCDPTR
DJNZR7,LOOP SJMP$ END
2、将30H、31H单元中的十六进制数,转换成ASCII码,存放到40H开始的4个单元中
ORG 0100HMOV 30H,#0FHMOV 31H,#11HMOV R0,#41HMOV @R0,#00HMOV A,30HXCHDA,@R0ORL 41H,#30HSWAPA
ORL A,#30H
3
MOV 40H,AMOV R0,#43HMOV @R0,#00HMOV A,31HXCHDA,@R0ORL 43H,#30HSWAPA
ORL A,#30HMOV 42H,AEND
3、求内部RAM30H—37H单元中8个无符号数的算术和ORG0000H
MOV30H,#25H MOV31H,#36H MOV32H,#4AH MOV33H,#65H MOV34H,#7FH MOV35H,#82H MOV36H,#9BH MOV37H,#1DH MOVR0,#30H MOV39H,#0 MOVR7,#8H CLRC
MOVA,@R0Loop:
INCR0 ADDA,@R0 MOV38H,A MOVA,39H ADDCA,#0 MOV39H,A MOVA,38H CLRC
DJNZR7,Loop SJMP$ END
4
软件实验二
一、实验目的
1、熟悉软件实验的基本步骤和汇编程序的调试方法;2、掌握简单的数值算法;
3、掌握多分支结构程序的编程方法。
二、实验原理
将给定的一字节二进制数,转换成十进制码的方法为将数除以100,得百位数,保存百位数,再将余数除以10,得十位数并保存,最后的余数为个位数,将其保存。
用A和B两个寄存器来完成除法,被除数和商放在A,除数和余数放在B。
三、实验及步骤
1、在所建的Project文件中添加例程的源程序进行编译,编译无误后,可以选择单步或跟踪执行方式或全速运行程序。
打开CPU窗口,观察CPU窗口各寄存器的变化。
打开View菜单中的MemoryWindow,在Address窗口输入D:
30H后回车,点击运行按钮,观察地址30H、31H、32H的数据变化。
2、添加实验书实验内容1的源程序,编译,运行,观察(33H)=0x58,(32H)=0xA2,(31H)=0x34,(30H)=0x7E和(43H)=0x07,(42H)=0x68,(41H)=0x85,(40H)=0x3B的差是否为(33H)=0x51,(32H)=0x39,(31H)=0xAF,(30H)=0x43。
3、添加实验书实验内容2的源程序,编译,运行,观察(0100H)=0x10,(0101H)=0x32,(0102H)=0x54,(0103H)=0x76和(0110H)=0x78,(0111H)=0x56,(0112H)=0x34,(0113H)=0x92的和是否为(0120)=0x88,(0121)=0x88,(0122)=0x88,(0123)=0x68,(0124)=0x01。
4、添加实验书实验内容3的源程序,编译,运行。
四、实验结果1.2.3.
步骤1的结果为,30H内容将更新为01,31H更新为02,32H更新为03。
步骤2的结果为,33H,32H,31H,30H中的数字分别为0x51,0x39,0xAF,0x43.步骤3的结果为,0120,0121,0122,0123中的数分别为0x88,0x88,0x88。
0x68,0x01.
5