指令 操作例,MOV AX,DATA[DI][BX]
若 (DS)=8000H,(BX)=2000H,(DI)=1000H,
DATA=200H
求数据的有效地址 EA(逻辑地址),和物理地址?
寄存器间接、寄存器相对、基址变址、相对基址变址四种寻址方式的所使用的寄存器是哪些?
22
寄存器间接、寄存器相对、基址变址、相对基址变址四种寻址方式的比较:
寻址方式 指令操作数形式?
寄存器间接 —— 只有一个寄存器( BX/BP/SI/DI之一)
寄存器相对 —— 一个寄存器加上位移量
基址 — 变址 —— 两个不同类别的寄存器
相对基址 -变址 —— 两个不同类别的寄存器加上位移量
33指令 操作例,MOV AX,DATA[DI][BX]
若 (DS)=8000H,(BX)=2000H,(DI)=1000H,DATA=200H
则指令执行后 (AH)=[83201H],(AL)=[83200H]
83200
83200H
AH ALAX
+ DATA 0200
操作码 代码段数据段
..
.
..
.
..
.
YY
XX
DS 8000
BX 2000
DI 1000
微机原理及应用 44
8086指令系统传送类指令数据操作类指令串操作指令控制类指令本章要求微机原理及应用 55
传 送 类 指 令传送类指令是指令系统中最活跃的一类指令,
也是条数最多的一类指令,主要用于数据的保存及交换等场合。这类指令分为以下四种:
通用数据传送指令目标地址传送指令标志位传送指令输入/输出数据传送指令 (IO读写 )
小结返 回微机原理及应用 66
通用数据传送指令通用数据传送指令主要由以下几部分组成,
最基本的传送指令堆栈操作指令数据交换指令查表 换码指令字位扩展指令返 回特点:
该类指令的执行对标志位不产生影响微机原理及应用 77
最基本的传送指令指令格式,MOV 目的操作数,源操作数指令功能,实现 CPU内部寄存器之间的数据传送、寄存器和内存之间的数据传送,以及把一个立即数送给 CPU的内部寄存器或者内存单元。
微机原理及应用 88
MOV指令示例
MOV ES,DX ; DX中 16位数据送 ES
MOV AX,[BX] ; BX和 BX+1所指的两个内存单元的内容送 AX
MOV [DI],AX ; 累加器的内容送 DI和 DI+1所指的两个单元
MOV CX,[1000H] ; 将 1000H和 1001H两单元的内容送 CX
MOV DX,5040H ; 立即数 5040H送 DX
MOV WORD PTR[SI],6070H ; 立即数 6070送 SI和 SI+1所指的两个单元 ; 这里的 PTR是一个汇编操作符,与前面的 WORD一起,意思是从 SI地址中取一个字 ;
而不是一个字节微机原理及应用 99
一般数据传送指令注意:
两操作数字长必须相同
两操作数不允许同时为存储器操作数
两操作数不允许同时为段寄存器
在源操作数是立即数时,目标操作数不能是段寄存器
IP和 CS不作为目标操作数,FLAGS一般也不作为操作数在指令中出现微机原理及应用 1010
堆栈操作指令
指令格式,PUSH 源操作数 /POP 目的操作数
实现功能,完成对寄存器的值的保存和恢复
注意事项,使用堆栈操作指令时,应预置堆栈段寄存器 SS、堆栈指示器 SP的值,使 SP指向当前堆栈段的栈顶。在执行 PUSH指令时,堆栈指示器 SP自动减 2;然后,将一个字以源操作数传送至栈顶。 POP指令是将 SP指出的当前堆栈段的栈顶的一个操作数,传送到目的操作数中,
然后,SP自动加 2,指向新的栈顶。
示 例微机原理及应用 1111
堆栈操作指令掌握:
有关堆栈的概念 栈顶、栈底
堆栈指令的操作原理执行过程,执行结果
堆栈操作的原则? 后进先出
以字为单位微机原理及应用 1212
堆栈操作指令
压栈指令 PUSH 执行过程:
(SP) ← ( SP) -2
( SP) -1← 操作数高字节
( SP) -2← 操作数低字节
出栈指令 POP执行过程:
( SP) 操作数低字节
( SP) +1 操作数高字节
(SP) ← ( SP) +2
微机原理及应用 1313
压栈指令的操作设 AX=1234H,SP=1200H,执行 PUSH AX 指令后堆栈区的状态:
堆栈段1200H

SP-2=11FEH
12H
34H
1200H

堆栈段
12H 34H
AX
入栈后入栈前微机原理及应用 1414出栈指令的操作执行 POP AX 堆栈区的状态:
12H
34H 11FEH

堆栈段代码段
PUSH
12 34
AX
SP+2
微机原理及应用 1515
堆栈操作指令说明
指令的操作数必须是 16位的
操作数可以是寄存器或存储器两单元,但不能是立即数
不能从栈顶弹出一个字给 CS
PUSH和 POP指令在程序中一般成对出现
PUSH指令的操作方向是从高地址向低地址,而
POP指令的操作正好相反微机原理及应用 1616堆栈操作指令示例堆栈中的内容是 按后进先出 的次序进行传送的,因此,保存内容和恢复内容时,要按照对称的次序执行一系列压入指令和弹出指令,例如,
PUSH DS
PHSH ES
……
POP ES
POP DS

返 回微机原理及应用 1717
数据交换指令
指令格式,XCHG 目的,源
指令功能,实现字节、字交换。交换过程可以在 CPU的内部寄存器之间进行,也可以在内部寄存器和存储单元之间进行。
注意,不能在两个存储单元之间执行数据交换过程,两操作数必须有一个是寄存器操作数。
不允许使用段寄存器。两操作数应等长。
示 例返 回微机原理及应用 1818
数据交换指令示例
1 XCHG AL,BL ; AL和 BL之间进行字节换
2 XCHG BX,CX ; BX和 CX之间进行字交换
3 设( DS)= 2000H,( 22530H)= 88H,
( 22531H)= 66H,
执行指令 XCHG [2530H],CX 后 (CX)=?
CX中的内容和数据段中的 2530,2531H两单元的内容交换返 回
( CX)= 6688H
微机原理及应用 1919
换 码 指 令
指令格式,XLAT
实现功能,它可以使累加器中的一个值变换为内存表格中的某一个值,一般用来实现编码制的转换。
指令说明,使用换码指令时,要求 BX寄存器指向表的首地址,AL中为表中某一项与表格首地址之间的偏移量,指令执行时,会将 BX和 AL中的值相加,把得到的值作为地址,然后将此地址所对应的单元中的值取到
AL中去。
XLAT指令就是通过查表方式来完成翻译功能的,因此,
在执行该指令之前,必须建立好一张翻译表,该表的最大容量为 256字节。
示 例 返 回微机原理及应用 2020查表指令例数据段中存放有一张 ASCII码转换表,
设首地址为 2000H,
现欲查出表中第 11
个代码的 ASCII码
( 设 DS=4000H)
30
31
32
...
39
41
42
...
45
46...
42000H+0
42000H+11
‘0’
‘1’
‘2’
‘9’
‘A’
‘B’
‘E’
‘F’
微机原理及应用 2121查表指令例可用如下指令实现:
MOV BX,2000H ;( BX) ← 表首地址
MOV AL,0BH ;( AL) ← 序号
XALT ; 查表转换执行后得到:( AL) =42H
微机原理及应用 2222字位扩展指令
将符号数的符号位扩展到高位
指令为零操作数指令,采用隐含寻址,
隐含的操作数为 AX及 AX,DX
无符号数的扩展规则为在高位补 0
微机原理及应用 2323字节到字的扩展指令
格式:
CBW
操作,将 AL内容扩展到 AX
规则,若最高位 =1,则执行后 AH=FFH
若最高位 =0,则执行后 AH=00H
示例,MOV AL,8EH
CBW (AX)=FF8EH
微机原理及应用 2424字到双字的扩展指令
格式:
CWD
操作,将 AX内容扩展到 DX AX
规则,若最高位 =1,则执行后 DX=FFFFH
若最高位 =0,则执行后 DX=0000H
示例,MOV AX,43FFH
CWD (DX:AX)=000043FFH
微机原理及应用 2525
CBW & CWD
字节扩展指令和字扩展指令用在什么场合?举例说明。
答:遇到两个字节或字相除时,要预先执行 CBW或 CWD
指令,产生一个双倍长度的被除数。特别注意这两条指令只能对 AL,AX进行扩展。例如:
MOV BL,3
MOV AL,-12
CBW ;扩展 AL中符号位至 AH
IDIV BL
或:
MOV BX,3
MOV AX,-12
CWD ;扩展 AX中符号位至 DX
IDIV BX 返 回微机原理及应用 2626
目标地址传送指令
这是一类专用于 传送地址码 的指令,可用来传送操作数的段地址或偏移地址,共包含以下三条指令:
一,取有效地址指令二,将地址指针装到 DS和另一个寄存器的指令三,将地址指针装到 ES和另一个寄存器的指令返 回微机原理及应用 2727
取有效地址指令 LEA
指令格式,LEA 目标,源
指令功能,将 存储器地址 送到一个 寄存器 。
说明,LEA指令格式中,要求源操作数必须为内存单元地址,目的操作数必须为一个 16位的通用寄存器。 LEA常用来使一个寄存器作为地址指针。
返 回示 例微机原理及应用 2828
取有效地址指令示例
LEA BX,[BP+SI] ; 指令执行后,BX中的内容为 BP+SI的值
LEA SP,[0428H] ; 使堆栈指针 SP为 0482H
思考,试比较下面两条指令的不同
LEA AX,[2728H]
MOV AX,[2728H]
将 2728H单元的偏移量送
AX指令执行后,AX中为
2728H将 728H单元中的内容送到
AX中微机原理及应用 2929
LEA指令
比较下列指令:
LEA SI,DATA1
MOV SI,DATA1
MOV AX,[BX]
LEA AX,[BX]
符号地址



DATA1
12H
34H
1100H 88H
77H
BX=1100H
微机原理及应用 3030
LDS 指 令
指令格式,LDS 目标,源
指令功能,是把四个字节的地址指针(其中包括一个段地址和一个偏移量)传送到两个目的寄存器,其中,地址指针的后两个字节即段地址一定送到 DS中。
示例,执行指令 LDS DI,[2130H]
执行该指令后使 2130H和 2131H这两个单元中的地址偏移量送到 DI,2132H和 2133H中的段地址值送到 DS。
微机原理及应用 3131
LDS指令例
例:下列指令执行后结果如何?
LDS DI,[1200H]
MOV AX,[DI]


12H
34H
00H
60H
1200H 数据段
1

DS DI
数据段
2
33H
22H
61234H
( DS) = 6000H
( DI) = 1234H ( AX) = 2233H 返 回微机原理及应用 3232
LES 指 令
指令格式,LES 目标,源
功能,是把四个字节的地址指针(其中包括一个段地址和一个偏移量)传送到两个目的寄存器,
其中,地址指针的后两个字节即段地址一定送到
ES中。
基本相同,所不同仅在于将源操作数所指的地址指针中的段基址(后两个字节)传送到
ES段寄存器,而不是 DS段寄存器。
思考,LES指令与 LDS指令的操作有何不同?
微机原理及应用 3333
LES指令例
LES DI,[1200H]
MOV AX,[DI]


12H
34H
00H
60H
1200H 数据段

ES DI
附加段
33H
22H
61234H
返 回微机原理及应用 3434
标志位传送指令可完成标志位传送的指令共有以下四条:
一,读取标志指令二,设置标志指令三,对标志寄存器的压入堆栈和弹出堆栈指令返 回微机原理及应用 3535
读取标志指令 LAHF
读取标志指令 LAHF被执行时,将标志寄存器中的低 8位传送到 AH中,其指令 隐含操作数 AH,
操作示意图如下所示:
返 回
OF DF IF TF AF PFZFSF CF
D4 D2D6D7 D0AH
FLAG
LAHF指令的功能示意图微机原理及应用 3636
设置标志指令 SAHF
设置标志指令 SAHF被执行时,将 AH寄存器的相应位传送到标志寄存器的低 8位。其指令 隐含操作数 AH,操作示意图如下所示:
返 回
OF DF IF TF AF PFZFSF CF
D4 D2D6D7 D0AH
FLAG
SAHF指令的功能示意图微机原理及应用 3737PUSHF和 POPF指令
PUSHF指令:
将标志寄存器的值压入堆栈顶部,同时,栈指针
SP的值减 2,此指令在执行时标志寄存器的值不变。
POPF指令的功能正好相反。
PUSHF和 POPF指令的作用,隐含操作数 FLAGS。 一般用在子程序和中断处理程序的首尾,起保存主程序标志和恢复主程序标志的作用。
返 回微机原理及应用 3838
输入 /输出数据传送指令格式,IN 累加器,端口 /OUT 端口,累加器功能,输入 /输出指令用来完成 累加器 AX/AL与
I/O端口 之间的数据传送。
说明,执行输入指令 IN时,CPU可以从一个 8位端口读入一个字节到 AL中,也可以从两个连续的
8位端口读入一个字到 AX中。
执行输出指令 OUT时,CPU可以将 AL中的一个字节写到一个 8位端口中,或者将 AX中的一个字写到两个连续的 8位端口中。
示 例 返 回微机原理及应用 3939
输入 /输出数据 指令寻址方式
直接寻址直接给出 8位端口地址,可寻址 256个端口 (0-
FFH)
间接寻址
16位端口地址由 DX指定,可寻址 64K个端口
(0-FFFFH)
微机原理及应用 4040
输入 /输出数据传送指令示例
IN AX,50H ; 将 50H,51H两端口的值读入 AX,50H端口的内容读入 AL,51H端口的内容读入 AH
IN AX,DX ; 从 DX和 DX+1 所指的两个端口中读取一个字,
低地址端口中的值读入 AL中,高地址端口中的值读入 AH中
OUT 44H,AL ;将 AL的内容输出到地址为 44H的端口
MOV DX,0345H
MOV AL,45H
OUT DX,AL
返回;将 45H输出到地址为 0345H的端口微机原理及应用 4141指令小结一
O S Z A P C
— — — — — —
— o o o o o
— — — — — —
o o o o o o
LAHF
SAHF
PUSHF
POPF
标志位传递累加器,AL或 AX( 16位外部总线用 AX)
端口,地址 0~ 255或间址寄存器 DX
— — — — — —
— — — — — —
IN 累加器,端口
OUT 端口,累加器
I/O数据传送源:内存操作数,目标:十六位通用寄存器源:内存操作数,目标:十六位通用寄存器源:内存操作数,目标:十六位通用寄存器
— — — — — —
— — — — — —
— — — — — —
LEA 目标,源
LDS 目标,源
LES 目标,源目标地址传递源:寄存器,存储器,立即数 目标:寄存器,存储器源:寄存器,存储器目标:寄存器( CS除外),存储器源,通用寄存器,存储器 目标:通用寄存器,存储器
— — — — — —
— — — — — —
— — — — — —
o o o o o o
— — — — — —
MOV 目标,源
PUSH 源
POP 目标
XCHG 目标,源
XLAT
通用数据传递备 注状 态 标 位指令格式指令类型注,O代表对该标志位有影响微机原理及应用 4242例题讲解
1、假设( SS) =2250H,( SP) =0140H,如果在堆栈中存入 5个数据,则栈顶的物理地址为
( ) H。如果又从堆栈中取出 3个数据,
则栈顶的物理地址为( ) H。
22636
2263C
微机原理及应用 4343
2,指令 LEA BX,[BX + SI + 0F62H] 执行前 ( BX) =0400H ( SI) =003CH,该指令执行后
( BX)=?
注意:在此 BX寄存器得到的是偏移地址而不是该存储单元的内容
( BX) =0400 + 003C + 0F62 = 139EH
例题讲解
3,已知指令 LDS SI,[10H] 执行前( DS) =C000H,
( C0010H) =80H,( C0011H) =01H,( C0012H)
=00H,( C0013H) =20H,指令执行后 ( SI)=?
(DS)=?
( SI) =0180H,( DS) =2000H
返 回