8086 寄存器

作者: 相关函数 | 来源:发表于2018-09-15 22:40 被阅读3次

    一个典型的CPU是由进行信息处理的运算器,进行信息存储的寄存器,和控制各种器件进行工作的控制器组成。

    寄存器是cpu中程序员可以用指令读写的部件,程序员通过改变各种寄存器中的内容实现对cpu的控制。

    对于8086cpu来说有14个寄存器,并且都是16位的,每一个可以存放2个字节的数据(1个字节为8bit)

    这些寄存器按其用途可分为通用寄存器,指令指针,标志寄存器和段寄存器4类。

    通用寄存器:

    • ax, bx, cx, dx 为数据寄存器。由于8086的上一代cpu是8位的,为了兼容,是原来基于上代cpu编写的程序稍加修改就能运行在8086cpu上,所以这四个寄存器都可以分为独立使用的8位寄存器。每个寄存器的低8位(0-7)构成*L寄存器,高8位(8-15)构成了*H寄存器。
    • 指针寄存器 sp(堆栈指针), bp(基数指针)。sp通常用于表示堆栈位置,bp可用作ss的一个相对基址位置。
    • si(源地址)和di(目的地址)为变址寄存器。si可用来存放相对于DS段之源变址指针,di可用来存放相对于ES 段之目的变址指针。

    控制寄存器:

    • ip(指令寄存器)当前需要取出的指令字节,当BIU(总线控制单元)从内存中取出一个指令字节后,IP就自动加(取出该字节的长度,如:BIU从内存中取出的是1个字节,IP就会自动加1,如果BIU从内存中取出的字节数长度为3,IP就自动加3),指向下一个指令字节。注意,IP指向的是指令地址的偏移地址。
    • flag (状态标志)

    段寄存器:

    为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:

    • cs:代码段寄存器
    • ds:数据段寄存器
    • ss:堆栈段寄存器
    • es:附加段寄存器。

    其中
    cs:ip指向的指令作为下一条需要取出执行的指令
    mov ax, [address]是指将ds:address的数据取出赋值给ax寄存器
    ss:sp在任意时刻指向栈顶元素

    对于数据段,将他的段地址放在ds中,用mov,add,sub指令访问内存单元时,cpu就将我们定义的数据段中的内容当做数据来访问。
    对于代码段,将它的段地址放在cs中,将段中第一条指令的偏移地址放在ip中,这样cpu就将执行我们定义的代码段中的指令。
    对于栈段,将它的段地址放在ss中,将栈顶单元的偏移地址放在sp中,这样cpu在需要进行栈操作的时候,比如执行push,pop指令等,就将我们定义的栈段当做栈空间来使用。

    8086汇编的相关笔记来自 小码哥 MJ iOS底层视频 以及 王爽《汇编语言(第三版)》

    相关文章

      网友评论

        本文标题:8086 寄存器

        本文链接:https://www.haomeiwen.com/subject/kqstnftx.html