|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Ele_insect 于 2022-6-7 09:52 编辑 8 x- u5 n7 s& A& A4 b
: B3 K* i& H8 B1 v一、单片机指令系统概述 6 q, J! w4 F* y. B2 D/ |
1、指令概述
2 \- a% O- Y9 j C* u5 _' [指令:是CPU根据人们的意图来执行某种操作的命令。
! K4 L/ ^3 Q8 b" @- b/ F" k) Z指令系统:是计算机所能够执行的全部指令的集合。
/ M+ r9 d# @) {4 C程序:是按人们的要求所编制的指令操作序列。* I \' u% _2 m/ k' @
本章主要介绍80C51单片机的汇编语言指令系统。
; Y+ v! W# }% ?4 a/ a) Q5 ~+ ~程序设计语言:是编写程序的某种规则。! K( y m. h+ q
. y: y/ `7 z! h# t: U! C三类编程语言:0 J/ P4 N6 N0 {/ r
机器语言、汇编语言、高级语言4 R( I/ m( [. t8 H1 `
机器语言:用二进制编码表示每条指令,是计算机能直接识别和执行的语言。
. g2 n9 H, A9 y- i5 @& }汇编语言:是用助记符、符号和数字等来表示指令的程序设计语言。它与机器语言指令是一一对应的。
7 A8 v# [1 A2 u5 `7 Z' Y. u( ~4 B
4 S" s( |2 g3 E7 s5 O2 、指令格式和指令的表示形式
5 J+ A; m0 k7 w) c" H$ ~0 k L 80C51汇编语言指令格式
$ M+ W9 u* |0 @* \4 _, a[标号:] 操作码 [目的操作数][,源操作数][;注释]- p0 G' X* P/ g h7 G& }) R! w a
4 _0 ?6 S0 H# O* c
: L& N: L5 h, z5 `5 a
3、指令中的常用符号; h% m- \" F& j K: V
(1)Rn(n=0~7)当前选中的工作寄存器R0~R7# V+ l1 t) _/ r
(2)Ri(i=0,1)当前选中的、作地址指针的寄存器R0、R1
7 ?0 A/ Q) x( a' \(3)#data 8位立即数+ q% ~3 b1 W! p; a$ o
(4)#data16 16位立即数
7 `) m3 ?; E9 ?$ B 如:MOV DPTR,#data16
( {5 U* o+ v$ y* f5 d. [(5)direct 8位片内RAM单元(包括SFR)的直接地址
, N0 F$ U* \1 B/ P! \ 如:MOV direct,#data ;#data→direct
1 X$ y* @9 B% b; Y( X- F+ t, g(6)addr11
& l' ^0 F# K0 [ E9 R 11位目的地址,用于Acall和AJMP指令中
$ E# h- @4 N! I7 m3 V/ ~6 p(7)addr16 + B% L& K7 r2 @' L- o
16位目的地址,用于LCALL和LJMP指令中5 t J; i s# s
(8)rel 补码形式的8位地址偏移量* ]6 }0 V+ o) W9 K' ^# ^; }/ M
(9) bit 片内RAM或SFR的直接寻址的位地址8 \$ ~$ _3 D; H4 n, o- S, T
(10)@ 间接地址方式中,表示间址寄存器的符号
+ }" I) R! X5 c2 b(11) / 对位取反操作 如:ANL C,/P1.2
0 w4 T# W; h& q6 `+ _; ]& N(12)(×) 指“×” 中的内容,其内容是数据; ×是地址
: K( f' u" r2 h(13)(( ×))由“×”间接寻址单元中的内容, ×中的内容“(×) ”是地址
3 N/ H/ @/ _& |. Z% D如:设58H单元的数据是36H,R0的内容是58H
8 n' z$ U2 h3 a+ C5 Z% O" D# U/ yINC 58H;(58H)+1→ 58H
+ m1 R( n$ @9 u3 w4 KDEC @R0;((R0))-1 → (R0)
. m- @' h& E+ [0 g(14)→ 示将箭头左边的内容传送到箭头右边的单元1 u$ d+ D0 J3 ? [& ~' M5 M1 F
3 M0 K' T5 p: l0 ^7 \
4 、指令的字节数和指令周期5 O) |; d4 H1 t7 E) z9 Q( q
5 x- g0 o, C% v2 ~% x* G8 B' M. Y% y; u8 p4 H$ p4 }# g1 Z
二、80C51单片机指令寻址方式
6 s, S8 a% ]6 D* V1 t& S6 }9 ?寻址方式:就是指令中找到操作数或操作数地址的方式。. j5 ?. j0 m7 Z; s9 J/ Z2 h
80C51单片机有七种寻址方式:
0 c% u, }& P3 T# q$ t0 J0 E1、立即寻址
7 y% s3 O# Z. r9 V, b操作数在指令中,在操作码后面。用“#”表示。5 q$ F |; [4 b9 B0 B2 f/ _# x
操作数可以是8位的,也可以是16位的。' I2 L5 }5 \+ R. h G; Y* y% r. X
2、直接寻址
2 }, |- ~. p) |% P* l3 c直接寻址:在指令中直接给出操作数所在存储单元的地址。指令中操作数部分是操作数所在地址。; Z9 S! m! v$ G$ x
直接寻址方式可访问片内RAM的128个单元以及所有的SFR。对于SFR,既可以使用它们的地址,也可以使用它们的名字。
- p! z% V) K8 D% [3、寄存器寻址 ; h+ H, G# c6 d; c% g
操作数在某一个寄存器中。+ k- E/ F9 F4 l# }2 i" T' g- `1 K1 J; S- ]
所用的寄存器可以是:R0~R7、A、B、DPTR等。
5 |' b/ n! H0 P. M `5 ? 4、寄存器间接寻址! x J1 y1 N4 P, D$ p
指令中寄存器中的内容给出的是操作数的地址。
. d: u% J$ O4 n; ^80C51规定:R0、R1和DPTR可以作为间接寻址寄存器。
/ a1 i* V B _) s* G; T(1)R0、R1间址访问片内RAM的低128B或片外RAM的低256B空间) f" x. R/ ?2 P0 e' D3 `
如:设(R0)=65H,(65H)=47H
7 f( w5 N! P( k, X, \MOV A,@R0 ; (65H)→ A,A中的值是47H6 H- Y8 K+ D, A$ u" Q1 l" K
MOV @R0,#3AH ;3AH→ 65H6 D3 e4 h( {" g/ U: Y2 e$ q
MOVX A,@R0 ;外RAM的(65H)→ A
/ s' ~. b& K* C3 {$ H
8 r1 B) V' H3 O/ k5 O0 \' N3 T
& f5 E. Z' z- Q* ]' o8 z9 I |
|