指令系统和汇编语言程序设计实验
本章实验主要包括指令系统和汇编语言程序设计两部分。采用软件模拟调试的方法,目的在于通过这些实验可以使学生巩固所学知识,加深对MCS-51单片机内部结构、指令系统的理解,更进一步掌握汇编语言程序设计的方法和技巧。 实验操作说明
Keil 软件调试方式分为:软件仿真方式和硬件调试两种。 软件仿真实验上机操作步骤:
1、进入Keil,点击桌面上“Keil μVersion 3”图标,进入Keil系统窗口; 2、新建工程:
1)打开“工程”菜单中的新建,在弹出的对话框中,键入自己定义的工程名; 2)在进一步打开的对话框中,选择CPU的类型,为Intel公司的8032AH,确定; 3)存入C:\\keil 文件夹中。(机房,安装在C盘,改为C:\\keil) 3、打开“视图”菜单中的“工程窗口”;
4、在“工程窗口”中,右击“目标1”,为工程设置参数;
1)在弹出的快捷菜单中选择“为目标“目标1”设置选项”;
2)在弹出的对话框中选择“项目”选项卡,设置时钟为“12Mhz”; 3)选择“调试”选项卡,在单选框选择“软件仿真方式”; 4)确定,即完成了“软件仿真方式”的设置。 5、新建文件
1)打开“文件”菜单,选择“新建”;
2)系统打开一个文本窗口,你可在窗口的编辑区输入要调试的汇编语言源程序; 3)存盘,命名文件名和扩展名,文件名任起,扩展名必须是.asm,存入C:\\keil 文件夹中(在大机房,安装在C盘,改为C:\\keil);例如:a.asm。 6、将刚建的新文件添入当前的工程中 1)在“工程窗口”中,“目标1”的+号处打开,显示“源代码组1”; 2)右击“源代码组1”,在快捷菜单中选择“为“源代码组1”添加文件”,弹出一个对话框;
3)在对话框中选择“文件类型”为*.*; 4) 选择文件所在路径,同时找到刚键入的a.asm文件,点击“add”按钮,然后点击“close”按钮;
5) 在“工程窗口”点击“源代码组1”左侧的+号,显示添加的a.asm文件,添加成功。 7、汇编
1)在“工程窗口”点击“源代码组1”的a.asm文件; 2)打开“a.asm”文件编辑窗口;
3)点击工具按钮中的“重建所有的目标文件”,进行汇编; 4)在“输出窗口”显示汇编是否有错,无错,进入调试;
有错,在编辑窗口修改程序,改后,再次汇编,直至无错后进入调试; 8、调试程序
1)点击“开始/停止调试”按钮,进入调试界面;
2)在程序窗口中有一个黄箭头指向程序的第一条可执行指令的开头; 3)选择调试方式进行调试;
①在“调试”菜单中选择:跟踪、单步、运行、断点等方式;
②或按单步或跟踪命令按钮,按一次单步,执行一条指令,pc指针指向下一条要被执行的指令;
③检查运行结果
Ⅰ打开“视图”菜单,选择“存储器窗口”,弹出存储器对话框;
Ⅱ在存储器对话框的下方选择memory1在地址栏中键入“C:0X0000”回车,建立程序存储器的观察窗口;
Ⅲ选择memory2在地址栏中键入“D:0X00”回车,建立内部数据存储器的观察窗口; Ⅳ选择memory3在地址栏中键入“X:0X0000”回车,建立外部数据存储器的观察窗口; Ⅴ在“project workspace”窗口中观察r0-r7,a,pc,dptr,psw,要观察各个标志位,打开psw左侧的+号;
9、设置PC指针
当程序的首地址不是0000H时,汇编结束后,PC指针仍然指向0000H的地方,在调试程序前,一定要将PC设置到你的程序首地址处,方法为: 1)将光标移到程序的第一条指令处,击鼠标右键;
2)在快捷菜单中选择“Set Program Counter”命令,PC指针即可指向程序的第一条指令。 指令系统实验
实验一熟悉键盘操作及数传指令编程设计 实验目的
熟悉软件模拟调试的环境及键盘操作。
掌握汇编语言程序设计的方法,加深对指令的理解。 学会软件模拟调试和察看修改观察项的方法。 实验内容
印证数据传送指令的功能、寻址方式以及PC指针、SP指针、DPTR指针、Ri指针分别对代码段、堆栈段、外扩数据存储器段、位寻址区等不同存储器的访问方式。 三、实验步骤
进入调试软件环境,输入源程序; 汇编源程序;
用单步方式运行程序;
检查并记录各寄存器和存储单元内容的变化。 四、程序清单
内部RAM数据传送(MOV指令) 1)寄存器寻址与立即寻址,需要查看的数据有A、PSW和不同寄存器区的Rn等单元的内容。 ORG 0000H AJMP 0050H ORG 0050H
MAIN: MOV PSW,#00H ;RS1=0,RS0=0 0组寄存器 MOV R0,#30H MOV A,R0 MOV R6,A SETB RS1
SETB RS0 ; RS1=1,RS0=1 3组寄存器 MOV R0,#30H
MOV A,R0 MOV R6,A
MOV PSW,#10H ;RS1=1,RS0=0 2组寄存器 MOV R0,#30H
MOV A,R0 MOV R6,A CLR RS1
SETB RS0 ;RS1=0,RS0=1 1组寄存器 MOV R0,#30H
MOV A,R0 MOV R6,A SJMP $ END
2) 直接寻址,需查看30H、31H、32H、40H、ACC、PSW、02H等单元的内容。 ORG 0000H AJMP 0060H ORG 0060H MAIN: MOV 30H,#45H
MOV 31H,#46H MOV 02H,31H MOV 0E0H,30H MOV 32H,ACC MOV ACC,PSW MOV 40H,ACC SJMP $ END
3)寄存器间接寻址,需查看@R0、RO等的内容。 ORG 0000H AJMP 0070H ORG 0070H
MAIN:MOV 30H,#66H
MOV R0,#30H MOV @R0,#30H INC R0
MOV @R0,#31H SJMP $ END
外部程序存储器数据传送(MOVC指令)
根据A中数据查外部程序存储器单元2000H~200FH单元中的字形码,依次存入内部RAM以30H开始的单元。 ORG 0000H AJMP 0080H ORG 0080H
MAIN:MOV R0,#30H MOV R2,#08H MOV R3, #00H
LOOP: MOV A,R3 MOV B,#02H ADD A,B
MOV DPTR,#2000H MOVC A,@A+DPTR MOV @R0,A INC R0 INC R3
DJNZ R2,LOOP SJMP $
ORG 2000H
TABL: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,086H,08EH END
堆栈操作(PUSH和POP指令)
需要查看的数据有50H、51H、A及SP指针和堆栈区中数据随PUSH和POP指令执行后的变化情况和数据的存放次序等。
1)可用于保护现场和恢复现场的程序 ORG 0000H AJMP 0090H ORG 0090H
MAIN:MOV SP,#5FH MOV 50H,#3BH MOV 51H,#2FH MOV A,#12H
PUSH 50H PUSH 51H PUSH ACC POP 0E0H
POP 51H POP 50H SJMP $ END
2)可用于数据交换的程序 ORG 0000H AJMP OOA0H ORG 00A0H
MAIN:MOV SP,#6FH MOV 50H,#3BH MOV 51H,#2FH
PUSH 50H PUSH 51H
POP 50H POP 51H
相关推荐: