资源预览内容
第1页 / 共113页
第2页 / 共113页
第3页 / 共113页
第4页 / 共113页
第5页 / 共113页
第6页 / 共113页
第7页 / 共113页
第8页 / 共113页
第9页 / 共113页
第10页 / 共113页
亲,该文档总共113页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第三章 80X86寻址方式和指令系统,3.1 80X86寻址方式 3.2 80X86指令格式 3.3 80X86指令系统,3.1 80X86寻址方式,3.1.1 数据寻址方式操作数有可能在:(1) 代码段中,作为指令中的立即数(2) CPU寄存器中(3)存储器的数据段或堆栈段或附加数据段中 所以,总的来说,数据寻址方式分为三种:立即寻址寄存器寻址 存储器寻址,一、立即寻址,操作数直接包含在代码段的指令中。如: MOV EAX,80000000HMOV BX,6688HMOV AL,12H立即数只能作为源操作数 立即寻址主要用来给通用寄存器或存储器赋值 不允许给段寄存器直接赋值,例3.1 立即寻址,立即寻址过程示意,立即寻址动态示意,二、寄存器寻址,操作数在寄存器中。 32位寄存器:EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI 16位寄存器:AX、BX、CX、DX、SP、BP、SI、DI、CS、DS、SS、ES、FS、GS 8 位寄存器:AH、AL、BH、BL、CH、CL、DH、DL如:MOV AX,BXMOV EDI,ESIMOV AL,CL,例3.2 寄存器寻址,三、存储器寻址,操作数在存储器中,其地址由指令以某种方式 指出。(一)16位指令模式下:物理地址=段基址 10H 有效地址EA (二)32位指令模式下:物理地址=段基址 有效地址EAEA的计算方法根据采用的寻址方式不同而不同。,(一)16位指令模式下的存储器寻址,16位指令模式寻址结构: 段基址10H基址变址偏移量基址:BX、BP 变址:SI、DI 偏移量:8位或16位如果有效地址在BX,SI或DI中,则以DS寄存器内容为段基址;如果有效地址在BP中,则以SS段寄存器之内容为段基址。如果使用段超越前缀(CS:ES:DS:SS:),操作数可以放在冒号前指定的段。16位指令模式寻址方式:直接寻址 寄存器间接寻址寄存器相对寻址 基址变址寻址相对基址变址寻址,1、直接寻址,操作数在存储器单元中。 操作数所在的有效地址EA直接由指令指出。例1 MOV AX,3000H例2 MOV BL,BLOCK例3 MOV BX,DATA1,例3.3 直接寻址,直接寻址过程示意,直接寻址动态示意,2、寄存器间接寻址,操作数的有效地址在BX、BP或SI、DI中,EA可表示为例1 MOV AX,BX 例2 MOV DL,SI,例3.4 寄存器间接寻址,寄存器间接寻址过程示意,寄存器间接寻址动态示意,3、寄存器相对寻址,操作数在存储单元中,其有效地址EA可表示为例1 MOV AL,BX4000H 亦可写成: MOV AL,4000HBX例2 MOV AX,BP+2000H,例3.6 寄存器相对寻址,寄存器相对寻址过程示意,寄存器相对寻址动态示意,4、基址变址寻址,操作数在存储单元中,其有效地址EA可表示为 例1 MOV AX,BXSI 或写成:MOV AX,BXSI例2 MOV AX,BX+DI例3 MOV AX,BP+SI例4 MOV AX,BP+DI,例3.7 基址变址寻址,基址变址寻址过程示意,基址变址寻址动态示意,5、相对基址变址寻址,操作数在存储单元中,其有效地址EA可表示为 例1 MOV AX,BXSI1500H 或写成 MOV AX,1500BXSI例2 MOV AX,BP+DI+1000H,例3.8 相对基址变址寻址,相对基址变址寻址过程示意,相对基址变址寻址动态示意,(二)32位指令模式下的存储器寻址,32位指令模式寻址结构由5部分组成: 段址基址变址比例因子偏移量其中基址寄存器或变址寄存器可以是除ESP以外的任何32位通用寄存器。当基址寄存器为EBP时,默认段寄存器SS存放段选择符,否则,默认DS存放段选择符。也可使用段超越前缀来指定。比例因子为1,2,4,8。偏移量为8位或32位。,32位指令模式下的存储器寻址方式,1、直接寻址如:MOV EAX,10000000H 2、 间接寻址如:MOV EDX,ECX 3、 相对基址寻址如:MOV ECX,EAX+80H 4、 相对比例变址寻址如:MOV EBX,ESI*4+80H 5、 相对比例基址变址寻址如:MOV EAX,EBP+EDI*4+80H,3.1.2 程序地址寻址方式一、相对寻址相对寻址为段内寻址,指令中给出带符号的相对偏移量,程序目标地址为当前IP值加上相对偏移量作为偏移地址。 二、 直接寻址 直接寻址是指指令中直接给出转移指令的目标地址。在段间转移中,指令中给出目标段地址或代码段的段描述符。 三、间接寻址间接寻址 分段内和段间间接寻址,指令中以间接方式给出转移指令的目标地址,通常存放在数据段。,3.1.3 堆栈地址寻址方式,字数据进栈步骤: 1、(E)SP1(E)SP 2、 高8位堆栈 3、(E)SP1(E)SP 4、低8位堆栈字数据出栈步骤: 1、栈顶内容目标寄存器或目标单元的低8位 2、(E)SP1(E)SP 3、栈顶内容目标寄存器或目标单元的高8位 4、(E)SP1(E)SP,堆栈操作示意,思考题,1、 设DS=2000H,SS=3000H,BP=0200H,SI=4000H,BUF=1000H,EAX=00001000H,EBX=00002000H,假设按16位实模式操作,确定下列每条指令访问内存的物理地址,并且指出源操作数及目的操作数的寻址方式。 (1)MOV AL,1234H (2)MOV EDX,BX (3)MOV CL,BX100H (4)MOV SI,EBX (5)MOV AH,BUFBXSI (6)MOV EAX,BP1234H,3.2 80X86指令格式,指令基本格式:标号: 助记符 操作数 ;注释BYTE PTR 。 WORD PTR 。 DWORD PTR 。如 INC WORD PTR BX,3.3 80X86指令系统,按功能分类: 数据传送指令 算术运算指令 逻辑运算指令 控制转移类指令 串操作指令 输入/输出指令 处理器控制指令 中断指令与DOS功能调用,3.3.1 数据传送指令,通用数据传送指令 堆栈操作指令 地址传送指令 标志寄存器传送指令 查表指令 符号扩展指令,数据传送指令包括:,3.3.1 数据传送指令,数据传送指令包括:,通用数据传送指令 堆栈操作指令 地址传送指令 标志寄存器传送指令 查表指令 符号扩展指令,传送指令数据流,* CS不能为目的操作数,不能对(E)IP直接传送数据 * 堆栈操作不允许为字节操作,一、通用数据传送指令,DEST:目的操作数 SRC:源操作数1、一般传送指令MOV DEST,SRC 如:MOV AL,CLMOV BX,SIMOV EAX,EBX,使用MOV指令应注意:,立即数不允许直接送段寄存器,且立即数不能做目的操作数 源操作数和目的操作数不允许同时为存储器操作数 源操作数和目的操作数不允许同时为段寄存器 两操作数的数据类型要一致 传送操作不影响标志位 不允许对CS、(E)IP传送数据,2、扩展传送指令MOVSX DEST,SRCMOVZX DEST,SRC如 MOV BL,80HMOVSX AX,BL;AX=FF80HMOVZX AX,BL;AX=0080H *目的操作数为通用寄存器(16位或32位) *源操作数长度必须小于目的操作数长度,为通用寄存器或存储器操作数(8位或16位),3、交换指令XCHG DEST,SRC 如:XCHG EAX,EBXXCHG AX,SIXCHG AL,SI*两操作数中不允许出现立即数 *两操作数不允许同时为存储器操作数 *两操作数数据类型必须一致,二、堆栈操作指令,压栈指令 PUSH SRC 如:PUSH EAX PUSH DSPUSH SI PUSH DWORD PTR SIPUSH 1234H PUSHD 80H 出栈指令 POP DEST 如:POP AX POP DSPOP BX POP DWORD PTR DI,三、地址传送指令,格式: LEA DEST,SRC*DEST为16位或32位通用寄存器*SRC为16位或32位存储器操作数例1:LEA BX,SI+1005H若SI=1000H 则BX=?例2:LEA DI,BLOCKMOV DI,BLOCK有何区别?,四、标志寄存器传送指令,格式1:LAHFSAHF 格式2:PUSHFPOPF 格式3: PUSHFDPOPFD*SAHF、POPF、POPFD影响标志位,五、查表指令,格式:XLAT 指令规定:表格存于数据段中表首偏移地址BX表内偏移量AL查找结果AL所找单元的物理地址:(DS)10H+(BX)+(AL),查表指令应用举例,LEA BX,BLOCKMOV AL, 3XLAT结果:AL内容为4FH,例:试编程将内存中以BLOCK为起始地址的编码表中顺序号为3的编码送AL寄存器。,六、符号扩展指令,针对带符号数,按带符号数扩展。 1、CBW功能:AL(8位)AX(16位) 2、CWD功能:AX(16位)DX:AX(32位) 3、CWDE功能:AX(16位)EAX(32位) 4、CDQ功能:EAX(32位)EDX:EAX(64位),3.3.2 算术运算指令,加法指令 减法指令 加1减1指令 比较指令 乘法指令 除法指令 BCD算术运算指令,算术运算类指令特点,影响标志位 操作数不允许为段寄存器 不允许两个操作数同为存储器操作数 若无特别规定,操作数类型必须一致 目的操作数不允许为立即数 当操作数类型不明确时必须使用PTR伪指令,一、加法指令,格式(1) ADD DEST,SRC 功能:源操作数+目的操作数目的操作数 格式(2) ADC DEST,SRC 功能:源操作数+目的操作数+CF目的操作数例:32F2H+A020H=? MOV AX,32F2H 或 MOV AX,32F2H MOV BX,0A020H MOV BX,0A020H ADD AX,BX ADD AL,BLADC AH,BH,二、减法指令,格式(1) SUB DEST,SRC 功能:目的操作数源操作数目的操作数 格式(2) SBB DEST,SRC 功能:目的操作数源操作数CF目的操作数*SUB、SBB指令与ADD、ADC一样,影响标志位OF、SF、ZF、AF,PF,CF,三、加1减1指令,加1指令 INC DEST 功能:目的操作数1目的操作数减1指令 DEC DEST 功能:目的操作数1目的操作数*不影响CF,影响OF、SF、ZF、AF、PF例:INC BXINC BYTE PTR BXDEC EAXDEC WORD PTRSI,四、比较指令,格式 CMP DEST,SRC 功能:目的操作数源操作数 (1)若目、源为无符号数CF=0 则目源 (若ZF=1,则目=源)CF=1 则目源 (2)若目、源为带符号数若目、源为同号数(OF=0)若均为正,SF=0 则目源(若ZF=1,则目=源)SF=1 则目源若均为负 ,SF=0 则目源(若ZF=1,则目=源)SF=1 则目源,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号