第 2章 寻址方式和指令系统
第 2章 寻址方式和指令系统
2.1 寻址方式
2.2 数据传送类指令
2.3 算术运算类指令
2.4 位操作类指令
2.5 串操作类指令
2.6 控制转移类指令
2.7 处理机控制类指令
开 始
第 2章 寻址方式和指令系统
8086CPU的指令系统的基本指令
包括数据传送类指令, 算术运算类指令,
位操作类指令, 串操作类指令, 控制转
移类指令, 处理机控制类指令 。 后几节
将分别介绍这些指令的语句格式和功能 。
第 2章 寻址方式和指令系统
8086CPU的指令的共同的规律
l 大多数数据传送类指令, 算术运算类指令,
位操作类指令及串操作类指令, 其双操作数指
令有相同的语句格式和操作规定 。
语句格式,[标号,] 操作符 OPD,OPS [;
注释 ]
l 算术运算和位操作类指令的部分单操作数指
令有相同的语句格式和操作规定 。
语句格式,[标号,] 操作符 OPD [; 注释 ]
第 2章 寻址方式和指令系统
2.1 寻址方式
2.1.1 寄存器寻址
2.1.2 寄存器间接寻址
2.1.3 变址寻址
2.1.4 基址加变址寻址
2.1.5 立即寻址
2.1.6 直接寻址
2.1.7 跨段问题
返回本章首页
第 2章 寻址方式和指令系统
2.1.1 寄存器寻址
寄存器寻址方式的操作数在指令指明的寄存器
中 。
汇编格式,R 其中 R表示寄存器名 。
功能:操作数直接存放在寄存器 R中 。
图形表示:
R
指令 →操作数
第 2章 寻址方式和指令系统
【例 2.1】
下列程序执行后, ( AX) =?, ( BX) =?
MOV AX,1234H
MOV BX,5678H
ADD AX,BX
该程序中 MOV指令为数据传送指令操作符, ADD指令
为加法指令操作符, 三条指令皆为双操作数指令 。 第一,
二条指令 AX,BX皆为目的操作数地址, 为寄存器寻址
方式 。 第三条指令中, AX为目的操作数地址, BX为源
操作数地址 。 源地址和目的地址皆为寄存器寻址方式 。
第 2章 寻址方式和指令系统
图形表示:
执行,1234H→AX
5678H→BX
( AX) +( BX) →AX
执行后,( AX) =68ACH,( BX) =5678H
返回本节
第 2章 寻址方式和指令系统
2.1.2 寄存器间接寻址
寄存器间接寻址方式中, 寄存器的内
容为操作数的偏移地址 EA,操作数在
存储器中 。
汇编格式,[R]
功能:操作数存放在存储器, 寄存器 R
存放操作数的偏移地址 EA。
第 2章 寻址方式和指令系统
偏移地址 EA计算方法如下:
EA=
[SI] SI作间址寄存器。
[DI] DI作间址寄存器。
[BX] BX作间址寄存器。
[BP] BP作间址寄存器。
第 2章 寻址方式和指令系统
执行指令,MOV AX, [BP]
执 行后, ( AX) =?,( BP) =?,( SS) =?,( 20030H)
=?
图形表示如下:
【例 2.2】寄存器和存储器内容分别为:( AX)
=0,( BP) =0030H,( SS) =2000H,( 20030H)
=1234H
返回本节
第 2章 寻址方式和指令系统
2.1.3 变址寻址
变址寻址方式操作数的偏移地址 EA为寄存器的
内容加位移量, 操作数在存储器中 。
汇编格式,X[R]( X表示位移量, 是 8位或 16位
二进制补码表示的有符号数 )
功能:操作数存放在存储器, 寄存器 R的内容加
位移量 X为操作数的偏移地址 EA。
图形表示如下:
第 2章 寻址方式和指令系统
第 2章 寻址方式和指令系统
偏移地址 EA计算方法如下:
第 2章 寻址方式和指令系统
【例 2.3】
设执行前,( AX) =0040H,( BX) =0030H,
( DS) =2000H,( 20036H) =0050H
执行指 令,ADD 6[BX],AX
执行后, ( AX) =?,( BX) =?,( DS) =?,
( 20036H) =?
图形表示如下:
第 2章 寻址方式和指令系统
执行:( 20036H) +( AX) →20036H
执行后:( AX) =0040H,( BX) =0030H,( DS)
=2000H,( 20036H) =0090H。
返回本节
第 2章 寻址方式和指令系统
2.1.4 基址加变址寻址
基址加变址寻址方式中, 操作数的偏移地址 EA
是指令中基址寄存器内容, 变址寄存器内容,
位移量X三项之和, 操作数在存储器中 。
汇编格式,X [BR+IR]
功能:操作数存放在存储器, BR的内容加 IR的
内容加位移量 X是操作数的偏移地址 EA。
图形表示:
第 2章 寻址方式和指令系统
第 2章 寻址方式和指令系统
操作数偏移地址 EA计算方法如下
返回本节
第 2章 寻址方式和指令系统
2.1.5 立即寻址
立即寻址方式中, 指令操作码和操作数都在存
储器代码段中 。
汇编格式,n( n为立即操作数, 是用 8位或 16位
二进制补码表示的有符号数 )
功能:操作数存放在存储器, 指令下一单元的
内容为立即操作数 n。
图形表示:
第 2章 寻址方式和指令系统
【例 2.5】
【 例 2.5】 MOV AX,10
执行后 ( AX) =?
该例中源操作数为立即寻址方式, 立即数为 10,存
放在指令的下一单元 。
图形表示:
执行,10→AX
执行后,( AX) =000AH
返回本节
第 2章 寻址方式和指令系统
2.1.6 直接寻址
汇编格式,① 含有变量的地址表达式 。
② 段寄存器名,[EA] 。
功能:指令下一字单元的内容是操作数的偏
移地址 EA。
图形表示:
第 2章 寻址方式和指令系统
【例 2.6】
【 例 2.6】 寄存器和存储器内容为, ( AX) =1212H,BUF
为数据段定义的变量, 其偏移地址是 2000H,( DS)
=3000H,( 32000H) =4545H。
执行指令, MOV AX, BUF
执行后,( AX) =?
图形表示:
执行,( 32000H) →AX
执行后,( AX) =4545H
返回本节
第 2章 寻址方式和指令系统
2.1.7 跨段问题
按前述规定:若选用 BP作间址基址寄存器, 变址寄存器
或基址寄存器, 则操作数在堆栈段, 操作数的物理地址
PA由堆栈段寄存器 SS的内容左移 4位与偏移地址 EA相加
后形成;否则, 操作数在数据段, 操作数的物理地址 PA
由数据段寄存器 DS的内容左移 4位与偏移 EA相加后形成 。
该规定为系统默认状态 。 当要否定默认状态, 到非约定
段寻找操作数时, 必须用跨段前缀指明操作数的段寄存
器名 。
汇编格式:段寄存器名:操作数地址 。
功能:段寄存器名指明操作数属哪个段。
第 2章 寻址方式和指令系统
【例 2.7】跨段前缀示例。
MOV AX,DS,[BP]
MOV CX,SS,[SI]
该例中, DS:, SS,均为跨段前缀, 此时默认
状态无效, 操作数的物理地址 PA由段寄存器内
容左移 4位加偏移 EA形成 。 上述 2条指令的源操
作数物理地址分别为:
PA1 =( DS) 左移 4位 +[BP]
PA2 =( SS) 左移 4位 +[SI
返回本节
第 2章 寻址方式和指令系统
2.2 数据传送类指令
2.2.1 通用数据传送指令
2.2.2 堆栈操作指令
2.2.3 标志寄存器传送指令
2.2.4 地址传送指令
2.2.5 输入输出指令
返回本章首页
第 2章 寻址方式和指令系统
2.2.1 通用数据传送指令
1,传送指令 MOV
2,数据交换指令 XCHG
3,查表转换指令 XLAT
第 2章 寻址方式和指令系统
1,传送指令 MOV
语句格式,MOV OPD,OPS
功能:将源操作数传送入目的地址, 源
地址内容不变 。 即 ( OPS) →OPD 。
下图 2.1描述了 MOV指令在传送数据时允
许传送的路径及类型 。
第 2章 寻址方式和指令系统
图 2.1 MOV指令所允许的数据传送路径及类型
第 2章 寻址方式和指令系统
【例 2.8】 存储器与寄存器间数据传送。
MOV AX,BUF ; BUF是变量,源操作数为直接寻址
MOV BH,[DI] ; 源操作数为寄存器间接寻址
MOV DI,ES,3[SI] ; 源操作数为变址寻址,使用跨段前缀
MOV BP,3[BX+SI] ; 源操作数为基址加变址寻址
MOV BUFA,DL ; BUFA是一字节变量
MOV [BP],AX ; 使用 SS段寄存器
MOV DS,[BP],DL ; 使用跨段前缀
MOV BUF,DS ; BUF是个字变量
MOV ES, BUF
第 2章 寻址方式和指令系统
2.数据交换指令 XCHG
语句格式,XCHG OPD,OPS
功能:将源地址与目的地址中的内容互换 。 即 ( OPD) →OPS,
( OPS) →OPD 。
【 例 2.9】 寄存器与存储器之间数据交换 。
MOV AX,5678H ; ( AX) =5678H
MOV BX,0FFFFH ; ( BX) =0FFFFH
XCHG AX,BX ; ( AX) =0FFFFH, ( BX) =5678H
第 2章 寻址方式和指令系统
3.查表转换指令 XLA
语句格式,XLAT OPS或 XLAT
功能:将 ( BX) 为首址 ( AL) 为位移量
的字节存储单元中的数据送 AL寄存器 。
即 ( [BX+AL]) →AL 。
返回本节
第 2章 寻址方式和指令系统
2.2.2 堆栈操作指令
1,进栈指令 PUSH
2,出栈指令 POP
第 2章 寻址方式和指令系统
1.进栈指令 PUSH
语句格式,PUSH OPS
功能:将寄存器, 段寄存器或存储器中的一
个字数据压入堆栈, 堆栈指针减 2。
即,① ( SP) -1 →SP ( OPS) 15~8→[SP]
② ( SP) -1 →SP ( OPS) 7~0→[SP]
第 2章 寻址方式和指令系统
2.出栈指令 POP
语句格式,POP OPD
功能,将栈顶元素弹出送至某一寄存器, 段寄存器
( 除 CS外 ) 或存储器, 堆栈指针加 2。
从 POP指令功能可看出, 该指令为 PUSH指令的逆过程 。
即,① ( [SP]) → ( OPD) 7~0 ( SP) +1 →SP
② ( [SP]) → ( OPD) 15~8 ( SP) +1 →SP
返回本节
第 2章 寻址方式和指令系统
2.2.3 标志寄存器传送指令
1,标志送 AH指令 LAHF
2,AH送标志指令 SAHF
3,标志寄存器进栈指令 PUSHF
4,标志寄存器出栈指令 POPF
第 2章 寻址方式和指令系统
1.标志送 AH指令 LAHF
语句格式,LAHF
功能:将标志寄存器的低 8位送入 AH寄存器 。
即 ( FLAGS) 7-0→AH 。 该指令的执行对标志
位无影响 。
【 例 2.13】 标志寄存器传送 。
执行前,( FLAGS) =0485H,( AX) =0FFFFH
执行指令,LAHF
第 2章 寻址方式和指令系统
2,AH送标志指令 SAHF
语句格式,SAHF
功能:将 AH的内容送入标志寄存器的低 8位, 高
8位不变 。 即 ( AH) →FLAGS 7-0.。
从该指令功能可看出,SAHF为 LAHF的逆过程。
第 2章 寻址方式和指令系统
3.标志寄存器进栈指令 PUSHF
语句格式,PUSHF
功能:将标志寄存器的内容压入堆栈 。
即 ( FLAGS) →↓( SP) 。
第 2章 寻址方式和指令系统
4.标志寄存器出栈指令 POPF
功能,将栈顶内容弹出送入标志寄存器中 。 即 ↑ ( SP)
→FLAGS 。
POPF指令与 PUSHF指令互为逆过程 。
【 例 2.14】 将标志寄存器的单步标志 TF置位 。
PUSHF ; ( FLSGS) →↓ ( SP)
POP AX ; ( SP) →AX
OR AX,0100H ; 设置 D8=TF=1
PUSH AX ; ( AX) →↓ ( SP)
POPF; ( SP) →↓FLAGS, 即 ( AX) →↓FLAGS
返回本节
第 2章 寻址方式和指令系统
2.2.4 地址传送指令
1,传送偏移地址指令 LEA
2,传送偏移地址及数据段首址指令 LDS
3,传送偏移地址及附加数据段指令 LES
第 2章 寻址方式和指令系统
1.传送偏移地址指令 LEA
语句格式,LEA OPD,OPS
功能:主存按源地址的寻址方式计算偏移地址,
将偏移地址送入指定寄存器 。
【 例 2.15】 主存偏移地址的获取 。
MOV BX,0100H ; ( BX) =0100H
MOV SI,0210H ; ( SI) =0210H
LEA BX,1234[BX+SI]; ( BX) =1544H
第 2章 寻址方式和指令系统
2.传送偏移地址及数据段首址指令 LDS
语句格式,LDS OPD,OPS
功能:将主存中指定字单元数据送入指
定存储器, 下一字单元数据送 DS寄存器 。
第 2章 寻址方式和指令系统
3.传送偏移地址及附加数据段指令 LES
语句格式,LES OPD,OPS
功能:将主存某字单元内容送指定寄存器 。
即 ( OPS) →OPD, ( OPS+2) →ES 。
返回本节
第 2章 寻址方式和指令系统
2.2.5 输入输出指令
1,输入指令 IN
2,输出指令 OUT
第 2章 寻址方式和指令系统
1.输入指令 IN
输入指令用来从指定的外设寄存器取信息送入
累加器 。 它有四种形式:
( 1) 语句格式,IN AL,PORT
功能,( PORT) →AL
( 2) 语句格式,IN AX,PORT
功能,( PORT) →AX
( 3) 语句格式,IN AL,DX
功能,( [DX]) →AL
( 4) 语句格式,IN AX,DX
功能,( [DX]) →AL
第 2章 寻址方式和指令系统
2.输出指令 OUT
输出指令用来把累加器的内容送往指定的外设
存储器, 它有四种形式:
( 1) 语句格式,OUTPORT,AL
功能,( AL) →PORT
( 2) 语句格式,OUTPORT,AX
功能,( AX) →PORT
( 3) 语句格式,OUTDX,AL
功能,( AL) →[DX]
( 4) 语句格式,OUTDX,AX
功能,( AX) →[DX]
返回本节
第 2章 寻址方式和指令系统
2.3 算术运算类指令
2.3.1 加法指令
2.3.2 减运算指令
2.3.3 乘运算指令
2.3.4 除运算指令
2.3.5 符号扩展指令
2.3.6 十进制调整指令
返回本章首页
第 2章 寻址方式和指令系统
2.3.1 加法指令
1,加 1指令 INC
2,加指令 ADD
3,带进位加指令 ADC
第 2章 寻址方式和指令系统
1,加 1指令 INC
语句格式,INC OPD
功能:将目的操作数加 1,结果送目的地址 。
即 ( OPD) +1→OPD 。
INC指令是一个单操作数指令, 操作数可以是
寄存器或存储器操作数 。
如,INC BX,即 ( BX) +1→BX 。
加 1指令可用于对计数器和地址指针进行调整。
第 2章 寻址方式和指令系统
2,加指令 ADD
语句格式,ADD OPD,OPS
功能:将目的操作数与源操作数相加, 结
果存入目的地址中, 源地址的内容不改变 。
即 ( OPD) +( OPS) →OPD 。
第 2章 寻址方式和指令系统
3,带进位加指令 ADC
语句格式,ADC OPD,OPS
功能:将目的操作数加源操作数再加低位进位,
结果送目的地址 。
即 ( OPD) +( OPS) +CF → OPD。
【 例 2.20】 无符号双字加法运算 。
MOV AX,4652H ; ( AX) =4652H
ADD AX,0F0F0H ; ( AX) =3742H,CF=1
MOV DX,0234H ; ( DX) =0234H
ADC DX,0F0F0H ; ( DX) =0F325H,CF=0
返回本节
第 2章 寻址方式和指令系统
2.3.2 减运算指令
1,减 1指令 DEC
2,减指令 SUB
3,求补指令 NEG
4,带借位减指令 SBB
5,比较指令 CMP
第 2章 寻址方式和指令系统
1,减 1指令 DEC
语句格式,DEC OPD
功能:将目的操作数减 1,结果送目的地址 。 即
( OPD) - 1→OPD 。
DEC指令是一个单操作数指令, 操作数可以是寄
存器或存储器操作数 。
如,DEC CX。 即 ( CX) - 1→CX 。
减 1指令 DEC也一般用于对计数器和地址指针的调
整 。
第 2章 寻址方式和指令系统
2,减指令 SUB
语句格式,SUB OPD,OPS
功能:目的操作数减源操作数, 结果存于
目的地址, 源地址内容不变 。
即 ( OPD) - ( OPS) →OPD
【 例 2.21】 减法运算 。
MOV AX, 5678H ; ( AX) =5678H
SUB AX, 1234H ; ( AX) =4444H
MOV BX, 3354H ; ( BX) =3354H
SUB BX, 3340H ; ( BX) =0014H
第 2章 寻址方式和指令系统
3,求补指令 NEG
语句格式,NEG OPD
功能:将目的操作数的每一位求反 ( 包括
符号位 ) 后加 1,结果送目的地址 。
即 ( OPD) +1→OPD 。
【 例 2.22】 求补运算 。
MOV AX,0FF64H
NEG AL ; ( AX) =0FF9CH
SUB AL,9DH ; ( AX) =0FFFFH
NEG AX ; ( AX) =0001H
DEC AL ; ( AX) =0000H
NEG AX ; ( AX) =0000H
第 2章 寻址方式和指令系统
4,带借位减指令 SBB
语句格式,SBB OPD, OPS
功能:目的操作数减源操作数再减低
位借位 CF,结果送目的地址 。
即 ( OPD) ― ( OPS) ―CF → OPD
第 2章 寻址方式和指令系统
5.比较指令 CMP
语句格式,CMP OPD,OPS
功能:目的操作数减源操作数, 结果只影响标志位, 不
送入目的地址 。
即 ( OPD) - ( OPS) 。
【 例 2.24】 比较 AL的内容数值大小 。
CMP AL,50 ; ( AL) - 50
JB BELOW ; ( AL) <50,转到 BELOW处执行
SUB AL,50 ; ( AL) >=50,( AL) - 50→AL
INC AH ; ( AH) +1→AH
BELOW,…
返回本节
第 2章 寻址方式和指令系统
2.3.3 乘运算指令
1,无符号数乘法指令 MUL
2,有符号乘指令 IMUL
第 2章 寻址方式和指令系统
1.无符号数乘法指令 MUL
语句格式,MUL OPS
功能,若是字节数据相乘, ( AL) 与 OPS相乘得到字数
据存入 AX中;若是字数据相乘, 则 ( AX) 与 OPS相乘得
到双字数据, 高字存入 DX,低字存入 AX中 。
即字节乘法:( AL) * ( OPS) →AX, 字乘法:( AX)
* ( OPS) →DX, AX 【例 2.25】无符号数 0A3H与 11H
相乘。
MOV AL,0A3H ; ( AL) =0A3H
MOV BL,11H ; ( BL) =11H
MUL BL ; ( AX) =0AD3H
第 2章 寻址方式和指令系统
2.有符号乘指令 IMUL
语句格式,IMUL OPS
功能:字节乘法,( AL) *( OPS) →AX, 字乘法:
( AX) *( OPS) →DX, AX。
IMUL指令除计算对象是带符号二进制数外,其他都与
MUL一样,但计算结果不同。 【例 2.26】有符号数
0B4H与 11H相乘。
MOV AL,0B4H ; ( AL) =B4H
MOV BL,11H ; ( BL) =11H
IMUL BL ; ( AX) =0FAF4H
返回本节
第 2章 寻址方式和指令系统
2.3.4 除运算指令
1,无符号除指令 DIV
2,有符号 除指令 IDIV
第 2章 寻址方式和指令系统
1,无符号除指令 DIV
语句格式,DIV OPS
功能:字节除法,( AX) /( OPS) → AL( 商 ), AH( 余数 )
字除法,( DX,AX) /( OPS) → AX( 商 ), DX( 余数 )
【 例 2.27】 写出实现无符号数 0400H / 0B4H运算的程序段 。
MOV AX,0400H ; ( AX) =0400H
MOV BL,0B4H ; ( BL) =0B4H
DIV BL ; 商( AL) =05H,余数( AH) =7CH
第 2章 寻址方式和指令系统
2,有符号除指令 IDIV
语句格式,IDIV OPS
功能:字节除法,( AX) /( OPS) → AL( 商 ), AH
( 余数 )
字除法,( DX,AX) /( OPS) → AX ( 商 ), DX
( 余数 )
除法指令 DIV和 IDIV虽然对标志的影响未定义, 但可产
生溢出 。
【 例 2.28】 写出实现有符号数 0400H /0B4H运算的程序
段 。
MOV AX,0400H ; ( AX) =0400H
MOV BX,0B4H ; ( BX) =0B4H
IDIV BX ; ( AL) =0F3H,( AH) =24H
返回本节
第 2章 寻址方式和指令系统
2.3.5 符号扩展指令
1,字节转换成字指令 CBW
2,将字转换成双字指令 CWD
第 2章 寻址方式和指令系统
1,字节转换成字指令 CBW
语句格式,CBW
功能:将 AL中的符号位数据扩展至 AH。
【 例 2.29】 将字节数据扩展成字数据 。
MOV AL,0A5H ; ( AL) =0A5H
CBW ; ( AX) =0FFA5H
ADD AL,70H ; ( AL) =25H
CBW ; ( AX) =0025H
第 2章 寻址方式和指令系统
2,将字转换成双字指令 CWD
语句格式,CWD
功能:将 AX中的符号位数据扩展至 DX 。
【 例 2.30】 将字数据扩展成双字数据 。
MOV DX,0 ; ( DX) =0
MOV AX,0FFABH ; ( AX) =0FFABH
CWD ; ( DX) =0FFFFH ( AX) =0FFABH
返回本节
第 2章 寻址方式和指令系统
2.3.6 十进制调整指令
1,压缩 BCD码调整指令
2,非压缩 BCD码调整指令
第 2章 寻址方式和指令系统
( 1)加法的十进制调整指令 DAA
语句格式,DAA
功能:如果 AL寄存器中低 4位大于 9或辅助进位 ( AF) =1,则
( AL) =( AL) +6且 ( AF) =1; 如果 ( AL) >=0A0H或 ( CF)
=1,则 ( AL) =( AL) +60H且 ( CF) =1。 同时, SF,ZF,PF
均有影响 。
【 例 2.31】 压缩 BCD码的加法运算 。
MOV AL,68H ; ( AL) =68H,表示压缩 BCD码 68
MOV BL,28H ; ( BL) =28H,表示压缩 BCD码 28
ADD AL,BL ; 二进制加法,( AL) =68H+28H=90H
DAA ; 十进制调整,( AL) =96H; 实现压缩 BCD码加法,68+28=96
第 2章 寻址方式和指令系统
( 2)减法的十进制调整指令 DAS
语句格式,DAS
功能:如果 ( AF) =1或 AL寄存器中低 4位大于 9,则 ( AL) =
( AL) - 6且 ( AF) =1; 如果 ( AL) >=0A0H或 ( CF) =1,则
( AL) =( AL) - 60H且 ( CF) =1。 同时 SF,ZF,PF均受影响 。
【 例 2.32】 压缩 BCD码的减法运算 。
MOV AL,68H ; ( AL) =68H,表示压缩 BCD码 68
MOV BL,28H ; ( BL) =28H,表示压缩 BCD码 28
SUB AL,BL ; 二进制减法,( AL) =68H- 28H=40H
DAS ; 十进制调整,( AL) =40H; 实现压缩 BCD码减法,68- 28=40
第 2章 寻址方式和指令系统
2.非压缩 BCD码调整指令
( 1) 加法的非压缩 BCD码调整指令 AAA
( 2) 减 法的非压缩 BCD码调整指令 AAS
( 3) 乘法的非压缩 BCD码调整指令 AAM
( 4) 除法的非压缩 BCD码调整指令 AAD
第 2章 寻址方式和指令系统
( 1) 加法的非压缩 BCD码调整指令 AAA
语句格式,AAA
功能:如果 AL的低 4位大于 9或 ( AF) =1,则:
( AL) =( AL) +6
( AH) =( AH) +1
( AF) =( CF) =1
且 AL高 4位清零 。
否则,( CF) =( AF) =0
AL高 4位清零 。
第 2章 寻址方式和指令系统
( 2) 减法的非压缩 BCD码调整指令 AAS
语句格式,AAS
功能:如果 AL的低 4位大于 9或 ( AF) =1,则:
( AL) =( AL) - 6
( AH) =( AH) - 1
( AF) =( CF) =1
AL高 4位清零 。
否则,( CF) =( AF) =0
AL高 4位清零 。
其他标志位 OF,PF,SF,ZF不确定 。
第 2章 寻址方式和指令系统
( 3) 乘法的非压缩 BCD码调整指令 AAM
语句格式,AAM
功能:被调整的乘积在 AX中, 对 AL按 10取模,
则:
( AL) / 0AH→AH ( 商 ), AL( 余数 )
其中 AH为商,AL为余数,标志位 AF,CF,OF、
PF,SF,ZF受影响。
第 2章 寻址方式和指令系统
( 4) 除法的非压缩 BCD码调整指令 AAD
语句格式,AAD
功能:除法运算前, 先调整被除数 AX内容, 使:
( AL) =( AL) +( AH) *0AH
( AH) =0
即把非压缩型十进制数变成二进制数 。
返回本节
第 2章 寻址方式和指令系统
2.4 位操作类指令
2.4.1 逻辑运算指令
2.4.2 移位指令
返回本章首页
第 2章 寻址方式和指令系统
2.4.1 逻辑运算指令
1,求反指令 NOT
2,逻辑乘指令 AND
3,测试指令 TEST
4,逻辑加指令 OR
5,按位加指令 XOR
第 2章 寻址方式和指令系统
1,求反指令 NOT
语句格式,NOT OPD
功能:将目的地址中的内容逐位取反后送
入目的地址 。 即 ( OPD) →OPD
【 例 2.37】 逻辑非运算 。
MOV AX,878AH ; ( AX) =878AH
NOT AX,; ( AX) =7875H
第 2章 寻址方式和指令系统
2,逻辑乘指令 AND
语句格式,AND OPD,OPS
功能:将目的操作数和源操作数进行逻辑乘运算, 结果
存目的地址 。
即 ( OPD) ∧ ( OPS) →OPD 。
该指令用于清除目的操作数中与源操作数置 0的对应位 。
说明:逻辑乘的运算法则为,1∧ 1=1,1∧ 0=0,
0∧ 1=0,0∧ 0=0
【 例 2.38】 将 AL中第 3位和第 7位清零 。
MOV AL,0FFH
AND AL,77H
第 2章 寻址方式和指令系统
3,测试指令 TEST
语句格式,TEST OPD,OPS
功能:源地址和目的地址的内容执行按位的逻辑乘运
算, 结果不送入目的地址 。
即 ( OPD) ∧ ( OPS) 。
【 例 2.39】 测试 AX中的第 12位是否为 0,不为 0则转 L。
TEST AX,1000H
JNE L
第 2章 寻址方式和指令系统
4,逻辑加指令 OR
语句格式,OR OPD,OPS
功能:将目的操作数和源操作数进行逻辑加运算,
结果存目的地址 。
即 ( OPD) ∨ ( OPS) →OPD 。
说明:逻辑加的运算法则为,1∨ 1=1,1∨ 0=1,
0∨ 1=1,0∨ 0=0。
【 例 2.40】 将 AL寄存器中第 3位和第 7位置 1。
MOV AL,0
OR AL,88H
第 2章 寻址方式和指令系统
5,按位加指令 XOR
语句格式,XOR OPD,OPS
功能:目的操作数与源操作数做按位加运算, 结
果送入目的地址 。
即 ( OPD) ⊕(OPS) →OPD 。
说明:按位加的运算法则为; 1⊕ 1=0,1⊕ 0=1,
0⊕ 1=1,0⊕ 0=0。
【 例 2.41】 按位加运算 。
MOV AL,45H ; ( AL) =45H
XOR AL,31H ; ( AL) =74H
返回本节
第 2章 寻址方式和指令系统
2.4.2 移位指令
移位指令包括算术移位指令, 逻辑移位指令和
循环移位指令, 分别进行左移和右移操作 。 这
些指令均有统一的语句格式:
[标号,]操作符 OPD,1或 [标号,]操作符 OPD,
CL
其功能为将目的操作数的所有位按操作符规定
的 方式移 动 1位或按 寄存器 CL规定 的次 数
( 0~255) 移动, 结果送入目的地址 。 目的操作
数是 8位 ( 或 16位 ) 的寄存器数据或存储器数据 。
第 2章 寻址方式和指令系统
1,算术左移和逻辑左移指令 SAL( SHL)
语句格式,SAL OPD,1 或 SHL OPD,1
SAL OPD,CL或 SHL OPD,CL
功能:将 ( OPD) 向左移动 CL指定的次数, 最低
位补入相应的0, CF的内容为最后移入位的
值 。
第 2章 寻址方式和指令系统
2,算术右移指令 SAR
语句格式,SAR OPD,1或 SAR OPD,CL
CF功能:将( OPD) 向右移动 CL指定的次数且最
高位保持不变; CF的内容为最后移入位的值。
第 2章 寻址方式和指令系统
【 例 2.43】 算术右移运算 。
MOV BH,0F4H ; ( BH) =0F4H
MOV CL,2 ; ( CL) =2
SAR BH,CL ; ( BH) =0FDH,( CF) =0
该例语句, SAR BH,CL”实际上完成了 ( BH)
/4 →BH 的运算, 所以, 用 SAR指令可以实现
对有符号数除 2n的运算 ( n为移位次数 ) 。
第 2章 寻址方式和指令系统
3,逻辑右移指令 SHR
语句格式,SHR OPD,1或 SHR OPD,CL
功能:将 ( OPD) 向右移动 CL规定的次数, 最高
位补入相应个数的0, CF的内容为最后移入位
的值 。
第 2章 寻址方式和指令系统
4,循环左移指令 ROL
语句格式,ROL OPD,1或 ROL LPD,CL
功能:将目的操作数的最高位与最低位连成一
个环, 将环中的所有位一起向左移动 CL规定的
次数 。 CF的内容为最后移入位的值 。
第 2章 寻址方式和指令系统
5,循环右移指令 ROR
语句格式,ROR OPD,1或 ROR OPD,CL
功能:将目的操作数的最高位与最低位连成一
个环, 将环中的所有位一起向右移动 CL规定的
次数, CF的内容为最后移入位的值 。
第 2章 寻址方式和指令系统
6,带进位的循环左移指令 RCL
语句格式,RCL OPD,1或 RCL OPD,CL
功能:将目的操作数连同 CF标志一起向左循环
移动 CL规定的次数。
第 2章 寻址方式和指令系统
7,带进位的循环右移指令 RCR
语句格式,RCR OPD,1或 RCR OD,CL
功能:将目的操作数连同 CF标志一起向右循环
移动所规定的次数。
返回本节
第 2章 寻址方式和指令系统
2.5 串操作类指令
串操作指令,
数据传送类指令每次只能传送一个数据,
若要传送大批数据就需要重复编程,这
样就浪费了大量的时间和空间。为此
8086提供了一组处理主存中连续存放数
据串的指令,这就是 串操作指令。
返回本章首页
第 2章 寻址方式和指令系统
图 2.3流程图总结了串操作的过程。
图 2.3 串操作流程图
第 2章 寻址方式和指令系统
1,传送指令 MOVS
语句格式,① MOVSB—— 字节串传送
② MOVSW—— 字串传送
功能:将以 SI为指针的源串中的一个字节 ( 或字 ) 存储
单元中的数据传送至以 DI为指针的目的地址中去, 并自
动修改指针, 使之指向下一个字节 ( 或字 ) 存储单元 。
即,① ( DS,[SI]) →ES, [DI]。
② 当 DF=0时, ( SI) 和 ( DI) 增量 。
当 DF=1时, ( SI) 和 ( DI) 减量 。
第 2章 寻址方式和指令系统
2,串比较指令 CMPS
语句格式,① CMPSB—— 字节串比较
② CMPSW—— 字串比较
功能:将 SI所指的源串中的一个字节 ( 或字 ) 存储单元
中的数据与 DI所指的目的串中的一个字节 ( 或字 ) 存储
单元中的数据相减, 并根据相减的结果设置标志, 但结
果并不保存 。
即,① ( [SI]) - ( [DI]) 。
② 修改串指针, 使之指向串中的下一个元素 。
当 DF=0时, ( SI) 和 ( DI) 增量 。 当 DF=1时, ( SI)
和 ( DI) 减量 。
第 2章 寻址方式和指令系统
3,串搜索指令 SCAS
语句格式,① SCASB—— 字节串搜索
② SCASW—— 字串搜索
功能,AL( 字节 ) 或 AX( 字 ) 中的内容与 DI所指的目的
串中的一个字节 ( 或字 ) 存储单元中的数据相减, 根据
相减结果设置标志位, 结果不保存,
即,① 字节操作,( AL) - ( [DI]), 字操作,( AX)
- ( [DI]) 。
② 修改指针使之指向串中的下一个元素 。
当 DF=0时, ( DI) 增量 。 当 DF=1时, ( DI) 减量 。
第 2章 寻址方式和指令系统
4,从源串中取数指令 LODS
语句格式,① LODSB—— 从字节串中取数
② LODSW—— 从字串中取数
功能:将 SI所指的源串中的一个字节 ( 或字 ) 存储单元
中的数据取出来送入 AL( 或 AX) 中 。
即,① 字节操作,( [SI]) →AL, 字操作,( [SI])
→AX 。
② 修改指针 SI,使它指向串中的下一个元素 。
当 DF=0时,( SI) 增量。当 DF=1时,( SI) 减量。
第 2章 寻址方式和指令系统
5,往目的串中存数指令 STOS
语句格式,① STOSB—— 往字节串中存数
② ( 2) STOSW—— 往字串中存数
功能:将 AL或 AX中的数据送入 DI所指的目的串中的字节
( 或字 ) 存储单元中 。
即,① 字节操作,( AL) →[DI], 字操作,( AX)
→[DI] 。
② 修改指针 DI,使之指向串中的下一个元素 。
当 DF=0时, ( DI) 增量 ) 。 当 DF=1时, ( DI) 减量 。
第 2章 寻址方式和指令系统
6,重复前缀指令 REP REPZ REPNZ
( 1) REP
REP前缀用在 MOVS,STOS, LODS指令前 。
功能:每执行一次串指令 ( CX) - 1,直到 ( CX) =0,重复执行结
束 。
( 2) REPZ
该指令一般用在 CMP,SCAS指令前 。
功能:每执行一次串指令 ( CX) - 1,并判断 ZF标志是否为 0,只
要 ( CX) =0或 ZF=0,则重复执行结束 。
( 3) REPNZ
该指令一般用在 CMPS,SCAS 指令前 。
功能:每执行一次串指令 ( CX) - 1,并判断 ZF标志是否为 0,只
要 ( CX) =0或 ZF=1,则重复执行结束 。
第 2章 寻址方式和指令系统
2.6 控制转移类指令
2.6.1 条件转移指令
2.6.2 无条件转移指令
2.6.3 循环指令
2.6.4 子程序调用指令
2.6.5 中断指令
返回本章首页
第 2章 寻址方式和指令系统
2.6.1 条件转移指令
1,简单条件转移指令
2,无符号数条件转移指令
3,有符号数条件转移指令
它们都有通用的语句格式和功能 。
语句格式,[ 标号,] 操作符 短标号
功能:如果条件满足, 则 ( IP) + 位移量
→ IP。
第 2章 寻址方式和指令系统
1.简单条件转移指令
第 2章 寻址方式和指令系统
第 2章 寻址方式和指令系统
2.无符号数条件转移指令
表 2.2 无符号数条件转移指令
第 2章 寻址方式和指令系统
【 例 2.53】 比较无符号数大小, 将较大的数存放 AX
寄存器 。
CMP AX,BX ; ( AX) - ( BX)
JNB NEXT ; 若 AX>=BX,转移到 NEXT
XCHG AX,BX ; 若 AX<BX,交换
NEXT,…
第 2章 寻址方式和指令系统
3,有符号数条件转移指令
表 2.3 有符号数条件转移指令
第 2章 寻址方式和指令系统
【 例 2.54】 比较有符号数大小, 将较大的数存放在
AX寄存器 。
CMP AX,BX ; ( AX) - ( BX)
JNL NEXT ; 若 AX>=BX,转移到 NEXT
XCHG AX,BX ; 若 AX<BX,交换
NEXT,…
返回本节
第 2章 寻址方式和指令系统
2.6.2 无条件转移指令
表 2.4 无条件转移指令的语句格式及功能
返回本节
第 2章 寻址方式和指令系统
2.6.3 循环指令
1,循环指令 LOOP
2,相等 /为零循环指令 LOOPE
3,不相等 /不为零循环指令 LOOPNE
4,CX为零转移指令 JCXZ
第 2章 寻址方式和指令系统
1,循环指令 LOOP
语句格式,LOOP 短标号
功能,( CX) - 1 ≠ 0,则程序转移 ( 循
环 ) ;否则, 顺序执行 。
说明:使用 LOOP指令可代替两条指令:
DEC CX
JNE 短标号
第 2章 寻址方式和指令系统
2,相等 /为零循环指令 LOOPE
语句格式,① LOOPE 短标号
② LOOPZ 短标号
功能,( CX) - 1 ≠ 0且 ZF=1,则程序转移
( 循环 ) ;否则, 顺序执行 。
第 2章 寻址方式和指令系统
3,不相等 /不为零循环指令 LOOPNE
语句格式,① LOOPNE 短标号
② LOOPNZ 短标号
功能,( CX) - 1≠ 0,则 程 序 转 移
( 循环 ) ;否则, 顺序执行 。
第 2章 寻址方式和指令系统
4,CX为零转移指令 JCXZ
语句格式,JCXZ 短标号
功能,( CX) - 1≠ 0,则程序转移
( 循环 ) ;否则, 顺序执行 。
返回本节
第 2章 寻址方式和指令系统
2.6.4 子程序调用指令
1,子程序调用指令 CALL
( 1) 段内直接调用
( 2) 段间直接调用
( 3) 段内间接调用
( 4) 段间间接调用
2,返回指令 RET
( 1) 语句格式,RET
( 2) 语句格式,RET n( n为偶数 )
返回本节
第 2章 寻址方式和指令系统
2.6.5 中断指令
1,中断调用指令 INT
语句格式,INT n
功能,① ( FLAGS) →↓ ( SP), 0→ IF,TF。
② ( CS) →↓ ( SP), ( 4*n+2) → CS。
③ ( IP) →↓ ( SP), ( 4*n) → IP。
2,中断返回指令 IRET
语句格式,IRET
功能,① ↑( SP) →IP
② ↑( SP) →CS
③ ↑( SP) → FLAGS
返回本节
第 2章 寻址方式和指令系统
2.7 处理机控制类指令
2.7.1 标志位设置指令
2.7.2 CPU状态控制指令
返回本章首页
第 2章 寻址方式和指令系统
2.7.1 标志位设置指令
1,进位标志操作指令
2,方向标志操作指令
3,中断标志操作指令
返回本节
第 2章 寻址方式和指令系统
2.7.2 CPU状态控制指令
1,空操作指令 NOP
2,总线封锁前缀指令 LOCK
3,暂停指令 HLT
4,交权指令 ESC
5,等待指令 WAIT
返回本节