Win32汇编语言-寻址方式.ppt_第1页
Win32汇编语言-寻址方式.ppt_第2页
Win32汇编语言-寻址方式.ppt_第3页
Win32汇编语言-寻址方式.ppt_第4页
Win32汇编语言-寻址方式.ppt_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2019/11/19,1,宋军计算机学院信息安全系songjun,寻址方式,2,2019/11/19,寻址方式,操作数的寻址方式立即数寻址寄存器寻址存储器寻址直接寻址间接寻址相对寻址,3,2019/11/19,立即数寻址,操作数在指令中给出指令格式:MOVAL,5MOVAX,3064HMOVAL,A只能用于SRC字段MOV40H,ALSRC和DST的字长一致MOVAH,3064H,4,2019/11/19,寄存器寻址,操作数存放在CPU的内部寄存器reg中:8位寄存器r8:AH/AL/BH/BL/CH/CL/DH/DL16位寄存器r16:AX/BX/CX/DX/SI/DI/BP/SP32位寄存器r32:EAX/EBX/ECX/EDX/ESI/EDI/ESP/EBP4个段寄存器seg中:CS/DS/SS/ES指令格式:MOVAX,BXMOVAL,BHMOVAX,3064HSRC和DST的字长一致MOVAH,BX,5,2019/11/19,存储器寻址(直接寻址),寻址主存中存储的操作数就称为存储器寻址方式(也称为内存寻址方式)指令中给出的是有关操作数的主存地址信息指令中主存操作数给出的地址只是偏移地址(称有效地址EA)实模式下,段基地址在默认的段寄存器中或用段超越前缀指定的段寄存器中,6,2019/11/19,有效地址的组成,位移量:存放在指令中的8位、16位或32位的数值或常量基址:存放在基址寄存器中的内容。它是有效地址中的基址部分;变址:是存放在变址寄存器中的内容比例因子:可以是1248比例因子只适用于保护模式。,7,2019/11/19,16位存储器寻址有效地址,16位有效地址基址寄存器变址寄存器816位位移量,其中:基址寄存器只能是BX或BP变址寄存器只能是SI或DI位移量可以是8/16位数当基址寄存器为BP的时候,默认的堆栈段寄存器SS;其他情况下,默认数据段寄存器DS。,8,2019/11/19,32位存储器寻址有效地址,其中:位移量是8/16/32数值或者常量任何32位通用寄存器都可以作为基址寄存器(默认ESP/EBP使用SS;其他默认使用DS)任何除ESP之外的32位通用寄存器都可以作为变址寄存器,32位有效地址基址寄存器变址寄存器8/16/32位位移量,9,2019/11/19,直接寻址方式,例:MOVAX,2000HEA=2000H,假设(DS)=3000H,那么PA=32000H,隐含的段为数据段DS,10,2019/11/19,直接寻址方式,可使用段跨越前缀MOVAX,ES:2000H操作数地址可由变量(符号地址)表示,但要注意VALUEDB10变量的属性MOVAH,VALUE;等价于MOVAH,VALUE可用符号地址代替数值地址MOVAX,VALUEMOVAX,WORDPTRVALUE操作数尺寸要一致,11,2019/11/19,间接寻址/间接操作数,操作数的有效地址存放在寄存器中方括号括起来的寄存器,如BX,SS:EBX保护模式:32位通用寄存器实地址:16位,SI,DI,BX,BP寄存器里存放着数据的偏移地址用作间接操作数的寄存器使用时应先初始化,.datavar1BYTE10h,20h,30h.codeMOVesi,offsetvar1MOVal,esi;如在附加段中,MOVal,ES:esi,12,2019/11/19,尺寸问题,PTR:与间接操作数的联合使用PTR操作符指明操作数的大小,.datavar1BYTE10h,20h,30h.codeMOVesi,offsetvar1INCesi;,operandmusthavesize,.datavar1BYTE10h,20h,30h.codeMOVesi,offsetvar1INCBYTEPTResi,13,2019/11/19,数组求和,.386.modelflat,stdcall.dataW1WORD1234h,5678h,4321h,8765h.codemovesi,offsetW1movax,esi;1234haddesi,2addax,esi;1234h+5678haddesi,2addax,esi;1234h+5678h+4321haddesi,2addax,esi;1234h+5678h+4321h+8765h,14,2019/11/19,例:寄存器间接寻址方式,.386.modelflat,stdcall.datad_vardword12345678h.codestart:movesi,offsetd_varmoveax,esimoveax,esimoveax,offsetc_varmoveax,cs:eaxret;返回操作系统c_vardword87654321hendstart;汇编结束,15,2019/11/19,例:运行结果(1),16,2019/11/19,例:运行结果(2),17,2019/11/19,寄存器相对寻址方式,采用寄存器间接寻址的操作数的有效地址是寄存器内容与有符号8位,16位或32位位移量之和操作数的有效地址的计算公式是:位移量可以是正数,也可以是负数,有效地址寄存器+8/16/32位位移量,18,2019/11/19,例:寄存器相对寻址方式,.386.modelflat,stdcall.dataarraybyte1,2,3,4,5,6,7array_endequ$-1.codestart:movesi,offsetarraymoval,esimoval,esi+4movesi,array_endmoval,esi-4ret;返回操作系统endstart;汇编结束,19,2019/11/19,19,2019/11/19,例:movesi,offsetarray,直接寻址,array的地址,20,2019/11/19,20,2019/11/19,例:moval,esi,寄存器间接寻址,esi=00404000,地址00404000的内容,21,2019/11/19,21,2019/11/19,例:moval,esi+4,寄存器相对寻址esi+4=00404004,esi=00404000,00404004=05h,22,2019/11/19,22,2019/11/19,例:movesi,array_end,直接寻址,array_endequ$-1;$=00404007;array_end=00404007-1=00404006,23,2019/11/19,23,2019/11/19,例:moval,esi-4,寄存器相对寻址esi-4=00404002,00404002=03h,esi=00404006,24,2019/11/19,基址变址寻址方式,基址变址寻址方式的操作数的有效地址是基址寄存器的内容加上变址寄存器内容构成操作数的有效地址的计算公式是:,有效地址基址寄存器+变址寄存器,25,2019/11/19,例:基址变址寻址方式,.386.modelflat,stdcall.dataarray1byte1,2,3,4,5,6,7array2byte8,9,10,11,12,13,14array_endequ$-1.codestart:movebx,offsetarray1movesi,1moval,ebx+esi;也可以写成moval,ebxesimovebx,offsetarray2moval,ebx+esiret;返回操作系统endstart;汇编结束,26,2019/11/19,26,2019/11/19,例:movebx,offsetarray1,直接寻址,array1的地址,27,2019/11/19,27,2019/11/19,例:movesi,1,28,2019/11/19,28,2019/11/19,例:moval,ebx+esi,基址变址寻址esi+ebx=00404001,00404001=02h,29,2019/11/19,29,2019/11/19,例:movebx,offsetarray2,直接寻址,array2的地址,30,2019/11/19,30,2019/11/19,例:moval,ebx+esi,基址变址寻址esi+ebx=00404008,00404008=09h,31,2019/11/19,相对基址变址寻址方式,相对基址变址寻址方式的操作数有效地址是基址寄存器的内容加上变址寄存器内容再加上一个8位,16位或32位的位移量构成操作数的有效地址的计算公式是:,有效地址基址寄存器+变址寄存器+8/16/32位位移量,32,2019/11/19,例:相对基址变址寻址,.386.modelflat,stdcall.dataarraybyte1,2,3,4,5,6,7byte8,9,10,11,12,13,14byte15,16,17,18,19,20,21numcolsequ7nequ2.codestart:movebx,numcolsmovesi,1moval,arrayebxesiret;返回操作系统endstart;汇编结束,33,2019/11/19,例:movebx,numcols,34,2019/11/19,例:moval,arrayebxesi,基址变址寻址00404000+7+1=00404008,00404008=09h,array的地址,35,2019/11/19,比例因子寻址方式,仅用于32位应用程序操作数的有效地址是由变址寄存器的内容乘以比例因子再加上位移量和基址寄存器的内容构成计算公式为:比例因子寻址方式中可以没有基址寄存器和位移量,比例数只能是1,2,4,8这四种取值之一,有效地址=基址寄存器+(变址寄存器)比例因子+位移量,36,2019/11/19,例:比例因子寻址方式,.386.modelflat,stdcall.dataarrayword1,2,3,4,5,6,7word8,9,10,11,12,13,14word15,16,17,18,19,20,21rowequ72nequ2.codestart:movebx,rowmovesi,1movax,arrayebxesi*2;也可以写成movax,array+ebx+esi*2ret;返回操作系统endstart;汇编结束,37,2019/11/19,例:movebx,row,38,2019/11/19,例:movesi,1,39,2019/11/19,movax,arrayebxesi*2,比例因子寻址00404000+14+1*2=00404010,00404010=09h,array的地址,40,2019/11/19,操作数寻址方式的组合,操作数寻址方式在指令中并不是任意组合的,是有一定规律的大多数指令(常用的数据传送、加减运算、逻辑运算等指令)都支持如下组合:源操作数可以由立即数、寄存器或存储器寻址,目的操作数只能是寄存器或存储器寻址,两个操作数不能同时为存储器寻址方式。,指令助记符reg,imm/reg/mem指令助记符mem,imm/reg,41,2019/11/19,练习:,假定实模式下,(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(BP)=0010H,数据段中变量名VAL的偏移地址为0050H,试指出下列源操作数字段的寻址方式是什么?其物理地址值是多少?(1)MOVAX,0ABH(2)MOVAX,BX(3)MOVAX,100H(4)MOVAX,VAL(5)MOVAX,BX(6)MOVAX,ES:BX(7)MOVAX,BP(8)MOVAX,SI(9)MOVAX,BX+10(10)MOVAX,VALBX(11)MOVAX,BXSI(12)MOVAX,VALBXSI,42,2019/11/19,转移地址寻址方式,汇编程序的执行顺序是由代码段寄存器CS和指令指针EIP的内容决定的。程序转移指令通过改变EIP和CS的内容,就可以改变程序的正常执行顺序。,JMP,43,2019/11/19,JMP指令,JMP指令是无条件转移指令,其格式为:JMP指令中的操作数label是要转移到的目标地址,也称为目的地址、转移地址。,JMPlabel;程序转向label标号指定的地址,44,2019/11/19,转移地址寻址,直接寻址转移地址直接包含在指令的机器代码中就是直接寻址方式。间接寻址转移地址如果存放在寄存器或主存单元中,就是间接寻址方式。,用寄存器或存储器操作数表达,用标号表达,45,2019/11/19,转移距离,段内转移指在当前代码段范围内转移,因此不需要更改CS段地址,只要改变EIP偏移地址。段间转移指从当前代码段跳转到另一个代码段,此时需要更改CS段地址和EIP偏移地址。,46,2019/11/19,转移地址的寻址方式,段内直接寻址段内间接寻址段间直接寻址段间间接寻址,47,2019/11/19,段内直接寻址,指令中直接写出目标地址的标号,而在对应的机器码中,包含位移量的补码形式。位移量-紧接着JMP指令后的那条指令的偏移地址到目标指令的偏移地址的地址位移。当向地址增大方向转移时,位移量为正;向地址减小方向转移时,位移量为负。,48,2019/11/19,相对转移,段内直接寻址也叫作相对转移相对转移目的地址的计算公式为:,目的地址=当前EIP+位移量(8bit/16bit/32bit),近转移:位移量为8位段转移:位移量为32位,49,2019/11/19,例:段内直接寻址,.386.modelflat,stdcall.codestart:moveax,0jmpstartquit:ret;返回操作系统endstart;汇编结束,50,2019/11/19,50,2019/11/19,调试例,51,2019/11/19,51,2019/11/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论