汇编语言:x86汇编指令大全及其注意事项 您所在的位置:网站首页 汇编指令大全图例 汇编语言:x86汇编指令大全及其注意事项

汇编语言:x86汇编指令大全及其注意事项

#汇编语言:x86汇编指令大全及其注意事项| 来源: 网络整理| 查看: 265

用最精炼的语言,记录汇编语言中所有常用或不常用或极其重要的汇编指令及其注意事项,以方便自己和读者进行查阅,如有错误和不足请在评论区指出。

文章目录 Part 1:instructionPart 22.1 (逻辑)运算、移位等常用指令2.2 循环移位指令2.3 数据串操作指令2.4 逻辑运算指令2.5 基于大小关系的跳转指令2.6 基于单标志位的转移指令 Part 3:Loading... ...

Part 1:instruction

积少成多,持续更新。(这将会是一个极其漫长的过程) 表格中各条指令的顺序根据笔者所认为的重要或常用程度进行排序,仅供参考。

Part 2

本表格中所涉及的F是指状态寄存器,CF指进位标志位,其它以此类推。

2.1 (逻辑)运算、移位等常用指令

这一部分记录汇编语言程序设计当中使用频率最高的一部分指令。

指令作用注意事项示例mov dest, src传送指令1.dest和src不能同时为存储器操作数2.CS不能作为dest3.段寄存器之间不能互相传送4.立即数不能送入段寄存器mov ax,word ptr[bx+si+2]add dest,src加法指令dest,src不能同时为存储器操作数或段寄存器add ax,cxadc dest,src带进位加法指令dest=dest+src+CF,常用于多字节加法inc dest加一指令1.此操作不影响CF的状态inc byte ptr[si]sub dest,src减法指令1.dest,src的要求与add相同2.触发OF:异号相减且结果的符号为与被减数不同sub ax,cxsbb dest,src带进位减法常用于多字节减法dec dest减一指令不影响CF的状态,但其他几个标志位都会受到影响dec axmul dest无符号乘法指1.dest为字节数据,则与AL相乘,结果放入AX2.dest为字数据,与AX相乘结果低16位放入AX,高16位放入DX3.dest不能是立即数mul aximul dest有符号乘法细节与mul完全相同,对最高位的解释不同imul axdiv dest无符号除法1.dest为字节数据,用AX除以dest,商放在AL,余数放在AH2.dest为字数据,用低16位为AX,高16位为DX的双字数据除以dest,商放在AX,余数放在DXidiv dest带符号除法与无符号完全相同。除法溢出时结果无效idiv axcbw扩展AL为AX字数据1.仅用于扩展带符号数,无符号直接清零即可2.不带操作数cbwcwd扩展AX字为DX,AX双字数据要求与cbw相同cwdseg取标号或变量的段地址mov di,seg labellea取偏移地址1.与offset作用类似2.load efficient address的简写lea ax,labeloffset取偏移地址1.作用与lea相同2.速度比lea快mov ax,offset labelorg设定程序段起始地址(偏移)1.是origin的缩写2.若无org默认程序从cs:0开始存放指令代码3.两个org指令之间空余的空间用0填充org offsetValxlat转换表指令1.BX存放表的首地址,AL存放当前表中元素的偏移量2.不影响F的状态xlat ;无需操作数 2.2 循环移位指令

循环移位指令非常容易混淆,但是却十分重要,因此需要牢牢记住并时常查阅此表。

指令作用注意事项示例SHL逻辑左移指令1.最高位进入CF中2.最低位直接用0填充SHL AH,1SHR逻辑右移指令1.最低位进入CF中2.最高位直接用0填充SHR BX,1SAL算术左移指令行为与SHL没有差别SAL BL,CLSAR算术右移指令1.最低位进入到CF中2.最高位右移后填充最高位(即用最高位填充最高位)SAR CL,BXROL循环左移指令最高位进入到CF中并填充最低位同上ROR循环右移指令最低位进入到CF中并填充最高位同上RCL带进位循环左移指令1.最低位由CF填充2.最高位进入CF同上RCR带进位循环右移指令1.最高位由CF填充2.最低位进入CF同上 2.3 数据串操作指令

重复前缀指令与数据串操作指令连用常常能起到事半功倍的效果,注意使用了大大提升汇编程序的简洁性。

指令作用注意事项示例lods/lodsw/lodsb载入数据串指令1.具体操作:从ds:si读取一个字节/字/双字到AL,AX,EAX中,SI根据DF的值进行增减对应的数值lodsw ;无需操作数stos/stosw/stosb存数据串指令1.AX/AL的内容存放到ES:DI中2.指针修改是自动且隐式的stos/stosw/stosb ;无需操作数cmps/cmpsb/cmpsw数据串比较指令cmps需要两个操作数(数据串首地址),后两个无需操作数,字符串的比较由DI和SI完成;NULLmovs/movsb/movsw数据串传送指令注意事项参照上方的cmps等的用法;NULLrep/repz/repnz重复前缀指令1.当cx的内容不为0时执行操作(先判断)2.用CLD,STD控制增、减量修改3.与数据串操作指令结合使用,实现内存拷贝、比较等功能不需要操作数 2.4 逻辑运算指令

这一部分指令是以我的理解进行划分,所以可能不太精准,有意见欢迎在评论区提出。

指令作用注意事项示例cmp dest,src1.比较指令1.用dest减去src,但不保存结果2.相减的结果影响Fcmp ax,cxtest dest,src1.将dest与src相与可用来测试是否为零等,结果不保存2.影响Ftest ax,axneg dest取补指令,得到相反数影响Fneg axnot dest取反指令1.将操作数每一位按位取反2.不影响Fnot AX 2.5 基于大小关系的跳转指令

在使用了cmp,sub,subb等指令后通常使用如下这些指令衔接以便进行下一步的操作,令程序十分简洁。需要注意的是,根据有符号和无符号数需要选择不同的指令进行基于大小关系的跳转。

无符号数指令作用JA label大于时跳转JAE label大于等于时跳转JB label小于时跳转JBE label小于等于时跳转 带符号数指令作用JG label大于时跳转JGE label大于等于时跳转JL label小于时跳转JEL label小于等于时跳转 无符号、带符号通用JE label等于时跳转JNE label不等于时跳转 2.6 基于单标志位的转移指令

根据标志寄存器F中标志位的状态决定是否进行跳转,通常在进行运算后结合这些指令进行跳转。

指令作用JC labelCF=1时跳转JNC labelCF=0时跳转JZ labelZF=1时跳转JNZ labelZF=0时跳转JO labelOF=1时跳转JNO labelOF=0时跳转JS labelSF=1时跳转JNS labelSF=0时跳转JP labelSF=1时跳转JNP labelPF=0时跳转 Part 3:Loading… …

第一次更新:2020-05-15 15:29 第二次更新:2020-05-22 00:14 第三次更新:2020-05-24 00:24 第四次更新:2020-05-24 21:10

持续更新中… …



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有