- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.1 概述 这是最常见的指令格式。A1、A2指出两个源操作数的地址,其中一个还指出存放结果的目的地址。对两个操作数完成所规定的操作后,将结果存入目的地址。 6.2 8086的寻址方式 回顾8086的寄存器 寄存器是在 CPU 中一个暂时储存数据的地方。它有点儿像存储器(DRAM),但是不像存储器这么大,寄存器只有一个、两个或四个字节的大小而已。 CPU 可以对寄存器作加、减、乘、除、且、或等等运算。8086/8088 共有 14 个 16 位的寄存器,其名称都以两个英文字表示,大致可分为以下四类。 1.通用寄存器 共有四个,其名称分别是 AX、BX、CX、DX,在汇编语言程序中大致没有太大的差别,但是其中只有 AX(accumulator,也称为累加器) 可作为除法或乘法中的被除数与被乘数,当 16 位不够大时,常常用 DX:AX 来表示 32 位。此外这四个寄存器,只有 BX(base register,也称为基底寄存器) 可以被作为地址存取之用。CX 也称为计数寄存器(count register),用于计算循环之次数或字串处理之计数。DX也称为数据寄存器(data register),可用来存取数据。 这四个寄存器也可以分成两个 8 位的寄存器来使用,例如 AX 可被分成较低的 8 位称为 AL,以及较高的 8 位 AH 来使用。其余 BX、CX、DX 也都类似。 2.指针与索引寄存器 有五个,其名称分别是 SP、BP、IP、SI、DI。前面两个 SP (stack pointer,称为堆栈指针)与(base pointer,也称为基底指针)是与堆栈(stack)有关的寄存器。堆栈是一块区域,用来暂时存放数据用,在 8086中,堆栈是由最高地址中开始存放,每次都必须存入一个字节的长度,并用一组指针,来表示堆栈已经使用到那儿了,这组指针就是 SS:SP。也就是说,当要将数据存入堆栈时,该数据应该存放在 SS:SP 所指的地址再低 2 个字节,然后 CPU 再使 SP 之内容减 2,使 SP 再指到下一个未使用的空间 调用子程序时,会预先把返回地址存入堆栈;调用中断时也是如此。BP 通常用于调用子程序时,传递参数用。 IP (instruction pointer,称为指令指针) 配合 CS 变成 CS:IP,指向将要执行的 8086/8088 地址。当 CPU 要执行程序时,必须到存储器去提取要执行的指令,而要到那一个存储器地址去提取指令呢?这时 CPU 就会到 CS:IP 指到的地址去提取。在程序中,一般是没有办法改变 CS:IP 的值,除非是跳转 (jmp、jz等) 指令或是调用 (call、ret等) 指令。 SI (source index,称为来源索引寄存器) 和 DI (destination index,称为目的索引寄存器) 通常是用来当作地址指针,也可用作加减法。这五个寄存器,每一个都不能分开来当作两个 8 位的寄存器使用。 3.段地址寄存器 有CS、DS、ES、SS 四个,分别表示程序码(code segment register)、数据(data segment register)、附加(extra segment register)、堆栈(stack segment register)段地址用。在 DOS 系统中,每一个段地址容量只有 64KBytes。 当数据段地址不够用时,就可以用附加数据段地址来补足,例如想要将一个段地址的某些内容复制到另一段地址中,就可以同时指定 DS、ES 分别表示这两个段地址。 6.2.2 直接寻址(Direct Addressing) 注意: 6.2.3 寄存器寻址(Register Addressing) 6.2.4 寄存器间接寻址(Register Indirect Addressing) 指令中也可指定段跨越前缀以取得其它段中的数据。如:MOV AX,ES:[BX]指令,则从附加段中取得数据。 6.2.5 寄存器相对寻址(Register Relative Addressing) 6.2.6 基址变址寻址(Based Indexed Addressing) 6.2.7 相对基址变址寻址(Relative Based Indexed Addressing) 6.2.8 程序转移寻址 转移地址为当前IP内容加上指令中紧跟操作码之后的相对位移量(8位或16位),即转移的有效地址以相对于当前IP值的位移量来表示,因此也被称为相对
文档评论(0)