一步一步学汇编语言程序设计(编辑修改稿)内容摘要:

上图中 2346 号字单元的内容为: 2D1FH,表示为: ( 2346) =2D1FH 因此,同一地址即可看作字节单元的地址,又可看作字单元的地址。 字单元的地址可以是偶数,也可以是奇数。 但是对于奇地址的字单元,要取一个字需要访问两次存储器,当然这样要花费较多的时间。 第三节 8086/8088CPU 寄存器的分类及主要作用 8086/8088 共有 14 个 16 位寄存器 ,按照其功能可以分为以下三组 这组寄存器含有 8 个寄存器,分别是: AX, BX, CX, DX, SI, DI, BP, SP 说明: 通用寄存器 AX, BX, CX, DX 为 4 个 16 为寄存器,他们也可作为 8 个 8 位寄存器来使用 堆栈指针寄存器 SP 用于在堆栈操作时,确定堆栈区在内存中的位置。 但 SP 必须与堆栈段寄存 中国最大的管理资源中心 第 6 页 共 97 页 器 SS 一起使用才能确定当前堆栈操作的物理地址。 基址指针寄存器 BP、源变址寄存器 SI 和目的变址寄存器 DI 主用用于扩充了寻址方式,和 BX寄存器一样,用于对操作数据的间接寻址或变址寻址。 这组寄存器含有 4 个寄存器,分别是: CS, DS, SS, ES 段寄存器的主要用途说明: 8086/8088 在执行 取指令操作或跳转执行或寻找存储器操作数的地址时,采用了分段寻址方式,在同一时刻可将内存分为 4 个逻辑段,段首地址即由段寄存器的内容给定。 段寄存器内容为 16 位二进制数,称为段地址,一条指令或操作数据的物理地址是由段地址和偏移地址共同确定。 采用段地址的方式能使 8086/8088 在 1MB 的范围对内存进行寻址。 这组寄存器含有 2 个寄存器,分别是:指令指针寄存器 IP 和状态标志寄存器 PSW 组成 指令指针 IP 寄存器的内容为下一条将要执行的指令的偏移地址, IP 寄存器应与代码段寄存器 CS 相配合,才能形 成操作指令的物理地址。 状态标志寄存器 PSW 用以反映系统状态和运算结果的特征。 它共有 6 个状态位和 3 个标志位。 详情如下: 、状态位: OF:溢出标志 CF:进位标志 AF:辅助进位标志 ZF:结果为零标志 SF:符号标志 PF:寄偶标志 标志位 TF:跟踪标志 IF:中断标志 DF:方向标志 第 二课 8086/8088 的寻址 方式 第一节 IBM PC 机的寻址方式 (一 ) 与数据有关的寻址方式 立即寻址方式 (Immediate addressing) 说明: 操作数直接存放在指令中,紧跟在操作码之后,它作为指令的一部分存放在代码段中。 这种操作数称为 立即数。 中国最大的管理资源中心 第 7 页 共 97 页 作用: 立即寻址方式用来表示常数,它经常用于给寄存器赋初值,并且只能用于源操作数字段,不能用于目的操作数字段。 例如: MOV AL, 8 则指令执行后, (AL)=08H 例如: MOV AX, 20A9H 则指令执行后, (AX)=20A9H,可用下图表示,其中 OP 表示指令的操作码部分。 寄存器寻址方式 (Register addressing) 说明: 操作数在寄存器中,指令指定寄存器号。 对于 16 位操作数,寄存器可以是 AX, BX, CX, DX,SI, DI, SP 和 BP 等;对于 8 位操作数,寄存器可以是 AL, AH, BL, BH, CL, CH, DL 和 DH。 例如: MOV AX, BX 如指令执行前 (AX)=2178H, (BX)=1234H;则执行指令后, (AX)=1234H, (BX)保持不变。 注意: 上面这两种寻址方式的操作数都是存放在段寄存中,因此可以取得较高的运算 速度。 直接寻址方式 (Direct addressing) 说明: 此中寻址方式中,有效地址 EA 就存放在代码段的指令操作码之后,但操作数一般存放在数据段中,所以必须先求出操作数的物理地址,然后再访问存储器才能取得操作数。 作用: 直接寻址方式适用于处理单个变量。 例如: MOV AX, [20xxH] 如果 (DS)=3000H, (320xxH)=3A2BH;则执行指令后, (AX)=3A2BH,其执行情况如下图: 注意: IBM PC机中允许数据存放在数据段以外的其他段中,此时应在指令中指定段跨越前缀,在计 算物理地址时应使用指定的段寄存器。 寄存器间接寻址方式 (Register indirect addressing) 说明: 此时操作数的有效地址在基址寄存器 BX,BP 或变址寄存器 SI,DI中,而操作数在存储器中。 中国最大的管理资源中心 第 8 页 共 97 页 如果指令中指定的寄存器是 BX,SI,DI,则操作数在数据段中,所以应用 DS 的内容作段地址,因此操作数的物理地址为: 物理地址 =16d(DS)+BX 或 物理地址 =16d(DS)+BI 或 物理地址 =16d(DS)+SI 如果指令中指定的寄存器为 BP,则操作数在堆栈段中 ,段地址在 SS 中,所以操作数的物理地址为: 物理地址 =16d(SS)+BP 例如: MOV AX,[BX] 如果 (DS)=20xxH,[BX]=1000H,(21000H)=4C3FH; 则: 物理地址 =20xx0+1000=21000H,因此执行的结果为: (AX)=4C3FH 寄存器相对寻址方式 (Register relative adressing) 说明: 此种寻址方式又被称为直接变址寻址方式。 这种寻址方式操作数的有效地址是一个基址或变址寄存器的内容和指令中指定的 8位或 16 位位移量之和。 即: EA=[(BX)或 (BP)或 (SI)或 (DI)]+[8位或 16 位位移量 ] 在没有指定段跨越的时候,对于寄存器为 BX,SI 或 DI的情况,段寄存器用 DS,对于寄存器 BP 则使用SS段寄存器的内容作为段地址。 例如: MOV AX,COUNT[SI] 此时 COUNT为 16位位移量。 如果 (DS)=20xxH,(SI)=1000H,COUNT=1000H,(220xxH)=4F6BH; 中国最大的管理资源中心 第 9 页 共 97 页 则: 物理地址 =20xx0+1000+1000=220xxH,因此指令执行的结果为: (AX)=4F6BH 作用: 这种寻址方式可用于表格处理,表格的首地址可设置为 COUNT,利用修改基址或变址寄存器的内容来取得表格中的值。 基址变址寻址方式 (Based indexed addressing) 说明: 这种寻址方式的有效地址是一个基址寄存器和一个变址寄存器内容之和。 两个寄存器均由指令指定,如果基址寄存器为 BX,则段寄存器为 DS;如果基址寄存器为 BP,则段寄存器为 SS.因此物理地址为: 物理地址 =16d(DS)+(BX)+(SI) 或 (DI) 或 物理地址 =16d(SS)+(BP)+(SI) 或 (DI) 例如: MOV AX,[BX][DI] 如果 (DS)=20xxH,(BX)=1500H,(SI)=2100H,(23600H)=8F9AH 则: 物理地址 =20xx0+1500+2100=23600H,因此指令执行的结果为: (AX)=8F9AH 作用:这种寻址方式同样适用于数组或表格处理,首地址可存放在基址寄存器中,而用变址寄存器来访问数组或表格中的各元素。 相对基址变址寻址方式 (Relative based indexed addressing) 说明: 这种寻址方式的有效地址是一个基址寄存器和一个变址寄存器的内容和 8位或 16位位移量之和。 两个寄存器均由指令指定,如果基址寄存器为 BX,则段寄存器为 DS;如果基址寄存器为 BP,则段寄存器为 : 物理地址 =16d(DS)+(BX)+(SI) 或 (DI)+8 位或 16位位移量 或 物理地址 =16d(SS)+(BP)+(SI) 或 (DI)+8位或 16 位位移量 例如: MOV AX,MASK[BX][SI] 中国最大的管理资源中心 第 10 页 共 97 页 如果 (DS)=20xxH,(BX)=3500H,(SI)=20xxH,MASK=0210H,(25710H)=3B5FH 则: 物理地址 =20xx0+3500+20xx+0210=25710H,因此指令执行的结果为: (AX)=3B5FH 与转移地址有关的寻址方式 这中寻址方式用来确定转移指令及 CALL 指令的转向地址。 段内直接寻址 这种寻址方式的转向的有效地址是当前 IP 寄存器的内容和指令中指定的 8 位或 16位位移量之和。 这种方式的转向有效地址用相对于当前 IP 值的位移量来表示,所以它是 一种相对寻址方式。 指令中的位移量是转向的有效地址与当前 IP值之差。 例如:指令的汇编语言格式表示为: JMP NEAR PTR PROGIA JMP SHORT QUEST 其中, PROGIA和 QUEST 均为转向的符号地址,在机器指令中,用位移量来表示。 段内间接寻址 转向有效地址是一个寄存器或是一个存储单元的内容。 这个寄存器或存储单元的内容可以用数据寻址方式中除立即数以外的任何一种寻址方式取得,所得到的转向的有效地址用来取代 IP寄存器的内容。 例如:指令的汇编语言格式表示为 : JMP BX JMP WORD PTR[BP+TABLE] 段间直接寻址 中国最大的管理资源中心 第 11 页 共 97 页 这种寻址方式指令中直接提供了转向段地址和偏移地址,所以只要用指定的偏移地址取代 IP 寄存器的内容,用指令中指定的段地址取代 CS 寄存器的内容就完成了从一个段到另一个段的转移操作。 例如:指令的汇编语言格式可表示为: JMP FAR PTR NEXTROUTINT 段间间接寻址 用存储器中的二个相继字的内容来取代 IP 和 CS 寄存器中的原始内容以达到段间转移的目的。 这里存储单元的地址是 由指令指定除立即数方式和寄存器方式以外的任何一种数据寻址方式取得。 例如:这种指令的汇编语言格式可表示为: JMP DWORD PTR[INTERS+BX] 第三。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。