汇编基础--寄存器

最近打算跟着老于的一本书来写一个简单的操作系统,同时学习一下汇编和操作系统的一些知识,现在先来补充一下汇编语言的一些基本知识吧。
在这里插入图片描述

  • 数据寄存器
  • 指针及变址寄存器
  • 段寄存器
  • 控制寄存器

数据寄存器

数据寄存器包括4个16位的寄存器(AX,BX,CX,DX)或者8个8位的寄存器(AH,AL,BH,BL,CH,CL,DH,DL),这些寄存器都是用来暂时存放操作数,运算结果或者其他信息,但同时又具有某些专门的用途。

  • AX(累加寄存器):
        在乘除运算中用来指定除数和被除数,也是乘除运算后积和商的默认存储单元。IO指令均使用该寄存器与IO设备传送信息
  • BX(基址寄存器):
        存入偏移量或者偏移量的构成部分
  • CX(计数寄存器:
        在循环指令操作或者串处理指令中隐含计数
  • DX(数据寄存器):
        在双字节运算中,与AX构成32位操作数,DX为高16位。在某些IO指令中,DX被用来存放端口地址

指针及变址寄存器

这些寄存器都是16位的寄存器, 用来存放16位的操作数中间结果, 但更经常的用途是存放偏移量, 或位移量

  • SP(堆栈指针寄存器):
        指向栈顶的位置,与SS寄存器一起组成栈顶数据的物理地址
  • BP(基址指针寄存器):
        系统默认其指向堆栈中的某一单元,即提供栈中该单元偏移量,加段前缀后,BP可作为非堆栈段的地址指针。一般用于识别栈帧的起始位置。
  • SI(源变址寄存器):
        与DS联用, 指示数据段中某操作的偏移量. 在做串处理时, SI指示源操作数地址, 并有自动增量或自动减量的功能. 变址寻址时, SI与某一位移量共同构成操作数的偏移量
  • DI(目的变址寄存器):
         与DS联用, 指示数据段中某操作数的偏移量, 或与某一位移量共同构成操作数的偏移量. 串处理操作时, DI指示附加段中目的地址, 并有自动增量或减量的功能

段寄存器

  • CS(代码段):
        存放当前程序的指令代码
  • DS(数据段):
        存放程序所涉及的源数据以及结果
  • SS(堆栈段):
        以先进后出原则的数据区
  • ES(附加段):
        辅助数据区,存放串或者其他数据

控制寄存器

  • IP(指令寄存器): 存放下一条要执行的指令的偏移量

FR(控制标志位)

  • CF(进位标识位):
        进行加减运算时, 如果最高二进制位产生进位或错位, CF则为1, 否则为0. 程序设计中, 常用条件转移指令JC, JNC指令据此标志位实现转移
  • PF(奇偶标志位):
        操作结果中二进制位1的个数为偶数是, PF为1, 某则为0
  • AF(辅助进位标志位):
        运算时半字节产生进位或借位时, AF为1, 某则为0. 主要用于BCD码的调整
  • ZF(零标志位):
        运算结果为0时, ZF为1, 否则为0
  • SF(符号标志位):
        当运算结果的最高位为1时, SF为1, 否则为0. 最高位表示符号数的正和负
  • TF(跟踪标志位):
        用于调试程序时进入单步方式工作. TF=1时, 每条指令执行完后产生一个内部中断, 让用户检查指令运行后寄存器, 存储器和各标志位的内容. TF=0时, CPU工作正常, 不产生内部中断
  • IF(中断允许标志位):
        IF=1同时中断屏蔽寄存器的相应位为0, 允许系统响应可屏蔽中断, 反之, 不接收外部发出的中断请求
  • DF(方向位标志位):
        用于控制串操作时地址指针位移方向. 当DF=1时, 指针向高地址方向移动
  • OF(溢出标志位):
        算术运算时结果超出系统所能表示的数的范围. 溢出时, OF=1

参考:汇编基础之寄存器及汇编指令