【89c51汇编语言】寻址方式与数据传送类指令

本文详细介绍了89C51汇编语言中的寻址方式,包括立即数寻址、直接寻址、寄存器寻址等,并讲解了数据传送指令如MOV、MOVX、MOVC。此外,还讨论了堆栈指针SP的作用和堆栈操作,以及查表指令、程序计数器PC和数据指针DPTR的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

汇编语言基础知识

基础格式

先来介绍MCS-51汇编语言指令由以下的几个部分构成:
【标号:】操作码【目的操作数】【,源操作数】【;注释】
其中【】中的内容为可选项。
标号:又称作是指令地址符号。
操作码:助记符所表示的指令的操作功能。
操作数:写在左边的称为目的操作数(操作结果存放的寄存器或存储器单元地址)写在右边的称之为源操作数(表示操作数的来源)
注释用‘’与指令隔开。

符号说明

1.#data;8位立即数(立即数:通常是指在立即寻址方式指令中给出的数,也就是指令中运用到的常数,可以代表地址,也可以代表数据)
2.#data16:16位立即数
3.direct:表示8位内部数据存储器单元的地址。
4.Rn:n=0~7,表示当前选中的寄存器区的8个工作寄存器R0 ~ R7。
5.Ri:i=0或1,可做地址指针即间址存储器。类似c语言中的*p
6.Addr11,Addr16:表示11位和16位的地址。
7.rel:偏移量,相对于下一条指令的第一个字节计算。
8.DPTR:数据指针
9.@:间址寄存器以及基址寄存器的前缀
10.A:累加器ACC
11.B:专用寄存器

数据传送指令MOV

一般不影响标志位,只有堆栈操作(PUSH、POP)可以直接修改PSW。
MOV:片内数据传送指令
MOVX: 片外数据传送指令
MOVC:程序存储器数据传送指令

寻址方式

  1. 立即数寻址
MOV A,#26H      ;把立即数26H送入到ACC中 
  1. 直接寻址
    操作数所在的存储单元地址放入指令
MOV A,P1    ;将P1的数据送入到ACC
MOV A,76H   ;区分立即数寻址,这里指把76H地址中的内容送入到ACC
  1. 寄存器寻址
    寄存器中的内容是操作数
MOV A,R1      ;将寄存器R1中的内容送入到ACC
  1. 寄存器间接寻址
    寄存器前用“@”标志,指定寄存器中的内容是操作数的地址该地址对应的存储单元中的内容是操作数
MOV A,@R0        ;注意,这里只能是@R0或者@R1。

这里举个例子理解:把操作数45H放在内部RAM的3FH单元中,地址信息3FH存储在R0寄存器中。这条指令,是将R0所指的3FH单元中的内容45H送入到ACC中。此时(A)=45H
5. 变址寻址
是将程序指针PC或者是数据指针DPTR作为基址寄存器,以累加器A作为变址寄存器,两者内容相加(基地址+偏移量)形成16位操作数地址:@A+PC

MOVC A,@A+PC    
  1. 相对寻址
    以程序计数器PC的当前值为基地址,与指令中第二字节给出的相对位移量rel相加,所得和即为转移地址。
    指令执行完后,PC当前值为该指令首字节所在单元地址+2
    有目的地址=当前PC值+rel
  2. 位寻址
    给出直接地址
    在这里插入图片描述

实例:基于89c51流水灯程序c与asm的对照

c语言版本

#include<reg52.h>
void Delay(void);
void main(void)
{
   
	unsigned int i=0;
	unsigned char cnt=0;
	while(1)
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值