问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

单片机学习笔记:汇编语言的7种寻址方式详解

创作时间:
作者:
@小白创作中心

单片机学习笔记:汇编语言的7种寻址方式详解

引用
CSDN
1.
https://blog.csdn.net/2302_80302037/article/details/146162340

汇编语言是计算机硬件的基础语言,其寻址方式决定了指令如何找到操作数或操作数的地址。本文详细介绍了单片机汇编语言中的7种主要寻址方式,包括立即数寻址、寄存器寻址、直接寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。通过具体的指令示例和执行过程,帮助读者深入理解每种寻址方式的特点和应用场景。

1.立即数寻址/立即寻址

定义:直接给出指令的操作数;

eg.MOV A, #28H (其中#代表是立即数)

将16进制的立即数28H送入累加器A中。指令执行后将A中原来的数据覆盖掉,记作:A<-28H

执行过程如下图所示:假设指令存放的物理地址是0100H开始的地址;74H是操作码;

因为这里的累加器A是一个8位的寄存器,所以这里的立即数只能是8位数,并且只能是整数不能是小数。立即数只能作为源操作数,而且其位数要与目的操作数的位数一致

2.寄存器寻址

定义:指令所用的操作数在CPU的内部寄存器中,指令中的操作数用寄存器名来表示

eg.MOV A, #45H

其中,A是寄存器寻址,45H为立即数寻址

eg.INC R0 ;R0<-RO+1

R0为寄存器寻址

eg. MOV A,R1

A和R1均为寄存器寻址

eg.MOV A,R1 ;A<-R1

INC R5 ;将寄存器R5中的内容加1再送回R5

其中源操作数的数据并不消失

3.直接寻址

定义:直接给出操作数所在存储器的地址

eg. MOV A,45H ;将地址为45H的存储器单元中的内容取到累加器A中

其中A是寄存器寻址,45H是直接寻址

4.寄存器间接寻址

定义:操作数所在的存储单元的有效地址在指定的寄存器中,指令给出的是存放这个地址的寄存器

eg.MOV A, @R0 ;将R0中的内容所表示的地址单元中的内容送A(将寄存器R0中的内容作为地址,然后让这个地址的内容取给累加器A)其中@是间接寻址用于区别寄存器寻址

5.变址寻址

定义:指令操作数指定一个存放变址基值的变址寄存器。变址寻址时,偏移量与变址基值相加,其结果作为操作数的地址。

1.用PC(程序计数器)作为基地址加上累加器A 的内容形成操作数的地址A+PC

eg.MOVC A,@A+PC (其中MOVC表示从程序存储器中取数据)

eg.

该程序表示先将立即数2赋值给累加器A中,A的起始地址为0100,当执行到指令MOVC A,@A+PC时A=2,PC=0103H,因此,A+PC=0105H, @A+PC表示把0105H作为地址,从这个地址指向的单元中取对应的数据送给A,所以结果就是将0105H中的64H送到了A中

2.通过DPTR(数据指针)作为基地址,加上累加器A 的内容形成操作数的地址A+DPTR

eg.

在该程序中TABLE作为标号,是一个表格的首地址,表格中存放的是0,1,2....的ascll码值。首先将02H的立即数赋值给A,然后把表格TABLE以立即数的形式送到DPTR中作为基地址,然后将基地址加上A的值。例如,若A中的值是02,就得到了TABLE+2的地址,然后通过MOVC A,@A+DPTR,将02的ascll码32H(TABLE+2的地址单元内容)送到A中,就实现了一个数字转ascll码的操作

6.相对寻址

7.位寻址

eg.MOV C,P1.0 ;将P1.0的状态送到C(PSW的CY位/布尔处理机)

eg. SETB 20H.6;将20H单元的第6位置1

eg. CLR 25H ;将25H位的内容清零

总结

指令的寻址方式就是寻找操作数以及寻找操作数的地址的方式

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号