实验3 MCS-51 汇编语言指令系统(一)
- 格式:doc
- 大小:43.50 KB
- 文档页数:4
3·1 汇编指令第3 章MCS 一51 系列单片机的指令系统和汇编语言程序3·1·1 请说明机器语言、汇编语言、高级语言三者的主要区分,进一步说明为什么这三种语言缺一不行。
3·1·2 请总结:(1)汇编语言程序的优缺点和适用场合。
(2)学习微机原理课程时,为什么肯定要学汇编语言程序?3·1·3MCS 一51 系列单片机的寻址方式有哪儿种?请列表分析各种寻址方式的访问对象与寻址范围。
3·1·4 要访问片内RAM,可有哪几种寻址方式?3·1·5 要访问片外RAM,有哪几种寻址方式?3·1·6 要访问ROM,又有哪几种寻址方式?3·1·7 试按寻址方式对MCS 一51 系列单片机的各指令重进展归类(一般依据源操作数寻址方式归类,程序转移类指令例外)。
3·1·8 试分别针对51 子系列与52 子系列,说明MOV A,direct 指令与MOV A,@Rj 指令的访问范围。
3·1·9 传送类指令中哪几个小类是访问RAM 的?哪几个小类是访问ROM 的?为什么访问ROM 的指令那么少?CPU 访问ROM 多不多?什么时候需要访问ROM?3·1·10 试绘图示明MCS 一51 系列单片机数据传送类指令可满足的各种传送关系。
3·1·11 请选用指令,分别到达以下操作: (1)将累加器内容送工作存放器R6.(2)将累加器内容送片内RAM 的7BH 单元。
(3)将累加器内容送片外RAM 的7BH 单元。
(4)将累加器内容送片外RAM 的007BH 单元。
(5)将ROM007BH 单元内容送累加器。
3·1·12 区分以下指令的不同功能:(l)MOV A,#24H 与MOV A.24H(2)MOV A,R0 与MOV A,@R0(3)MOV A,@R0 与MOVX A,@R03·1·13 设片内RAM 30H 单元的内容为40H;片内RAM 40H 单元的内容为l0H;片内RAM l0H 单元的内容为00H;(Pl)=0CAH。
MCS51单片机指令系统与汇编语言程序设计MCS-51是一种非常常见的8位单片机系列,该系列包括了多种型号的单片机,如Intel 8051、8031、8052等。
MCS-51单片机指令系统是一组用于驱动该系列单片机的指令集,汇编语言程序设计是利用这些指令来编写程序。
MCS-51单片机指令系统包含了多种指令,可以执行诸如数据传输、算术逻辑运算、控制和数据访问等功能。
这些指令通过各种不同的寻址模式来操作数据,包括立即寻址、寄存器寻址、直接寻址、间接寻址和寄存器间接寻址等。
不同的寻址模式和指令组合可以实现不同的功能。
汇编语言程序设计通过将人类可读的汇编指令翻译成机器可执行的二进制指令来编写程序。
在MCS-51单片机中,汇编指令由操作码和操作数组成。
操作码指定了所执行的操作,如数据传输、算术运算或控制指令。
操作数则指定了指令要操作的数据。
下面以一个简单的例子来说明MCS-51单片机指令系统和汇编语言程序设计的基本原理。
假设我们要编写一个程序,将两个寄存器中的数据相加,并将结果存储到第三个寄存器中。
首先,我们需要将第一个寄存器的值加载到累加器A中,这可以通过MOV指令实现。
MOV指令的操作码为01,操作数为两个寄存器的地址。
例如,MOVA,R0将R0的值加载到A中。
接下来,我们需要将第二个寄存器的值加载到B寄存器中,同样可以使用MOV指令。
MOVB,R1将R1的值加载到B中。
然后,我们可以使用ADD指令将A和B中的值相加,并将结果存储到A中。
ADD指令的操作码为04,操作数为A的地址。
例如,ADDA将累加器中的值与A寄存器中的值相加,并将结果存储到A中。
最后,我们可以使用MOV指令将A中的结果移动到第三个寄存器中,例如,MOVR2,A将A的值移动到R2中。
通过组合使用这些指令,我们可以实现将两个寄存器中的值相加并存储到第三个寄存器中的功能。
总结来说,MCS-51单片机指令系统和汇编语言程序设计是一种用于编程控制该系列单片机的方式。
实验3 MCS-51 汇编语言指令系统(一)
一、实验目的
1) 掌握8051的寻址方式及常用数据传送类指令和算术运算类指令的使用方法。
2) 掌握单步执行程序,查看专用寄存器和单片机RAM的执行结果。
3) 进一步熟悉Keil C51集成开发环境。
二、实验内容
1) 基本指令练习。
2) 数据传送(循环方式)。
3) ) 8051内部RAM的40H~4FH置初值A0H~AFH,然后将40H~4FH的内容传送到外部RAM
中的C000H~C00FH单元,再把外部数据RAM中的C000H~C00FH单元的内容传送到8051内部RAM中的50H~5FH单元。
4) 调试下列程序,熟悉程序调试手段,观测程序运行结果。
ORG 0000H
SJMP MAIN
ORG 0030H
MAIN:
MOV SP,#6FH
MOV R0,#40H
MOV R1,#30H
MOV 30H,#40H
MOV A,#40H
MOV @R0,A ;哪一个存储单元的内容与A中内容相等
INC A
MOV A,@R1 ;A中的内容?哪一个存储单元的内容传给A
PUSH ACC
POP 32H ;SP指针的变化?32H中的内容
MOV A,#5FH
SWAP A ;A中的内容
;上面程序为顺序执行的程序
XUNHUAN1:
MOV R0,#30H
MOV R7,#10H
CLR A ;这3条指令的作用
LOOP1:
MOV @R0,A
INC A
INC R0
DJNZ R7,LOOP1 ;R7的作用
;循环程序执行完之后,指出32H,37H,3BH,3FH存储单元中的值,为什么?
XUNHUAN2:
MOV R0,#30H
MOV R1,#40H
MOV R2,#10H
LOOP2:
MOV A,@R0
MOV @R1,A
DJNZ R2,LOOP2 ;说明这段程序的功能
;上面程序为2个循环程序
;下面为2个数比较程序,最大值存放在30H,最小值存放在31H中
PANDUAN1:
MOV 30H,#10H
MOV 31H,#4BH
MOV R0,#30H
MOV R1,#31H
PAN0:
MOV A,@R0
CLR C
SUBB A,@R1
JNC PAN1
MOV A,@R0
MOV 40H,@R1
MOV @R0,40H
MOV @R1,A
PAN1:
NOP ;注意能不能继续往下运行,为什么
END
三、实验步骤
1)启动计算机。
2)进入Keil C51集成开发环境。
3)建立工程项目文件,选择单片机型号:PHILIPS 公司的P80/P87C52X2。
4)在Keil C51集成开发环境中, 编辑源程序;将源文件添加至工程项目的源文件组中。
5)对源文件进行编译,生成目标代码。
6)运行、调试程序和查看执行结果。
7)分别采用单步、宏单步、执行到光标处等调试手段,调试用户程序,观察有关存储器
单元中的内容。
8)修改有关单元中的内容,再观察有关单元中的内容。
四、思考题
1) 说明每段程序分别完成哪些任务。
2) 若比较程序为3个数比较,数据从大到小排列,最大值放在30H,最小值放在32H。
如果是16个数排序,如何排序,提出编程思路。
五、预习要求
1) 阅读教科书中8051的指令系统,重点掌握的指令有数据传送、判断跳转指令的使用
方法。
2) 阅读Keil C51集成开发软件说明书,掌握集成开发软件的进入、退出、源文件的编
辑和编译等方法。
熟悉各种调试手段。
六、实验报告
1) 将程序加上注释语句,写出程序执行的结果。
2) 回答思考题(第2题的第2个问题选作)。
背景知识
一 MCS-51 共有7 种寻址方式:
1.立即寻址:操作数就写在指令中,和操作码一起放在程序存贮器中。
把“#”号放在立即数前面,以表示该寻址方式为立即寻址,如MOV A,#20H。
2.寄存器寻址:操作数放在寄存器中,在指令中直接以寄存器的名来表示操作数地址。
如MOV A,R0 就属于寄存器寻址,即R0 寄存器的内容送到累加器A中。
3.直接寻址:操作数放在单片机的内部RAM某单元中,在指令中直接写出该单元的地址。
如ADD A,70H 中的70H。
4.寄存器间接寻址:操作数放在RAM 某个单元中,该单元的地址又放在寄存器R0 或R1中。
如果RAM 的地址大于256,则该地址存放在16 位寄存器DPTR(数据指针)中,此时在寄存器名前加@符号来表示这种间接寻址。
如MOV A,@ R0。
5.变址寻址:指定的变址寄存器的内容与指令中给出的偏移量相加,所得的结果作为操作数的地址。
如MOVC A,@A+DPTR
6.相对寻址:由程序计数器中的基地址与指令中提供的偏移量相加,得到的为操作数的地址。
如SJMP rel
7.位寻址:操作数是二进制中的某一位,其位地址出现在指令中。
如SETB bit
二 MCS-51 的指令系统
MCS-51 的指令系统按功能分有:数据传送类、转移指令、算术运算类、逻辑运算类、和十进制指令及一些伪指令。
(1)数据传送类指令(7 种助记符)
MOV(Move):对内部数据寄存器RAM 和特殊功能寄存器SFR 的数据进行传送;
MOVC(Move Code)读取程序存储器数据表格的数据传送;
MOVX (Move External RAM) 对外部RAM 的数据传送;
XCH (Exchange) 字节交换;
XCHD (Exchange low-order Digit) 低半字节交换;
PUSH (Push onto Stack) 入栈;
POP (Pop from Stack) 出栈;
(2)算术运算类指令(8 种助记符)
ADD(Addition) 加法;
ADDC(Add with Carry) 带进位加法;
SUBB(Subtract with Borrow) 带借位减法;
DA(Decimal Adjust) 十进制调整;
INC(Increment) 加1;
DEC(Decrement) 减1;
MUL(Multiplication、Multiply) 乘法;
DIV(Division、Divide) 除法;
三keil的51单片机仿真调试中如何查看内存的内容
在Keil中,调试时编译器给出了寄存器窗口(Register)、中断系统窗口(Interrupt System)、I/O口查看窗口(I/O ports)、串口和定时器设置窗口(serial、Timer)。
但是如何查看某一块内存区域的内容呢?
在Memory窗口中输入址值,得到的结果是程序代码区的内容,由于51是采用的是哈佛结构,程序指令存储和数据存储分开。
要查看各种内存区域的内容,只要在Address框内输入“字母:地址”即可显示相应的内存值。
其中字母可以是C、D、I、X,分别代表的意义是:
C:代码存储空间
D:直接寻址片内存储空间
I :间接寻址片内存储空间
X:扩展的外部RAM空间
如输入“d:0x30”就可显示直接寻址片内30H存储空间的内容了。
还可以使用右键“Modify Memory”选项修改指定内存的内容。