8086汇编语言基础学习(一)——8086微机基础

8086微机基础

寄存器(Register)

  • CPU内部的高速存储单元
  • 为CPU提供数据地址信息

存储器地址(Address)

  • 由大量存储单元组成,用编号区分每个存储单元
  • 存储器的地址 = 存储器中存储单元的编号
  • 每个存储单元存放一个字节的数据(1Byte=8bit)
  • 地址采用十六进制表达
    • Inter8086有1MB的存储器容量(1MB=210KB=220B)
    • 存储器地址表示为:00000H~FFFFFH

端口(Port)

  • I/O地址的别称
  • I/O接口电路由接口寄存器组成,用编号区分各寄存器
  • I/O地址 = 接口电路中寄存器的编号
  • 端口采用十六进制表达
    • Intel 8086支持64K个8位端口
    • I/O地址可以表示为:0000H~FFFFH

8086微机模型图:

常用寄存器:

a. 段寄存器(Segment Register)  

  i.   代码段寄存器CS ( Code Segment )
  ii.  数据段寄存器DS ( Data Segment )
  iii. 堆栈段寄存器SS ( Stack Segment )
  iv. 附加段寄存器ES ( Extra Segment )

  段寄存器的长度大小为96位,可以抽象的理解为以下的数据结构:

 

struct Segment
{
  WORD Selector;  //16位段选择子,可见部分. 
       //使用OD 或者X64dbg看段寄存器只会显示16位的段选择子可见部分.当读段寄存器(如mov ax,CS)的时候,只会返回这16位。或者push seg 操作针对的都是这16位。如果目标操作数是32位(如mov eax ,CS),则将16位零扩展成32位赋给目标操作数。但是写的时候,就会涉及到96位
  WORD Attribute; //16位表示的段属性, 表示了当前段寄存器是可读的可写的还是可执行的
  DWORD Base;     //32位表示的基址,表示段从哪里开始
  DWORD limit;    //32位表示,表示的是基址的长度. base + limit 可以确定一个段的大小
}

b. 指令指针寄存器 IP
  任意时刻,8086的CPU都会将 CS:IP 指向下一条将取出并要执行的指令。

c. 通用寄存器
  i.  累加器 AX( Accumulator ),使用频率最高,用于算术和逻辑运算以及与外设传送信息。
  ii. 基址寄存器 BX( Base ),常用于存放存储器的地址,以方便指向变量或数组中的元素。
  iii. 计数器 CX( Counter ),常用于循环操作的计数器。
  iv. 数据寄存器 DX( Data ),可以用来存放数据,在输入和输出指令中放外设端口的地址。

d. 专用寄存器
  v. 源变址寄存器SI( Source Index ),用于指向字符串或数组的源操作数。
  vi. 目的变址寄存器DI( Distination Index ),用于指向字符串或数组的目的操作数。
  vii. 基址指针寄存器BP( Base Pointer ),默认情况下指向程序堆栈区域的数据,主要用于在子程序中访问通过堆栈传递的参数和局部变量。
  viii. 堆栈指针寄存器SP( Stack Pointer ),专用于指向程序堆栈区域顶部的数据,在涉及到堆栈的指令中会进行自增或自减。

e. 标志寄存器FR( Flag Register )
  标志寄存器是一个特殊的寄存器,它是按位来存储标志信息的,而非和其他常见寄存器那用按字或者字节来存储。

 

  i. 六个状态位(重点

    1. ZF( Zero Flag ),零标志位,如果运算结果为0时,ZF = 1,否则ZF = 0。在Debug中用NZ表示ZF = 0用ZR表示ZF = 1
    2. PF( Parity Flag ),奇偶标志位,若运算结果中的低8位中“1”的个数位偶数,则PF = 1,否则PF = 0。在Debug中用PO( Parity Odd )表示PF= 1,用PE( Parity even )表示PF = 0。
    3. SF( Symbol Flag),符号标志位,若执行相关指令后,其结果为负数,则SF = 1,否则SF = 0。需要注意,这个标志位只对有符号数有用,对于无符号数没有意义。
    4. CF( Carry Flag ),进借位标志位,一般用于无符号数运算时,记录运算结果的最高有效位的进位,或者从更高位的借位。
    5. OF( Overflow Flag ),溢出标志位,记录有符号数运算是否溢出,若溢出,则OF = 1,否则OF = 0。需要注意,OF用于有符号数,而CF用于无符号数
    6. AF( Auxiliary Flag ),辅助进借位标志位,反映加减运算时最低半字节有无进位或者借位。最低半字节有进位或借位时,AF=1,否则AF=0。这个标志位主要由处理器内部使用,用于十进制算术运算的调整指令,用户一般不必关心。

  ii. 3个控制标志位

    1. DF( Direction Flag ),方向标志位,仅仅用于串处理指令中,控制着地址的变化方向。
    2. IF( Interrupt Flag ),中断允许标志位,IF置为0,禁止其他的可屏蔽中断;如果允许处理可屏蔽中断,则将IF置为1。
STI指令:将IF设置为1,允许可屏蔽中断。CLI指令:将IF设置为0,禁止可屏蔽中断。

    3. TF( Trace Flag ),跟踪标志位,跟踪标志位用于标识CPU是否允许单步中断,以进行程序调试。TF=0时,8086CPU处于正常状态;TF=1时,8086CPU处于单步状态,每执行一条指令就自动产生一次单步中断。

 

小端模式:

  所谓小端模式,就是指数据的低字节保存在物理内存的低地址中,而数据的高字节保存在物理内的高地址,这与我们的逻辑方法是一致的。8086处理器就是利用这一方法来组织内存的。

posted @ 2023-05-26 23:40  Tatsukyou  阅读(370)  评论(0编辑  收藏  举报