汇编语言的各条指令.docx
- 文档编号:16812245
- 上传时间:2023-07-17
- 格式:DOCX
- 页数:35
- 大小:29.54KB
汇编语言的各条指令.docx
《汇编语言的各条指令.docx》由会员分享,可在线阅读,更多相关《汇编语言的各条指令.docx(35页珍藏版)》请在冰点文库上搜索。
汇编语言的各条指令
常用命令
数据传送指令
一 通用数据传送指令
指令
英文全拼
翻译
MOV
Move
传送
PUSH
Push onto the stack
进栈
POP
Pop from the stack
出栈
XCHG
Exchange
交换
MOV指令为双操作数指令,两个操作数中不能全为内存操作数
格式:
MOV DST,SRC
执行操作:
dst = src
注:
1.目的数可以是通用寄存器,存储单元和段寄存器(但不允许用CS段寄存器).
2.立即数不能直接送段寄存器
3.不允许在两个存储单元直接传送数据
4.不允许在两个段寄存器间直接传送信息
PUSH入栈指令及POP出栈指令:
堆栈操作是以“后进先出”的方式进行数据操作。
格式:
PUSH SRC //Word
执行操作:
(SP)<-(SP)-2
((SP)+1,(SP))<-(SRC)
注:
1.入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器。
2.入栈时高位字节先入栈,低位字节后入栈。
格式:
POP DST //Word
执行操作:
(DST)<-((SP+1),(SP))
(SP)<-(SP)+2
注:
1.出栈操作数除不允许用立即数和CS段寄存器外,可以为通用寄存器,段寄存器和存储器。
2.执行POP SS指令后,堆栈区在存储区的位置要改变。
3.执行POP SP 指令后,栈顶的位置要改变。
XCHG(eXCHanG)交换指令:
将两操作数值交换。
格式:
XCHG OPR1,OPR2 //Byte/Word
执行的操作:
(OPR1)<-->(OPR2)
注:
1.必须有一个操作数是在寄存器中
2.不能与段寄存器交换数据
存储器与存储器之间不能交换数据。
二 累加器专用传送指令
指令
英文全拼
翻译
IN
Input
输入
OUT
Output
输出
XLAT
Translate
换码
IN 输入指令
长格式为:
IN AL,PORT(字节)
IN AX,PORT(字)
执行的操作:
(AL)<-(PORT)(字节)
(AX)<-(PORT+1,PORT)(字)
短格式为:
IN AL,DX(字节)
IN AX,DX(字)
OUT 输出指令
长格式为:
OUT PORT,AL(字节)
OUT PORT,AX(字)
执行的操作:
(PORT)<-(AL)(字节)
(PORT+1,PORT)<-(AX)(字)
短格式为:
OUT DX,AL(字节)
OUT DX,AX(字)
执行的操作:
((DX))<-(AL)(字节)
((DX)+1,(DX))<-AX(字)
XLAT(TRANSLATE)换码指令:
把一种代码转换为另一种代码。
格式:
XLAT (OPR 可选) //Byte
执行操作:
(AL)<-((BX)+(AL))
注:
指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码。
三 有效地址送寄存器指令
指令
英文全拼
翻译
LEA
Load effective address
有效地址送寄存器
LDS
Load DS with Pointer
指针送寄存器和DS
LES
Load ES with Pointer
指针送寄存器和ES
LEA(Load Effective Address) :
有效地址传送寄存器指令
格式:
LEA REG,SRC //指令把源操作数SRC的有效地址送到指定的寄存器中。
执行操作:
(REG)<-SRC
注:
1. SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器
2.MOV BX,OFFSET OPER_ONE 等价于LEA BX,OPER_ONE
3.MOV SP,[BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中
4.LEA SP,[BX] //将BX的内容作为存储器有效地址送入SP中
LDS(Load DS with pointer):
指针送寄存器和DS指令
格式:
LDS REG,SRC //常指定SI寄存器。
执行的操作:
(REG)<-(SRC)
(DS)<-(SRC+2)
注:
把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中。
该指令常指定SI寄存器。
LES(Load ES with pointer) 指针送寄存器和ES指令
格式:
LES REG,SRC //常指定DI寄存器
执行的操作:
(REG)<-(SRC)
(ES)<-(SRC+2)//与LDS大致相同,不同之处是将ES代替DS而已。
指令
英文全拼
翻译
LAHF
Load AH with flags
标志送AH
SAHF
store AH into flags
AH送标志寄存器
PUSHF
push the flags
标志进栈
POPF
pop the flags
标志出栈
注:
把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中。
该指令常指定DI寄存器。
四 标志寄存器传送指令
LAHF ( Load AH with Flags )
标志位送AH指令
格式:
LAHF ......
执行操作:
(AH)<-(PWS的低字节)
注:
将PSW寄存器中的低8位的状态标志(条件码)送入AH的相应位,SF送D7位,ZF送D6位
SAHF( Store AH into Flags )
AH送标志寄存器指令
格式:
SAHF
执行操作:
(PWS的低字节)<-(AH)
注:
将AH寄存器的相应位送到PSW寄存器的低8位的相应位,AH的D7位送SF,D6位送ZF。
PUSHF( PUSH the Flags)
标志进栈指令
格式:
PUSHF
执行操作:
(SP)<-(SP)-2
SP=SP-1,(SP)=PSW的高8位,SP=SP-1,(SP)=PSW的低8位
注:
将标志寄存器的值压入堆栈顶部,同时栈指针SP值减2
POPF( POP the Flags )
标志出栈指令
格式:
POPF
执行操作:
(PWS)<-((SP)+1,(SP))
(SP)<-(SP+2)
PSW低8位=(SP),SP=SP+1,PSW高8位=(SP),SP=SP+1
注:
与PUSHF相反,从堆栈的顶部弹出两个字节送到PSW寄存器中,同时堆栈指针值加2
算术指令
一 加法指令
指令
英文全拼
翻译
ADD
add
加法
ADC
add with carry
带进位加法
INC
increment
加1
ADD(ADD)加法指令
格式:
ADD DST,SRC //Byte/Word
执行操作:
(DST)<-(SRC)+(DST)
注:
1.两个存储器操作数不能通过ADD指令直接相加,即DST 和SRC必须有一个是通用寄存器操作数。
2.段寄存器不能作为SRC 和DST.
3.影响标志位Auxiliary Crray Flag,Carry Flag,Overflow Flag,Parity Flag,Sign Flag 和Zero Flag,如下所示:
CF 根据最高有效位是否有进(借)位设置的:
有进(借)位时CF=1,无进(借)位时CF=0.
OF 根据操作数的符号及其变化来设置的:
若两个操作数的符号相同,而结果的符号与之相反时OF=1,否则为0.
ZF 根据结果来设置:
不等于0时ZF=0,等于0时ZF=1
SF 根据结果的最高位来设置:
最高位为0,则SF=0.
AF 根据相加时D3是否向D4进(借)位来设置:
有进(借)位时AF=1,无进(借)位时AF=0
PF 根据结果的1的个数时否为奇数来设置:
1的个数为奇数时PF=0,为偶数时PF=1
ADC( ADd with Carry)带进位加法指令
格式:
ADC DST,SRC //Byte/Word
执行操作:
(DST)<-(SRC)+(DST)+CF
注:
与ADD不同之处是还要加上进位标志位的值。
INC( INCrement) 加1指令
格式:
INC OPR //Byte/Word
执行操作:
(OPR)<-(OPR)+1
注:
1.OPR可以是寄存器和存储器操作数,但不能是立即数和段寄存器
2.影响标志位OF,SF,ZF,PF 和AF,不影响CF.
二 减法指令
指令
英文全拼
翻译
SUB
subtract
减法
SBB
subtract with borrow
带借位减法
DEC
Decrement
减1
NEG
Negate
求补
CMP
Compare
比较
SUB( SUBtract ) 不带借位的减法指令
格式:
SUB DST,SRC //Byte/Word
执行操作:
(DST)<-(DST)-(SRC)
注:
1.DST和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)<- -(OPR) //将操作数按位求反后末位加1.
CMP ( CoMPare ) 比较指令
格式:
CMP OPR1,OPR2
执行操作:
(OPR1)-(OPR2) //与SUB指令一样执行运算,但不保存结果。
注:
该指令与SUB指令一样执行减法操作,但不保存结果,只是根据结果设置条件标志。
比较情况
无符号数
有符号数
A=B
ZF=1
ZF=1
A>B
CF=0 && ZF=0
SF^OF=0 && ZF=0
A
CF=1 && ZF=0
SF^OF=1 && ZF=0
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
无符号数乘法
IMUL
Signed Multiple
带符号数乘法
MUL( unsigned MULtiple ) 无符号数乘法指令
格式:
MUL SRC //Byte/Word .
执行操作:
字操作:
(AX)<-(AL)*(SRC) //字节运算时目的操作数用AL,乘积放在AX中
字节操作:
(DX,AX)<-(AX)*(SRC) //字运算时目的操作数用AX,DX存放乘积的高位字,AX放乘积的低位字
注:
1.目的数必须是累加器AX 或AL,指令中不需写出
源操作数SRC可以是通用寄存器和各种寻址方式的存储器操作数,而绝对不允许是立即数或段寄存器。
IMUL(sIgned MULtiple) 有符号数乘法指令
格式:
IMUL SRC //与MUL指令相同,但必须是带符号数
四 除法指令
指令
英文全拼
翻译
DIV
Unsigned divide
无符号数除法
IDIV
Signed divide
带符号数除法
CBW
Convert byte to word
字节转换为字
CWD
Contert word to double word
字转换为双字
DIV ( unsigned DIVide) 无符号数除法指令
格式:
DIV SRC //Byte/Word 其中:
SRC的规定同乘法指令MUL
执行操作:
字节操作:
(AL)<-(AX)/(SRC)的商
(AH)<-(AX)/(SRC)的余数
字操作:
(AX)<-(DX,AX)/(SRC)的商
(DX)<-(DX,AX)/(SRC)的余数
注:
存储器操作数必须指明数据类型:
BYTE PTR src 或WORD PTR src
IDIV (sIgned DIVied) 有符号数除法指令
格式:
IDIV SRC
执行的操作:
与DIV相同,但操作数必须是带符号数,商和余数也均为带符号数,且余数的符号与被除数的符号相同。
CBW(Convert Byte to Word) 字节转换为字指令
格式:
CBW
执行操作:
AL中的符号位(D7)扩展到8位AH中,若AL中的D7=0,则AH=00H,若AL中的D7=1,则AH=FFH.
CWD(Convert Word to Double word) 字转换为双字指令
格式:
CWD
执行操作:
AX中的符号位(D15)扩展到16位DX中,若AX中的D15=0,则DX=0000H,若AX中的D15=1,则DX=FFFFH
注:
这两条指令都不影响条件码。
逻辑指令
一逻辑运算指令
指令
英文全拼
翻译
AND
and
逻辑与
OR
or
逻辑或
NOT
not
逻辑非
XOR
exclusive or
异或
TEST
test
测试
AND,OR,XOR和 TEST都是双字节操作指令,操作数的寻址方式的规定与算术运算指令相同。
NOT是单字节操作指令,不允许使用立即数。
逻辑运算均是按位进行操作,真值表如下:
AND (位与&)
OR ( 位或| )
XOR ( 位异或^ )
1& 1 = 1
1 | 1 = 1
1 ^ 1 = 0
1 & 0 = 0
1 | 0 = 1
1 ^ 0 = 1
0 & 1 = 0
0 | 1 = 1
0 ^ 1 = 1
0 & 0 = 0
0 | 0 = 0
0 ^ 0 = 0
AND(and) 逻辑与指令
格式:
AND DST,SRC //Byte/Word
执行操作:
(DST)<-(DST)^(SRC)
注:
1.AND指令执行后,将使CF=0,OF=0,AF位无定义,指令执行结果影响SF,ZF和PF标志位。
2.AND指令典型用法A:
用于屏蔽某些位,即使某些位为0.
例子:
屏蔽AL的高4位:
即将高4位和0000B相与,低4位和1111B相与
MOV AL,39H //AL= 0011 1001B[39H]
ADD AL,0FH // AL= 0000 1001B[09H] 即0011 1001B[39H] & 0000 1111B[0FH] = 0000 1001B[09H]
AND指令典型用法B:
取出某一位的值(见TEST)
OR(or) 逻辑或指令
格式:
OR DST,SRC //Byte/Word
执行操作:
(DST)<-(DST) | (SRC)
注:
1.OR指令执行后,将使CF=0,OF=0,AF位无定义,指令执行结果影响SF,ZF和PF标志位。
2.常用于将某些位置1.
例子:
将AL的第5位置1:
MOV AL,4AH // AL=0100 1010B[4AH]
OR AL,10H // AL=0101 1010B[5AH] 即0100 1010B[4AH] | 0001 0000B[10H] =0101 1010B [5AH]
XOR(eXclusive OR) 逻辑异或指令
格式:
XOR DST,SRC //Byte/Word
执行操作:
(DST)<-(DST)^(SRC)
注:
1.XOR指令常用于使某个操作数清零,同时使CF=0,清除进位标志。
2.XOR指令使某些位维持不变则与'0' 相异或,若要使某些位取反则与'1'相异或。
例子:
将AL的高4位维持不变,低4位取反:
MOV AL,B8H //AL=1011 1000B[B8H]
XOR AL,0FH //AL=1011 0111B[B7H] 即1011 1000B[B8H] ^ 0000 1111[0FH]=1011 0111B[B7H]
例子:
测试某一个操作数是否与另一确定操作数相等:
XOR AX,042EH
JZ .... //如果AX==042EH,则ZF=TRUE
(1),执行JZ...
NOT (not) 逻辑非指令
格式:
NOT OPR //Byte/Word
执行操作:
(OPR)<~(OPR) // ~ 01100101 [65H] =10011010 [9AH]
1.操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数。
2.NOT指令不影响任何标志位。
例子:
将AL各位取反:
MOV AL,65H //AL=0110 0101B[65H]
NOT AL //AL=1001 1010B[9AH] 即~ 0110 0101B[65H]=1001 1010B[9AH]
TEST(test) 指令
格式:
TEST OPR1,OPR2 //Byte/Word
执行操作:
opr1 & opr2
注:
1.两个操作数相与的结果不保存,结果影响标志位PF,SF和ZF,使CF=0,OF=0,而AF位无定义。
2.TEST指令常用于在不改变原有的操作数的情况下,检测某一位或某几位的条件是否满足。
只要令用来测试的操作数对应检测位为1,其余位为0,相与后判断零标志ZF值的真假。
例:
检测某位是否为1:
令用来测试的操作数对应检测位为1,其余位为0,TEST指令后,若该位为1则JNZ...
TEST AL,0000 00001B //测试AL最低位是否为1:
:
令用来测试的操作数对应检测位为1,其余位为0,执行TEST指令
JNZ THER //最低位若为1,则ZF=FALSE(0),执行JNZ THER,否则执行下一条指令。
或者:
先对操作数求反,令用来测试的操作数对应检测位为1,其余位为0,TEST指令后,若该位为1则JZ...
MOV DL,AL //将AL 传送到DL,主要是不要影响AL的值。
以下测试AL的b2位是否为1
NOT DL //先对操作数求反
TEST 0000 0100B //令用来测试的操作数对应检测位为1,其余位为0,执行TEST指令
JZ THER //若AL的b2位为1,则ZF=TRUE
(1),执行JZ THER
B:
移位指令[所有的移位指令都影响标志位CF、OF、PF、SF和ZF、AF无定义。
]
非循环逻辑移位:
把操作数看成无符数来进行移位。
移位指令
指令
英文全拼
翻译
SHL
shift logical left
逻辑左移
SAL
shift arithmetic left
算术左移
SHR
shift logical right
逻辑右移
SAR
shift arithmetic right
算术右移
ROL
Rotate left
循环左移
ROR
Rotate right
循环右移
RCL
Rotate left through carry
带进位循环左移
RCR
Rotate right through carry
带进位循环右移
SHL( SHift logical Left )逻辑左移指令
格式:
SHL OPR,CNT //Byte/Word
执行操作:
使OPR左移CNT位,并使最低CNT位为全0.
1.OPR操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数。
2.移位次数由CNT决定。
每次将OPR的最高位移出并移到CF,最低位补0.
MOV CL,7 //若移位多次,先预置移位次数CL
SHL DX,CL //CNT可取1或CL寄存器操作数
SHR(SHift logical Right) 逻辑右移指令
格式:
SHR OPR,CNT //Byte/Word
执行操作:
同SHL,每次将OPR的最低位D0移出并移到CF.最高位补0.
非循环算术移位:
将操作数看成有符号数来进行移位。
SAL(Shift Arithmetic Left) 算术左移指令
格式:
SAL OPR,CNT //Byte/Word
执行操作:
SAL指令与SHL指令完全相同
SAR(Shift Arithmetic Right) 算术右移指令
格式:
SAR OPR,CNT //Byte/Word
执行操作:
SAR指令每次移位时,将最高位移入次高位的同时最高位值不变,最低位D0移出并移到CF.
循环移位指令
ROL( ROtate Left) 循环左移指令
格式:
ROL OPR,CNT //Byte/Word
执行操作:
每次移位时,最高位移出并同时移到CF和最低位D0.
ROR (ROtate Right)循环右移指令
格式:
ROR OPR,CNT //Byte/Word
执行操作:
每次移位时,最低位D0移出并同时移到CF和最高位。
带进位循环移位指令
RCL(Rotate Left through Carry)带进位循环左移指令
格式:
RCL OPR,CNT //Byte/Word
RCR (Rotate Right through Carry)带进位循环右移指令
格式:
RCR OPR,CNT //Byte/Word
串处理指令
一 与REP相配合工作的MOVS,STOS和LODS指令
指令
英文全拼
翻译
REP
repeat
重复操作
MOVS
MOVe String
串传送指令
STOS
STOre into String
存入串指令
LODS
LOaD from String
从串取指令
CLD
Clear direction flag
使地址自动增量
STD
Set direction flag
使地址自动减量
REP(REPeat)重复操作前缀
格式:
REP String Primitive
执行的操作:
1)如(CX)=0则退出REP,否则往下执行。
2)(CX)<-(CX)-1
3)执行其中的串操作
4)重复1)~3)
注:
其中String Primitive可为MOVS,LODS或STOS指令
.MOVS 串传送指令
格式:
MOV
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 各条 指令