的指令系统控制转移指令
第三章 指令系统--指令

寻址方式指令系统
数据传送指令算术运算指令逻辑运算指令串操作指令
控制转移指令处理器控制指令
通用传送指令
累加器专用传送指令
地址传送指令
标志传送指令
对标志位的影响: 除SAHF和POPF指令外,其余的所有数据传送类指令
格式:
功能:
操作数类型:
DS,100H
用
堆栈:执行
PUSH
POP
SS指向堆栈段的起始位置SP指定栈顶
PUSH AX PUSH DS POP DS POP AX
格式:
oprd1,
立即数、段寄存器和
不影响
通用传送指令
累加器专用传送指令地址传送指令
标志传送指令
LEA (Load Effective Address)
LDS (Load pointer into register and DS) LES (Load pointer into register and ES)
LEA LEA
LEA
数据传送指令算术运算指令逻辑运算指令串操作指令
控制转移指令处理器控制指令
实现二进制
所有算术运算指令均所有算术运算指令均
四则运算是计算机经常进行的一种操作。
请注意算术运算指令对
只有一个操作数:寄存器或存储单元对操作数加
用于计数器和地址指针的调整
不影响进位
对操作数减
用于计数器和地址指针的调整不影响进位。
MCS-51指令系统

4、控制转移类指令(二)
无条件转移:(LJMP,AJMP,SJMP,JMP—4条) LJMP addr16 长跳转指令
——可在64K范围内跳转 AJMP addr11 绝对跳转指令
——可在指令所在的2K范围内跳转 SJMP rel 相对跳转指令
——可在当前PC-128与+127范围内跳转 JMP @A+DPTR 间接长跳转指令
1
累加器清零/取反操作 (CLR,CPL—2条)
CLR A —对累加器清零
1 Byte 1 Tm
CPL A ——对累加器按位取非 1 Byte 1 Tm 15
3、逻辑运算及移位类指令(三)
逻辑运算指令在程序中的应用(下面的例子认为Acc 的内容为9AH)
逻辑与ANL运算用于对某些位进行清0或者保留: 例: ANL A, #0FH; 则(A) = 0AH
位清零/置位指令(4条): CLR bit(或C) —— (bit或 C)“0” SETB bit(或C) —— (bit或 C)“1”
位逻辑与/或/非指令(6条): ANL C,bit(或/bit) ORL C,bit(或/bit) CPL bit (或 C) 注: “/bit”表示对bit位先取反然后再参加运算
带借位减法(SUBB):(A) ← (A)- (Cy)- (第二操作数)
10
2、算术运算类指令(三)
加1/减1操作: (INC,DEC—9条) INC, DEC与用加/减法指令做加1/减1 操作不 同之处在于INC、DEC不影响标志位。
单字节乘/除运算: (MUL,DIV—2条) 两个单字节数的乘/除法运算只在A与B之间 进行。 MUL AB: (A)与(B)相乘, 积为16位数,
MCS-51单片机的指令系统

整理ppt
12
4.2 寻址方式
51汇编语言有42种操作码助记符,用来描述33种操作功 能。一种操作码可以使用一种以上的数据类型,又由于 助记符规定了其访问的存储器空间,所以一种功能可能 有几个助记符(如MOV、MOVX、MOVC)。功能助记 符与寻址方式组合,得到111条指令。
整理ppt
13
4.2 寻址方式
1)无操作数单字节指令
这类指令只有操作码字段,操作数隐含在操作码中。
例如:INC DPTR
指令码为 :
数据指针隐含其中
整理ppt
6
指令的组成及字节数
2)含有操作数寄存器号的单字节指令 单字节的指令码由操作码字段和指示操作数所 在寄 存器号的字段组成。 例如;MOV A,Rn 指令码为:
其中,rrr为寄存器Rn的编号
整理ppt
2
4.1 指令和指令程序
“指令”: CPU能直接识别和执行的命令。 指令系统:CPU所能执行的全部指令的集合。
与CPU的能力、使用的方便灵活性密切相关。 指令的记忆问题?指令本身是二进制代码。
例如以下的51单片机指令:
把10放到累 740AH 加器A中 为பைடு நூலகம்便于记忆 指令助
A加20,结 果仍在A中
整理ppt
8
指令的组成及字节数
3.三字节指令(17条)
这条指令的指令码的第1字节为操作码;第2和第3字节为 操作数或操作数地址,有如下3类。 1)16位数据 例如:MOV DPTR,#26ABH 指令码为:
整理ppt
9
指令的组成及字节数
2)8位地址和8位数据 例如:MOV 74H,#0FFH 指令码为:
在MCS-51指令中,若操作数是以R0~R7来表示操作数时, 就属于寄存器寻址方式。
8051汇编语言概述一 ) 指令分类 42个助记符,33种功能,共...

3-3 数据传送类指令
数据传送操作是指把数据从源地址传送到目的地址, 源地址内容不变。共29条指令,使用8种助记符: 片内数据存储器传送指令MOV;
片外数据存储器传送指令MOVX;
程序存储器传送指令MOVC; 累加器交换指令 XCH、XCHD、SWAP; 堆栈操作指令 PUSH、 POP; 3-5
3-3-4 累加器交换指令
1) 字节交换指令XCH(3 条)
助记符格式
XCH A, Rn
机器码
11001rrrB
相应操作
A Rn
指令说明 机器周期
n=0~7 1 1
XCH A, direct 11000101B A (direct) direct
XCH A, @Ri
1100011iB data
MOV R2,#20h ;设臵传送次数 MOV DPTR,#TAB ;设臵数据源起始地址 MOV R0,#30H ;设臵目标起始地址 LOOP: MOV A, #00h ;设臵变址值 MOVC A, @A+DPTR ;读外部数据存储器 MOV @R0, A ;将数据传送到内部RAM INC R0 ;目标地址+1 INC DPTR ;源地址+1 DJNZ R2,LOOP ;传送个数判断
五)汇编语言的伪指令
伪指令不是真正的指令,它无对应的机器码,在汇编时不 产生目标程序,只是用来对汇编过程进行某种控制。 (p178)
1)ORG nnnnh ;设臵起始地址 例如: ORG 0030h mov a,#00h …… 2)END 汇编结束伪指令 3)EQU (data、bit)等值伪指令 例如:SDA EQU P1.0 ; sda bit P1.0 addr1 EQU 1000h ; addr1 data 1000h D5 EQU 5fh ; D5 data 5fh
8086指令系统总结

8086指令系统总结8086是一种x86架构的微处理器,由Intel公司于1978年推出。
它是16位的,拥有20位的物理寻址能力,可以访问1MB的内存空间。
8086指令系统是其所支持的一系列指令集合,下面将对8086指令系统进行详细总结。
数据传输指令是8086指令系统中的基础指令之一,用于将数据从一个位置传输到另一个位置。
其中包括mov指令、xchg指令、push指令和pop指令等。
mov指令用于将数据从一个存储位置复制到另一个存储位置;xchg指令用于交换两个存储位置中的数据;push指令用于将数据压入栈顶;pop指令用于将栈顶的数据弹出。
算术运算指令是用于进行各种算术运算的指令。
8086支持包括加法、减法、乘法和除法等多种算术运算指令。
例如,add指令用于将两个操作数相加,sub指令用于将第二个操作数从第一个操作数中减去,mul指令用于将两个操作数相乘,div指令用于将第一个操作数除以第一个操作数,并将结果保存在指定的寄存器中。
逻辑运算指令用于进行逻辑运算,包括与、或、非、异或等运算。
例如,and指令用于对两个操作数进行按位与运算,or指令用于对两个操作数进行按位或运算,not指令用于对一个操作数进行按位非运算,xor指令用于对两个操作数进行按位异或运算。
控制转移指令用于控制程序的执行流程。
包括无条件转移指令、条件转移指令和循环指令。
无条件转移指令用于无条件地跳转到指定的地址,例如jmp指令;条件转移指令用于根据一些条件是否成立来进行跳转,例如je指令(跳转到指定地址,如果上一次比较操作相等);循环指令用于循环执行指定的指令块,例如loop指令。
I/O指令用于进行输入输出操作,包括从外部设备读取数据和将数据写入外部设备。
例如,in指令用于将输入端口的数据读取到指定的寄存器中,out指令用于将指定的寄存器中的数据写入到输出端口。
此外,8086还支持一些特殊的指令,如访问标志寄存器的指令,控制指令(如hlt指令、nop指令)和字符串指令(如movsb指令、cmpsb指令)等。
微机原理2007年-第三章-指令系统第五节控制转移

③ 段间直接转移 段间直接转移
指令中给出的16位的段和 位的偏移地址送到CS和IP。 指令中给出的16位的段和16位的偏移地址送到CS和IP。 位的段和16位的偏移地址送到
④ 段间间接转移 段间间接转移
MEM中给出的 位的段和 位的偏移地址送到CS和IP。 MEM中给出的16位的段和16位的偏移地址送到CS和IP。 中给出的16位的段和16位的偏移地址送到
6
例:代码段内有一条无条件转移指令
JMP SHORT NEXT 指令本身占有两个字节 操作码占一个字节; 位位移量占有一个字节 操作码占一个字节;8位位移量占有一个字节
内存
... 源程序 : 条件转移指令: 条件转移指令:JMP SHORT next qqq: ... ... next: MOV AL,03H
5
① 段内直接转移 转移的目标地址由指令直接给出。 段内转移,故转移后CS内容保持不变, 段内转移,故转移后CS内容保持不变,只改 变IP的值。 IP的值。
汇编语言中格式 JMP SHORT OPRD JMP NEAR PTR OPRD 位移量 转移范围 8位 -128~+127 128~ 16位 16位 -32768~+32767 32768~
13
JMP DWORD PTR [SI]的机器码 11111111 11101100 DS:[SI]
4000 DS +) 1212 SI 41212 41212 41213 41214 41215
00 10 00 4A
1000 4A00
IP CS
段间间接转移操作示意图
14
(2)条件转移指令 (2)条件转移指令 - JXX 条件转移指令可实现程序的条件分支。 条件转移指令根据标志位的状态来决定是 否进行分支转移。(判位转移) 格式: JXX label xx为条件名称缩写 ;xx为条件名称缩写 指令的转移范围为-128~+127字节。 指令的转移范围为-128~+127字节。
第9章 单片机的指令系统说明

计算机总是把操作数当作有符号数(补码形式)看待 并影响PSW的相关标志位。影响情况如下: 进位/借位标志CY: 两数和的D7位有进位时,(CY)=1,否则,(CY)=0。 半进位/借位标志AC: 两数和的D3位有进位时,(AC)=1,否则,(AC)=0。 溢出标志OV: 两数和的D7,D6位只有一位有进位时,(OV)=1;否则, (OV)=0,即OV=C6⊕C7。 奇偶标志P: 当累加器A中“1”的个数为奇数时,(P)=1;为偶数 时(P)=0。
例2 把片外RAM的36H单元中的数据送到片外RAM的 1200H单元。 〈分析〉(36H)→(1200H) 程序如下: MOV R1,#36H MOVX A ,@R1 MOV DPTR,#1200H MOVX @DPTR, A <想一想>下面的程序可以实现吗? MOV DPTR, #1200H MOV R1,#36H MOV @DPTR,@R1 注意:片外RAM之间不能直接传送数据,必须经过累加器 A
例5 试分析8051单片机执行下述指令后,累加器A和PSW各标 志位的变化。 MOV A,#0A5H ADD A,#0CFH 解: (A)=10100101B + Data=11001111B CY 01110100B C7 C6 AC (CY)=C7=1;(AC)=1;溢出标志(OV)=C7⊕C6=1⊕0=1,有 溢出;(P)=0。执行结果:(A)=74H。 若为无符号数运算, (CY)=1,表示结果超出(0~255) 范围。若为带符号数运算,因(-49)+(-91)=-140,超出了 (-128~+127)的范围,所以OV=1溢出。
半字节交换 XCHD A,@Ri SWAP A
;(A3~0)((Ri)3~0) ;(A3~0)(A7~4)
任务二指令系统和控制指令

AJMP指令
A10 A9A8 操作码 0 0 0 00001
A7 ~ A0 11111111
PC程序计数器 0 0 1 0 0 0 0 0 011
11111111 0 0 0 00010
PC当前值 +2
• EX:2FFFH AJMP 17BH • (PC)当前值 = 2FFFH + 2 =3001H →
功能:先使PC加2后的地址和rel相加作为目标转移地址
➢ rel为地址偏移量,为带符号8位二进制,常用补码表 示,范围为-128~+127,因此,程序转移范围为当前 PC前128字节,或后127字节
如:1000H SJMP 89H
(PC)转移 = 1000H + 2 + 89H = 1002H + FF89H = 0F8BH
注意: ✓ 用户应预先把目标地址的基地址送入DPTR,目标地址
对基地址的偏移量放入累加器A中 ✓ 这是一条很有用的散转指令,转移地址不是在编程时
确定的,而是在程序运行时动态决定的 ✓ 多用于多分支程序中,DPTR装入多分支程序的首地址,
由累加器A的内容动态选择其中的某一分支进行分支转 移
(2)条件转移指令:8条 特点: ➢ 是一种在执行过程中需要判断某种条件是否满足而决定程
OP (75H) direct (20H) data (FFH)
三字节指令在存储器中存放的方式示意图
1.2控制转移指令:22条
功能:用于改变程序计数器PC值,以控制程序的流向 有效区间:ROM 标志位:这些指令的执行一般都不会对标志位有影响
无条件转移指令(4条) 条件转移指令(8条) 位控制转移指令(5条) 子程序调用和返回指令(4条) 空操作指令(1条)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CMP AX,CX
CMP AX,CX
JG EXIT
JL NEXT
MOV AX,CX
JMP EXIT
EXIT:
NEXT:MOV AX,CX
END
EXIT: END
举例
• 例:判断两无符号数的大小
解: DATA SEGMENT DA1 DB ? DA2 DB ? A_MESSAGE DB ‘A>B’,'$' B_MESSAGE DB ‘ BA’,'$'
N
CX=0?
Y
例:计算:1+2+3+...+20。结果 存入AX寄存器。
CODE SEGMENT
ASSUME CS:CODE
START:MOV CX,0014H MOV AX,0
初始化部分
A: ADD AX,CX
处理部分
LOOP A
循环控制部分
CODE ENDS
END START
举例
• 在数据段定义一段长度为100字节的数据
mov ds, ax
参考答案(续):
mov si, offset dat mov dl, 0 mov cx, 100 next: cmp byte ptr [si], 5 jbe count inc si loop next jmp ending
count: inc dl inc si loop next
区,其各单元内容任意。然后统计该区 中有多少个存储单元的内容小于或等于5 (按无符号数比较)。将统计结果放在 DL中。
参考答案:
data segment dat db 100 dup(?)
data ends code segment
assume cs:code, ds:data start: mov ax, data
1、无条件转移指令
• 格式:
JMP 目标
• 说明:
▪ 目标通常用标号来表达,根据转移的远 / 近、直接 / 间
接不同,可有以下几种格式:
• JMP 标号
;段内直接转移
• JMP CX
;段内间接转移
• JMP WORD PTR [BX]
;段内间接转移
• JMP FAR PTR 标号
;段间直接转移
• JMP DWORD PTR [BX][SI] ;段间间接转移
含意 A>B AB
JB / JNAE CF=1 AND ZF=0
A<B
JBE / JNA CF = 1 OR ZF = 1
AB
表三 有符号数条件转移指令
指令 JG / JNLE
转移条件 SF=OF 且 ZF=0
含意 A>B
JGE / JNL SF=OF 或 ZF=1
AB
JL / JNGE SF OF 且 ZF=0
三、循环指令
1.循环程序结构
初始化部分
循环控制部分
处理部分
修改计数器及指针 N
循环结束? Y
结束处理部分
2.为何需要循环?
• 简化程序的编制 • 简少程序对内存的占用。
3.如何实现循环?
• 使用条件转移指令:Jxx 目标 • 使用循环控制指令:LOOP 目标 等
循环指令
指令名称
测试条件
LOOP LOOPZ 或 LOOPE
2、条件转移指令
• 这18条指令又可分为三大类:
▪ 简单条件转移指令 ▪ 无符号数条件转移指令 ▪ 带符号数条件转移指令
表一 简单条件转移指令
标志位 CF ZF SF OF PF
指令
JC JNC JE / JZ JNE / JNZ JS JNS
JO JNO JP / JPE JNP / JPO
转移条件
(CX)≠0 ZF=1且(CX)≠0
LOOPNZ 或 ZF=0且(CX)≠0 LOOPNE
功能 Loop Loop while zero, or equal
Loop while not zero or not equal
8086/8088循环控制指令共有四条,下面介 绍其中一条最常用指令:
• LOOP指令:
2、条件转移指令
• 基本格式:
JXX 目标
• 说明:
▪ 字母“J”后面的“XX”是指“条件”,如果条件成立,
则转移至“目标”处执行,否则顺序执行。
▪ 条件转移指令共18条,它们均以F寄存器中状态标志
位作为判断条件,但执行后均不影响各标志位。
▪ 此类指令都只能在以当前IP内容为中心的 -128 至
+127字节范围内转移(短转移)。超过要修改程序。
▪ 指令格式:
LOOP 目标
指令功能:
自动进行循环次数的计数(即CXCX-1)后, 如计数寄存器CX≠0,则转相移当到于目这标两单条元指,令否:则顺序
执行。
DEC CX
说明:
JNZ/JNE 目标
此指令隐含使用CX作为循环计数器;
因此应注意先设置好CX的初始值。
LOOP指令工作流程
循环体
CXCX-1
DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:MOV AX,DATA
MOV DS,AX MOV AL,DA1 MOV BL,DA2
CMP AL,BL JA ABIG MOV DX, OFFSET B_MESSAGE MOV AH,9 INT 21H JMP FINISH ABIG: MOV DX, OFFSET A_MESSAGE MOV AH,9 INT 21H FINISH:MOV AH,4CH INT 21H CODE ENDS END START
A<B
JLE / JNG SF OF 或 ZF = 1
AB
• 例子:已知三个带符号数存放在AX、BX、
CX寄存器中,编程求这三个数的最大值, 并存放在AX寄存器中。
CMP AX,BX
CMP AX,BX
JG CMPAXCX
JG CMPAXCX
MOV AX,BX
MOV AX,BX
CMPAXCX :
CMPAXCX:
CF=1 CF=0 ZF=1 ZF=0 SF=1 SF=0
SF=1 SF=0 SP F=1 SF=0
含意
有进/借位 无进/借位
相等/等于0 不相等/不等于0
是负数
是正数
有溢出 无溢出
有偶数个‘1’ 有奇数个‘1’
表二 无符号数条件转移指令
指令 JA / JNBE JAE / JNB
转移条件 CF=0 且 ZF=0 CF=0 或 ZF=1
ending: mov ah, 4ch int 21h
code ends end start
LOOPE/LOOPZ指令工作流程
循环体
CXCX-1
CX=0?
Y
N
N
NZ指令工作流程
循环体
CXCX-1
CX=0?
Y
N
N
ZF=1?