80X86的指令系统和寻址方式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

返回
2、寄存器寻址方式
在这种寻址方式中,指令的操作数存放在寄 存器中,该寄存器号作为指令代码的一部分 存放在代码段中。 例 2-2 MOV EAX,EBX
执行前:(EAX)=3366H,(EBX) = 1210H 执行后:(EAX) = 1210H
返回
3、直接寻址
在直接寻址方式中,指令中直接提供源操作数 的偏移地址,它作为指令代码的一部分存放在 代码段中。 例2-3 MOV AX,DS:[00404000h] 执行情况如图2-4所示。执行后:(AX) =0FF20H。
返回
7、相对基址变址寻址方式
在该寻址方式下,有效地址EA等于基址寄 存器BR的值加变址寄存器IR的值加位移量X 的和,即EA = X + [BR] + [IR]。 例 2.1.7 MOVAX,Disp[EBX][EDI] (或写为MOV AX,Disp[EBX+EDI]和 MOV AX,[Disp+EBX+EDI])
返回
8、比例变址寻址方式
在这种寻址方式中,有效地址EA等于位移量 X加上变址寄存器IR的内容与比例因子K乘积 之和,即EA = X + [IR * K]。 例如,有一个元素大小4字节的数组Arr,现 要在EAX寄存器中转载数组中的第2个元素, 可以使用指令MOV EAX,Adrs[ESI*4], 其中(ESI)=2,偏移量Adrs的值等于数组 Arr的基地址。其执行情况如图2.1.6所示。
返回
1、立即数寻址
在这种寻址的方式中,操作数是一个立即数, 对立即数的寻址称为立即寻址。 例 2-1 MOV AX,1234H
执行前:(AX) = 1412H 执行后:(AX) = 1234H,执行过程如图2-3所 示。
AX 12 34 … 操作码 34 12 指令编码
图2-3 MOV AX,1234H的执行情况
图2.1.4 存储器 OP
操作码
OP 代码段 00
位移量
02 ~ ~ ea=0h ea=1000h ┇ 00 00 数据段
~ ~
ea=100 2h
21 43
AX,TblAdrs[ESI]的执行情况
返回
6、基址变址寻址
在该寻址方式下,有效地址EA等于基址寄 存器BR的内容与变址寄存器IR的和,即EA = [BR] +[IR]。 例 2.1.6 MOV AX,[EBX][ESI] (或则写为MOV AX,[EBX+ESI])
MOV AX,[ESI] ;指令执行后(AX)=0FF30H, MOV AX,ES:[EBX] ;指令执行后(AX)=0FF20H MOV EAX,[ECX] ;指令执行后(EAX)=0FF30F025H
返回
ea=0h ea=1000h
存储器 ┇ 25
F0
30 FF 00 10 FF 0F
累加器 ~
返回
3、段间直接寻址
这种方式的一般格式为:JMP FAR PTR Lable 例如
CALL FAR label ; lable=0768:00401000 执行前: EIP: 00400000 ESP:00000100 CS:0040 执行后: EIP: 00401000 ESP:000000F8 CS:0768 [ESP+4]:XXXX5028 [ESP]:00400000
返回
10、相对基址比例变址寻址方式
在这种寻址方式中,有效地址EA等于位移 量X加上基址寄存器BR加变址寄存器IR的内 容与比例因子K乘积的和,即EA = X + [BR] + [IR * K]。如MOV AL, 00404000h [EBX] [ESI*2]。
返回
2.1.2与转移地址相关的寻址方式 与转移地址相关的寻址方式
返回
数组开始地址Adrs:
元素0
EAX
元素1
元素2
图2.1.6
MOV AX,Adrs[SI*4]的执行情况
9、基址比例变址寻址方式
在这种寻址方式中,有效地址EA等于基址 寄存器BR加上变址寄存器IR的内容与比例 因子K乘积的和,即EA = [BR] + [IR * K]。如MOV ECX, [EBP] [ESI*4]。
MOV指令 XCHG指令 LDS、LES、LFS、LGS和LSS指令 LEA指令 PUSH和POP指令 LAHF和SAHF指令
返回
MOV指令
MOV(move)指令的一般格式是 MOV DEST,SRC , 其中MOV是操作码,DEST表示目的操作数,SRC表示源操作数。所 做的工作就是从SRC拷贝数据到DEST。MOV指令具有以下11种指令格 式: mov reg, reg mov mem, reg mov reg, mem mov mem, immediate_data mov reg, immediate_data mov eax/ax/al, mem mov mem, eax/ax/al mov segreg, mem16 mov segreg, reg16 mov mem16, segreg mov reg16, segreg
在使用MOV指令时,有两点要特别注意:1、不能把数 据从一个存储器单元拷贝到另一个存储器单元。Modreg-r/m寻址模式允许两个寄存器操作数或一个寄存器 操作数一个存储器操作数,不允许在一条指令中编码两 个存储器操作数。2、不能向段寄存器传送立即数。 对于mov [ebx],0这类操作数长度不明确的指 令,可以使用 ptr 伪指令明确告诉MASM操作数的长 度,如下所示。 mov byte ptr [ebx], 0 mov word ptr [ebx], 0 mov dword ptr [ebx], 0 如下的两条指令就可以完成把立即数0x40传送到段寄 存器ES。 mov ax, 40h mov es, ax
例2.1.8 假设(EBX)=2010H,(2010H)=30F0H, 则 JMP EBX ;BX寄存器的值 送EIP寄存器,(EIP)=2010H JMP DWORD PTR [EBX] ;从EBX寄存器指向的存 储器单元拷贝数据到EIP ;(EIP)=30F0H。其中DWORD PTR为伪操作符, ;用于告之汇编器指出其后的寻址方式所取得的转向 ;地址大小是一个双字。
DS数据段 数据
~ ea=0h ea=4000h
┇ 20 FF

EAX/AX/AL
~ ES附加段
图2.1.3
MOV AX,ES:[BX]的执行情况
5、寄存器相对寻址方式
这种寻址方式下,有效地址EA等于寄 存器R中的内容与位移量X的和,即 EA = X + [R]用作寄存器相对寻址 的寄存器和寄存器间接寻址方式所说 明的内容相同。 例 2.1.5 MOV AX, TblAdrs[ESI] (或写成MOV AX,[TblAdrs+ESI]) AX 在TblAdrs中存放表的首地址,ESI中 43 21 存放要访问的表项的索引。如果 (ESI)=2H, TblAdrs=1000H,则指令的执 行情况如图2.1.4所示。
LDS、LES、Ler Using DS)、LES(Load Pointer Using ES)、LFS(Load Pointer Using FS)、LGS(Load Pointer Using GS)和LSS(Load Pointer Using SS)都是把48 位存储器数据传送到32位通用寄存器和段寄存器。使用格式如下: lds reg32, mem48 ;装载数据到 ds:reg32 : les reg32, mem48 ;装载数据到 es:reg32 : lfs reg32, mem48 ;装载数据到 fs:reg32 : lgs reg32, mem48 ;装载数据到 gs:reg32 : lss reg32, mem48 ;装载数据到 ss:reg32 : 例2.1.5 lds edi, mem48 mem48:1234:87654321 指令执行前:edi:xxxxxxxx,DS:xxxx 指令执行后:edi:87654321,DS:1234 注意,CS段寄存器不能通过这些指令加载,CS段寄存器只能通过远 程控制流转移指令(CALL far label、JMP far label、INT、IRET) 返回 加载。
下面是一个段寄存器作为操作数的例子: mov AX, 1234H ;把段选择子1234h先暂存到 ax寄存器中 mov FS, AX ;把段选择子装入FS段寄存器 mov FS:12345678H, BX ;把BX中的内容存放到 FS段内12345678h单元中s 例2.1.1 mov AL, ‘A’ 把立即数(字符A的ASCII码)送AL寄存器。 例2.1.2 mov EAX, X[ECX+EBX*4] 把DS段中有效地址为X +(ECX)+(EBX)*4的存 储器单元的内容送EAX寄存器。
返回
PUSH和POP指令
PUSH(push onto the stack)指令和POP(pop from the stack)指令用于操作80x86的硬件堆栈。由POP/PUSH指令延 生出来的指令较多,主要有以下10组格式: 16位通用寄存器入栈和出栈 push reg16 pop reg16 32位通用寄存器入栈和出栈 push reg32 pop reg32 段寄存器入栈和出栈 push segreg pop segreg 注意,在使用Pop segreg指令时,段寄存器不能选择CS寄存器。
LEA指令
LEA(Load Effective Address)指令用于 向目的寄存器传送源操作数的有效地址EA。 具有以下2种格式: lea reg16, mem lea reg32, mem 如果使用16位寄存器(reg16)作为 目的寄存器的话,则把偏移量的低16位保存 到目的寄存器中。在使用时,存储器单元 mem可以使用各种寻址方式。
第二章
80X86的指令系统和寻址方式
指令寻址方式 指令系统
2.1指令寻址方式
与数据相关的寻址方式 与转移地址相关的寻址方式
返回
2.1.1与数据相关的寻址方式
立即数寻址 寄存器寻址方式 直接寻址 寄存器间接寻址方式 寄存器相对寻址方式 基址变址寻址 相对基址变址寻址方式 比例变址寻址方式 基址比例变址寻址方式 相对基址比例变址寻址方式
返回
4、段间间接寻址
这种方式的一般格式为:JMP FWORD PTR [ADDR] 例如:JMP FWORD PTR [EBX]。
返回
2.2指令系统 指令系统
数据传送指令 转换指令 算术指令 逻辑、移位、旋转和位操作指令 I/O指令 字符串指令 程序流控制指令 杂项指令
返回
2.2.1数据传送指令
返回
AX FF 20
~ ~
存储器 66 A1 00 40 40 00
~ 20 FF 00 ~
代码段
404000h:
404003h:
数据段

00
图2-4
MOV AX,DS:[00404000H]的执行情况
4、寄存器间接寻址方式
寄存器间址寻址方式提供了一种利用寄存器值寻找 存储器操作数的方式:操作数的有效地址EA存放在 指令指明的寄存器中,即寄存器值就是存放操作数 的偏移地址EA。 例2.1.4,假设以下的指令在执行前的情况是: (ESI)=1002H,(EBX)=4000H,(ECX) =1000H。存储器的情况如图2.1.3所示。
返回
XCHG指令
XCHG(Exchange)指令交换两个操作数的值, 具有以下4种指令格式: xchg reg, mem xchg reg, reg xchg ax, reg16 xchg eax, reg32 例2.1.3 xchg bx, [si] 把SI指向的存储器单元的内容与BX寄存器中的值 交换。 例2.1.4 xchg eax,edx 把EAX寄存器和EDX寄存器的内容交换。 返回
段内直接寻址 段内间接寻址 段间直接寻址 段间间接寻址
返回
1、段内直接寻址
这种方式的一般格式为:JMP Lable 例:
JMP near-label ;near-label位于后面33字 节处 执行前: EIP:00404100 执行后: EIP:00404133
返回
2、段内间接寻址
这种方式的一般格式为:JMP 或 JMP [ADDR] R
相关文档
最新文档