文档详情

第3章寻址方式.docx

发布:2017-04-11约字共70页下载文档
文本预览下载声明
第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++
显示全部
相似文档