指令系统及汇编语言程序设计
第3章 8086指令系统-汇编语言程序设计教程-陆遥-清华大学出版社
![第3章 8086指令系统-汇编语言程序设计教程-陆遥-清华大学出版社](https://img.taocdn.com/s3/m/00f6c9ff5901020206409c16.png)
直接寻址方式可以利用变量名的偏移地址属性来 描述操作数的偏移地址(可直接用变量名,或将 变量名置于方括号[ ]中),段寄存器默认为DS。 如果实际使用的段寄存器不是DS,则必须用段 前缀明确指出。
【例3.7】设数据段内有如下变量定义语句
VAR DB 76H,5CH,0A3H,08H
分析以下指令的执行结果。
3.1 指令系统基本概念
指令是给计算机下达的一个简单操作任务,CPU 所能执行的所有指令构成了一个计算机的指令系 统(也称指令集)。
汇编语言指令是对机器指令的符号化表示,采用 助记符来表示指令的操作功能和操作对象。
指令通常可以分为以下几类:
⑴ 数据传送类指令。 ⑵ 算术运算类指令。
⑸ 程序控制类指令。 ⑹ 处理器控制类指令。
【例3.3】要求将数据68传送给AL寄存器,写出相应的传 送指令。 分析:由于AL寄存器接收数据,所以目的操作数为AL, 采用寄存器寻址方式,而源操作数为常数68,采用立即寻 址方式
MOV AL,68 ;AL←68
【例3.4】设被加数存于寄存器DX中,加数为512,写出相 应的加法指令。 分析:因为被加数由寄存器DX提供,所以DX为目的操作 数,采用寄存器寻址方式,而加数为常数512,采用立即 寻址方式
操作数。
2. ADD指令
指令格式:ADD DST,SRC 指令功能:DST←(DST)+(SRC) 。执行加法运算。 操作数特点:两个操作数。被加数DST为目的操作数,加
数SRC为源操作数。
3. NOT指令
指令格式:NOT OPR 指令功能:OPR←(OPR) 。执行逻辑非运算。 操作数特点:一个操作数。OPR既是目的操作数,也是源
段地址由段寄存器提供,用段前缀(DS:,ES:, CS:或SS:)来指明;偏移地址(亦称有效地址) 则有多种表示形式,由此形成了不同的存储器寻 址方式。
第5章 指令与指令系统和汇编语言程序设计(2)
![第5章 指令与指令系统和汇编语言程序设计(2)](https://img.taocdn.com/s3/m/88ff5c112f60ddccda38a0e5.png)
运行过程中,可以直接看到屏幕上显示的内容,运行过后,再用D 20F0命令看内存的20F0区域中保存的运行结果,6个大写的英文字母 已经被修改为小写字母: 0061 0062 0063 0064 0065 0066
汇编语言程序设计
1 将寄存器R2和R3的内容相加,结果存入R0。 2 将寄存器R2和R3的内容相加,如果有进位,寄存器R0的内 容置1,否则置0 3 若R1的内容是负数则置R0为-1,否则置0(提示:用TEST) 4 检测R3的是奇数,R0的内容置为1,否则置为0。(提示: 用移位检测C的方法来测量一位) 5 将内存中1000H起始的10个单元的内容取出加2送入原地址。 6 已知内存中1000H起始的10个单元中的数是ASC码,将其取 出送显示。 7 将键盘录入的数存到内存1000H单元中。 8 将键盘录入的10个数存到内存1000H-1009H。
有寄存器寻址,寄存器间接寻址等7种。
从表5.1中可以看出, (A组) INC DR 单操作数(DR的内容加1) (B组) LDRR DR,[SR] 双操作数 (DR [SR])
(4)从指令的功能区分
有运算、读写内存类指令,输入输出指令,转移 指令,子程序调用指令,置进位标志指令等。
从表5.1中可以看出, (A组) ADD DR ,SR 加运算 (B组) LDRR DR,[SR] 读写内存
41 42 43 44 45 46
A 2080
MVRD R3, 0006 ;指定被读数据的个数
MVRD R2, 20F0 ;指定被读、写数据内存区首地址
(2084) LDRR R0, [R2]
;读内存中的一个字符到R0寄存器
CALA 2100 ;调用子程序(入口地址为2100),完成显示、
指令系统与汇编语言程序设计
![指令系统与汇编语言程序设计](https://img.taocdn.com/s3/m/be41907b84868762cbaed529.png)
1010011i n
85 n1 n2
MOV DPTR,#d1d2 ;DPTR←d1d2
90 d1 d2
习题1:找出配对指令,实精现选p反pt 向传送。
《单片机原理及应用》教学课件
例2-4-1:顺序执行下列指令序列,求每一步执行结果。
MOV A,#30H
;A= 30H
MOV 4FH,A
;(4FH)= 30H
2-1 指令格式
一. 汇编语言指令格式 [标号:]操作码 操作数1,操作数2[;注释]
换行表示一条指令结束。 例: LOOP: MOV A,#40H ;取参数
1.标号:指令的符号地址 2.操作码:指明指令功能。 3.操作数:指令操作对象 数据、地址、寄存器名及约定符号。 4.注释行:说明指令在程序中的作用。
第2章 指令系统与汇编语言程序设计 2-1 指令格式 2-2 指令寻址方式 2-3 状态标志 2-4 MCS-51指令系统
《单片机原理及应用》教学课件
单片机指令系统概述
一、MCS-51指令分类
MCS-51单片机共有111条指令。 1.按指令所占的字节数分类
①单字节指令49条 ②双字节指令46条 ③三字节指令16条 每条指令的平均字节数:
精选ppt
《单片机原理及应用》教学课件
例:查表法求Y=X2。设X(0≤X≤15)在片内RAM的20H单元中,要 求将查表求Y,存入片内RAM21H单元。
2)指令地址
1000H 1002H 1004H 1005H 1007H 1008H 100BH
源程序
ORG 1000H
;程序起始地址
SQU: MOV A,20H ;取X
操作码和操作数是指令主体。
精选ppt
第三章MCS51单片机的指令系统和汇编语言程序示例(第5范文
![第三章MCS51单片机的指令系统和汇编语言程序示例(第5范文](https://img.taocdn.com/s3/m/ba1414a8a0116c175f0e48f6.png)
第三章MCS51单片机的指令系统和汇编语言程序示例(第5、6、7节)1.试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?(1)MOV A,#19HADD A,#66H(2)MOV A,#5AHADD A,#6BH2.已知:A=85H,R0=30H,(30H)=11H, (31H)=0FFH,C=1,试计算单片机执行下列指令后累加器A和C中的值各是多少?(1)ADDC A,R0, (2)ADDC A,31H(3) ADDC A,@R0, (4) ADDC A,#85H3.已知M1和M2中分别存放两个16位无符号数的低8位,M1+1和M2+1中分别存放两个16位无符号数的高8位,计算两数之和(低8位存放在M1,高8位存放在M1+1,设两数之和不超过16位)。
4.试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?CLR CMOV A,#52HSUBB A,#0B4H5.已知:A=0DFH,R1=40H,R7=19H,(30H)=00H,(40H)=0FFH,试分析单片机执行下列指令后累加器A和PSW中各标志位的变化状况?(1) DEC A (2) DEC R7 (3) DEC 30H (4) DEC @R16.试写出能完成85+59的BCD加法程序,并对工作过程进行分析。
7.已知:两个8位无符号乘数分别放在30H和31H单元中,编程实现他们乘积的低8位存放在32H,高8位存放在33H。
8.已知:R0=30H,(30H)=0AAH,试分析执行下列指令后累加器A和30H单元的内容是什么?(1)MOV A, #0FFH ANL A, R0(2)MOV A, #0FH ANL A, 30H(3)MOV A, #0F0H ANL A, @R0(4)MOV A, #80H ANL 30H, A9.设:A=0AAH和P1=0FFH,试编程把累加器A的低四位送入P1口的低四位,P1口的高四位保持不变。
指令系统与汇编语言程序设计例
![指令系统与汇编语言程序设计例](https://img.taocdn.com/s3/m/973e4e3459fafab069dc5022aaea998fcc22402b.png)
1
程序1
DATA SEGMENT
NAMES DB ‘TOM..’,20 DB ‘CATE’,25 DATA ENDS 该数据区在内存中的存放情况?
2
程序2
DATA SEGMENT A DB ‘123ABC’
DATA ENDS
DATA SEGMENT
9
10
)
序
,(
序
程
ห้องสมุดไป่ตู้
,
,
,
:
5
MOV DX 280H IN AL DX MOV CX 8 NEXT ROR AL 1 JNC NEXT1 MOV Byte PTR[BX]
0FFH JMP NEXT2 NEXT1 MOV [BX] 0
,
,
:
程序5(序)
NEXT2:INC BX LOOP NEXT …… 如果从280H端口输入的是
ASSUME CS:CODE, DS:DATA, ES:DATA
STR2 DB ‘HELLO WOOLD!’ FLAG DB ? CODE SEGMENT
DATA SEGMENT
6
程序4 (序)
START:MOV AX,DATA MOV DS,AX MOV ES,AX LEA BX,FLAG LEA SI,STR1 LEA DI,STR2 MOV CX,COUNT CLD
LP:MOV AH,2 MOV AL,[BX] XCHG AL,DL
CODE SEGMENT
INC BX
ASSUME CS:CODE,
DS:DATA
START:MOV AX, DATA
MCS-51单片机指令系统与汇编语言程序设计
![MCS-51单片机指令系统与汇编语言程序设计](https://img.taocdn.com/s3/m/0b9fe8e2da38376bae1fae28.png)
docin/sundae_meng
P73 例2.58
ORG 0100H
MOV DPTR,#DATA LOOP2: MOV R1,A
MOV R0,#30H
INC R1
MOV R1,#40H LOOP: MOVX A,DPTR
START:
ORG 1000H MOV DPTR,#TABLE MOV A,20H ANL A,#0FH MOVC A,@A+DPTR MOV 21H,A
docin/sundae_meng
TABLE:
MOV A,20H ANL A,#0F0H
SWAP A MOVC A,@A+DPTR MOV 22H, A SJMP $ DB 30H,31H,32H,33H,34H
docin/sundae_meng
ORG 1000H
START: MOV A, 40H
; 将X送入A中
JZ COMP
; 若A为0,转至COMP处
JNB ACC.7, POST ; 若A第7位不为1(X为正数),则程序转到
POST处,否则(X为负数)程序往下执行
MOV A, #0FFH ; 将1(补码)送入A中
docin/sundae_meng
2.4.1 汇编语言程序设计的步骤
汇编语言程序设计:根据任务要求,采用汇编语言编制程序的过程称为汇编 语言程序设计。 汇编语言程序设计的步骤: (1)拟订设计任务书 (2)建立数学模型 (3)确定算法 (4)分配内存单元,编制程序流程图 (5)编制源程序
进一步合理分配存储器单元和了解I/O接口地址;按功能设计程序,明确 各程序之间的相互关系;用注释行说明程序,便于阅读和修改调试和修改。 (6)上机调试 (7)程序优化
第三章MCS51系列单片机指令系统及汇编语言程序设计
![第三章MCS51系列单片机指令系统及汇编语言程序设计](https://img.taocdn.com/s3/m/e2e9ddb10342a8956bec0975f46527d3250ca65c.png)
SJMP rel ;PC+ 2 + rel→PC 短转移指令为一页地址范围内的相对转移指令。因为rel为1字节补码 偏移量,且SJMP rel指令为2字节指令,所以转移范围为-126D~+ 129D 【4】间接转移指令
表3.4 程序存储器空间中的32个基本2K地址范围
0000H~07FFH 0800H~0FFFH 1000H~17FFH 1800H~1FFFH 2000H~27FFH 2800H~2FFFH 3000H~37FFH 3800H~3FFFH 4000H~47FFH 4800H~4FFFH 5000H~57FFH
3. 寄存器寻址
以通用寄存器的内容为操作数的寻址方式。通用寄存 器包括:A,B,DPTR,R0~R7。其中,R0~R7必须在 工作寄存器组之中。
例如:INC R0 ;(R0)+1→R0
需要注意的是,A和B既是通用寄存器,又是具有直 接地址的特殊功能寄存器。
4. 寄存器间接寻址
以寄存器中的内容为地址,该地址中的内容为操作数的寻址方式。能够 用于寄存器间接寻址的寄存器有:R0,R1,DPTR,SP。其中,R0,R1必 须在工作寄存器组之中,SP仅用于堆栈操作。
MCS-51单片机共有111条指令,按功能分类, MCS-51指令系统可分为5大类:
➢ 数据传送类指令(共29条) ➢ 算术操作类指令(共24条) ➢ 逻辑操作类指令(共24条) ➢ 控制转移类指令(共17条) ➢ 布尔变量操作类指令(共17条)
1.数据传送类指令(共29条)
以累加器A为目的操作数类指令(4条)
大学课件MCS51单片机指令系统与汇编语言程序设计
![大学课件MCS51单片机指令系统与汇编语言程序设计](https://img.taocdn.com/s3/m/b92787152a160b4e767f5acfa1c7aa00b52a9d81.png)
ANL C, P ; (C)← (C)∧(P)
其中:P是PSW的第0位,C是PSW的第7位。
(4)字节符号地址(字节名称)加位序号的形式。对于部分特 殊功能寄存器(如状态标志寄存器PSW),还可以用其字节名 称加位序号形式来访问某一位。AC 如:
定义:操作数存放在MCS-51内部的某个工作寄存器Rn (R0~R7)或部分专用寄存器中,这种寻址方式称为 寄存器寻址。
特点:由指令指出某一个寄存器的内容作为操作数。 存放操作数的寄存器在指令代码中不占据单独的一个 字节,而是嵌入(隐含)到操作码字节中。
寻址范围:四组通用寄存器Rn(R0~R7)、部分专用 寄存器( A, B, DPTR, Cy )。
伪指令只出现在汇编前的源程序中,仅提供汇编用的某些控制 信息,不产生可执行的目标代码,是CPU不能执行的指令。
(1)定位伪指令ORG
格式:ORG n
其中:n通常为绝对地址,可以是十六进制数、标号或表达式。
功能:规定编译后的机器代码存放的起始位置。在一个汇编 语言源程序中允许存在多条定位伪指令,但每一个n值都应和前
2.2.2 直接寻址
定义:将操作数的地址直接存放在指令中,这种寻址方式称为 直接寻址。 特点:指令中含有操作数的地址。该地址指出了参与操作的数 据所在的字节单元地址或位地址。计算机执行它们时便可根据 直接地址找到所需要的操作数。
寻址范围:ROM、片内RAM区、SFR和位地址空间。P42
2.2.3 寄存器寻址
定义:指令中给出的操作数是一个可单独寻址的位地址,这种寻址 方式称为位寻址方式。
特点:位寻址是直接寻址方式的一种,其特点是对8位二进制数中 的某一位的地址进行操作。
寻址范围:片内RAM低128B中位寻址区、部分SFR(其中有83位 可以位寻址)。
第2章 指令系统与汇编语言基础(2.1--2.4)
![第2章 指令系统与汇编语言基础(2.1--2.4)](https://img.taocdn.com/s3/m/4da6dbd4195f312b3169a5b9.png)
1.Java 程序设计语言的特征
Java 程序设计语言与其他高级语言程序不同的是,它并 不需要编译成能被处理器所执行的机器码。而是被编译成 为一种称为字节码的格式。如图2.1所示: • 这种字节码被输进Java 虚拟机或称为JVM中,由JVM来 解释和执行这种代码。JVM可以是一个硬件芯片,但它本 身通常是一种程序,常常是Web浏览器的一部分。你可以 把字节码当成是JVM的机器码。 • 所谓“虚拟”其本意是“不符合或不一定符合事实的”。 在虚拟系统中,用户(程序员)看不到下一层级东西(见 图1.4)。但如果有需要的话,程序员是可以看到下一层 级虚拟机的东西,但看不到实际机器。
2.2 程序设计语言的级别
人们与计算机交换信息只能通过计算机语言,如果说 今天有各种各样计算机语言的话,归纳起来只有以下三大 类: 1. 机器语言(又称二进制机器语言、二进制数字化语言、 无符号计算机语言等) 2. 汇编语言:属于计算机最低级的符号语言,因为每一 条汇编语言指令(汇编语言伪指令除外)对应一条二进制 机器语言指令(又称机器指令)。具有平台专用性。 3. 高级语言:诸如VC++、Java、SQL和Fortran 之类 的语言都是高级语言,这类语言的特点是几乎每一条语句 都需要用一串的机器指令才能实现。这也可以说是“语句” 与“指令”的区别所在。具有平台无关性 以上三类计算机语言统称为程序设计语言。
问题:什么是数据表示? 什么是数据结构? 两者有何关系? 为什么要学习数据结构?
为什么要学习数据结构呢?
因为计算机(其实是CPU)只能够识别有限 的数据类型,而在自然界中存在着大量的CPU不 能直接识别的数据,因此要学习数据结构。 学习数据结构的目的是学习如何用数据结构 (典型的有:串、数组、向量、图、表、队列、 树等)的方法将原CPU无法直接识别、引用和处 理的数据转换为CPU能直接识别、引用和处理数 据类型,这样计算机才能解决这类问题。
第3章_MCS-51单片机指令系统及汇编语言程序设计2
![第3章_MCS-51单片机指令系统及汇编语言程序设计2](https://img.taocdn.com/s3/m/929d8bde28ea81c758f57821.png)
3. 汇编语言的语句格式是什么?使用标号有什么限制?注释段起什么作用? 答案: MCS-51汇编语言的语句格式应符合下列结构: 【标号:】 操作码 【操作数】【;注释】 标号位于语句的开始,由以字母开头的字母和数字组成,它代表该语句的地址。 标号与操作码之间要用“:”隔开,标号与“:”之间不能有空格,“:”与操 作码之间可以有空格。 注释在语句的最后,以“;”开始,是说明性的文字,与语句的具体功能无关。 4. MCS-51汇编语言有哪几条常用伪指令?各起什么作用? 答案: ORG:汇编程序起始地址,用来说明其后程序段在存储器中存放的起始地址; EQU:赋值指令,用来给变量标号赋予一个确定的数值; DB:定义数据字节,指令按字节数的形式把数据存放在存储单元中; DW:定义数据字,按字(双字节)的形式把数据存放在存储单元中; DS:定义存储区,从指定的地址单元开始,保留一定数量的存储单元; BIT:位定义,其功能是把位地址赋给字符名称; END:汇编结束,表明汇编语言程序结束。
2.顺序程序
顺序程序是指程序中没有使用转移类指令的程序段,机器执行这 类程序时也只需按照先后顺序依次执行,中间不会有任何分支、循环, 也不需要调用子程序。 例:将一个单字节十六进制数转换成BCD码。 解:算法分析。单字节十六进制数在0~255之间,将其除以100后, 商为百位数;余数除以10,商为十位数,余数为个位数。 设单字节数存放在40H,转换后,百位数存放在R0中,十位数存 放在R1中,个位数存放在R2中,具体程序如下: ORG 0030H MOV A, 40H ;将单字节十六进制数送入A中 MOV B,#64H ;将100送入B中, #64H可直接写成#100 DIV AB MOV R0,A ;百位数送R0,余数在B中 XCH A,B ;余数送入A中 MOV B,#0AH ;将10送入B中, #0AH可直接写成#10 DIV AB ;商为十位数,余数为个位数 MOV R1,A MOV R2,B SJMP $
汇编语言程序设计_第3章 80x86指令系统
![汇编语言程序设计_第3章 80x86指令系统](https://img.taocdn.com/s3/m/2f678a78bcd126fff6050b47.png)
3.3.2 算术指令
1. 加法
一般形式:
ADD dest, src ; dest = dest + src
ADC dest, src ; dest = dest + src + CF
INC
dest
; dest = dest + 1
语法格式:
ADD reg/mem, reg/mem/imm
ADC reg/mem, reg/mem/imm
movsx ax, al ; 等价于cbw movsx eax, ax ; 等价于cwde movsx eax, al ; 等价于顺序执行cbw与cwde
2019/8/26
80x86汇编语言程序设计
3.3.1 数据传送指令
(3)MOVZX 一般形式: MOVZX dest, src ; src零扩展为dest;386新增 语法格式: MOVZX reg16, reg8/mem8 MOVZX reg32, reg8/mem8/reg16/mem16
2019/8/26
80x86汇编语言程序设计
3.3.1 数据传送指令
5. 堆栈操作指令
80x86系统的堆栈具有如下特点: 堆栈是在内存的堆栈段中,具有“先进后出”的特点。 堆栈只有一个出入口,即当前栈顶。当堆栈为空时,栈顶和栈底指向同一内存单
元。 堆栈有两个基本操作:PUSH(进栈)和POP(出栈)。PUSH操作使栈顶向低地
INC
reg/mem
对标志位的影响:
ADD、ADC:按一般规则影响CF、OF、SF和ZF。 INC:不影响CF,其它同ADD。 说明:ADD与ADC的2个操作数必须类型匹配,且不能同时是内存操作数。
2019/8/26
MCS51_Exp
![MCS51_Exp](https://img.taocdn.com/s3/m/94899405e87101f69e3195cb.png)
第二章指令系统和汇编语言程序设计实验本章实验主要包括指令系统和汇编语言程序设计两部分。
采用软件模拟调试的方法,目的在于通过这些实验可以使学生巩固所学知识,加深对MCS-51单片机内部结构、指令系统的理解,更进一步掌握汇编语言程序设计的方法和技巧。
第一节指令系统实验实验一熟悉键盘操作及数传指令编程设计一、实验目的1.熟悉软件模拟调试的环境及键盘操作。
2.掌握汇编语言程序设计的方法,加深对指令的理解。
3.学会软件模拟调试和察看修改观察项的方法。
二、实验内容印证数据传送指令的功能、寻址方式以及PC指针、SP指针、DPTR指针、Ri指针分别对代码段、堆栈段、外扩数据存储器段、位寻址区等不同存储器的访问方式。
三、实验步骤1.进入调试软件环境,输入源程序;2.汇编源程序;3.用单步方式运行程序;4.检查并记录各寄存器和存储单元内容的变化。
四、程序清单1.内部RAM数据传送需要查看的数据有30H,31H,A,R0等。
ORG 0000HMOV R0,#30HMOV 30H,#45HMOV 31H,#46HMOV R2,30HMOV 02H,31HMOV A,#87HMOV 0E0H,30HMOV 30H,AMOV 31H,@R0SJMP $END2.外部数据传送需要查看的数据有外部数据存储器单元2000H,外部程序存储器单元2001H。
ORG 0000HMOV A,#89HMOV DPTR,#2000HMOVX @DPTR,AINC DPTRCLR AMOVC A,@A+DPTRSJMP $ORG 2000HDB 44HDB 78HDB 67HEND3.堆栈操作需要查看的数据有50H、51H、A及SP指针和堆栈区中数据随PUSH和POP指令执行后的变化情况和数据的存放次序等。
1)可用于保护现场和恢复现场的程序ORG 0000HMOV SP,#5FHMOV 50H,#3BHMOV 51H,#2FHMOV A,#12HPUSH 50HPUSH 51HPUSH ACCPOP 0E0HPOP 51HPOP 50HSJMP $END2)可用于数据交换的程序ORG 0100HMOV SP,#6FHMOV 50H,#3BHMOV 51H,#2FHPUSH 50HPUSH 51HPOP 50HPOP 51HSJMP $END4.数据交换记录每条指令运行后的结果,从而加深对各种不同的交换指令的理解。
第三章 PIC单片机指令系统PPT课件
![第三章 PIC单片机指令系统PPT课件](https://img.taocdn.com/s3/m/3bfada53844769eae009ed8c.png)
53
汇编语言程序设计
2.PIC 汇编语言的程序流程图
(1)程序流程图常用的图形符号 圆角矩形框为起始/终止框,表示一个程序的开
始或结束。 矩形框为任务框,表示要处理的任务。 菱形框为判断框,表示要判断的因素,判断结果
15
2.指令符号的意义说明
在PIC系列单片机指令中常把数据存储器RAM当作 寄存器来使用(处理)并用字母f(或F)表示。
d 代表操作数的目标装置选择,定义d=0,结果存入 W;d=1结果存入(文件)寄存器f,当使用汇编程序 指令d缺省时,默认d=1。
b代表(文件)寄存器(8位)的位地址(0~7取值)。如寄 存器的8位为b7、b6……b1、b0,若b=1代表寄存 器的第b1位。
ADDLW 21H
8
3.直接寻址
操作数所在的存储单元地址直接在指令中形式给 出,就称之为直接寻址。这种方式可以对任何一 个寄存器进行直接寻址访问。
9
4.位寻址
这种寻址方式是对寄存器中的任一位(bit) 进行操作。
10
例3-1 ADDLW 16H
11
例2-2 IORWF 26H, 0
结果存放装置的选择
k代表立即数、常数和数据标号。
16
指令集
17
字节操作指令
1.寄存器加法指令
0=w 1=f
d equ 0 FSR equ 0XC2 Addwf fsr,d
18
字节操作指令
2.寄存器减法指令
19
字节操作指令
3.寄存器加1指令
CNT+1-->CNT
第02章单片机指令系统与汇编语言程序设计习题解答
![第02章单片机指令系统与汇编语言程序设计习题解答](https://img.taocdn.com/s3/m/cedfe6fe112de2bd960590c69ec3d5bbfd0adaac.png)
第02章单⽚机指令系统与汇编语⾔程序设计习题解答第02章单⽚机指令系统与汇编语⾔程序设计习题解答⼀、填空题1. MCS-51单⽚机指令系统中有 111 条指令。
2. MCS-51单⽚机指令中,Rn表⽰ R0、R1、R2、R3、R4、R5、R6、R7中的⼀个。
3. MCS-51单⽚机指令中,@表⽰间接寻址。
4. MCS-51单⽚机指令中,$表⽰当前指令的⾸地址。
5. MCS-51单⽚机寻址⽅式有⽴即数、直接地址、寄存器、寄存器间接、变址、相对、位寻址等七种寻址⽅式。
6. 指令MOVC A, @A+PC的功能是将A的内容与PC当前值相加作为程序存储器地址,再将该地址单元的内容传送到A 。
7. 指令JBC CY, LOOP是 3 字节、 2 个机器周期指令。
8. 指令DA A的功能是对A中当前值进⾏⼗进制调整。
9. 调⽤⼦程序时,将PC当前值保存到堆栈。
10. MCS-51单⽚机堆栈操作的基本原则是先进后出。
⼆、简答题1. MCS-51单⽚机指令⼀般由哪⼏个部分组成?各部分的功能是什么?答:MCS-51单⽚机指令⼀般由标号、操作码助记符、操作数、注释四部分组成。
标号是⼀条指令的标志,是可选字段,与操作码之间⽤“:”隔开;设置标号的⽬的是为了⽅便调⽤或转移。
标号的选择应遵从下列规定:标号由1~8个字母或数字组成,也可以使⽤⼀个下划线符号“_”。
第⼀个字符必须是字母。
指令助记符或系统中保留使⽤的字符串不能作为标号。
标号后⾯需要有⼀个冒号。
⼀条语句可以有标号,也可以没有标号,取决于程序中其它语句是否需要访问这条语句。
操作码规定指令的功能,是⼀条指令的必备字段,如果没有操作码,就不能成为指令。
它与操作数之间⽤“空格”隔开。
操作数是指令操作的对象。
分为⽬的操作数和源操作数两类,它们之间⽤“,”分隔。
操作数是可选字段。
⼀条指令可以有0、1、2、3个操作数。
注释是对指令功能的说明解释。
以“;”开始。
2. 程序中,伪指令ORG和END的作⽤是什么?答:ORG⽤于定义汇编语⾔源程序或数据块存储的起始地址。
第2章 指令系统及汇编语言程序设计答案
![第2章 指令系统及汇编语言程序设计答案](https://img.taocdn.com/s3/m/0ed9bcca941ea76e58fa0457.png)
第2章指令系统及汇编语言程序设计一.选择题1.(D) 2.(A) 3.(C) 4.(D) 5.(A) 6.(D)7.(C) 8.(C) 9.(C) 10.(D) 11.(D) 12.(C)13.(C) 14.(A) 15.(A) 16.(D) 17.(B) 18.(C)19.(C) 20.(C) 21.(D) 22.(D) 23.(D) 24.(C)25.(A) 26.(A) 27.(B) 28.(C) 29.(B) 30.(D)31.(B) 32.(C) 33.(C) 34.(A) 35.(C) 36.(D)37.(D) 38.(A) 39.(B) 40.(C) 41.(D) 42.(D)43.(B) 44.(C) 45.(C) 46.(B) 47.(B) 48.(D)49.(A) 50.(B) 51.(A) 52.(C)二、判断题1.× 2.× 3.× 4.√ 5.√ 6.√ 7.×8.× 9.×10.√ 11.× 12.× 13.× 14.× 15.× 16.√17.√18.√19.× 20.× 21.× 22.√ 23.× 24.√ 25.√26.√三、填空题1.53F30H2. 0 ; 0; 0; 13.操作码;操作数4. ZF=05.SS6. 1234H,0FFEH7.立即四、阅读程序1.38(或26H)2.将以10100H起始的50个单元的内容传送至以10200H起始的50个单元中3.将数据段中以2000H起始的100个单元中的内容清零4.统计以BUFFER为首址的100个单元中数字为1的个数存入ARRAY单元5.统计N字中0的个数6.将N的内容拆为两部分分别存入BH,BL中7.AX=0008H8.AL=34H9.AX=23H10.AX=0004H11.AX=0055H12.将从键盘接受到的两个字符拼在一起13.BH=0FFH,BL=0EH14.AX=000FH15.AL=15H,AF=1,BL=0FH16.90H17.向屏幕上依次输出0,1,…。
第3章 MCS-51 的指令系统与汇编语言程序设计1
![第3章 MCS-51 的指令系统与汇编语言程序设计1](https://img.taocdn.com/s3/m/1c06de25647d27284b73519c.png)
每条指令在执行时要花去一定的时间,以机器周期为单 位。按指令的执行时间来分: (1) 1个机器周期(12个时钟振荡周期)指令64条 (2) 2个机器周期(24个时钟振荡周期)指令45条 (3) 4个机器周期(48个时钟振荡周期)只有乘、 除两条指令的执行时间。 12MHz晶振:机器周期为1s。 按指令的功能分类,可分为5大类: 数据传送类(29条);算术运算类(24条) 逻辑运算及移位类(24);控制转移类(17条) 位操作类(17条)
第3章 MCS-51的指令系统与汇编语言程序设计
【学习目标】 掌握单片机的指令系统,熟悉指令功能、指令格 式以及指令的寻址方式; 理解汇编语言的特点以及与机器语言之间的区别 和联系; 掌握汇编语言程序设计的步骤、汇编语言程序的 结构; 熟练掌握汇编语言应用程序的开发
xuminxm11@ 密码:xuminxm1111
2.汇编语言 4) (4)DB(Define Byte)
汇编结果:(1000H) 汇编结果:(2000H) =25H =25H
页码 P68 P70 P73
章节或标题
(5)DW(Define Word) (4)分配内存单元
原错误
例如, ORG 1000H
更正为
例如, ORG 2000H
分配内存工作单元,确 定层序和数据的真实地 址
; 取高位 ; 两数高位相加 ; 存“和”的高位
【例3.11】 有一数据块存放起始地址为DATA1的片外RAM 区,数据块以“0”为结束标志,要求将其传送到DATA2为 起始地址的片内RAM区。编写程序如下: MOV DPTR, #DATA1 MOV R0,#DATA2 LOOP:MOVX A, @DPTR JZ ENDO MOV @R0,A INC DPTR INC R0 AJMP LOOP ENDO: SJMP $ ;设置片外RAM数据块地址指针 ;设置片内RAM数据块地址指针 ;取数 ;检测是否为0?为0,转ENDO ;不为0,传送 ;修改地址指针
第二章 MCS-51指令系统及汇编语言程序设计
![第二章 MCS-51指令系统及汇编语言程序设计](https://img.taocdn.com/s3/m/e9ffb066f5335a8102d220d5.png)
XCH A, direct 1 1 0 0 0 1 0 1
6.半字节交换指令
助记符 XCHD A, @Ri 机器码 1101011r 功能 ; (A3~0)((Ri)3~0), i=0,1
数据传送类指令
数据传送类指令的助记符有: MOV、MOVX、MOVC XCH、XCHD PUSH、POP
寄存器C MCS-51 传送指令 示意图 寄存器 R7~R0 直接地址 direct 直接地址 direct 寄存器 DPTR 立即数 #data
例:设外部数据存储器2097H单元中内容 为80H,在执行下列指令后,则A中的内容 为80H。 MOV P2, #20H MOV R0, #97H MOVX A, @R0
Ⅱ.由Ri内容指示外部数据存储器地址 (2)累加器内容送外部数据存储器
助记符 MOVX @Ri, A 目标 源 机器码 11110011 功能 ; ((Ri)+(P2))←A, i=0,1
二、直接寻址
紧跟在操作码后的是操作数的直接地址。 该方式中操作数存储的空间有三种:
1.内部数据存储器的低1 ; (70H)→A 2.位地址空间 例:MOV C, 00H ; 直接位00H内容→ 进位位 MOV 00H → 3.特殊功用功能寄存器 *只能用直接寻址方式进行访问。 例: MOV IE, #85 ; 立即数85H →中断允许寄存器
执行该指令时: 1.P3.6引脚上输出WR有效信号 2. Ri包含的低8位地址由P0口输出,高8位地址信息 由P2口输出。 3.累加器A的内容由P0口输出。 4.P0口作分时复用。
3.程序存储器内容送累加器
该类指令常用于查表。 (1)PC作基址寄存器
助记符 MOVC A, @A+PC 目标 源 机器码 10000011 功能 ; PC←PC+1 A ←((A)+(PC))
第三章MCS-51指令系统及汇编语言程序设计
![第三章MCS-51指令系统及汇编语言程序设计](https://img.taocdn.com/s3/m/f4f5fe4dfe4733687e21aae9.png)
指 令 系 统 的 寻 址 方 式
MCS-51指令系统及一般说明 MCS-51指令系统及一般说明
在介绍指令之前, 在介绍指令之前 , 先对指令中使用的一些符号意义进行简单 的说明。 的说明。 direct---直接地址, ---直接地址 ① direct---直接地址,即8位的内部数据存储器单元或特殊 功能寄存器的地址。 功能寄存器的地址。 #data--包含在指令中的8位常数。 --包含在指令中的 ② #data--包含在指令中的8位常数。 #datal6--包含在指令中的16位常数 包含在指令中的16位常数。 ③ #datal6--包含在指令中的16位常数。 rel-- 位的带符号的偏移量。用于SJMP --8 SJMP及所有的条件转移 ④ rel--8位的带符号的偏移量。用于SJMP及所有的条件转移 指令中。 指令中 。 偏移量按相对于下一条指令的第一个字节地址与跳转 后指令第一个字节地址之差计算, 范围内取值。 后指令第一个字节地址之差计算,在-128~+127范围内取值。 128 +127范围内取值 DPTR--数据指针,可用作16位的地址寄存器。 --数据指针 16位的地址寄存器 ⑤ DPTR--数据指针,可用作16位的地址寄存器。
指 令 系 统 的 寻 址 方 式
寄存器间接寻址
寄存器间接寻址方式可用于访问内部RAM 或外部数据存储器 寄存器间接寻址方式可用于访问内部 RAM或外部数据存储器 。 RAM 或外部数据存储器。 这种寻址方式是由指令指定某一寄存器的内容作为操作数的 地址。 地址。 其中(Ri)=40H (Ri)=40 例如 MOV A,@Ri ;(i=0或1),其中(Ri)=40H 这条指令表示从Ri中找到源操作数所在单元的地址, Ri中找到源操作数所在单元的地址 这条指令表示从Ri中找到源操作数所在单元的地址,把该地 址中的内容传送给A 即把内部RAM 40H单元的内容送到累加器A RAM中 址中的内容传送给A。即把内部RAM中40H单元的内容送到累加器A 中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第3章指令系统及汇编语言程序设计一、简答题1、80C51系列单片机的指令系统有何特点?2、80C51单片机有哪几种寻址方式?各寻址方式所对应的寄存器或存储器空间如何?3、访问特殊功能寄存器SFR可以采用哪些寻址方式?4、访问内部RAM单元可以采用哪些寻址方式?5、访问外部RAM单元可以采用哪些寻址方式?6、访问外部程序存储器可以采用哪些寻址方式?7、为什么说布尔处理功能是80C51单片机的重要特点?8、对于80C52单片机内部RAM还存在高128字节,应采用何种方式访问?9、试根据指令编码表写出下列指令的机器码。
(1)MOV A,#88H(2)MOV R3,50H(3)MOV P1.1,#55H(4)ADD A,@R1(5)SETB 12H10、完成某种操作可以采用几条指令构成的指令序列实现,试写出完成以下每种操作的指令序列。
(1)将R0的内容传送到R1;(2)内部RAM单元60H的内容传送到寄存器R2;(3)外部RAM单元1000H的内容传送到内部RAM单元60H;(4)外部RAM单元1000H的内容传送到寄存器R2;(5)外部RAM单元1000H的内容传送到外部RAM单元2000H。
11、11、若(R1)=30H,(A)=40H,(30H)=60H,(40H)=08H。
试分析执行下列程序段后上述各单元内容的变化。
MOV A,@R1MOV @R1,40HMOV 40H,AMOV R1,#7FH12、若(A)=E8H,(R0)=40H,(R1)=20H,(R4)=3AH,(40H)=2CH,(20)=0FH,试写出下列各指令独立执行后有关寄存器和存储单元的内容?若该指令影响标志位,试指出CY、AC、和OV的值。
(1)MOV A,@R0(2)ANL 40H,#0FH(3)ADD A,R4(4)SWAP A(5)DEC @R1(6)XCHD A,@R113、若(50H)=40H,试写出执行以下程序段后累加器A、寄存器R0及内部RAM的40H、41H、42H单元中的内容各为多少?MOV A,50HMOV R0,AMOV A,#00HMOV @R0,AMOV A,3BHMOV 41H,AMOV 42H,41H14、试用位操作指令实现下列逻辑操作。
要求不得改变未涉及的位的内容。
(1)使ACC.0置位;(2)清除累加器高4位;(3)清除ACC.3,ACC.4,ACC.5,ACC.6。
15、试编写程序,将内部RAM的20H、21H、22H三个连续单元的内容依次存入2FH、2EH和2DH单元。
16、试编写程序,完成两个16位数的减法:7F4DH-2B4EH,结果存入内部RAM的30H和31H单元,31H单元存差的高8位,30H单元存差的低8位。
17、试编写程序,将R1中的低4位数与R2中的高4位数合并成一个8位数,并将其存放在R1中。
18、试编写程序,将内部RAM的20H、21H单元的两个无符号数相乘,结果存放在R2、R3中,R2中存放高8位,R3中存放低8位。
19、若(CY)=1,(P1)=10100011B,(P3)=01101100B。
试指出执行下列程序段后,CY、P1口及P3口内容的变化情况。
MOV P1.3,CMOV P1.4,CMOV C,P1.6MOV P3.6,CMOV C,P1.0MOV P3.4,C20、若单片机的主频为12MHz,试用循环转移指令编写延时20ms的延时子程序。
并说明这种软件延时方式的优缺点。
21、80C51单片机汇编语言有何特点?22、利用80C51单片机汇编语言进行程序设计的步骤如何?23、常用的程序结构有哪几种?特点如何?24、子程序调用时,参数的传递方法有哪几种?25、什么是伪指令?常用的伪指令功能如何?26、设被加数存放在内部RAM的20H、21H单元,加数存放在22H、23H单元,若要求和存放在24H、25H中,试编写出16位数相加的程序。
27、编写一段程序,把外部RAM中1000H~1030H的内容传送到内部RAM的30H~60H中。
28、编写程序,实现双字节无符号数加法运算,要求(R1R0)+(R7R6)→(61H60H)。
29、若80C51的晶振频率为6MHz,试计算延时子程序的延时时间。
DELAY:MOV R7,#0F6HLP:MOV R6,#0FAHDJNZ R6,$DJNZ R7,LPRET30、在内部RAM 的21H单元开始存有一组单字节不带符号数,数据长度为30H,要求找出最大数存入BIG单元。
31、编写程序,把累加器A中的二进制数变换成3位BCD码,并将百、十、个位数分别存放在内部RAM的50H、51H、52H中。
32、编写子程序,将R1中的2个十六进制数转换为ASCII码后存放在R3和R4中。
33、编写程序,求内部RAM中50H~59H十个单元内容的平均值,并存放在5AH单元。
34、指令由哪几部分组成?35、什么是汇编语言指令?为什么说汇编语言指令比机器语言指令更容易理解和记忆?通过什么方式可将汇编语言程序转化为机器语言程序?36、MCS-51汇编语言中有哪些常用的伪指令?各起什么作用?37、汇编语言程序和汇编程序两术语含义相同吗?38、什么是寻址方式?对于双操作数指令来说,为什么不需要指定操作结果存放位置?39、给出下列指令中每一操作数的寻址方式。
MOV A, #23HMOV 23H,AMOV 90H, 23HMOV 23H, @R0INC A40、位地址90H和字节地址90H及P1.0有何异同?如何区别?位寻址和字节寻址如何区分?在使用时有何不同?41、要访问专用寄存器和片外数据寄存器,应采用什么寻址方式?举例说明。
42、编程将内部RAM的20H单元的内容传送给外部RAM的2000H单元。
43、编程将内部数据存储器20H~30H单元内容清零。
44、已知A=83H,R0=17H,(17H):34H,写出下列程序段执行完后的A中的内容。
ANL A, #17HORL 17H,AXRL A, @R0CPL A45、编程查找内部RAM的32H~41H单元中是否有0AAH这个数据,若有这一数据,则将将50H单元置为0FFH,否则清50H单元为0。
46、已知单片机的晶振为12MHz,分别设计延时0.1s、1s、lmin的子程序。
47、查找20H~4FH单元中出现00H的次数,并将查找结果存入50H单元48、试编程使内部RAM的20H~4FH单元的数据块按降序排列。
49、内部RAM的20H单元开始有一个数据块,以0DH为结束标志,试统计该数据块长度,将该数据块传送到外部数据存储器7E01H开始的单元,并将长度存入7E00H单元。
50、试编写一个用查表法查0~9字形段码的子程序,调用子程序前,待查表的数据存放在累加器A中,子程序返回后,查表的结果也存放在累加器A中。
51、内部RAM的DATA开始的区域中存放着10个单字节十进制数,求其累加和,并将结果存入SUM和SUM+1单元。
52、MCS-51内部RAM前128字节支持哪些寻址方式?请写出用不同寻址方式将内部RAM 30H单元信息传送到累加器A的指令或程序片段;内部RAM后128字节支持哪些寻址方式?请写出将内部RAM 80H单元信息传送到累加器A的指令或程序片段。
53、写出实现下列要求的指令或程序片段,并在仿真机上验证(假设指令代码从2000H单元开始存放)。
(1)将内部RAM 20H单元内容与累加器A相加,结果存放在20H单元中。
(2)将8032内部RAM 80H单元内容与内部RAM 31H单元内容相加,结果存放到内部RAM 31H单元中。
(3)将内部RAM 20H单元内容传送到外部RAM 20H单元中。
(4)将程序状态字寄存器PSW内容传送到外部RAM的0D0H单元中。
(5)将内部RAM 00H~7FH单元,共128字节传送到以8000H为首址的外部RAM中。
(6)将外部RAM 8000H~803FH单元,共64字节传送到以40H为首址的内部RAM中。
(7)将外部RAM 8000H~807FH单元,共128字节传送到以0000H为首址的外部RAM中。
(8)将存放在内部RAM的40H、41H和外部RAM的8000H、8001H的16位二进制数相加,结果存放在内部RAM的40H和41H单元中(假设低位字节存放在低地址中)。
(9)如果0~9七段数码显示器对应的字模码3P,06,5B,4F,66,6D,7D,07,7E6F 存放在1000H为首址的程序存储器中,写出将数字4对应的字模码输出到外部RAM3003H单元(即扩展I/O端口地址)的程序段。
(10)使内部RAM 20H单元的b7和b3清零,其他位不变。
(11)使内部RAM 20H单元的b7和b3置1,b5清零,其他位不变。
(12)将内部RAM 20H单元的b7和b3置1,b5取反,其他位不变。
(13)将DPH寄存器的b7、b5位清零,将b2、b0位置1,其他位不变。
(14)将存放在内部RAM 40H、41H和外部RAM 8000H、8001H的四位BCD码相加,结果存放在内部RAM 40H和41H单元中(假设低位字节存放在低地址中)。
(15)将立即数32H传送到内部RAM 30H单元中。
(16)将立即数32H传送到8032 CPU内部RAM 88H单元中。
54、假设内部RAM(30H)=3FH,累加器A=0FEH,R0=30H,SP=07H,PSW=00H,则执行如下指令后,各存储单元及寄存器内容是什么(假设各小题相互独立)?(1)MOV A, @R0 A= 。
(2)INC A A= ;PSW= 。
(3)MOV A, #01HMOV A, #04HADD A, @R0INC R0MOV @R0, AA= ;PSW= ;R0= ;(30H)= 。
(4)ANL A, @R0 A= ;PSW= 。
(5)PUSH ACCPUSP 30H A= ;PSW= 。
55、假设4位BCD码压缩存放在R3、R2中,试编写BCD减1的程序段,并在仿真机上验证。
56、输入、编译、运行下列程序段,并指出复位后和程序执行过程中SP、程序计数器PC的变化以及程序执行结束后累加器ACC、内部RAM 30H~33H单元内容。
ORG 0000HLJMP MainORG 1000HMain: MOV SP, #6FHMOV R0, #30HMOV Rl, #32HMOV 30H,#12HMOV 31H,#34HMOV 32H,#76HMOV 33H,#98HLCALL SUBlNOPORG 2000HSUBl: PUSH AccPUSH PSWMOV A, @R0ADD A, @R1MOV @R0,AINC R0RET57、假设程序头中含有如下变量定义伪指令。