指令 |
示例 |
说明 |
PUSH |
push 寄存器/内存单元 |
入栈 |
POP |
pop 寄存器/内存单元 |
出栈 |
INC |
+1 |
|
DEC |
-1 |
|
CMP |
比较两个操作数,操作数的值不会改变,若相等,则ZF置1 |
|
JE |
条件跳转指令,若ZF为1,则跳转 |
|
MOV |
mov ax,18
mov ah, 10
mov ax,bx
|
赋值 |
| ADD |
add ax, 10
add ax, bx
|
加法 |
| SUB |
sub ax, 10
sub ax, bx
|
减法 |
AND |
& |
|
| OR | | |
|
| DIV |
除数 : 8位或16位,存在内存单元中
被除数 : 默认放在AX和DX中
如果为8位,放在AX中
如果为16位,DX存高16位,AX存低16位
结果 : 如果为8位,AL为商, DL为余数
如果为16位,AX位商, DX为余数
|
除法 |
| MUL |
如果为8位,一个默认在AL中,一个在8位reg或内存单元中, 结果默认存放在AX中
如果为16位,一个默认在ax中,一个在16位reg或内存单元中,高位放DX, 低位放AX
|
乘法 |
db/dw/dd |
dd 1111 2222 3333 |
byte/world/double world |
DUP |
db 3 dump (1,2,3) |
连续定义三个1,2,3 |
JMP |
jmp short 标号
jmp far 标号
|
无条件跳转 |
JCX |
条件跳转 |
|
LOOP |
mov cx, 10
s:
inc ax
loop s
|
判断寄存器cx等于0 |
RET |
用栈中的数据实现跳转,一般为函数执行完毕 |
|
CALL |
调用指定位置的函数, 一般为函数调用 |
|
|
JE/JNE
JB/JNB
JA/JNA
|
JE : 等于则跳转, ZF = 1
JNE :不等于则跳转 ZF = 0
JB : 低于则跳转, cf = 1
JNB : 不低于则跳转, cf = 0
JA : 高于则跳转, cf = 0 and zf = 0
JNA : 不高于则跳转, cf = 1 or zf = 1
|
|
shl |
mv al, 0100100b
shl al, 1
执行后al = 1001000b
|
逻辑左移 |
shr |
mv al, 0100100b
shr al, 1
执行后al = 0010010b
|
逻辑右移 |
cpu组成 :
运算器 : 信息处理
控制器 : 控制各个器件进行工作
寄存器 : 信息存储
寄存器 :
通用寄存器 : (16位)
AX : 分为 AH 和 AL
BX : 分为 BH和 BL
CX : 分为 CH和 CL
DX : 分为 DH和 DL
段寄存器 :
CS : 代码段寄存器
IP : 指令指针寄存器
CS:IP 指向的内容为当前要执行的指令
其他寄存器 :
DS : 数据地址寄存器 (存放需要访问的数据地址)
示例 :
mov ax , 1000H
mov ds, ax
mov bx, [0] ;将内存地址1000H处的值拷贝给bx寄存器
mov [10], cx ;将cx寄存器的值拷贝给内存1010H内存处
堆栈寄存器 :
SS : 段寄存器
SP :
SS:SP 指向栈顶
flag寄存器 :
ZF : 零标志位,执行相关指令后,结果为0,则ZF=1, 不为0, 则ZF=1
PF : 奇偶标志,执行相关命令后,结果中1的位数为偶数,则PF =1 , 否则 PF = 0
SF : 符号标志, 执行相关命令后,结果为负数, 则 是否SF=1, 否则SF=0
CF : 进位标志, 相加或相减, 向更高位借位或者进位的时候, CF = 1
OF : 溢出标志, 相加或相减,产生溢出, OF = 1
DF : 方向标志, 如果DF = 0, 每次操作后, si di递增, 如果DF = 1, 每次操作后, si di递减