汇编入门基础

汇编入门基础

参考视频

https://www.bilibili.com/video/BV1ni4y1G7B9?p=

机器语言概述

电子计算机的底层是通过电平状态0和1实现功能,对计算机的任意操作都可以看作是发送一串0和1构成的指令集

汇编语言概述

  1. 对于复杂的机器语言,增加助记符去表示这个操作,这个助记符就是汇编语言,助记符主要是人能够理解的语言,例:

    操作 机器语言 汇编语言
    01000000 INC
  2. 机器语言与汇编语言的转换是通过编译器实现的

  3. 汇编语言主要用于底层的编写

进制

核心思想:每一种进制都是完美的,都有自己的计算方式

基本概念

  1. 常见进制:二进制(B),八进制(O),十进制(D),十六进制(H),一般用数字加进制的方式表示数据例:10(H)表示十六进制的10

  2. 进制的本质:用一组符号表示数据,逢几近几,符号是可以自己定义的,例:

    常见的十进制符号 表示十进制的10 自定义十进制符号 表示十进制的10
    0,1,2,3,4,5,6,7,8,9 10 0,2,4,6,8,a,f,8,h,s 20

进制的运算

  1. 运算的本质就是查数,例:八进制的表示
    0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20…… 
    2*3就是从0开始数完2个3就行,对应0 1 2;3 4 5;得出结果6(O)
    
  2. 不同的进制都有相对应的乘法表和加法表,根据两张表就可以完成所有的加减乘除
  3. 加减乘除的本质都是加法

扩展知识

  1. 电子计算机使用二进制,拥有物理极限(可了解一下摩尔定律),代表算力是有尽头的,语言就相当于软操作的扩展。
  2. 量子计算机(Honeywell公司):可以实现量子计算的机器,计算单位:昆比特(量子比特),使用量子的两态来表示,能提高计算机的算力,涉及名词:量子比特、量子叠加态、量子纠缠、量子并行原理……。
  3. 扩展:光子(正交偏振方向)、磁场(电子自旋方向)

二进制

  1. 二进制的简写:二进制表示一个比较大的数据会很长,为了简写二进制,便诞生了十六进制
  2. 计算机底层的位操作精细而频繁,二进制能更好的表示某些功能的状态

数据宽度

  1. 计算机内存是有限的,所以需要给数据定义数据宽度,在语言中的数据类型就相当于给数据定义宽度,在计算机中,每个数据都是有数据宽度的
  2. bit:0/1,Byte:0xff,word:0xffff,Dword:0xffffffff

有符号数和无符号数

  1. 无符号数规则:数字是什么就是什么
  2. 有符号数规则:最高位是符号位,0代表正数,1代表负数
    • 原码:最高位是符号位,其它位对其本身取绝对值表示
    • 反码:正数反码就是原码,负数反码是符号位不变,其它位取反
    • 补码:正数补码就是原码,负数补码是符号位不变,对反码加1
  3. BCD码(8421码):
    十进制   二进制
    8        1000
    4        0100
    2        0010
    1        0001
    
    可以得出规律:二进制数据,每个bit置1都对应固定的值,用这个规律就只需要把一个值拆解成8421和的形式,就可以实现进制的快速转换,例:0xA=8+2->1010,0xf=8+4+2+1->1111;当数据位宽为4bit时,最大值为0xf,当数据位宽为8bit时,最大值为0xff,例0xAA->10101010,0xff->11111111
    使用8421码可以实现一个二进制与十六进制数据的快速转换
  4. 计算机底层存储负数是用的补码,所以数据我们一定要区分是有符号数还是无符号数

位运算

  1. 与运算(and &):两个都为1,结果就为1
  2. 或运算(or |):一个为1,结果就为1
  3. 异或运算(xor ^):相同为0,相异为1
  4. 非运算(not ~):按位取反
  5. 移位运算:在十进制中,左移*2,右移/2
    • 左移(shl <<):高位丢弃,低位补零
    • 右移(shr >>):低位丢弃,低位补0/1(根据符号位确定)

位运算的加减乘除

  1. 加法,例:4+5
    • 进行异或运算,如果不考虑进位,异或就可以直接出结果
      0000 0100
      0000 0101
      ------------
      0000 0001
      
    • 进行与运算,判断进位,如果与运算结果为零,就没有进位
      0000 0100
      0000 0101
      ------------
      0000 0100
      
    • 将与运算结果左移一位,0000 1000
    • 将左移结果与第一步结果进行异或运算
      0000 1000
      0000 0001
      ------------
      0000 1001
      
    • 对上一步计算的两个数据进行与运算,判断进位
      0000 1000
      0000 0001
      ------------
      0000 0000
      
    • 最后计算结果为与运算为零的上一个异或运算,如果与运算不为零就继续重复进行异或、与运算
  2. 减法,例:4-5,等价于4+(-5),负数在计算机底层使用补码表示
    • 进行异或运算,如果不考虑进位,异或就可以直接出结果
      0000 0100
      1111 1011
      ------------
      1111 1111
      
    • 进行与运算,判断进位,如果与运算结果为零,就没有进位
      0000 0100
      1111 1011
      ------------
      0000 0000
      
    • 最后计算结果为与运算为零的上一个异或运算,如果与运算不为零就继续重复进行异或、与运算
  3. 乘法:x*y->x个y相加,实际还是加法
  4. 除法:x/y->x能减去多少个y,本质还是减法
  5. 计算机只会作加法

汇编语言的工具和环境

vc6.0 + OD

通用寄存器

  1. 特点:通用寄存器可以存储任意值
  2. 存值方式:
    • 二进制直接修改值就行
    • 向寄存器存值使用mov指令:mov 存的地址,存的数据mov 地址1,地址2 \\将地址2的值写到地址1
  3. 不同位宽CPU下的寄存器名称:
    0xFFFFFFFF 0xFFFF 0xFF
    32位 16位 8位
    EAX AX AL
    ECX CX CL
    EDX DX DL
    EBX BX BL
    ESP SP AH
    EBP BP CH
    ESI SI DH
    EDI DI BH
    注:8bit的L和H分别代表第八位和高八位,实际只有四个通用寄存器
  4. 特殊寄存器一般是不能随意修改的
posted @ 2022-06-02 13:43  呆XX  阅读(245)  评论(0编辑  收藏  举报