Advertisement

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

阅读量:

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

  • 通用数据传输指示
    • 累加器专用操作
    • 有效地址送入寄存器操作
    • 标志寄存器传输指示
    • 加法规则执行指示
    • 减法规则执行指示
    • 乘法规则执行指示
    • 除法规则执行指示
    • 逻辑运算规则执行指示
    • 移位运算规则执行指示

通用数据传送指令

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) 交换
是寄存器和寄存器之间,寄存器和内存变量之间内容的交换指令,两个操作数的数据类型要相同,可以是一个字节,也可以是一个字,也可以是双字。

累加器专用指令

CPU通过专用的输入/输出指令来执行对外设的操作。输入操作使用IN指令而输出操作使用OUT指令。

在汇编语言中,XLAT指令的作用是存放数组首地址于bx寄存器,并将位置信息存放于al寄存器,之后执行该指令后,会将返回结果存储于al寄存器中

指令如下指令后AL=5

lea bx,array

mov al,1

xlat ;返回值AL=array[AL]

有效地址送寄存器指令

该指令用于将CPU的有效地址加载到地址寄存器。
该指令用于将DS字段的值通过指针加载到数据寄存器。
该指令用于将ES字段的值通过指针加载到数据寄存器。
区别主要体现在它们的功能用途上:MOV主要用于数据移动操作,而LEA则用于地址计算操作。

mov ecx,[eax+0x30]表示先对eax加上[0x30]进行计算,然后将该计算结果作为寻址操作的基址来寻址\texttt{ecx}内存区域,并从该内存区域中提取大小为\texttt{ecx}的内存数据赋值给\texttt{ecx}寄存器
lea ecx,[eax+0x30]表示先对eax加上[0x30]进行计算,然后将该计算结果作为寻址基址直接赋值给\texttt{ecx}寄存器

标志寄存器传送指令

Move AH's flags to send them to the AH unit.
Put AH's contents into the AH's data register along with the flags.
Press (pressing) all of AH's registers onto a stack containing a program counter.
Pop (popping) from a stack into all of AH's registers using a pointer.

加法指令

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

减法指令

SUB运算用于执行减法操作 SBB运算用于处理带借位的减法运算 DEC指令使程序能够将数值减少一个单位 NEG指令通过计算补码来实现数值取反 CMP指令用于对两个数值进行比较以确定其大小关系

乘法指令

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\ AX,\ BXAND\ AX,\ BX 命令在功能上有相似性。\n测试命令 TEST\ AX,\ BX 的作用相当于执行 AND\ AX,\ BX 指令的操作;然而,在执行过程中有一点不同的是:测试命令不会将计算得到的结果保存到 AX 寄存器中。\n此外,在执行顺序上需要注意的是:如果程序中有多个连续的 TEST\ AX,\ BX 指令,则每次都会覆盖先前的结果值。

Test命令将两个操作数执行逻辑与运算,并基于运算结果配置相关的标志位。然而,在Test命令中使用的两个操作数值不会发生变化。在完成相关标记位配置后,上述计算所得的运算结果将会被丢弃。

移位指令

SHL运算即为逻辑位左移操作;SAL运算代表算术位左移操作;SHR运算即为逻辑位右移操作;SAR运算代表算术位右移操作;ROL运算即为循环位移动至左侧;ROR运算代表循环位移动至右侧;RCL运算即为带进位的循环位移动至左侧;RCR运算代表带进位的循环位移动至右侧

全部评论 (0)

还没有任何评论哟~