当前位置: 首页 > >

第3章2 计算机的数据传送指令

发布时间:

2. 8086的指令系统

? 数据传送指令

? 算术指令

? 逻辑指令
? 串处理指令 ? 控制转移指令 ? 处理机控制与杂项操作指令

学*一条指令时,要注意以下几个方面: (1) 指令功能--该指令能实现何种操作,通 常指令助记符就是指令功能的英文缩写词。 (2) 指令支持的寻址方式--指令中的源操作 数和目的操作数字段允许采用的寻址方式。 (3) 指令对标志位的影响--该指令执行后对 各个标志位的影响。 (4) 指令的特殊要求--该指令隐含使用或限 定使用的寄存器以及需要预置的参数。
?

数据传送指令:
? 数据传送指令的功能是把数据、地址传送到寄存器或存储 器单元中 ? 通用数据传送指令 MOV、PUSH、POP、XCHG ? 累加器专用传送指令 IN、OUT、XLAT ? 地址传送指令 LEA、LDS、LES ? 标志寄存器传送指令 LAHF、SAHF、PUSHF、POPF ? 类型转换指令 CBW、CWD

通用数据传送指令
传送指令: MOV DST, SRC

执行操作: (DST) ? (SRC) 功能: 将源操作数(字节或字)传送到目的地址 支持的寻址方式:src可用data,mem,reg Dst可用mem,reg 例:MOV AX,DATA_SEG MOV DS,AX 例: MOV AL,’E’ 例: MOV BX,OFFSET TABLE

MOV
注意: * * * DST 不能是立即数和CS DST、SRC 不能同时为存储器寻址(这个限制适用于所有 指令 )

DST、SRC 不能同时为段寄存器 MOV DS, ES ? * 立即数不能直接送段寄存器 ? * 不影响标志位

MOV

DS, 2000H

MOV指令数据传送方向示意图:

通用寄存器 AX、BX、CX、DX BP、SP、SI、DI

立 即 数

DS ES SS 存储器

CS

进栈指令:

PUSH SRC

执行操作: (SP) ? (SP) – 2

( (SP)+1, (SP) ) ? (SRC)

例:假设 (AX) = 2107 H , 执行 PUSH AX
低地址 (SP)? (SP)?
07H 21H

* * * *

* * * *

* * * *

* * * *

进栈方向

高地址

PUSH AX 执行前

PUSH AX 执行后

出栈指令:

POP DST

执行操作: (DST) ? ( (SP)+1, (SP) )
(SP) ? (SP) + 2
例: POP AX 低地址 (SP)?
07H 21H 07H 21H

* * * *

* * * *

(SP)?

* * * *

* * * *

出栈方向

高地址

POP AX 执行前

POP AX 执行后

(AX) = 2107H

堆栈:‘先进后出’的存储区,段地址存放在SS中, SP在任何时候都指向栈顶,进出栈后自动修改SP。 注意: ● PUSH和POP指令只能是字操作,因此存取字数据后,SP 的修改必须是+2或-2; ● PUSH和POP指令不能使用立即数方式(单操作数指令一般 不能使用立即数方式); PUSH 1234H ? ● POP指令的dst不允许是CS寄存器; POP CS ? ● PUSH和POP指令都不影响标志位。

PUSH指令在程序中常用来暂存某些数据,而POP指令又可将这些数据恢复。

例: PUSH AX PUSH BX PUSH CX …… POP POP CX BX ;其间用到AX、BX、CX
; 后进先出

POP

AX

注意恢复数据时寄存器的操作顺序(出栈和进栈的顺序相反)。

累加器专用传送指令(只限使用AX或AL)
? 输入指令
长格式:

IN (I/O ? CPU)
IN/OUT

IN AL, PORT (字节) IN AX, PORT (字) 执行操作:(AL) ? ( PORT ) (字节) (AX) ? ( PORT+1, PORT )(字) 短格式: IN AL, DX (字节) IN AX, DX (字) 执行操作:(AL) ? ( (DX) ) (字节) (AX) ? ( (DX)+1, (DX) )(字)

例:

IN

AX, 28H

MOV DATA_WORD, AX 例: MOV DX, 3FCH

IN IN

AX, DX AL,DX

累加器专用传送指令(只限使用AX或AL)
? 输出指令 OUT (CPU ? I/O)
长格式: OUT PORT, AL (字节) OUT PORT, AX (字) 执行操作:( PORT ) ? (AL) (字节) ( PORT+1, PORT ) ? (AX)(字)

短格式:

OUT DX, AL (字节) OUT DX, AX (字) 执行操作:( (DX) ) ? (AL) (字节) ( (DX)+1, (DX) ) ? (AX)(字)

例:

OUT 5, AL OUT 5, AX 例:mov dx,3fch mov al,80h out dx,al out DX,AX

注意:
* 不影响标志位 * 前256个端口号00H~FFH可直接在指令中指 定(长格式) * 如果端口号? 256,端口号 ? DX(短格式)

? 地址传送指令
有效地址送寄存器指令: LEA REG, SRC

指针送寄存器和DS指令: LDS REG, SRC 指针送寄存器和ES指令: LES REG, SRC 注意:

* 不影响标志位 * REG必须是通用寄存器 * SRC 必须为存储器寻址方式

有效地址送寄存器指令LEA
LEA 格式为:LEA REG,SRC

执行的操作:(REG)←SRC 指令把源操作数的有效地址送到指定的寄存中。 例: LEA BX,[BX+SI+0F62H] 如指令执行前 (BX)=0400H,(SI)=003CH 则指令执行后 (BX)=0400+003C+0F62=139EH 必须注意,在这里BX寄存器得到的是偏移地址而不是该存储 单元的内容。

举例
TABLE 40 H (DS):1000H 00 H 00 H 30 H MOV BX, TABLE ; (BX)=0040H

MOV BX, OFFSET TABLE ; (BX)=1000H LEA BX, TABLE ; (BX)=1000H

? 类型转换指令
CBW
AL ? AX

执行操作: 若(AL)的最高有效位为0,则(AH)= 00H 若(AL)的最高有效位为1,则(AH)= FFH

CWD

AX ? (DX,AX)

执行操作:若(AX)的最高有效位为0,则(DX)= 0000H 若(AX)的最高有效位为1,则(DX)= FFFFH
例:(AX) = 0BA45H CBW ; (AX)=0045H CWD ; (DX)=0FFFFH (AX)=0BA45H 注意: * 无操作数指令 * 隐含对AL 或AX 进行符号扩展 * 不影响条件标志位




友情链接: