计算机是通过执行指令(由 *** 作码字段和 *** 作数字段组成)序列来解决问题的,因而每种计算机都有一组指令集(指令系统)供给用户使用,寻址就是其中之一(如为了找到 *** 作数)。
寻址方式:1)与数据有关的寻址方式 :
a 立即寻址方式: *** 作数(立即数)直接存放在指令中,紧跟在 *** 作码,作为指令的一部分,这中寻址方式用来表示常数,它经常用于给寄存器赋初值,且只能用于源 *** 作数字段,不能用于目的 *** 作字段,且源 *** 作数长度与目的 *** 作数长度一致。
b 寄存器寻址方式: *** 作数在寄存器中,指令用来指定寄存器号,不需要访问存储器来取得 *** 作数,速度较快。
c 直接寻址方式: *** 作数的有效地址(在8086里把 *** 作数的偏移地址叫做有效地址)只包含位移量一种成分,其值就存放在代码段中指令的 *** 作码之后,位移量的指即 *** 作数的有效地址。适用于处理单个变量。
d 寄存器间接寻址方式: *** 作数的有效地址只包含基址寄存器内容或变址寄存器内容一种成分,因此有效地址就在某个寄存器中,而 *** 作数就在存储器中。适用与表格处理,执行完一条指令后,只需修改寄存器的内容就可以取出表格下一项。
e 寄存器相对寻址方式: *** 作数的有效地址即为基址或变址寄存器和指令中指定的位移量之和。
f 基址变址寻址方式: *** 作数的有效地址是一个基址寄存器和一个变址寄存器之和。
g 相对基址变址寻址方式 h 比例变址寻址方式 等等。
2)与转移地址有关的寻址方式。
a 段内直接寻址:转向的有效地址是当前IP寄存器的内容和指令中指定的8位或16位位移量之和。
b 段内间接寻址:转向有效地址是一个寄存器或是一个存储单元的内容 。(常用)
c 段间直接寻址 d 段间间接寻址
此外 还介绍一些寄存器 如通用寄存器 AX BX CX DX 也可叫做数据寄存器,可以以字或字节的形式访问, 另外 SP BP SI DI 四个16位寄存器可以像数据寄存器一样在运算时存放 *** 作数,但他们只能以字(16位)为单位使用,此外它们更经常的用途是在存储器寻址时,提供偏移地址,再者有四个专门提供段地址的寄存器,称为段寄存器 有代码段CS 数据段DS 堆栈段SS 附加段ES。
你好!在c语言中无法对SFR(特殊寄存器),比如程序状态寄存器(PSW)等寄存器进行 *** 作,也就不能判断它们的标志位了。比如判断Z标志位,C标志位等 *** 作。对于要 *** 作这类寄存器。我们唯一的办法只能用汇编语言。或者在C语言中嵌入汇编语言来解决。所以我们写单片机程序千万不能放弃汇编语言。某些底层的硬件 *** 作只能靠汇编语言来完成。
希望对你有所帮助,望采纳。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)