常用汇编指令

CMP A,B 比较A与B其中A与B可以是寄存器或内存地址,也可同时是两个寄存器,但不能同都是内存地址。这个指令太长见了,许多明码比较的软件,就用这个指令。
MOV A,B 把B的值送给A其中,A与B可是寄存器或内存地址,也可同时是两个寄存器,但不能同都是内存地址。
Xor a,a异或操作,主要是用来将a清空
LEA装入地址,例如LEA DX,string 将字符的地址装入DX寄存器
PUSH 压栈
POP 出栈
ADD 加法指令 格式:ADD DST,SRC 执行的操作:(DST)<-(SRC)+(DST)
SUB 减法指令 格式:SUB DST,SRC 执行的操作:(DST)<-(DST)-(SRC)
MUL 无符号乘法指令 格式: MUL SRC 执行的操作:字节操作(AX)<-(AL)*(SRC);字操作(DX,AX)<-(AX)*(SRC);双字操作:(EDX,EAX)<-(EAX)*(SRC)
DIV 无符号除法指令 格式:DIV SRC 执行的操作:字节操作:16们被除数在AX中,8位除数为源操作数,结果的8位商在AL中,8位余数在AH中。表示为:
(AL)<-(AX)/(SRC)的商,(AH)<-(AX)/(SRC)的余数。字操作:32位被除数在DX,AX中。其中DX为高位字,16位除数为源操作数,结果的16位商在AX中,16位余数在DX中。表示为:(AX)<-(DX,AX)/(SRC)的商,(DX)<-(DX,AX)/(SRC)的余数。
双字操作:64位的被除数在EDX,EAX中。其中EDX为高位双字;32位除数为源操作数,结果的32位商在EAX中,32位余数在EDX中。表示为:
(EAX)<-(EDX,EAX)/(SRC)的商,(EDX)<-(EDX,EAX)/(SRC)的余数。
NOP 无作用,可以用来抹去相应的语句,这样的话,嘿嘿嘿…
CALL调用子程序,你可以把它当作高级语言中的过程来理解。
控制转移指令:
JE 或JZ 若相等则跳
JNE或JNZ 若不相等则跳
JMP 无条件跳
JB 若小于则跳
JA 若大于则跳
JG 若大于则跳
JGE 若大于等于则跳
JL 若小于则跳
JLE 若小于等于则跳
总的来说,以上几个,都是比较常见的,需要掌握,但需要掌握的绝不止这几个,其它的指令希望你能在私下里再了解一下,可以找相应的教程来看。
刚才忘了,现在再把数制转换也给贴上:
首先说二进制转换为十进制的问题:
各位二进制数码乘以与其对应的权之和即为该二进制相对应的十进制数。例如:
10100=2的4次方+2的2次方,也就是十进制数20。
11000=2的4次方+2的3次方,也就是十进制数24。
接着说一下十进制数转换为二进制数的方法:
这样的方法到底有多少,我也不清楚,我只讲最简单的一个-除法:
把要转换的十进制数的整数部分不断除以2,并记下余数,直到商为0为止。
例:N=34D(说明一下,你可能在某些数字的后边看到过加有一个字母,这个字母便是用来表示数制的,十进制数用D,二进制数用B,八进制数用O,十六进制数用H)
34/2=17   (a0=0)
17/2=8     (a1=1)
8/2=4     (a2=0)
4/2=2     (a3=0)
2/2=1     (a4=0)
1/2=0     (a5=1)
所以N=34D=100010B。
对于被转换的十进制数的小数部分则应不断乘以2,并记下其整数部分,直到结果的小数部分为0为止。
十六进制数与二进制数、十进制数之间的转换:
总的来说,十六进制数与二进数之间的转换,应该算是很简单的了,你只需把与之相对应的数值进行转换就成了。
十六进制数的基数是16,共有16个数码,它们是0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。其中A表示十进制中的10,其余类推。它们与二进制和十进制数的关系如下:
0H=0D=0000B,1H=1D=0001B,2H=2D=0010B,3H=3D=0011B,4H=4D=0100B,5H=5D=0101B,6H=6D=0110B,7H=7D=0111B,8H=8D=1000B,9H=9D=1001B,AH=10D=1010B,BH=11D=1011B,CH=12D=1100B,DH=13D=1101B,EH=14D=1110B,FH=15D=1111B
所以,二进制与十六进制之间要进行转换的话,只要把它们由低到高每四位组成一级,直接用十六进制来表示就可以了:
例:   1000     1010     0011     0101
    8       A       3       5
十六进制转二进制则用只需将每一位用四位二进制数来表示就成了:
例:   A       B       1       0
  1010     1011     0001     0000
最后是十六进制数与十进制数之间的互相转换
十六进制数转十进制数
各位十六进制数与其对应权值的乘积之和即为与此十六进制数相对应的十进制数。
例:N=BF3CH
  =11*16的3次方+15*16的2次方+3*16的1次方+12*16的0次方
  =11*4096+15*256+3*16+12*1
  =48956D
十进制转十六进制
我还是只讲最简单的除法:
把要转换的十进制数的整数值部分不断除以16,并记下余数,直到商为0为止。
例N=48956D
  48956/16=3059     (a0=12)
  3059/16=191       (a1=3)
  191/16=11       (a2=15)
  11/16=0         (a3=11)
所以N=48956D=BF3CH。

---------------------

本文来自 lenhan12345 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/lenhan12345/article/details/1588360?utm_source=copy

原文地址:https://www.cnblogs.com/huge-666/p/9741066.html

时间: 2024-10-07 23:12:14

常用汇编指令的相关文章

常用汇编指令集合

Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 常用汇编指令集合 1. gdtr 1.gdtr 读取gdt表地址 其需要六个字节,但是前两个字节并没有用处. 汇编代码: CHAR Sgdtr[6] = { NULL };    __asm {        sgdt Sgdtr;    }   查看内存地址:ff 03 00 f0 03 80   后四个字节值为 8003f000,可以用windbg r gdt

Android 图解逆向工程中ARM常用汇编指令(一)

我们走得太快,灵魂都跟不上了. 微小的幸福就在身边,容易满足就是天堂. 在逆向和爆破中我们经常会在IDA中接触到汇编,一般做安卓的不会太了解VB回编等,不太了解的同学可以先查看上篇文章<Android ARM常用的汇编指令合集> 再来继续我们的学习,我们先来看张图. 这个view里面有 PUSH/LDR/SUB/MOVS/BLX/SUBS/BEQ/CMP ,这些差不多都是常见的,不过也不需要看得懂,理解这个指令即可,接下来我们就来分析下这些指令分别有什么作用吧. 先引入 概念性 东西,免得大家

汇编--常用汇编指令与标志位关系

加法指令 ADD (addition) 指令对标志位的影响: CF=1   最高有效位向高位有进位 CF=0   最高有效位向高位无进位 OF=1   两个同符号数相加(正数+正数 或 负数+负数),结果符号与其相反. OF=0   两个不同符号数相加,或同符号数相加,结果符号与其相同. 带进位加法指令 ADC (add with carry) 指令对标志位的影响: CF=1   最高有效位向高位有进位 CF=0   最低有效位相高位无进位 OF=1   两个同符号数相加,结果符号与其相反, O

汇编笔记二【32位通用寄存器 以及 常用汇编指令】

一.32位通用寄存器(EAX,ECX,EDX,EBP,ESP,EBP,ESI,EDI) 二.十六位通用寄存器(AX,CX,DX,BX,SP,BP,SI,DI) 三.八位通用寄存器(AH,AL,CH,CL,DH,DL,BH,BL) 四.32位,16位,8位寄存器之间的关系 1.寄存器都是高位在前,低位在后. 2.都是包含关系,32位寄存器之中包含了16位寄存器,16位寄存器之中包含了8位寄存器. 关系如下: 五.32位的含义 一位只能放0或1,32位就意味着能放32个0或1. 所以32位最小取值为

ARM 常用汇编指令

ARM 汇编程序的框架结构 .section .data <初始化的数据> .section.bss <未初始化的数据> .section .text .global _start _start: <汇编代码> 注意: 一般是将上面结构进行简化 .text .global  _start _start: <汇编代码> 寄存器操作指令: 算术和逻辑指令: MOV :用于将一个寄存器或被移位寄存器或一个立即数移动到目的寄存器 MOV  r1 ,#8 (注意:#+

常用汇编指令及其影响的标志位

加法指令 ADD (addition) 指令对标志位的影响: CF=1   最高有效位向高位有进位 CF=0   最高有效位向高位无进位 OF=1   两个同符号数相加(正数+正数 或 负数+负数),结果符号与其相反. OF=0   两个不同符号数相加,或同符号数相加,结果符号与其相同. 带进位加法指令 ADC (add with carry) 指令对标志位的影响: CF=1   最高有效位向高位有进位 CF=0   最低有效位相高位无进位 OF=1   两个同符号数相加,结果符号与其相反, O

ARM常用汇编指令介绍

b     跳转指令(跳转范围为32Mb) bl    带返回地址的跳转,指令自动将下一条指令的地址复制到R14寄存器,然后跳转到指定地址去执行,执行完后返回到下一条指令处执行 pc    寄存器R15,程序计数器指向当前执行的程序地址 lr    寄存器R14,链接寄存器保存程序跳转时的返回地址 ldr   从内存中读取数据加载到寄存器中 str   将寄存器中的数据保存到内存 mov   寄存器与寄存器之间的数据传送指令,也可以将立即数传给目标寄存器 add   加法指令 sub   减法指

如何实现对ARM汇编指令的调试?

学习ARM汇编语言时,少不了对ARM汇编指令的调试.作为支持多语言的调试器,gdb自然是较好的选择.调试器工作时,一般通过修改代码段的内容构造trap软中断指令,实现程序的暂停和程序执行状态的监控.为了在x86平台上执行ARM指令,可以使用qemu模拟器执行ARM汇编指令,具体的调试方法,一起来看看吧. 一.准备ARM汇编程序 首先,我们构造一段简单的ARM汇编程序作为测试代码main.s. .globl _start _start: mov R0,#0 swi 0x00900001 以上汇编指

【嵌入式Linux+ARM】ARM体系结构与编程(ARM汇编指令)

自己的一些简单的总结,也是最常用的ARM汇编指令,之后也会不断的补充完善. 1. 汇编系统预定义的段名 .text    @代码段 .data   @初始化数据段 .bss    @未初始化数据段 需要注意的是,源程序中.bss段应该在.text之前. 2.定义入口点 汇编程序的缺省入口是 start标号,用户也可以在连接脚本文件中用ENTRY标志指明其它入口点. .text .global _start _start: 3 .word用法 word expression就是在当前位置放一个wo