汇编语言的常用命令
本文主要内容包含:
mov, call, jmp, int, ret, add, sub, or, xor, shl, shr, push, pop, inc, dec, cmp
命令解析
mov
- 使用方式:mov dest, source
示例:mov count, ebx
解析:将ebx寄存器中的数据赋值给变量count
call
- 使用方式:call subprogram(子程序)
示例:call inputCheck
解析:调用inputCheck子程序
jmp
- 使用方式:jmp target
示例:
target:
mov ax,bx
...
jmp target
解析:程序代码区(指令所在区段)的标号必须用冒号(:)结束。代码标号用作跳转和循环指令的目标。例如,上面的 JMP 指令创建一个循环,将程序控制传递给标号 target 标识的位置:
int
- 使用方式:int n
示例:int n(n为中断类型码)
解析:Interrupt,发起中断,后面跟中断类型码。它的执行过程为:
1、取中断类型码n
2、标志寄存器入栈,IF=0、TF=0
3、CS、IP入栈
4、(IP)=(n∗4),(CS)=(n∗4+2)
ret
- 使用方式:ret
示例:ret
解析:return,函数返回。它用 栈中的数据,修改IP(指令指针寄存器,指向代码中下一条指令的位置)的内容,从而实现近转移。相当于:pop IP
add
- 使用方式:mov OPRD1, OPRD2
示例:add eax, ebx
解析:两数相加
- OPRD1为任一通用寄存器或存储器操作数,可以是任意一个通用寄存器,而且还可以是任意一个存储器操作数.
OPRD2为立即数,也可以是任意一个通用寄存器操作数.立即数只能用于源操作数B. - A和B均为寄存器是允许的,一个为寄存器而另一个为存储器也是允许的, 但不允许两个都是存储器操作数.
sub
- 使用方式:sub dest source
示例:
mov ax,2
mov bx,1
sub ax,bx
解析:减法运算,其中sub ax,bx就是ax中的值减bx中的值,等于1,然后把结果,也就是1,放入ax中。
or与xor
- 使用方式:or op1, op2 和xor op1,op2
示例:or eax, ebx 和 xor eax,ebx
解析:将eax,ebx中的数做或运算和 异或运算,结果放到eax中
shl
- 使用方式:SHL DST,n
示例:SHL ax,1
解析:将通用寄存器ax中的数字逻辑左移1位,将目的操作数顺序左移1位或CL寄存器中指定的位数。左移一位时,操作数的最高位移入进位标志位CF,最低位补零。
shr
- 逻辑右移,与上面shl类似
inc
- 使用方式:inc dest
示例:inc ax
解析:将ax中数据加1,相当于 add ax,1
优点 速度比sub指令快,占用空间小。这条指令执行结果影响AF、OF、PF、SF、ZF标志位,但不影响CF进位标志位.
dec
- 使用方式:dec dest
示例:dec ax
解析:将ax中数据减1,==相当于 sub ax,1 ==
优点 速度比sub指令快,占用空间小
这条指令执行结果影响AF、OF、PF、SF、ZF标志位,但不影响CF进位标志位.
cmp
- 使用方式: cmp 操作对象1, 操作对象2
示例:
mov ebx, 05h
mov eax, 08h
cmp eax, ebx (eax - ebx = 03h)
此时我们的指令执行后(ZF = 0, PF = 1, SF = 0, CF = 0, OF = 0)
解析:计算 操作对象1 - 操作对象2 但不保存结果,只是根据结果修改相应的标志位。