zoukankan      html  css  js  c++  java
  • 常用汇编指令

    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 

  • 相关阅读:
    solr 的全量更新与增量更新
    solr 服务器的搭建
    Mysql 问题
    App 微信支付
    App 支付宝支付
    Linux 常见命令
    [备注] 钉钉使用教程
    PARAMETER和ARGUMENT的区别
    无界面浏览器
    URLs ...
  • 原文地址:https://www.cnblogs.com/huge-666/p/9741066.html
Copyright © 2011-2022 走看看