汇编语言寄存器

Posted 桃陉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言寄存器相关的知识,希望对你有一定的参考价值。


前言

对于汇编程序员来说,CPU中的主要部件是寄存器,程序员通过指令读写寄存器,然后通过改变寄存器中的内容实现对CPU的控制。

不同的CPU,寄存器的个数、结构是不同的。我们主要来介绍8086CPU。

8086CPU共有14个寄存器,分别为:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。


1.通用寄存器

1.1特点

(1)8086CPU所有寄存器都是16位(bit)的,占两个字节(byte),其中AX、BX、CX、DX四个寄存器用来存放一般性的数据,它们被称为通用寄存器。

(2)16位寄存器可以存储一个16位的数据,能存储的最大数据是216

(3)因为8086CPU的上一代CPU中寄存器是8位的,为了保证兼容,8086CPU中的AX、BX、CX、DX这4个16位的寄存器都可以分成两个独立使用的8位寄存器。eg: AX分为AH(高8位)和AL(低8位),其他同理。

在这里插入图片描述

寄存器寄存器中的数据所表示的值
AX10011100010000020000(4E20H)
AH0100111078(4EH)
AL0010000032(20)

注意: 最后的H表示是16进制数字在二进制数字的后面加B,十进制则什么也不加。


2.寄存器中的存储

2.1字的存储

8086CPU可以一次性处理如下两种尺寸的数据。分别为字和字节。

一个字由两个字节组成,这两个字节分别称为高位字节和低位字节,每个字节都有8位。
在这里插入图片描述


3.一些汇编指令

3.1指令

汇编指令控制CPU完成的操作
mov ax,18将18送入寄存器AX中
mov ah,18将18送入寄存器AH中
add ax,8将寄存器AX中的数值加上8
add ax,bx将AX和BX中的数值相加,结果存在AX中

注意:

(1)在写汇编指令或者寄存器名称是不区分大小写。mov ax,8 和MOV AX,8 含义相同。

(2)al中只能存放8位数据,当产生进位时,并不会将进位数据输出到ah中,这里是形式上的丢失,但是实际上CPU并不会真的丢弃这个进位值。

3.2错误书写格式

错误原因: 两个操作对象的位数是不一致的。

eg:
mov ax,bl (位数不同)
mov bh,cx
add al,20000 (8位数据最多存放数字为255)
add al,100H (将超过8位的数据加到了一个8位寄存器中)


4.物理地址


当CPU访问内存单元时,需要给出这个内存单元的地址。每个内存单元都有一个唯一的地址,我们将这个唯一的地址称为物理地址。


4.1物理地址的形成

8086CPU有20条地址总线,可以传输20位地址(1MB)。因为它是16位的结构,所以只能送出16位地址(64KB)。

我们为了得到20位的地址我们使用一种手段:将两个16位地址合为一个20位的物理地址。

具体过程:
(1)CPU中这两个16位的地址,一个是段地址,一个是偏移地址
(2)段地址和偏移地址通过内部总线送入地址加法器中,然后改部件将其合为一个20位的物理地址。
(3)地址加法器将合成的20位物理地址送入输入输出控制电路。输入输出控制电路将20位物理地址送入地址总线,然后被地址总线送到存储器。

地址加法器的操作原理:

我们将16位的段地址左移四位(相当于乘以16),然后与偏移地址相加得到物理地址。

物 理 地 址 = 段 地 址 × 16 + 偏 移 地 址 { \\color{red}物理地址 = 段地址×16 + 偏移地址} =×16+

段地址×16得到基础地址,然后加上偏移地址得到物理地址。

5.CS与IP

8086CPU有四个段寄存器:CS、DS、SS、ES,这里只看一下CS(存放指令的段地址)。

简介
CS与IP是8086CPU中最关键的寄存器,他们指示了CPU当前要读取指令的地址。CS为代码段寄存器,IP为指令指针寄存器。

修改CS、IP的指令

(1)同时修改CS和IP的值:使用 jmp 指令;

格式: jmp 段地址:偏移地址

eg:jmp 2AE3:3,执行后:CS=2AE3H,IP=0003H,CPU从2AE33H处读取指令。

(2)修改IP的值:使用 ”jmp 某一合法寄存器“ 的指令完成。

eg: jmp ax (将AX中的值赋给IP寄存器)

以上是关于汇编语言寄存器的主要内容,如果未能解决你的问题,请参考以下文章

怎样用汇编语言向UART发送寄存器中装载数据

汇编语言程序设计中,段寄存器的内容和偏移量合起来是内存地址,

[汇编]《汇编语言》第2章 寄存器

汇编语言中 寄存器有啥作用 怎么用

汇编语言寄存器和地址

汇编语言第2章 寄存器