常用汇编指令(七大类)

7 篇文章 0 订阅
7 篇文章 6 订阅
本文详细介绍了汇编语言中的主要指令类别,包括传送类指令如MOV、XCHG、堆栈操作,算数运算类指令如加法、减法、乘法和除法,以及控制转移类指令如JMP、JCC等。此外,还涵盖了位操作指令和串操作指令,以及处理器控制类指令的作用。这些指令是理解并编写汇编程序的基础。
摘要由CSDN通过智能技术生成

常用汇编指令

汇编语言指令大致分为以下几类

一、传送类指令
二、算数运算类指令
三、位操作指令
四、串操作指令
五、控制转移类指令
六、处理器控制类指令
七、汇编指令伪指令


一、传送类指令
1.数据传送指令
(1) MOV 目的操作数,源操作数
将源操作数送到目的操作数,目的和源的数的长度要相同,否则会长度不匹配
(2)XCHG 传送指令
XCHG 目的操作数,源操作数 //把源和目的操作数交换数值
2.有效地址传送指令LEA

LEA 目的操作数,源操作数
把源操作数的偏移地址送目的操作数,
源操作数必须是一个内存操作数,
目的操作数必须是16位通用寄存器

3.堆栈指针操作指令
堆栈是一块特殊的存储器区域,这块区域是以先进后出的方式工作,系统为此提供了特殊的指针SP,和段寄存器SS
主要特点是:
(1)堆栈是以字方式操作的
(2)压入堆栈
①先修改指针:SP=SP -2
②再存入一个字
(3)弹出堆栈。
①先弹出一个字
②再修改指针:SP=SP +2

(4)入栈指令PUSH
格式:PUSH 操作数
该指令为数据入栈指令
即将操作数指定的一个字节的内容传送至SP所指的栈顶
寻址方式有寄存器寻址(段寄存器SS除外)和存储器寻址,
不能用立即数作操作数。
该指令不影响标志位。

过程:
首先,堆栈SP=SP-2
然后,操作数的高位字节——>存入((SP)+1)单元中
操作数的低位字节——>送入(SP)

(5)出栈指令:POP
POP 操作数
将SP所指的栈顶内容传送至操作数指定的一个字。

寻址方式有:
寄存器寻址(段寄存器SS除外)和存储器寻址
不能用立即数作操作数。
该指令不影响标志位。

过程:
首先堆栈((SP)+1)单元字节——>操作数的高字节位,
(SP)单元字节——>操作数的低位字节。
然后SP=SP-2
4.输入输出指令
(1)IN 输入指令

IN AL,N     ; (N)——>AL
IN AX,N     ;  (N+1:N)——>AX
IN AL,63H  ; 将端口地址为63H的一个字节内容输入到AL
IN AX,55H  ;将两个相邻端口地址58H和59H的16位数据输入到AX

(2)OUT 输出指令

OUT N,AL  ;(AL)字节——>N端口地址的单元中
OUT N,AX  ;(AX)字——>N+1和N端口地址的单元中

OUT 66H,AL  ;将AL内容送端口地址66H的单元中
OUT 66H,AX  ;将AX内容送66H和67H端口地址的单元中

!注意:

在汇编语言中,端口地址小于256(十六进制00H~FFH)时
可以直接在指令中写出端口地址
如果端口地址大于256,先将端口地址送入DX寄存器中,
然后在IN或OUT指令中用DX代表端口地址。


二、算数运算类指令
参加运算的可以是无符号数或带符号数,带符号的数以补码的形式存放或参与运算
1.加法指令
(1)ADD 目的操作数,源操作数
目的操作数+源操作数——>目的操作数
(2)ADC带进位的加法指令
ADC 目的操作数,源操作数
目的操作数+源操作数+CF——>目的操作数
例子:

MOV AH,0     ;0——>AH
MOV AL,92H ;92H——>AL
ADD AL,86H  ;92H+86H=18H——>AL,CF=1
ADC AH,0      ;(AH)+0+CF=0+0+1=1——>AH,即01H=AH

(3)INC 加|指令
INC 操作数 //操作数加1,结果送操作数
操作数可以是任意一个8或16位的通用寄存器或存储单元,不能是立即数
指令中操作数当作无符号数时,主要用于计数器计数或修改指针地址的值。
如:

INC DI   ;(DI)=DI+1
INC CX  ;(CX)=CX+1

说明:除了指令INC对标志位CF不影响外,其它加法指令对标志位的影响如下

①CF:两个数相加,最高有效位有进位时,即字节运算超出无符号输的范围
0255,字运算超出无符号数的范围065535时,CF=1,否则CF=0.
故两个无符号数相加时,可用CF值来判断是否超出了无符号数的表示范围
如果CF=1表示此无符号数加法运算结果发生了溢出。
②PF:运算结果以二进制数表示时,若"1"的个数为偶数时PF=1,否则PF=0
③AF:运算中D3向D4有进位时,AF=1,否则为0
④ZF:运算结果为0时,ZF=1;否则ZF=0
⑤SF:运算结果最高位为1时,SF=1,否则为0
⑥OF:当两个操作数的符号相同,而相加的结果的符号与操作数的符号相反时
OF=1,否则OF=0。该标志位用来判断带符号数相加的溢出

例如:

ADD AL,30H      ;(AH)+30H ——> AL
ADD AX,3000H  ;(AX)+3000H ——> AX
ADD BX,[SI]        ;(BX)+((SI))——>BX

2.减法指令
(1)SUB
SUB 目的操作数,源操作数
目的操作数=目的操作数-源操作数
(2)SBB 带错位的减法指令
SBB 目的操作数,源操作数
目的操作数=目的操作数-源操作数-CF
(3)DEC 减1指令 格式:DEC 操作数
DEC DI ;DI=(DI)-1
(4)NEG 求补指令

NEG 操作数   //0-操作数的内容后结果回送操作数
MOV DI,05H
NEG DI      ;DI=0-(DI)=0-05H=0FBH

(5)CMP 比较指令
CMP 目的操作数,源操作数
执行时目的操作数与源操作数相减,只根据结果设置标志位
操作数均保持原值不变
3.类型扩展指令
为了解决操作数长度的匹配,有时需要把数据类型进行扩展。
主要有把字节扩展成字,把字扩展成双字

CBW:字节扩展成字
CWD:字扩展成双字

例子:
正数的扩展

MOV AL,52H
CBW    ;执行指令后,AX=0052H
CWD    ;执行指令后,DX=0000H,AX=0052H

负数的扩展

MOV AL,86H
CBW   ;执行指令后,AX=FF86H
CWD   ;执行指令后,DX=FFFFH,FF86H

4.乘法指令

MUL :无符号数乘法
IMUL:带符号数乘法

目的操作数必须是累加器,不必在指令中写出。
例子:
无符号数乘法

MOV AL,05H
MOV BL,06H
MUL BL      //执行结果AX=30=001EH

有符号数乘法

MOV AL,-5
MOV BL,+6
IMUL BL  //AX=-30=FFE2H

5.除法指令
DIV:无符号除法

SRC(源操作数)为字节时,AL=AX/SRC的商,AH=AX/SRC的余数
SRC为字时:AX=(DX,AX)/SRC的商,DX=(DX,AX)/SRC的余数

商和余数都是无符号数。
IDIV:有符号除法
操作同上类似,目的操作数必须是累加器AX和DX,不必写出。


三、位操作指令

AND 与运算.
or 或运算.
XOR 异或运算.
NOT 取反.
TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).
SHL 逻辑左移.
SAL 算术左移.(=SHL)
SHR 逻辑右移.
SAR 算术右移.(=SHR)
ROL 循环左移.
ROR 循环右移.
RCL 通过进位的循环左移.
RCR 通过进位的循环右移.
以上八种移位指令,其移位次数可达255次.
移位一次时, 可直接用操作码. 如 SHL AX,1.
移位>1次时, 则由寄存器CL给出移位次数.
如 MOV CL,04
SHL AX,CL

四、串操作指令

DS:SI 源串段寄存器 :源串变址.
ES:DI 目标串段寄存器:目标串变址.
CX 重复次数计数器.
AL/AX 扫描值.
D标志 0表示重复操作中SI和DI应自动增量; 1表示应自动减量.
Z标志 用来控制扫描或比较操作的结束.
MOVS 串传送.
( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )
CMPS 串比较.
( CMPSB 比较字符. CMPSW 比较字. )
SCAS 串扫描.
把AL或AX的内容与目标串作比较,比较结果反映在标志位.
LODS 装入串.
把源串中的元素(字或字节)逐一装入AL或AX中.
( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )
STOS 保存串.
是LODS的逆过程.
REP 当CX/ECX<>0时重复.,也就是直到CX=0时结束
REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.
REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.
REPC 当CF=1且CX/ECX<>0时重复.
REPNC 当CF=0且CX/ECX<>0时重复.

五、控制转移类指令
1>无条件转移指令 (长转移)

JMP 无条件转移指令
CALL 过程调用
RET/RETF过程返回.

2>条件转移指令 (短转移,-128到+127的距离内)

( 当且仅当(SF XOR OF)=1时,OP1<OP2 )
JA/JNBE 不小于或不等于时转移.
JAE/JNB 大于或等于转移.
JB/JNAE 小于转移.
JBE/JNA 小于或等于转移.
以上四条,测试无符号整数运算的结果(标志C和Z).
JG/JNLE 大于转移.
JGE/JNL 大于或等于转移.
JL/JNGE 小于转移.
JLE/JNG 小于或等于转移.
以上四条,测试带符号整数运算的结果(标志S,O和Z).
JE/JZ 等于转移.
JNE/JNZ 不等于时转移.
JC 有进位时转移.
JNC 无进位时转移.
JNO 不溢出时转移.
JNP/JPO 奇偶性为奇数时转移.
JNS 符号位为 "0" 时转移.
JO 溢出转移.
JP/JPE 奇偶性为偶数时转移.
JS 符号位为 "1" 时转移.

3>循环控制指令(短转移)

LOOP CX不为零时循环.
LOOPE/LOOPZ CX不为零且标志Z=1时循环.
LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.
JCXZ CX为零时转移.
JECXZ ECX为零时转移.

4>中断指令

INT 中断指令
INTO 溢出中断
IRET 中断返回

六、处理器控制类指令
处理器控制类指令只能完成对CPU的简单控制功能。
共有12条
对标志位操作

CLC(进位位置0指令)
CMC(进位位求反指令)
STC(进位位置为1指令)
CLD(方向标志置1指令)
STD(方向标志位置1指令)
CLI(中断标志置0指令)
STI(中断标志置1指令)

同步控制

WAIT(等待)
ESC(交权)
LOCK(封锁总线)

其他

NOP(无操作)
HLT(暂停)

七、汇编指令伪指令

DW 定义字(2字节).
PROC 定义过程.
ENDP 过程结束.
SEGMENT 定义段.
ASSUME 建立段寄存器寻址.
ENDS 段结束.
END 程序结束.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值