-
MOV
指令为双操
作数指令
,
两个操作数中必须有一个是
寄存器
.
MOV DST , SRC // Byte / Word
执行操作
: dst = src
1.
目的数可以是通用寄存器
,
p>
存储单元
和段寄存器
(
但不允许用
CS
段寄存器
).
2.
立即数不能直接送段寄存器
3.
不允
许在两个存储单元直接传送数据
4.
不允许在两个段寄存器间直接传送信息
PUSH
入栈指令及
POP
出栈指令
:
堆栈
p>
操作是以
“
后进先出
”
的方式进行数据操作
.
PUSH SRC //Word
入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄
存器
(
全部
)
和存储器
.
入栈时高位字节先入栈,低位字节后入栈
.
POP DST //Word
出栈操作数除不允许用立即数和<
/p>
CS
段寄存器外
,
可以为通用寄存器
,
段寄存器和存储
器
.
执行
POP SS
指令后
,
堆栈区在存储区的位置要改变
.
执行
POP SP
指令后
,
栈顶的位置要改变
.
XCHG
(eXCHanG)
交换指令
:
将两操作数值交换
.
XCHG OPR1, OPR2 //Byte/Word
执行操作
: Tmp=OPR1 OPR1=OPR2
OPR2=Tmp
1.
必须有一个操作数是在寄存器中
2.
不能与段寄存器交换数据
3.
存储
器与存储器之间不能交换数据
.
XLAT
(TRANSLATE)
换码
指令
:
把一种
代码
< br>转换为另一种代码
.
XLAT (OPR
可选
)
//Byte
执行操作
: AL=(BX+AL)
指令执行时只使用预先已存入
BX<
/p>
中的表格首地址
,
执行后
,AL
中内容则是所要转换的代
码
.
LEA
(Load Effective Address)
有效地址传送寄存器指令
LEA REG , SRC //
指令把源操作数
SRC
的有效地址送到指定的寄存器中
.
执行操作
: REG = EAsrc
注
: S
RC
只能是各种寻址方式的存储器操作数
,REG
只能是
16
位寄存器
MOV BX , OFFSET
OPER_ONE
等价于
LEA
BX , OPER_ONE
MOV SP , [BX] //
将
BX
间接寻址的相继的二个存储单元的内容送入
SP
中
LEA SP , [BX] //
将
BX
的内容作为存储器有效地址送入
SP
中
LDS
(Load DS with pointer)
指针
送寄存器和
DS
指令
LDS REG , SRC //
常指定
SI
寄存器。
执行操作
: REG=(SRC),
DS=(SRC+2) //
将
SRC
指出的前二个存储单元的内容送入指
令中指定的寄存器中,后二个存储单元送入
DS
段寄存器中。
LES
(Load ES with pointer) <
/p>
指针送寄存器和
ES
指令
LES REG ,
SRC //
常指定
DI
寄存器
执行操作
: REG=(SRC) , ES=(SRC+2)
//
与
LDS
大致相同
,
不同之处是将
ES
代替
p>
DS
而已
.
LAHF
( Load AH
with Flags )
标志位送
AH
指令
LAHF //
将
PSW
寄存器中的低
8
位的状态标志
(
条件码
)
送入
AH
的相应位
, SF
送
D7
位
,
ZF
送
D6
位
.....
.
执行操作
:
AH=PSW
的低位字节。
SAHF
( Store AH
into Flags ) AH
送标志寄存器指令
SAHF //
< br>将
AH
寄存器的相应位送到
PS
W
寄存器的低
8
位的相应位
, AH
的
D7
位送
p>
SF,
D6
位送
ZF......
执行操作
: PSW
的低位字节
=AH
。
PUSHF
( PUSH the
Flags)
标志进栈指令
PUSHF
//
将标志寄存器的值压入堆栈顶部
,
同时栈指针
SP
值减
2
执行操作
: SP=SP-1,(SP)=PSW
的高
8
位
,
SP=SP-1, (SP)=PSW
的低
8
< br>位
POPF
( POP the Flags )
标志出栈指令
POPF //
与
< br>PUSHF
相反
,
从堆栈的顶
部弹出两个字节送到
PSW
寄存器中
,
同时堆栈指
针值加
2
执行操作
: PSW
低
8
位
=(SP), SP=SP+1, PSW
高
8
位
=(SP)
, SP=SP+1
输入输出指
令
(
IN,OUT
)
< br>:只限于使用累加器
AX
或
AL
与外部设备的端口传送信息
.
IN (INput)
输入指令:信
息从
I/O
通过累加器传送到
CPU
IN AL , PORT //
直接的字节输入
,PORT
是外设端口
编号
(
即端口地址
),
只能取
00H ~
0FF
H
共
256
个端口地址
.
IN AX ,
PORT //
直接的字输入
,AX
存
储连续两个端口地址
PORT+1,PORT
IN AL , DX //
间接的
字节输入
,
端口地址范围可通过
DX<
/p>
设置为
0000H ~ 0FFFFH
共
65536
个端口地址
IN AX , DX
//
间接的字输入
OUT(
OUTput)
输出指令
:信息从<
/p>
CPU
通过累加器传送到
I/O
OUT PORT , AL /
/
直接的字节输出
,PORT
规定与<
/p>
IN
指令相同
.
OUT PORT , AX
OUT DX , AL
//
间接的字节输出
OUT DX , AX
MOV AL,05H OUT 27H, AL //
p>
将字节
05H
传送到地址
< br>27H
的端口
ADD
(ADD)
< br>加法指令
ADD DST , SRC //Byte/Word
执行操作
:
dst=dst+src
1.<
/p>
两个存储器操作数不能通过
ADD
指令直
接相加
,
即
DST
和
SRC
必须有一个是通用
寄
存器操作数
.
2.
段寄存器不能作为
SRC
和
DST.
3.
影响标志位
Auxiliary
Crray Flag ,Carry Flag, Overflow Flag, Parity
Flag, Sign Flag
和
Zero Flag
,
如下所示:
CF
根据最高有效位是否有进
p>
(
借
)
位设置的:
有进
(
借
)
位
时
CF=1,
无进
(
借
)
位时
CF=0.
OF
根
据操作数的符号及其变化来设置的:若两个操作数的符号相同
,
而结果的符号与
之相反时
OF=1,
否则为
0.
ZF
根据结果来设置:不等于
p>
0
时
ZF=0,
等于
0
时
ZF=1
SF
根据结果的最高位来设置:最高位为
0,
则
SF=0.
AF
根据相加时
< br>D3
是否向
D4
进
(
借
)
位来设置:
有进
(
借
)
位时
AF=1,
无进
(
借
)
位时
AF
=0
PF
根据结果的
1
的个数时否为奇数来设置:
< br>1
的个数为奇数时
PF=0,
为偶数时
PF=1
ADC
( ADd with
Carry)
带进位加法指令
ADC DST , SRC //Byte/Word
执行操作
: dst=dst+src+CF //
与
ADD
不同之处是还要加上进位标志位的值
p>
.
INC
( INCrement)
加
1
指令
INC OPR
//Byte/Word
执行操作
: OPR=OPR+1
可以是寄存器和存储器操作数
,
但不能是立即数和段寄存器
2.
影响标志位
OF,SF,ZF,PF
和
AF,
不影响
CF.
SUB
( SUBtract )
不带借位的减法指令
SUB DST , SRC //Byte/Word
执行操作:
dst=dst - src
和
SRC
寻址方式及规定与
ADD
相同
.
2.
影响全部标志位
.(
判
断标志位参见
ADD)
SBB
( SuBtract with Borrow)
带借位减法指令
SBB DST , SRC //Byte/Word
执行操作:
dst= dst - src - CF
DEC
( DECrement )
减
1
指令
DEC OPR
//Byte/Word
执行操作:
OPR = OPR - 1 //
除
CF
标志位
,
其余标志位都受影响
.
NEG
( NEGate )
求补指令
NEG OPR
执行操作:
opr = 0- opr
//
将操作数按位求反后末位加
1.
CMP
( CoMPare )
比较指令
CMP OPR1 , OPR2
执行操作:
OPR1 - OPR2 //
与
SUB
指令一样执行运算
,
但不保存结果
.
比较情况
无符号数
有符号数
A=B ZF=1 ZF=1
A>B CF=0 && ZF=0 SF^OF=0 && ZF=0
A
A>=B CF=0 ||
ZF=1 SF^OF=0 || ZF=1
A<=B CF=1 || ZF=1 SF^OF=1 || ZF=1
MUL
( unsigned MULtiple )
无符号数乘法指令
MUL SRC //Byte/Word .
执行操作:
Byte => AX= AL *src
//
字节运算时目的操作数用
AL,
乘积放在
AX
中
Word => DX=AX
*src //
字运算时目的操作数用
AX,
DX
存放乘积的高位字
,
AX
放乘积
的低位字
1.
目的数必须是累加器
AX
或
AL,
指令中不需写出
2.
源操作数
SRC
可以是通用寄存器和各种寻址方式的存储器操作数
,
而绝对不允许是
立即数或段寄存器
.
IMUL
(sIgned MULtiple)
有符号数乘法指令
IMUL SRC //
与
MUL
指令相同
,<
/p>
但必须是带符号数
DIV
( unsigned
DIVide)
无符号数除法指令
DIV SRC //Byte/Word
其中
:
SRC
的规定同乘法指令
MUL
执行操作:
Byte => AX
/ src //
字节运算时目的操作数在
AX
中
,
结果的商在
AL
中
,
余数
在
AH
中
Word=> DX,AX
/src //
字运算时目的操作数在
DX
高位字和
AX
低位字中
,
结果的商在
AX
中
<
/p>
,
余数在
DX
中
存储器操作数必须指明数据类型:
BYTE PTR src
或
WORD PTR src
IDIV
(sIgned DIVied)
有符号数除法指令
IDIV SRC //Byte/Word
与
DIV
指令相同
,
但必须是带符号数
CBW
(Convert
Byte to Word)
字节转换为字指令
CBW
执行操作
: AL
< br>中的符号位
(D7)
扩展到
8<
/p>
位
AH
中
,
p>
若
AL
中的
D7=
0
,则
AH=00H,
若
AL
中的
D7=1,
则
p>
AH=FFH.
CWD
(Convert Word to Double
word)
字转换为双字指令
CWD
执行操作
: AX
中的符号位
(D15)
扩展到
16
位
DX
中
,
若
AX
中的
D15=0
< br>,
则
DX=0000H,
若
p>
AX
中的
D15=1,
则
DX=FFFFH
十进制调整指令
当计算机进行计算时
,
必须先把十进制数转换为
二进制数
,
再进行二进制数运算
,
最后将
结果又转换为十进制数输出
.
<
/p>
在计算机中
,
可用
4
位二进制数表示一位十进制数
,
这
种代码称为
BCD ( Binary Coded
Decimal ).
BCD
码又称
8421
码
,
在
PC
机
中
,BCD
码可用压缩的
BCD
码和非压缩的
BCD
码两种
< br>格式表示
.
压缩的
B
CD
码用
4
位二进制数表示一个十制数
,
整个十进数形式为一个顺序的以
4<
/p>
位为
一组的数串
.
非压缩的
BCD
码以
8
位为一组表示一个十进制
数
,8
位中的低
4
位表示
8421
的
BCD
码
,
而高
4
位则没有意义
.
<
/p>
压缩的
BCD
码调整指令
DAA
(Decimal Adjust for
Addition)
加法的十进制调整指令
DAA
执行操作
:
执行之前必须先执行
ADD
或
ADC<
/p>
指令
,
加法指令必须把两个压缩的
BCD
码
相加
,
p>
并把结果存话在
AL
寄存器中
.
DAS
(Decimal Adjust for
Subtraction)
减法的十进制调整指令
DAS
执行操作
:
执行之前必须先执行
SUB
或
SBB<
/p>
指令
,
减法指令必须把两个压缩的
BCD
码
相减
,
p>
并氢结果存放在
AL
寄存器中
.
非压缩的
BCD
码调整指令
AAA
(ASCII
Adjust for Addition)
加法的
ASCI
I
调整指令
AAA
执行操作
:
执行之前必须先执行
ADD
或
ADC
指令
,
加法指令必须把两个非压缩的
BCD
码相加
,
并把结果存话在
AL
寄存器中
.
AAS
(ASCII
Adjust for Subtraction)
减法的
A
SCII
调整指令
AAS
执行操作
:
执行之前必须先执行
SUB
或
SBB
指令
,
减法指令必须把两个非压缩的
BCD
码相减
,
并氢结果存放在
AL
寄存器中
.
MOVS
( MOVe
String)
串传送指令
MOVB
//
字节串传送
DF=0, SI
= SI + 1 , DI = DI + 1
;
DF =
1 , SI = SI - 1 , DI = DI - 1
MOVW
//
字串传送
DF=0, SI =
SI + 2 , DI = DI + 2
;
DF = 1
, SI = SI - 2 , DI = DI - 2
执行操作:
[DI] = [SI]
,
将位于
DS
段的由
< br>SI
所指出的存储单元的字节或字传送到位于
ES
段的由
DI
所指出的存储单元
,
再修改
SI
和
DI,
从而指向下一个元素
.
在执行该指令之前
,
必须预置
SI
和
DI
的初值
,
用
STD
或
CLD
设置<
/p>
DF
值
.
MOVS DST , SRC //
同上
,
不常用
,DST
和
SRC
只是用来用类型检查
,
并不允许使用其它
寻址方式来确定操作数
< br>.
1.
< br>目的串必须在附加段中
,
即必须是
ES:[DI]
2.
源串允许使用段跨越前缀来修饰
,
但偏移地址必
须是
[SI].
STOS
(STOre into String)
存入串指令
STOS DST
STOSB
//
存放字节串
( DI ) =
AL
STOSW
//
存放字串
( DI ) =
AX
执行品作:
把
AL
或
AX
中的内容存放由
DI
指定的附加段的字节或字单元中<
/p>
,
并根据
DF
值
修改及数据类型修改
DI
的内容
.
-
-
-
-
-
-
-
-
-
上一篇:最新大象版五年级下册科学知识点总结
下一篇:大象版三年级上册科学总复习资料