汇编基础学习笔记

1

CPU由运算器、控制器和寄存器等构成

寄存器

  • 数据寄存器 AX、BX、CX、DX 用于暂时存放在计算过程中所用到的操作数、结果等信息 AX分为AL(低字节)和AH(高字节)
  • 指针及变址寄存器 SP、BP、SI、DI 经常用于在段内寻址时提供偏移地址
  • 段寄存器 CS、DS、SS、ES 由于计算机字长固定(8,16,32,64)存储器分段
  • 控制寄存器 IP、PSW
    • IP 指令指针寄存器,用来存放代码段中的偏移地址
    • PSW 程序状态字寄存器,也叫标志位,由条件码标志和控制标志构成。PSW用来记录程序中运行结果的状态信息,这些状态信息经常作为后续条件转移指令的转移控制条件,这个在后期判断程序跳转时会用到

条件码标志

  • OF(Overflow Flag) 溢出标志,操作数超出机器能表示的范围置1,否则置0
  • SF(Sign Flag) 符号标志,运算结果为负置1,否则置0
  • ZF(Zero Flag) 零标志,运算结果为0置1,否则置0
  • CF(Carry Flag) 进位标志,记录运算时从最高有效位产生的进位值,有进位置1,否则置0
  • AF(Auxiliary carry Flag) 辅助进位标志,记录运算时第3位产生的进位值,有进位置1,否则置0
  • PF(Parity Flag) 奇偶标志,结果操作数中1的个数为偶数置1,否则置0
  • DF(Direction Flag) 方向标志,在串处理指令中控制处理信息的方向,用处不大
  • IF(Interrupt Flag) 中断标志,当IF为1时,允许中断,否则关闭中断
  • TF(Trap Flag) 陷阱标志,用于单步方式操作。TF为1时,每条指令执行完后产生陷阱,由系统控制计算机;为0时,CPU正常工作不产生陷阱

常用汇编语言语句

  • mov a,b 移动指令,把b中的值赋予a
  • cmp a,b 比较指令,后面一般要跟跳转语句
  • test a,b 执行a and b操作,结果会影响ZF标志位,后面一般跟jz或者jnz跳转语句
  • add a,b 加法指令,a+b,结果放到a中
  • sub a,b 减法指令,a-b,结果放到a中
  • xor a,b 异或指令,结果放到a中
  • and a,b 与指令,结果放到a中
  • or a,b 或指令,结果放到a中
  • not a 非指令,单操作数指令,结果放到a中
  • call xxx 调用xxx处的子程序,以ret为结尾,然后会回到上一级主程序继续执行。调用的子程序可能在本程序中,也可能在dll动态链接库中
  • nop 空操作指令
  • je xxx、jz xxx 跳转指令,若相等则调到xxx处执行,或者如果ZF标志位为1则跳
  • jne xxx、jnz xxx 跳转指令,若不相等则跳到xxx处执行,或者如果ZF标志位为0则跳
  • jmp xxx 无条件跳转指令,强制跳转到xxx处执行
  • jb xxx 跳转指令,若小于则跳转到xxx处执行
  • ja xxx 跳转指令,若大于则跳转到xxx处执行
  • jge xxx 跳转指令,若大于等于则跳转到xxx处执行
  • jl xxx 跳转指令,若小于则跳转到xxx处执行
  • jle xxx 跳转指令,若小于等于则跳转到xxx处执行
  • loop 循环指令,一般以ecx作为计数器,ecx为0时退出循环
  • inc a a=a+1
  • dec a a=a-1
  • push a a入栈
  • pop a a出栈

字符编码方式

常见英文字符编码有ASCII编码;而汉字编码常见的有GB2312、GB18030等;能容纳全球所有文字的编码方式有Unicode字符编码方式

Unicode只与ASCII兼容,与GB码不兼容

Unicode字符编码方式

a的ASCII码值一般占一个字节,即61H,由于Unicode码值和ASCII兼容,也是61H,但我们常用的Unicode码值一般占两个字节,即表示为0061H。此外,这些码值都是放在寄存器当中的,比如AX中,而AX又分为ALAH,低位61放在AL中,高位00放在AH中;实际存放时,低位在前,高位在后,0061H实际存放结果是6100HEAX可以存放4个字节,比如31323334H,存放结果为34333231H

1 Comment

Leave A Reply

苏ICP备16066660号-1

苏公网安备 32011502010432号