汇编语言常用指令汇总(持续更新)

通用数据传送指令

MOV(Move) 传送指令
MOV指令是数据传送指令,也是最基本的编程指令,用于将一个数据从源地址传送到目标地址(寄存器间的数据传送本质上也是一样的)。其特点是不破坏源地址单元的内容。
例如:
MOV AX,2000H;将16位数据2000H传送到AX寄存器
MOV AL,20H;将8位数据20H传送到AL寄存器
MOV AX,BX;将BX寄存器的16位数据传送到AX寄存器
MOV AL,[2000H];将2000H单元的内容传送到AL寄存器
需要注意的是:
(1)两个存储单元之间不能直接传送数据,即:MOV指令只允许一个操作数在存储器中。MOV [SI],[2000H];这是错误的
(2)MOV指令中立即数不能直接传送给段寄存器(CS、DS、SS、ES)和IP;段寄存器之间不能直接传送。MOV IP,2000 H ;这是错误的
(3)CS和IP不能作为目的操作数。MOV CS,AX ;这是错误的
(4)MOV指令中立即数不能作目标操作数。MOV 2000H,[SI] ;这是错误的
PUSH(Push onto the stack)进栈
POP(Pop from the stack)出栈
push寄存器:将一个寄存器中的数据入栈
pop寄存器:出栈用一个寄存器接收数据
XCHG(Exchange) 交换
是寄存器和寄存器之间,寄存器和内存变量之间内容的交换指令,两个操作数的数据类型要相同,可以是一个字节,也可以是一个字,也可以是双字。

累加器专用指令

IN(Input) 输入
OUT(Output)输出
CPU对外设的操作通过专门的端口读写指令来完成;
  读端口用IN指令,写端口用OUT指令。
  例子如下:
  IN AL,21H;表示从21H端口读取一字节数据到AL
  IN AX,21H;表示从端口地址21H读取1字节数据到AL,从端口地址22H读取1字节到AH
  MOV DX,379H
  IN AL,DX ;从端口379H读取1字节到AL
  OUT 21H,AL;将AL的值写入21H端口
  OUT 21H,AX;将AX的值写入端口地址21H开始的连续两个字节。(port[21H]=AL,port[22h]=AH)
  MOV DX,378H
  OUT DX,AX ;将AH和AL分别写入端口379H和378H
  
XLAT(Translate) 换码
在汇编中XLAT指令的作用就是在bx保存array的首地址,AL保存array的位置的基础上,执行XLAT指令,将返回值送入AL指令中.

指令如下指令后AL=5

lea bx,array

mov al,1

xlat ;返回值AL=array[AL]

有效地址送寄存器指令

LEA(Load effective address)有效地址送寄存器
LDS(Load DS with Pointer)指针送寄存器和DS
LES(Load ES with Pointer)指针送寄存器和ES
mov 和 lea 的区别

mov ecx,[eax+0x30]表示先运算eax+0x30得到一个结果,以这个结果为地址找一个ecx长度的内存数赋给ecx
lea ecx,[eax+0x30]表示先运算eax+0x30得到一个结果,把这个结果(mov时地址)赋给ecx

标志寄存器传送指令

LAHF(Load AH with flags) 标志送AH
SAHF(Store AH with flags)AH送标志寄存器
PUSHF(Push the flags) 标志进栈
POPF(Pop the flags)标志出栈

加法指令

ADD 加法
ADC(add with carry)带进位加法
INC(Increment) 加1

减法指令

SUB(Subtract)减法
SBB(Subtract with borrow)带借位减法
DEC(Decrement)减1
NEG(Negate)求补
CMP(Compare)比较

乘法指令

MUL(Unsigned Multiple) 无符号乘法
IMUL(Signed Multiple)带符号乘法

除法指令

DIV(Unsigned Divide)无符号除法
IDIV(Singed Divide)带符号除法
CBW(Convert byte to word)字节转换为字
CWD(Convert word to double word)字转换为双字

逻辑指令

AND 逻辑与
OR 逻辑或
NOT 逻辑非
XOR 异或
TEST 测试
TEST AX,BX 与 AND AX,BX 命令有相同效果,只是Test指令不改变AX和BX的内容,而AND指令会把结果保存到AX中。

Test命令将两个操作数进行逻辑与运算,并根据运算结果设置相关的标志位。但是,Test命令的两个操作数不会被改变。运算结果在设置过相关标记位后会被丢弃。

移位指令

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)带进位循环右移

  • 16
    点赞
  • 120
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值