第3章寻址方式.docx
文本预览下载声明
第3章 寻址方式
罗文坚
中国科大 计算机学院
/~wjluo/mcps/
本章内容
指令格式的回顾
数据寻址方式
程序存储器寻址方式
堆栈存储器寻址方式
I/O端口寻址
指令的组成
指令通常应提供的信息
做什么操作、操作数从哪里来、操作结果放在哪里
对于调用和转移指令,还要涉及转移或调用地址的提供方式
指令的组成
操作码字段(Field):标明计算机要执行什么操作。
相对简单:对每一种操作指定相应的二进制代码即可。
操作数字段:指出指令在执行过程中所需要的操作数(值为多少 或者放在什么地方或者控制转移到什么地方),以及操作结果送到哪里。
比较复杂:寻址方式!
操作码
操作数
……
操作数
寻址方式
定义1:指令中操作数的表示方式。
定义2:规定如何对地址字段作出解释以找到操作数。
程序转移时需提供转移地址,这与提供操作数地址在方法上没有本质区别,因此也归入寻址方式的范畴。
一个指令系统能够提供哪些寻址方式,能否为编制程序提供方便,这是指令系统设计的关键。
高效开发微处理器软件,需通晓每条指令采用的寻址方式。
本章内容
指令格式的回顾
数据寻址方式
程序存储器寻址方式
堆栈存储器寻址方式
I/O端口寻址
数据寻址方式
寄存器寻址
立即寻址
直接数据寻址
寄存器间接寻址
基址加变址寻址
寄存器相对寻址
相对基址加变址寻址
比例变址寻址(80386及更高档)
RIP相对寻址(Pentium 4和Core 2的64位模式)
以MOV指令为例
注意:
MOV指令是把源操作数复制到目的操作数,源操作数并不改变。
除MOVS指令外,任何其他指令都不允许储存器到存储器的传送。
以MOV指令为例
以MOV指令为例
寄存器寻址
寄存器寻址:操作数在寄存器中。
只要记住寄存器名,就很容易使用。
8位、16位、32位、64位寄存器
指令中使用相同长度的寄存器。
正确:MOV AX, BX
错误:MOV AX, BL
少数指令例外。
例如,移位指令SHL:SHL DX,CL
就MOV指令而言:
不允许段寄存器到段寄存器的MOV指令。
CS不能作为MOV指令的目的操作数。
Example
0000 8B C3 MOV AX, BX;把BX的内容复制到AX
0002 8A CE MOV CL, DH
0004 8A CD MOV CL, CH
0006 66 | 8B C3 MOV EAX, EBX
0009 66 | 8B D8 MOV EBX, EAX
000C 66 | 8B C8 MOV ECX, EAX
000F 66 | 8B D0 MOV EDX, EAX
0012 8C C8 MOV AX, CS
0014 8E D8 MOV DS, AX;CS?DS分两步实现
0016 8E C8 MOV CS, AX;编译通过,运行有问题
立即寻址
立即数:在存储器中,数据紧接着放在操作码后面。
立即寻址可操作字节、字数据、双字数据(32位微处理器)、64位数据(64位模式)。
MOV AX, 1234H
MOV EAX, 123456H
MOV RAX, 123456780A311200H
Example
MOV BL, 44;十进制数44送入BL寄存器
MOV AX, 44H;十六进制数44送入AX
MOV CL,;二进制送入CL
说明:
字母H表示16进制数。如果十六进制数以字母开头,则汇编程序要求前面加0,如0F2H。
如果用撇号将ASCII码括起来,也可以表示立即数,如MOV BX,’AB’。
对于二进制数,在数字后面加字母B来表示。
Example
.MODEL TINY;选择TINY模型,把程序汇编成一
;个代码段。TINY程序将会被成.COM程序,
;适用于DOS系统
.CODE;指示代码段的开始
.STARTUP;指示程序的开始
MOV AX, 0
MOV BX, 0
MOV SI, AX
MOV DI, AX
MOV BP, AX
.EXIT;返回到DOS操作系统
END;程序结束
汇编语言的语句格式简介
汇编语言程序中的每条语句由4个字段组成。
标号、操作码、操作数、注释
LABEL
OPCODE
OPERAND
COMMENT
DATA1
DB
23H
;定义DATA1为字节23H
……
START1:
MOV
AL, BL
;把BL的内容复制AL
MOV
CX, 200
;把200装入CX
……
.LST文件
程序被汇编后,可以生成程序清单,即.LST文件。
Visual C++内嵌汇编程序
汇编程序也可以内嵌在Visual C++
显示全部