第四章指令系统.docx
- 文档编号:9390695
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:26
- 大小:182.45KB
第四章指令系统.docx
《第四章指令系统.docx》由会员分享,可在线阅读,更多相关《第四章指令系统.docx(26页珍藏版)》请在冰点文库上搜索。
第四章指令系统
第四章指令系统
一单片机的编程过程
例:
TEST.ASM源文件
ORG2018H
DCB0BDH
AXEQU1AH
BXEQU1CH
ORG2080H
MAIN:
LDAX,#01H
LDBX,#03H
LJMPMAIN
END
编译成.OBJ文件
XXXXXX(定位信息)
0BDH
XXXXXX(定位信息)
LD1AH,#01H
LD1CH,#03H
LJMP2080H
翻译成.HEX文件
二汇编语言指令格式:
操作码:
指令类型(传送、加、减、乘、除、逻辑判断等)
操作数:
代表操作码所要操作的数据或数据存放的地址,在8098的指令系统中一条指令最多可以有三个操作数。
三指令系统使用的数据类型
共6种
数据类型:
指的是操作数的数据表示方式和所占用的字节数。
A、字节型:
无符号型(字节型)0~255;有符号型(短整数型)(补码)-128~127
B、字型:
无符号型(字型)0~65535;有符号型(整数型)(补码)-32768~32767
C、双字型:
无符号型(双字型)0~232-1;有符号型(长数型)(补码)-231~231-1
对于不同的数据类型分配数据的地址有限制。
对于字节型地址可任意分配,对于字型低位地址必须是偶数,对于双字型最低位地址必须是4的倍数。
在每条指令中,都已明确指定所使用的操作数的数据类型。
四寻址方式:
寻址方式:
在指令中操作数表达具体数据的方式。
共有四种。
A、立即数寻址:
操作数直接就是数据。
数据前应加#号。
例:
LDB20H,#22H
B、寄存器寻址:
若数据是位于CPU内部的寄存器组或SFR时,可以使用寄存器寻址。
采用寄存器寻址的操作数是用要读写的寄存器或SFR的地址代表。
对于字或双字操作数用最低位的地址代表。
例:
LDB20H,22H(将22H的内容送到20H中)
LD20H,22H(将22H、23H的内容送到20H、21H中)
C、寄存器间接寻址:
对于读写外部地址单元(通过外部地址、数据总线),采用寄存器间接寻址方式。
寄存器间接寻址的操作数本身是CPU内部的寄存器,他的内容是要寻址的数据的地址。
例:
LD22H,4000H(错)
例:
LD22H,#4000H
LDB20H,[22H]
自动增量间接寻址:
LD22H,#4000H
(A)LD20H,[22H]+;(B)LDB20H,[22H]+
执行前:
20H[00H];21H[00H];22H[00H];23H[00H]4000H[55H];4001H[AAH]
(A)执行后:
20H[55H];21H[AAH];22H[02H];23H[40H]4000H[55H];4001H[AAH]
(B)执行后:
20H[55H];21H[00H];22H[01H];23H[40H]4000H[55H];4001H[AAH]
D、变址寻址:
由基地址和偏移地址组合形成的寻址方式。
例:
比较间接寻址和变址寻址
LD22H,#4000H
LD20H,[22H]
LD20H,30H[22H]
间接寻址的地址是4000H,变址寻址的地址是4030H。
长变址寻址和短变址寻址:
若偏移量为八位二进制数,为短变址寻址。
若偏移量为16位二进制数,为长变址寻址。
例:
短变址寻址
LD20H,30H[22H]
LD20H,-3H[22H]
短变址寻址的偏移量的范围从-128~127
例:
长变址寻址
LD20H,2000H[22H]
长变址寻址的偏移量范围是0~65535
零寄存器寻址:
变址寻址的变形。
零寄存器:
在CPU内部地址是00H、01H的两个寄存器的内容不能改变,就是零。
例:
LD20H,2000H[0]
LD20H,30H[0]
五指令中操作数使用寻址方式的规则:
在任一个指令中,只有最后一个操作数可采用四种寻址方式中的任一种,而其它操作数必须采用寄存器直接寻址方式。
例:
ADD20H,22H
ADD20H,[22H]
ADD[20H],[22H]
ADD20H,22H,24H
ADD20H,22H,[24H]
ADD20H,[22H],[24H]
再例:
LDAX,#4000H
LD[AX],#0001H
为什么会有这样的规律:
其中,操作码由八位二进制数组成
六指令系统分类
1、数据传送指令2、算术运算指令3、逻辑操作指令4、栈操作指令
5、无条件转移和调用指令6、条件转移指令7、位为“0”或位为“1”转移指令
8、循环控制指令9、单寄存器指令10、移位指令11、特殊控制指令
12、规格化指令
符号说明:
wreg:
操作数使用寄存器直接寻址的字型数据
waop:
操作数可使用任意一种寻址方式的字型数据
breg:
操作数使用寄存器直接寻址的字节型数据
baop:
操作数可使用任意一种寻址方式的字节型数据
lreg:
操作数使用寄存器直接寻址的双字型数据(双字型数据只能使用寄存器直接寻址方式)
七数据传送指令
(a)LDwreg,waop
LDBbreg,baop
(b)STwreg,waop
STBbreg,baop
(c)LDBSEwreg,baop短整数变整数
LDBZEwreg,baop字节变字
例:
LDBSEAX,#80H(A)AX:
1111,1111,1000,0000
LDBZEAX,#80H(B)AX:
0000,0000,1000,0000
八算术运算指令:
(A)程序状态字(PSW)
ST
VT
I
-
CZ
V
N
Z
中断屏蔽寄存器
Z:
零标志位
N:
负标志位
V:
溢出标志位
VT:
溢出陷阱标志位
C:
进位标志位
I:
中断标志位
ST:
粘着标志位
以上标志位除了I标志位和中断有关,ST标志位和循环移位指令标志位外,其余标志位都和加减乘除运算有关。
例:
LDBAL,#0FCH
LDBBL,#0FCH
ADDBAL,BL
C=?
,V=?
,VT=?
N=?
C=1,V=VT=0,N=1
例:
LDBAL,#01000110B
LDBBL,#01000110B
ADDBAL,BL
C=?
,V=?
,VT=?
N=?
C=0,V=VT=1,N=0
例:
LDBAL,#00111100B(60)
LDBBL,#10111010B(-70)
SUBBAL,BL
C=?
,V=?
,VT=?
N=?
C=0,V=VT=1,N=0
V和VT的区别:
VT:
算术运算若有溢出,可以使VT置1,若无溢出不能使VT清零。
只有通过专用指令CLRVT,VT才能等于0。
V:
随算术运算的溢出或不溢出而置1或清零。
V和VT的使用方法:
方法A:
1、程序复杂
2、可以知道具体那个运算出错。
方法A:
1、程序简单
2、不知道具体那个运算出错。
(B)加减法指令
1、加法
字节加ADDBbreg,baop(2操作数)
ADDBDbreg,Sbreg,baop(3操作数)
字加ADDwreg,waop(2操作数)
ADDDwreg,wbreg,waop(3操作数)
带进位相加
ADDCBbreg,baop(2操作数)
ADDCwreg,wreg(2操作数)
ADDCB和ADDC运算过程:
breg(wreg)=breg(wreg)+baop(waop)+C
例:
四字节加法:
(大于65536的加法)
838860+838860
838860=1100,1100,1100,1100,1100
838860=1100,1100,1100,1100,1100
程序:
SUM:
LDAX,#1100,1100,1100,1100B
LDBX,#1100B
LDCX,#1100,1100,1100,1100B
LDDX,#1100B
ADDCX,AX
ADDCDX,BX
RET
运算结果:
DX(高位)CX(低位)
2、减法
同加法一一对应
breg(wreg)=breg(wreg)-baop(waop)-(C的反)
(C)比较指令
CMPBwreg,waop
CMPbreg,baop
比较指令相当与减法指令(被比较数减比较数),但运算结果不存入wreg(breg)中,运算结果的正负,是否为零等,从而改变标志位(C、N、Z、V、VT)。
(D)乘除指令:
有符号数和无符号数的乘除指令不同。
1、乘法:
有符号数:
MULlreg,waop
MULlreg,wreg,waop
MULBwreg,baop
MULBwreg,breg,baop
无符号数:
MULUlreg,waop
MULUlreg,wreg,waop
MULUBwreg,baop
MULUBwreg,breg,baop
例:
MULU20H,24H21H,20H(CCH,CCH)25H,24H(CCH,CCH)
积:
A3D5C290H
运算结果:
21H,20H(C2H,90H)
23H,22H(A3H,D5H)
2、除法
有符号数:
DIVlreg,waop
DIVBwreg,baop
无符号数:
DIVUlreg,waop
DIVUBwreg,baop
例:
DIVU20H,24H23H,22H,21H,20H(00H,01H,12H,34H)
25H,24H(24H,68H)
商:
7H,余数:
135CH
21H,20H(00H,07H)23H,22H(13H,5CH)
九条件转移指令:
1、条件转移的基本模式:
例:
程序片断:
START:
LDAX,#01H
LDBX,#02H
CMPAX,BX
JCSTART
LDAX,BX
条件判断中的条件:
PSW中的各标志位。
2、条件转移指令的分类:
对进位标志位的判断、对V,VT,N标志位的判断、对Z标志位的判断、位测试指令、循环控制指令、对ST标志位的判断。
A、对进位标志位的判断(比较无符号数时使用)
JC,JNC,JH,JNH
JC:
C=1,进位标志位为1,跳转
JNC:
C=0,进位标志位为0,跳转
JH:
C=1且Z=0,当两个无符号数相比较,被比较数大于比较数时跳转。
JNH:
C=0或Z=1,当两个无符号数相比较,被比较数小于或等于比较数时跳转。
例:
CMP20H,22H
JNHcadd
B、对V、VT、N标志位的判断(比较有符号数时使用)
对V标志位的判断:
JV、JNV
对VT标志位的判断:
JVT、JNVT
对N标志位的判断:
JGT、JLE、JGE、JLT
JGT:
N=0,Z=0被比较数大于比较数跳转(带符号数)
JLE:
N=1或Z=1被比较数小于或等于比较数跳转(带符号数)
JGE:
N=0被比较数大于或等于比较数跳转(带符号数)
JLT:
N=1被比较数小于比较数跳转(带符号数)
例:
LDB20H,#0F4H
LDB22H,#0F5H
CMPB20H,22H
若0F4H,0F5H代表无符号数,若被比较数大于比较数则跳转,用什么指令?
答:
JH
若0F4H,0F5H代表有符号数(补码),若被比较数大于比较数则跳转,用什么指令?
答:
JGT
C、对Z标志位判断:
JNE、JE
JNE:
Z=0不相等则跳转
JE:
Z=1相等则跳转
D、位测试指令:
JBC,JBS对于CPU内部寄存器的每一位都可以通过相应的指令来测试内容
例:
JBC20H,7,cadd
JBS20H,0,cadd
E、循环控制指令:
DJNZbreg,cadd减一非零跳转
例:
LDB20H,#5
START:
.
.
.
DJNZ20H,START
.
.
.
例:
软件按键消抖,需要使用沿时子程序
沿时子程序
DELAY:
LDBAL,#30H
DELAY1:
NOP
DJNZAL,DELAY1
RET
沿时时间=循环次数*循环一次指令执行的时间
例:
编写沿时500US的子程序。
8098,12M
DELAY:
LDBAL,#XXXXH
DELAY1:
NOP
DJNZAL,DELAY1
RET
执行时间=NOP+DJNZ=4+9=13个状态周期
循环次数=沿时时间/13个状态周期
答:
500/13*0.25=154
DELAY:
LDBAL,#154
DELAY1:
NOP
DJNZAL,DELAY1
RET
再例:
编写沿时1MS的子程序。
8098,12M
程序1
DELAY:
LDBAL,#308
DELAY1:
NOP
DJNZAL,DELAY1
RET
程序2
DELAY:
LDAL,#308
DELAY1:
NOP
DJNZAL,DELAY1
RET
程序3
DELAY:
LDBAL,#154
DELAY1:
NOP
NOP
NOP
NOP
DJNZAL,DELAY1
RET
程序4
DELAY:
LDBAL,#7
DELAY1:
LDBBL,#22
DELAY2:
NOP
DJNZBL,DELAY2
DJNZAL,DELAY1
RET
F、对粘着位的判断:
JNST,JST
JNST:
ST=0,跳转
JST:
ST=1,跳转
十无条件转移和调用指令
1、无条件转移指令
SJMP、LJMP、BR
A、SJMP:
SJMPcadd
-1024≤cadd-当前指令地址≤1023,寻址范围小,占用的存储空间小
B、LJMP:
LJMPcadd
可以寻址地址空间的任一个地址,占用的存储空间大
例:
START:
ADDB20H,21H
JNVSTART1
LJMPERROR1
START1:
ADDB40H,41H
JNVSTART2
ERROR1:
XXXXXXXX
XXXXXXXX
XXXXXXXX
START2:
RET
C、BR:
BR[wreg]
把由wreg代表的寄存器内容作为转移的目的地址。
例:
LDAX,#4000HBR[AX]
当前PC=2900H,执行完指令后,PC=4000H
2、调用指令
子程序:
子程序是一段独立的程序模块。
可由主程序的调用指令调用。
使用子程序有利于程序的模块化、易修改性、程序的减化等。
例:
MAIN:
LDAX,#01HMAIN:
LDAX,#01H
LDBX,#01HLDBX,#01H
LDCX,#01HLDCX,#01H
LDDX,#01HLDDX,#01H
ADDAX,CXLCALLLADD
ADDCBX,DXLDAX,#02H
LDAX,#02HLDBX,#02H
LDBX,#02HLDCX,#02H
LDCX,#02HLDDX,#02H
LDDX,#02HLCALLLADD
ADDAX,CXLJMPMAIN
ADDCBX,DXLADD:
ADDAX,CX
LJMPMAINADDCBX,DX
RET
子程序调用指令:
SCALL、LCALL
SCALL:
SCALLcadd
-1024≤cadd-当前指令址≤1023,寻址范围小,速度快。
LCALL:
LCALLcadd
可以寻址地址空间的任一个地址,速度慢。
十一移位指令:
包括左移和右移指令
1、左移指令
C
0
字节、字、双字
SHLBbreg,#count由立即数确定移位次数(0~15)
SHLBbreg,breg由寄存器内容确定移位次数(0~31)
SHLwreg,#count由立即数确定移位次数(0~15)
SHLwreg,breg由寄存器内容确定移位次数(0~31)
SHLLLreg,#count由立即数确定移位次数(0~15)
SHLLLreg,breg由寄存器内容确定移位次数(0~31)
2、右移指令
A、逻辑右移指令
SHRBwreg,#count由立即数确定移位次数(0~15)
SHRBwreg,breg由寄存器内容确定移位次数(0~31)
SHRbreg,#count由立即数确定移位次数(0~15)
SHRbreg,breg由寄存器内容确定移位次数(0~31)
SHRLLreg,#count由立即数确定移位次数(0~15)
SHRLLreg,breg由寄存器内容确定移位次数(0~31)
B、算术右移指令
SHRABwreg,#count由立即数确定移位次数(0~15)
SHRABwreg,breg由寄存器内容确定移位次数(0~31)
SHRAbreg,#count由立即数确定移位次数(0~15)
SHRAbreg,breg由寄存器内容确定移位次数(0~31)
SHRALLreg,#count由立即数确定移位次数(0~15)
SHRALLreg,breg由寄存器内容确定移位次数(0~31)
C、左移和右移指令的使用
移位指令可分为逻辑性移位和算术性移位。
逻辑性移位
例:
半字节交换指令
SWAP:
LDBBL,AL
SHLBAL,#4
SHRBBL,#4
ORBAL,BL
RET
算术性移位
对于无符号数左移一位相当于乘2,右移一位相当于除2。
对于有符号数左移一位相当于乘2,若最高位是1,右移一位且最高位移入1相当于除2。
若最高位是0,右移一位且最高位移入0相当于除2。
十二栈操作指令
堆桟操作是存储数据的特殊方法。
下面比较普通的数据存储和压栈操作
LD20H,30H
PUSH30H
普通的数据存储需要在指令中明确指定数据存储的目标地址。
而在压栈操作中不需要指出数据存储的目标地址。
那么在压栈操作中数据存放到什么位置?
在SFR中有两个个寄存器(0018H,0019H)叫堆桟指针寄存器SP。
在压栈操作中,数据存储的目标地址就是堆桟指针寄存器的内容(所以堆桟指针寄存器是一个字,因为存放的是地址)。
SP的内容可以是位于CPU内部的寄存器组中,也可以位于片外的数据存储器中。
LDSP,#0020H
PUSH30H
和LD20H,30H等同。
再例
LDSP,#0020H
PUSH30H
PUSH30H
在压栈操作中,每执行一次压栈操作,SP的内容自动减2。
比较普通的数据存储和出栈操作
LD20H,30H
POP20H
在出栈操作中,也不需要指出数据的源地址,在出栈操作中,将SP的内容作为数据的源地址,将此数据存入出栈指令所确定的地址中。
每次出栈操作后,SP的内容自动加2。
堆桟操作的应用,堆桟操作主要在中断程序中应用。
此外在一些特殊指令中也应用堆桟操作。
例:
LCALL和RET指令。
LCALL=PUSHPC
RET=POPPC
例:
LDSP,#00A0H
LDAX,#1122H
LDBX,#55AAH
PUSHAX
PUSHBX
LDAX,#0
LDBX,#0
POPAX
POPBX
堆栈的特点:
1、在堆栈指令中,不用指出数据存放或读取的地址,这个地址由堆栈指针来确定。
2、堆栈是向下生成。
PUSH:
SP=SP-2、POP:
SP=SP+2
3、先入后出
例:
LDSP,#00C0H
LDAX,#0AA55H
LDBX,#0BB66H
LDCX,#0CC77H
PUSHAX
PUSHBX
PUSHCX
LDAX,#0
LDBX,#0
LDCX,#0
POPCXPOPAXPOPBX
POPBXPOPBXPOPCX
POPAXPOPCXPOPAX
十三单寄存器指令和特殊控制指令见书
十四例1将3FFH转换成500BCD码
VV1EQU24H
VV2EQU26H
VV3EQU28H
T500:
LD20H,#3FFH;000H--3FFH
CLR22H
MULU20H,#500
SHRL20H,#10
DIVU20H,#100
LDVV1,20H
DIVUB22H,#10
LDBZEVV2,22H
LDBZEVV3,23H
RET
作业:
1用P2.0P2.5分别控制AB灯,编程使
A亮1秒―>A灭1S―>B亮1S->B灭1S->AB亮1S->AB灭1S循环
2、按下表填写计算结果和PSW
20H
22H
24H
PSW
ADD24H,20H,22H
1000H
2000H
ADD24H,20H,22H
2000H
7000H
ADD24H,20H,22H
8000H
1000H
ADD24H,20H,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四章 指令系统 第四
![提示](https://static.bingdoc.com/images/bang_tan.gif)