浅学一下大约很少接触的汇编(x86),随缘更新一点点笔记。

汇编语言的特性

  • 与机器指令是一对一的关系,即一条汇编语句对应一条机器指令
  • 能够针对专用硬件进行优化
  • 非常自由但也容易出错

虚拟机概念

  • 解释:在运行时将代码实时转换为虚拟机的指令,再由相应的程序转换为下一层虚拟机的指令,直到可以被硬件运行。
  • 翻译:先将代码由相应的各个程序翻译为可由硬件执行的指令再运行。

虚拟机可以由软件或硬件实现,如果能由真实计算机进行实现那么为该虚拟机的指令设计的软件将直接运行在硬件上,否则,该虚拟机上的程序就被解释/翻译为下一层虚拟机的程序并在下一层虚拟机运行。

数据表示

存储单位

数据存储的基本单位都是字节(Byte, 一般来说是大写B),一个字节有8位(bit,一般是小写b),一位可以用于表示0或者1。此外,还有字(Word),1字=2字节,注册表里出现的DWORD, QWORD即为双字和四字。

有符号整数的表示

位的编号从0开始

  • Most Significant Bit(最高有效位,MSB): 二进制整数最左边的位
  • Least Significant Bit(最低有效位,LSB): 二进制整数最右边的位

使用最高位表示符号,正数表示为原码,负数则表示为补码(原理:一个有限位整数的补码是其加法逆元),这样就只需实现加法器而不需要额外实现减法器。

求二进制整数补码的方法为按位取反,然后加1。

    0001 0001的补码为1110 1111
    可以发现0001 0001 + 1110 1111 = 0000 0000(取低8位)

    类似的可以计算十进制下的补码
    4的补码为6
    且4+6=0(取低1位十进制数)

布尔表达式

最小连接词组,与,或,非(AND, OR, NOT)。可以联想逻辑运算(&&, ||, !)理解其含义,详细的布尔代数知识另阅离散数学。