1 / 18

3.1.2 与转移地址有关的寻址方式

3.1.2 与转移地址有关的寻址方式. CALL 、 LOOP 、 JMP 和条件转移指令是控制程序流程的指令,即与转移地址有关。 1. 如果控制指令与目标地址在同一代码段,这种转移叫段内转移,采用段内寻址方式,又分段内直接寻址方式和段内间接寻址方式。 例如: JMP NEAR PTR NEXT0 ;直接近转移 JMP SHORT NEXT1 ;直接短转移 JMP BX ;段内间接转移 目标地址的有效地址在 BX 中, JMP WORD PTR[BP+TABLE] ;段内间接转移

rupert
Download Presentation

3.1.2 与转移地址有关的寻址方式

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 3.1.2与转移地址有关的寻址方式 • CALL 、LOOP、 JMP和条件转移指令是控制程序流程的指令,即与转移地址有关。 • 1.如果控制指令与目标地址在同一代码段,这种转移叫段内转移,采用段内寻址方式,又分段内直接寻址方式和段内间接寻址方式。 • 例如:JMP NEAR PTR NEXT0;直接近转移 • JMP SHORT NEXT1 ;直接短转移 • JMP BX ;段内间接转移 • 目标地址的有效地址在BX中, • JMP WORD PTR[BP+TABLE] ;段内间接转移 • 目标地址的有效地址在(基址指针)寄存器相对寻址的存储单元中, • SHORT、NEAR PTR是地址操作符,WORD PTR是数据类型操作符。

  2. 2.如果控制指令与目标地址分处在不同的两个代码段,这种转移叫段间转移,采用段间直接寻址方式或段间间接寻址方式。2.如果控制指令与目标地址分处在不同的两个代码段,这种转移叫段间转移,采用段间直接寻址方式或段间间接寻址方式。 • 例如: • JMP FAR PTR NEXTROUTINT;段间直接寻址 • FAR PTR是地址操作符,执行时符号地址NEXTROUTINT的段地址送给CS,有效地址送给IP,从而实现段间的直接转移。 • JMP DWORD PTR [INTERS+BX];段间间接寻址 • DWORD PTR是存储类型操作符,取双字的意思。 • 访问存储单元顺序取出两个字,分别送给IP和CS。

  3. 3.3 80X86的指令系统 • 80X86的指令系统分为6组: • 数据传送指令 串处理指令 • 算术指令 控制转移指令 • 逻辑指令 处理机控制指令

  4. 3.3.1 数据传送指令 • 分为五类: • 1.通用数据传送指令 8条 • MOV 传送 • MOVSX 带符号扩展传送 • MOVZX 带零扩展传送 • PUSH 进栈 • POP 出栈 • PUSHA/PUSHAD 所有寄存器进栈 • POPA/POAD 所有寄存器出栈 • XCHG 交换

  5. (1)MOV 传送指令 • 格式:MOV DST,SRC • 执行操作(DST) (SRC) • DST表示目的操作数,SRC表示源操作数 • 举例: • 把一个常量(数据、地址)送入寄存器 reg data • MOV AL,5 • MOV AX,PI ;符号常数 • MOV AX,DATA__SEG ;段名,段地址 • MOV BX,NEXT0 ;标号,地址

  6. 把常数送到存储器单元,存储器单元的寻址可以有8种选择。把常数送到存储器单元,存储器单元的寻址可以有8种选择。 • MOV BYTE PTR [2000H],5 • MOV WORD PTR [BX],5 • MOV DWORD PTR[BX][SI],12345678H • 把一个寄存器的内容传送到另一个寄存器中 • MOV AX,BX • 把一个寄存器数传送到存储器单元中 • MOV ARRAY[BX],CX • 把一个存储器操作数传送到寄存器中 • MOV AL,X ;X是定义的符号地址(变量)

  7. (2)MOVSX带符号扩展传送指令(386以上) • 格式:MOVSX DST,SRC • 操作(DST)  符号扩展的(SRC) • 有两种使用形式: • 寄存器到寄存器reg1,reg2 • MOVSX EAX,CL • 如(CL)=65H,则(EAX)=00000065H,0扩展24位 • 如(CL)=A5H,则(EAX)=FFFFFFA5H,1扩展24位 • (3)MOVZX带零扩展传送指令(386以上) • 格式和操作类似上条指令 • MOVZX EAX,CL

  8. MOVZX EAX,CL • (CL)=65H,则(EAX)=00000065H,0扩展24位 • (CL)=A5H,则(EAX)=000000A5H,0扩展24位 • MOVSX和MOVZX指令的源操作数的长度一定要小于目的操作数,

  9. (4)PUSH进栈指令 • 格式:PUSH SRC • 操作: • 16位操作:在当前栈顶进栈一个字的数据。先修改栈顶指针SP减2,然后将数据存入(SP)+1和(SP)指向的字单元中, • 32位操作:先修改栈顶指针(ESP)  (ESP)– 4, • 然后将源操作数存入(ESP)+3、(ESP)+2、(ESP) • +1、(ESP)指向的双字单元 • 见图3.10 PUSH AX 指令的执行情况

  10. (5)POP出栈指令 • 格式:POP DST • 操作:先弹出,后修改栈顶指针 • 16位指令:先(DST) ((SP)+1,(SP)) • 后 (SP)  (SP)+2 • 32位指令:先(DST) ((ESP)+3,(ESP)+2,(ESP)+1,(ESP)) • 后(ESP) (ESP)+4

  11. (6)PUSHA/PUSHAD • 格式:PUSHA • PUSHAD • 操作: • PUSHA是16位通用寄存器AX、CX、DX、BX依次进栈 • 接着进栈的是该指令执行前的SP、BP、SI、DI。 • 进栈后,(SP) (SP)—16 • PUSHAD是32位通用寄存器EAX、ECX、EDX、EBX依次进栈,接着是指令执行前的ESP、EBP、ESI、EDI依次进栈。 • 之后,(ESP) (ESP)—32

  12. (7)POPA/POPAD • 格式:POPA • POPAD • 操作:寄存器出栈,出栈的顺序与进栈顺序现反,之后修改堆栈指针。 • (8)XCHG交换指令 • 格式:XCHG OPR1,OPR2 • 操作(OPR1)(OPR2) • 能完成寄存器与寄存器之间、寄存器与存储器之间的交换,除此,常数不能参加交换。 • XCHG AX,BX • XCHG AX,[BX][SI]

  13. 2.累加器专用传送指令 • IN输入 • OUT输出 • XLAT换码

  14. (1)IN输入指令 • 长格式:IN AL,PORT(字节) • IN AX,PORT(字) • IN EAX,PORT(双字) • 执行的操作(AL)  (PORT)(字节) • (AX)  (PORT+1,PORT)(字) • (EAX)  (PORT+3,PORT+2,PORT+1,PORT)(双字) • 短格式:IN AL,DX(字节) • IN AX,DX(字) • IN EAX,DX(双字) • 执行的操作(AL)  ((DX))(字节) • (AX)  ((DX)+1,(DX))(字) • (EAX)  ((DX)+3,(DX)+2,(DX)+1,(DX))(双字) • 

  15. (2)OUT输出指令 • 长格式:OUT PORT,AL(字节) • OUT PORT,AX(字) • OUT PORT,EAX(双字) • 执行的操作(PORT)  (AL)(字节) • ( PORT+1,PORT) ) (AX) (字) • (PORT+3,PORT+2,PORT+1,PORT)  (EAX)(双字) • 短格式:OUT DX,AL(字节) • OUT DX,AX(字) • OUT DX,EAX(双字) • 执行的操作:((DX))(AL)(字节) • ((DX)+1,(DX))(AX)(字) • ((DX)+3,(DX)+2,(DX)+1,(DX))(EAX)(双字) • 

  16. (3). XLAT(Translate):换码 语法格式: XLAT ; AL = DS:[ BX +AL ] 功能描述:将DS:BX所指内存区中、由AL指定位移处的一个字节赋给AL。 对标志位的影响:无。

  17. 3. LEA (Load Effective Address ) :装入有效地址 语法格式: LEA reg16, mem ; reg16 = mem的有效地址 对标志位的影响:无。 【例】设BX = 5678H,EAX = 1,EDX = 2。 lea si, 2[bx] ; 执行后,SI = 567AH lea si, 2[eax][edx] ; 执行后,SI = 5 4. LDS、LES 语法格式: LDS reg16, mem32 ; reg16 = mem32的低字,DS = mem32的高字 LES reg16, mem32 ; reg16 = mem32的低字,ES = mem32的高字 对标志位的影响:无。

  18. 4.标志寄存器传送指令 • LAHF • SAHF • PUSHF/PUSHFD • POPF/POPFD • 5.类型转换指令 • CBW • CWD • CDQ

More Related