《汇编语言》第3章寻址方式.ppt

  1. 1、本文档共52页,可阅读全部内容。
  2. 2、本文档付费后,不意味着付费购买了版权,只能用于单位或个人使用,不得用于商业用途(如:【转卖】进行直接盈利和【编辑后售卖】进行间接盈利)。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:18428362892(电话支持时间:9:00-19:00)。
* * 指令寻址方式即寻找程序指令入口地址的方式,也就是当一条指令执行时,如何确定下一条将要执行指令的入口地址。前面对专用寄存器IP已经讲过,它是专门用来存放下一条将要执行的指令入口地址的寄存器,指令的流向是由IP指针来确定的。一条指令入口地址的表示形式为CS:IP,根据CS和IP的内容,指令寻址方式可分为以下四种:段内直接、段内间接、段间直接、段间间接。 3.2 指令寻址方式 * * 段内直接寻址是指转移指令语句与该指令执行后将跳转到的转向指令语句在同一代码段内,转向指令的有效地址在转移指令语句中直接给出,常用的是标号形式。该指令寻址方式的实质是CS值不变,IP改变,转移指令中符号地址的值即为转向的有效地址。它类似于数据寻址方式中的直接寻址。 3.2.1 段内直接寻址 * * 转移指令常用JMP汇编指令,它是无条件转移指令,相当于C语言的GOTO语句,该指令语句的汇编格式为: JMP <指令入口地址CS:IP> 其中,段内跳转CS可以省略。 例如,JMP LABEL(标号) 该语句的功能是指令流无条件跳转到标号为LABEL的指令的入口处。 段内直接寻址转移指令的汇编格式可以表示为: 汇编格式:JMP <标号> code1 segment …… jmp next …… Next:…… …… code1 ends 指令功能:标号值即为转向指令的EA。 * * C:\BIN>debug string.exe -u 0B46:0000 B8440B MOV AX, 0B44 0B46:0003 8ED8 MOV DS, AX 0B46:0005 8D160000 LEA DX, [0000] 0B46:0009 EB04 JMP 000F 0B46:000B B409 MOV AH, 09 0B46:000D CD21 INT 21 0B46:000F B44C MOV AH, 4C 0B46:0011 CD21 INT 21 反汇编: * * 段内间接寻址是指转移指令语句与执行后将跳转到的转向指令语句在同一代码段内,转向指令的有效地址在转移指令语句中间接给出,常用的是一个寄存器或是一个存储单元。该指令寻址方式的实质是CS值不变,IP改变,转向指令的有效地址存储在寄存器或存储单元中。这个寄存器或存储单元的内容可以用数据寻址方式中除立即数以外的任何一种寻址方式取得,所得到的转向指令的有效地址用来取代IP寄存器的内容。 3.2.2 段内间接寻址 * * 段内间接寻址转移指令的汇编格式: 汇编格式1: JMP BX 指令功能:BX寄存器内容为转向指令的EA。 汇编格式2: JMP WORD PTR[BP+TABLE] 指令功能:数据段中EA=(BP)+TAABLE的存储 单元字内容为转向指令的EA。 其中,WORD PTR为属性操作符,用以指出其后的寻址方式所取得的转向地址是一个字类型的有效地址,也就是说它是一种段内转移。 以上两种寻址方式均为段内转移,所以直接把求得的转向指令的有效地址送到IP寄存器即可 * * 段间直接寻址是指转移指令语句与执行后跳转到的转向指令语句不在同一代码段内,转向指令语句的段地址和偏移地址在转移指令中直接给出,所以转移指令语句应直接提供4字节地址内容。只要用转移指令中指定的偏移地址取代IP寄存器的内容,用段地址取代CS寄存器的内容,就完成了从一个段到另一个段的转移操作。 3.2.3 段间直接寻址 * * 段间直接转移指令的汇编格式可表示为: 汇编格式1: JMP FAR PTR NEXT code2 segment …… next: ...... …… code2 ends code1 segment …… jmp far ptr next …… code1 ends 指令功能:NEXT为另一个段内转向语句的符号地址,FAR PTR是表示段间转移的操作符。即: 说明:指令执行后,指令指针IP将指向code2代码段中next标识的语句,CS变为code2代码段的段地址,IP变为next标号值。 * * 段间间接寻址不但指转移指令语句与执行后跳转到的转向指令语句不在同一代码段内,而且转向指令的段地址和偏移地址也被存放在存储器中间接提供,用存储器中的相继两个字单元的内容来取代IP和CS寄存器中的原始内容,以达到段

您可能关注的文档

文档评论(0)

autohhh

相关文档

相关课程推荐