指令
|
示例
|
说明
|
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递减