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

发布时间 2023-05-26 23:48:43作者: Wu_Ling

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.