8051汇编语言概述一 ) 指令分类 42个助记符,33种功能,共...
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
四) 常用符号
A : 累加器(ACC) @: 间接寻址的前缀。如: @R0,@A+PC,@A+DPTR #: 立即数(常数) 如: #10 #0feh #0fadeh #00101011B Direct: 储单元的地址,数字前没有#, (00h~0ffh) B: 寄存器B, 乘,除指令中使用 bit: 可用于位操作的位的地址 C: 进位标志, 在位运算时做位累加器. addr11: 11位目标地址,用于2k范围跳转(ACALL AJMP) addr16: 16位目标地址,用于64kB长跳转或查表 DPTR: 16位数据指针寄存器(DPH DPL) PC: 16位程序计数器,用于存放下一条执行程序的地址 Ri: 可用于间接寻址的地址寄存器 R0或R1 Rn: 工作寄存器R0~R7
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 ;传送个数判断
3-2-2 直接寻址
直接寻址的操作数为RAM单元的地址。一般为双字节 或3字节指令。 例如: D0 equ 30h mov a, 30h ;将30h单元的内容送到累加器A mov r0, D0 ;将30h单元的内容送到r0 mov 31h,30h ;将30h单元的内容送到31h add a, 30h ; (30h) +A -> A 注意:直接寻址不能用于高128B的通用RAM单元 例如: mov a, 80h 相当于 mov a, p0 ;将P0口的状态送到累加器A
E5h direct A←(direct) 1110011i 74h data A←(Ri) A←#data
注意:以上传送指令的结果均影响程序状态字寄存器 PSW 的 P 和 Z 标志。
2) 以 Rn 为目的地址的传送指令(3 条)
助记符格式
MOV Rn, A MOV Rn, direct
机器码
11111rrrB
五)汇编语言的伪指令
伪指令不是真正的指令,它无对应的机器码,在汇编时不 产生目标程序,只是用来对汇编过程进行某种控制。 (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
A (Ri)
i=0,1
1
注意:以上指令结果影响程序状态字寄存器 PSW 的 P 标志。
2) 半字节交换指令XCHD(1 条)
助记符格式 机器码 相应操作
A 3~0(Ri) 3~0
指令说明
高位不变
机器周期
1
XCH A, @Ri 1101011iB
注意:上指令结果影响程序状态字寄存器 PSW 的 P 标志。 3) 高低字节交换指令SWP(1 条)
movc a, @a+pc Ljmp @a+dptr
3-2-5 相对寻址
相对寻址是以PC基地址,+指令给定的相对偏移量 (+127~ -128),作为程序跳转的新地址付给PC。在编程 时,偏移量常通过标号让编译软件自动计算。 例如:mov dptr, #tab jz LP1 …… LP1: mov a, #00h …… jc LP1 …… sjmp LP1
助记符格式 SWAP A 机器码 11000100B 相应操作 A 3~0A 7~4 指令说明 机器周期 1
注意:上指令结果影响程序状态字寄存器 PSW 的 P 标志。
3-3-5 堆栈操作指令PUSH POP
助记符格式 PUSH direct 机器码 0C0H direct 相应操作 机器周期 2
3-2 8051的寻址方式
3-2-1 立即寻址
立即寻址的操作数为常数,包含在指令字节中。即操作 数为存放在程序存储空间的常数,一般为双字节或3字节指令。 例如: D0 equ 30h mov a, #30h ;将常数48 (#30h) 送到累加器A mov r0, #D0 ;将常数48 (#30h) 送到r0 mov dptr, #1234h ;将#1234h送到dptr mov DPTR, #tab1 ;将tab1标号的地址送到 dptr寄存器中 …… tab1: db 10h,11h,55h,0f8h,0ach
i=0,1
2 2
2
4) 以间接地址为目的地址的传送指令(3 条)
助记符格式 机器码 相应操作 指令说明 机器周期
MOV @Ri, A
MOV @Ri, direct MOV @Ri, #data
1111011iB
1010011iB direct 0111011iB data
(Rn) ← A
(Rn) ←(direct) (Rn) ←#data
二) 指令格式
操作码 例如:ADD 目的操作数,源操作数 A, #6FH ;
三) 汇编语言语句的格式
在8051单片机汇编语言设计中,不区分大小写字母
标号:操作码 操作数1,操作数2 ,操作数3;注释 例如: LP1: MOVE R3, #00H ;给寄存器R3臵0 MOV DPTR, #LP1 ;将LP1在存储器的 ; 位臵付给DPTR cjne a, #20h, LP1
3-2-6 位寻址
位寻址的的操作数是RAM单元和特殊功能寄存器中可 用于位操作的位的地址。 例如: setb 40h ;将28h的最低位(第0位)臵1 mov c, 3fh ;将27h的最高位(第7位)送到CY mov 3fh , c ;将CY 送到27h的最高位(第7位) anl c, 3fh ;CY & (27h的第7位) -> CY
3-2-5 变址寻址
变址寻址是以PC或DPTR为基地址,以累加器A为变 址寄存器的间接寻址方式,其操作数存放在(PC+A)或 (DPTR+A)指定的程序存储单元中。常用于查表。 例如:mov dptr, #tab mov a, #00h movc a, @a+dptr ;执行后A = #11h mov a, #01h movc a, @a+dptr ;执行后A = #22h tab: db 11h,22h,33h,44h,55h,66h,77h,88h
五)汇编语言的伪指令
4) DB nn1,nn2 … ;单字节项或项表 例如:tab1: DB 07h,10,’A’,0f5h 5)DW nnnn1,nnnn2 … ;双字节项或项表 例如:tab2: DW 07h,1230h 则在tab2起始程序存储器单元的内容为: 07h 00h 30h 12h 6)DS nn ; 预留程序存储区 例如:ORG 1200h DS 10 则在1200h地址开始,保留10个单元的存储区
MOV direct ,@Ri MOV direct1,
direct2 MOV direct, #data
1000011i (direct) ←(Ri) 85h direct1 (Direct1) ← (Direct2) direct2
75h direct data (Direct) ← #data
3) 以直接地址为目的地址的传送指令(5 条)
助记符格式 MOV direct , A MOV direct ,Rn 机器码 相应操作 指令说明 n=0~7, rrr=000~111 机器周期 1 1
0fah direct (direct) ← A 10001rrr direct (direct) ←Rn
3. MCS-51单片机的指令系统
3-1 8051汇编语言概述
一 ) 指令分类
42个助记符,33种功能,共111条指令。 a. 按占用存储单元数量来分: 单字节指令(49)、双字节指令(45)、三字节指令(17); b. 按执行时间分: 单周期指令(64)、双周期指令(45)、4周期指令(2: 乘、 除) c. 按指令用途分: 伪指令(6)、数据传送类指令(28)、逻辑操作类指令(25)、 算术运算类指令(24)、位操作类指令(17)、控制转移类指 令(17) 。
3-2-3 寄存器寻址
寄存器寻址是指R0~R7、A、B、dptr或CY的间操作。 寻址寄存器的地址隐含在操作码中,其中R0~R7由操作码 的低3位指定。多为单字节指令。 例如: mov r0, a ;将的内容送到r0 add a, r0 ;将累加器A 的内容+r0->A inc r0 ;r0的内容+1 inc dptr ;dptr的内容+1 clr c ;进位标志c清零
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
3-3-1 片内数据存储器传送指令MOV
片内数据存储器传送指令MOV 共17 条,指令基本格式: MOV <目的操作数>, <源操作数> 1)以累加器 A 为目的地址的传送指令(4 条)
助记符格式 MOV A, Rn MOV A, direct MOV A, @Ri MOV A, #data 机器码 11101rrrB 相应操作 A←Rn 指令说明 n=0~7, rrr=000~111 i=0,1 机器周期 1 1 1
MOV @Ri, A
1110001iB 外部(Ri) ← A
2
MOVX A, @Ri 和 MOVX @Ri, A 不影响P2口的状态
3-3-3 程序存储器传送指令MOVC
MOVC可对程序存储区数据进行传送,主要用于将
程序存储区的数据表格传送到A,所以,又称查表指令。共 有2条:
MOVC A,@A+PC MOVC A, @A+DPTR 例1:请将程序存储器中,标号TAB起始的32个字节 的数据读入到30H开始的内部RAM中 编程如下:
i=0,1
1
2 1
5) 16位传送指令 mov dptr, #mmnnH ; nnH -> DPL mmH -> DPH
3-3-2 片外数据存储器传送指令MOVX
助记符格式 MOVX A, @dptr MOVX @dptr,A MOVX A, @Ri 机器码 0e0H 0f0H 1110001iB 相应操作 A←(dptr) (dptr) ← A A←外部(Ri) 影响P、Z 指令说明 影响P、Z 机器周期 2 2 2
POP dirBaidu Nhomakorabeact
注意:
3-2-4 寄存器间接寻址
寄存器间接寻址的1个操作数的地址存放在寄存器r0、r1 或dptr中。多为单字节指令。 例如: D0 equ 30h mov r0, #D0 ;将#30h送到r0 mov A ,@r0 ;将30h单元的内容送到A inc r0 ;r0=r0+1 mov A ,@r0 ;将31h单元的内容送到A add A ,@r0 ;将(31h)+A A movx A ,@dptr ;将dptr指定的外部存储单元的 ;内容送到A
3-3 数据传送类指令
数据传送操作是指把数据从源地址传送到目的地址, 源地址内容不变。共29条指令,使用8种助记符: 片内数据存储器传送指令MOV;
片外数据存储器传送指令MOVX;
程序存储器传送指令MOVC; 累加器交换指令 XCH、XCHD、SWAP; 堆栈操作指令 PUSH、 POP; 3-5
相应操作
Rn ← A
指令说明
n=0~7, rrr=000~111
机器周期
1 1 1
10101rrr Rn←(direct) n=0~7, direct rrr=000~111 Rn←#data n=0~7, rrr=000~111
MOV Rn, #data 01111rrr data
注意:以上传送指令的结果均不影响程序状态字寄存器 PSW 的 P 和 Z 标志。