汇编语言8086寄存器小结(个人分享,LPC无关)

8086中共有14个寄存器:AX, BX, CX, DX, SP, BP, SI, DI, IP, FLAG, CS, DS, SS, ES

assume cs:code,ds:data,ss:list

; STACK初始化示例
list segment stack
         dd 9 dup (0)
list ends

; 数据段示例
data segment
         db 'Hello,World!',0Ah
    hi   db 'Hello,World!',0Ah,0Dh,'$'
data ends

; 代码段示例
code segment

    start:mov  ax,data
          mov  ds,ax
          mov  bx,0
          mov  cx,13
    s:    mov  dx,[bx]
          mov  ah,02h          ; 输出字符
          int  21h             ; 调用输出
          add  bx,1
          loop s

          mov  dx,offset hi
          mov  ah,09h          ; 输出字符串
          int  21h             ; 调用输出

          mov  ah,4ch
          int  21h

code ends

end start

通用寄存器

数据寄存器

AX

Accumulator:累加寄存器,也称之为累加器,常用于存放算术、逻辑运算中的操作数或结果。另外,所有的外部设备的输入输出指令都只能使用AL或AX作为数据寄存器。

BX

BX (Base):基地址寄存器,可用于数据寄存器,访问存储器时、可以存放被访问内存的地址,是具有双重功能的寄存器

CX

CX (Count):计数器寄存器;在循环、串操作指令中用作计数器。如在loop循环中用作计数器。

DX

DX (Data):数据寄存器;在乘除法中作为数据累加器,在输入输出操作中存放端口的地址。此外,在做双字长乘除法运算时,DX 与AX合起来存放一个双字长数(32位),其中DX存放高16位(余数),AX存放低16位(商)。

指针寄存器

SP

Stack Pointer:堆栈指针寄存器,存放栈顶的偏移位置,供堆栈操作使用,常用SS搭配进行使用

BP

Base Pointer:基指针寄存器;存放堆栈内数据的基地址

变址寄存器

SI

Source Index:源变址寄存器;主要用于存放地址,在字符串操作中存放源操作数的偏移地址。变址寄存器内存放 的地址在数据传送完成后,具有自动修改的功能。

DI

Destination Index:目的变址寄存器;主要用于存放地址,在字符串操作中存放目的操作数的偏移地址。

控制寄存器

IP

IP(Instruction Pointer):指令指针寄存器,常与CS进行配合使用,用于共同寻址。

FLAG

标志寄存器

段寄存器

  • CS(Code Segment):代码段寄存器
  • DS(Data Segment):数据段寄存器
  • SS(Stack Segment):堆栈段寄存器
  • ES(Extra Segment):附加段寄存器

CS:代码段寄存器

CS代码段寄存器常与IP(指令指针寄存器)共同使用,指示cpu当前将要读取的指令的地址。

Shell 将可执行文件加载到内存中以后,就会设置 CPU 中的两个寄存器,即设置 CS:IP 两个寄存器指向可执行文件的起始地址,此后 CPU 便从这个起始地址开始读取内存中的指令,并且执行。

start用于标记可执行文件的起始地址。

DS:数据段寄存器

DS全称:Data Segment register,为数据段寄存器,其作用主要用于访问内存中的数据,常与偏移地址共同使用,那么ds的作用是什么呢?通俗点来说就是寻找数据。cpu要读写一个内存单元时,必须要知晓这个内存单元在哪,因此便可以通过ds(数据段寄存器)和偏移地址两个参数,来确定这个内存单元在哪。

访问内存中的数据的方式

  • 方式一:段地址(ds):[偏移地址]
  • 方式二:[偏移地址] 等同于ds:[偏移地址]

段寄存器是不支持将数据直接写入的,而是需要借用其他寄存器将数据写入。

SS:堆栈段寄存器

堆栈寄存器,一般作为栈和sp搭档,其中ss用作堆栈段的首地址,sp用于堆栈段的偏移地址。

当放入数据时,sp应当先进行移位,再放入数据;当释放数据时,应当先释放数据,sp再进行移位。

ES:扩展段寄存器

扩展段寄存器,存放当前执行程序中一个辅助数据段的段地址。

总结

每个寄存器都是16位的,即dword双字节,除了数据寄存器外的寄存器均不可分为两个8位的寄存器使用。

京ICP备13031296号-4