指令

汇编指令语句的格式: [标号:] 指令助记符 [[目的操作数][, 源操作数]] [; 注释]
指令助记符:如MOV, SUB这些词分别表示传送, 减法. 汇编源程序时, 系统使用内部对照表将每条指令的助记符翻译成对应的机器码
目的操作数:目的操作数一共有两个作用
1.参与指令操作
2.暂时储存操作结果
源操作数:源操作数主要提供原始数据或操作对象, 面向所有寻址方式. 例如, 在指令SUB AX, BX 中 的值作为减数提供给指令SUB
注释:这是对源程序的说明, 在汇编中用 ; 号, 后面的内容将被注释
  介绍指令前, 先熟悉下这些在指令中的符号(必须要记得)
imme: 立即数
DST: 目的操作数
SRC: 源操作数
mem: 存储器操作数
OPR: 操作数
reg: 通用寄存器
EA: 偏移地址(偏移量)
Sreg: 段寄存器
Port: 端口地址
Label: 标号
汇编指令一共可以分为6组:
1.数据传送指令
2.算术运算指令
3.逻辑运算与移位指令
4.串操作指令
5.程序控制指令
6.处理器控制指令
数据传送指令
通用数据传送指令:
MOV     DST, SRC      ;传送指令: 把源操作数的内容送入目的操作数
注意:
1.      立即数做源操作数时, 立即数的长度必须小于等于目的操作数的长度
2.      操作数DST, SRC分别为reg, reg或reg, Sreg或Sreg, reg时, 两者的长度必须保持一致
3.      CS和IP寄存器不能做DST操作数, 不允许用立即数直接为段寄存器赋值
4.      立即数不能作为目的操作数
5.      不能将一个段寄存器的内容直接送到另一个段寄存器中, 可借助通用寄存器或PUSH, POP指令实现这一要求
PUSH     SRC        ;压栈指令: 将一个字数据压入当前栈顶, 位移量disp=-2的地址单元. 数据进栈时, 栈指针SP首先向低地址方向移动两个字节位置, 接着数据进栈, 形成新的栈顶
POP       DST              ;出栈指令: 弹出栈顶元素, 后将栈顶指针向栈底方向移动一个字
XCHG    OPR1, OPR2        ;交换指令: 将这两个操作数交换
地址传送指令:
LEA        DST, SRC      ;装载有效地址指令: 该指令将源操作数的偏移量OA装载到目的操作数中
LDS        DST, SRC      ;装载数据段指针指令: 将当前数据段中的一个双字数据装入到一个通用寄存器SI(双字数据的低字)和数据段寄存器DS(双字数据的高字)中
LES        DST, SRC      ;装载附加段指针指令: 将附加数据段中的一个32位地址数据指针(附加段指针)送到DI(低字)和ES(高字)寄存器中
标志传送指令: (专用于标志寄存器保护和更新的指令, 共四条)
LAHF     ;标志寄存器送AH指令, 将标志寄存器的低字节送入AH中
SAHF     ;AH送标志寄存器指令, 将AH寄存器内容送标志寄存器FR的低字节
PUSHF   ;标志进栈指令, 标志寄存器进栈
POPF     ;标志出栈指令, 标志寄存器出栈
累加器专用传送指令:
IN   AL, Port        ;从端口读入数据, 存放在AL中
OUT       Port, AL        ;传送AL中的数据到端口
XLAT      OPR或XLAT        ;用于将AL中当前的内容转换为一种代码
算术运算指令
加法指令:
ADD      DST, SRC      ;DST+SRC的和存放到DST中去
ADC       DST, SRC      ;带进位加法指令, DST+SRC+CF
INC        DST              ;增1指令
减法指令:
SUB              DST, RSC      ;DST-SRC, 存放到DST中
SBB        DST, SRC      ;带借位减法指令, DST-SRC-CF
DEC              DST              ;减1指令
NEG       DST              ;求补指令, 求补码
CMP      OPR1, OPR2        ;比较指令
乘法指令:
MUL      SRC        ;无符号数乘指令, AL*SRC, 结果放入AX中
IMUL     SRC        ;有符号数乘指令, AL*SRC, 结果放入AX中
除法指令:
DIV        SRC        ;无符号数除指令, AX/SRC, 商放入AL中, 余数放在AH中
IDIV       SRC        ;符号数除指令, AX/SRC, 上放入AL中, 余数放在AH中
CBW, CWD          ;都是符号扩展指令. 将AL的符号扩到AX中; 将AX的符号扩到DX中
逻辑运算与移位指令
逻辑运算指令:
NOT       OPR       ;逻辑非指令
AND      OPR       ;逻辑与指令
OR         OPR       ;逻辑或指令
XOR       OPR       ;逻辑异或指令
移位指令:
SHL        DST, CNT      ;逻辑左移
SHR       DST, CNT      ;逻辑右移
SAL        DST, CNT      ;算术左移
SAR              DST, CNT      ;算术右移
循环移位指令:
ROL              DST, CNT      ;循环左移
ROR       DST, CNT      ;循环右移
RCL        DST, CNT      ;带进位循环左移
RCR              DST, CNT      ;带进位循环右移
串操作指令
MOVS   ;串传送指令
CMPS    ;串比较指令
SCAS     ;串扫描指令
LODS     ;装入串指令
STOS      ;存储串指令
控制转移指令
转移指令:
JMP              ;无条件转移指令
JX          ;条件转移指令(JC/JNC, JZ/JNZ, JE/JNE, JS/JNS, JO/JNO, JP/JNP…)
循环指令:
LOOP     标号       ;该指令执行时, 技术寄存器CXX首先减1, 然后判断CX, 若为0, 跳出循环
条件循环指令:
LOOPZ/LOOPE, LOOPNZ/LOOPNE       ;前者用于找到第一个不为0的事件, 后者用于找到第一个为0的事件
子程序调用指令:
CALL      子程序名       ;段内直接调用
RET
中断指令:
INT        N(中断类型号)     ;软中断指令
IRET       ;中断返回指令
处理器控制指令
标志处理指令:
CLC        ;进位标志CF置0
CMC      ;进位标志CF求反
STC        ;进位标志值1
CLD              ;方向标志置0
STD              ;方向标志置1
CLI         ;中断允许标志置0
STI         ;中断允许标志置1
其他处理器控制指令:
NOP      ;空操作
HLT        ;停机
WAIT     ;等待
ESC        ;换码

LOCK     ;封锁


rep stos dword ptr [edi]
是将edi指向的区域初始化为0CCCCCCCCh 

offset取偏移地址

cmp ah,al,及进行ah-al操作,不过不保存结果,只影响标志位。

控制转移条件相反。
je:(ZF)=1,则控制转移
jne:(ZF)=0,则控制转移

shl和shr是逻辑移位指令。
shl是逻辑左移指令,它的功能为:
(1)将一个寄存器或内存单元中的数据向左移位;
(2)将最后移出的一位写入CF中;
(3)最低位用0补充。
指令:
mov al,01001000b
shl al,1 ;将al中数据左移一位 
执行后(al)=10010000b,CF=0。
注意:
如果移动位数大于1时,必须将移动位数放在cl中。
比如,指令:
mov al,01010001b
mov cl,3
shl al,cl
执行后(al)=10001000b,因为最后移出的一位是0,所以CF=0。
shr是逻辑右移指令,它和shl所进行的操作刚好相反。

cdq 数据扩展指令,将双字数据扩展为四字类型

fild fstp都是x87指令,fild是将整数转化为长双精度FP80压栈(压到st0),
fstp是将弹栈指令,将st0弹出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值