首先理解这样的等式
地址是20H的寄存器中,存放的内容是01H
(20H)=#01H
符号指令的书写格式
单个操作数的指令:
操作助记符 [目的操作数]
两个操作数的指令:
操作助记符[目的操作数],[源操作数]
描述符号
Rn(n=0~7) | 当前工作寄存器组中的寄存器R0~R7之一 |
Ri(i=0,1) | 当前工作寄存器组中的寄存器R0或R1 |
@ | 间接寻址或编制寻址前缀 |
#data | 8位立即数 |
#data16 | 16位立即数 |
direct | 片内RAM单元地址及SFR地址 |
addr11 | 11位目的地址 |
addr16 | 16位目的地址 |
rel | 8位地址偏移量,范围:-128~+127 |
bit | 片内RAM位地址,SFR的位地址 |
(X) | X表示地质单元或寄存器的内容 |
/ | 位操作数的取反操作前缀 |
单片机的七种寻址方式
1.直接寻址
单片机的直接寻址是指指令中给出操作数的地址,操作数就在该地址中。例如,在一条指令中,操作码指明了要执行的操作,而地址字段指明了操作数所在的内存地址。这种方式下,CPU会直接从指定的内存地址中获取操作数进行运算或操作。
优点
直接寻址是一种简单直接地寻址方式,指令中包含了数据地内存地址,因此执行不需要额外地计算过程,节省了指令的存储空间。
缺点
指令寻址要求程序员必须清除的知道数据的内存地址,这在实际编程中会增加编程的复杂性,也降低了程序的灵活性和可移植性。
寻址空间
片内RAM低128字节,SFR(符号形式)
例:若(50H)=#3AH,执行MOV A,50H后,(A)=
分析:地址为50H的存储单元,存的立即数是3AH,MOV A,50H的意思是将片内RAM中地址为50H存储单元中存储的存储数据进行移动,源操作数会覆盖目的操作数
所以(A)=#3AH
这里解释一下单片机是如何存储MOV A,50H的,因为这条指令既有字母也有数字,单片机的ROM通过E5H和50H存储这条指令,E5H表示MOV,A后面跟的是寄存器,50H表示寄存器的地址。
2.寄存器寻址
寄存器寻址中,操作数直接从寄存器中读取或写入,在使用寄存器寻址时,指令中的操作数字段通常指示了要访问的寄存器的标识符,而实际的数据就存储在该寄存器中。例如,在一条指令中,操作码指明了执行的操作,而操作数字段指示了要从哪个寄存器中获取数据或向哪个寄存器中写入数据。
优点
寄存器是CPU中的高速寄存器,因此寄存器寻址速度非常快,提高了指令执行的效率,直接从寄存器中获取数据可以节省对内存的访问时间,避免了频繁读写内存的开销。
缺点
CPU内部的寄存器数量有限,对于复杂的计算或大规模数据处理,可能会导致寄存器资源不足的问题。
寻址空间
R0~R7、A、B和DPTR
例:若(R0)=#30H,执行MOV A,R0后,(A)=
分析:寄存器R0中的数据为30H,将寄存器R0中的数据,覆盖A,所以(A)=#30H
这条指令只有字母,所以ROM通过只通过E8H存储这条指令即可
3.寄存器间接寻址