当前位置:网站首页>王爽 《汇编语言》之寄存器
王爽 《汇编语言》之寄存器
2022-07-07 04:47:00 【华泽的花】
寄存器概念
寄存器是CPU中的主要部件,是CPU中程序员可以读写的部件。程序员通过改变各种寄存器中的内容来实现对CPU的控制。
不同的CPU,寄存器的个数、结构是不同的。8086CPU有14个寄存器,每个寄存器有一个名称。这些寄存器是:AX、BX、CX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。
通用寄存器
8086CPU的所有寄存器都是16位的,可以存放两个字节。AX、AB、CX、DX这4个寄存器通常用来存放一般性的数据,被称为通用寄存器。

一个16位寄存器可以储存一个16位的数据。
8086CPU的上一代CPU中的寄存器都是8位的,为了保证兼容,使原来基于上代CPU编写的程序稍加修改就可以运行在8086之上,8086CPU的AX、BX、CX、DX这4个寄存器都可以分为两个独立的8位寄存器来用:
- AX可分为AH和AL;
- BX可分为BH和BL;
- CX可分为CH和CL;
- DX可分为DH和DL;

AX的低8位(0位~7位)构成了AL寄存器,高8位(8位~15位)构成了AH寄存器。AH和AL寄存器是可以独立使用的8位寄存器。

字在寄存器中的存储
出于对兼容性的考虑。8086CPU可以一次性处理以下两种尺寸的数据。
- 字节:记为byte,一个字节由8个bit组成,可以存在8位寄存器中。
- 字:记为word,一个字由两个字节组成,这两个字节分别成为这个字的高位字节和低位字节。

一个字可以存在一个16位寄存器中。这个字的高位字节和低位字节自然就存在 这个寄存器的高8位寄存器和低8位寄存器中,如图2.4,一个字型数据20000,存在AX寄存器中,在AH中存储了它的低8位。AH和AL中的数据,即可以看成是一个字型数据的高8位和低8位,这个字型数据的大小是20000,也可以看成是两个独立的字节型数据,它们的大小分别是78和32。
几条汇编指令
| 汇编指令 | 控制CPU完成的操作 | 用高级语言的语法描述 |
|---|---|---|
| mov ax,18 | 将18送入寄存器AX | AX=18 |
| mov ah,78 | 将78送入寄存器AH | AH=78 |
| add ax,8 | 将寄存器AX中的数值加上8 | AX=AX+8 |
| mov ax,bx | 将寄存器BX中的数据送入寄存器AX | AX=BX |
| add ax,bx | 将AX和BX中的数值相加,结果存在AX中 | AX=AX+BX |
注意,为了使具有高级语言基础的读者更好的理解指令的含义,有时会用文字描述和高级语言描述这两种方式来描绘一条汇编指令的含义。在写一条汇编指令或一个寄存器的名称时不区分大小写。如:mov ax,18和MOV AX,18的含义相同;bx和BX的含义相同。
PS:如果数据大小超过寄存器大小,则最高位数据将不能被储存。如果将16位的寄存器AX看作两个8位的寄存器AH和AL,那么在进行运算时,就会将AL或AH视为1个独立的8位寄存器,在进行add运算时数据大小超出8位,则最高位丢失(这里的丢失,指的是进位值不能在8位寄存器中保存,但时CPU并不是真的丢弃这个进位值。)
在进行数据传送或运算时,要注意指令的两个操作对象的位数应当是一致的。
地址加法器
地址加法器采用物理地址=段地址x16+偏移地址的方法用段地址和偏移地址合成物理地址。例如,8086CPU要访问地址为123C8H的内存单元,此时,地址加法器的工作如图2.7所示:

“段地址x16”有一个更常用的说法是左移4位。“左移4位”中的位,指的是二进制位。
| 左移位数 | 二进制 | 十六进制 | 十进制 |
| 0 | 10B | 2H | 2 |
| 1 | 100B | 4H | 4 |
| 2 | 1000B | 8H | 8 |
| 3 | 10000B | 10H | 16 |
| 4 | 100000B | 20H | 32 |
- 一个数据的二进制形式左移1位,相当于该数据乘以2;
- 一个数据的二进制形式左移N位,相当于该数据乘以2的N次方;
- 地址段x16的运算,就是将以二进制形式存放的地址段左移4位。
进一步,我们不难得出一个数据的十六己内酯形式左移一位,相当于乘以16;一个数据的十进制形式左移一位,相当于乘以10;一个X进制的数据左移一位,相当于乘以X。
边栏推荐
- Linux Installation MySQL 8.0 configuration
- Linux server development, MySQL index principle and optimization
- Value sequence (subsequence contribution problem)
- [Stanford Jiwang cs144 project] lab3: tcpsender
- 2022制冷与空调设备运行操作复训题库及答案
- Thinkcmf6.0安装教程
- Sign up now | oar hacker marathon phase III, waiting for your challenge
- Pytest+allure+jenkins environment -- completion of pit filling
- Introduction to basic components of wechat applet
- [2022 actf] Web Topic recurrence
猜你喜欢

php导出百万数据

Qt学习26 布局管理综合实例

Implementation of replacement function of shell script

Visualization Document Feb 12 16:42

Qt学习27 应用程序中的主窗口

Main window in QT learning 27 application

Qt学习28 主窗口中的工具栏

JSON data flattening pd json_ normalize

SQL优化的魅力!从 30248s 到 0.001s

Linux server development, redis protocol and asynchronous mode
随机推荐
[quick start of Digital IC Verification] 17. Basic grammar of SystemVerilog learning 4 (randomization)
[mathematical notes] radian
QT learning 26 integrated example of layout management
Codeforce c.strange test and acwing
Téléchargement des données de conception des puces
Linux server development, MySQL transaction principle analysis
Installing postgresql11 database under centos7
芯片资料 网站 易特创芯
Use and analysis of dot function in numpy
Most elements
[Matlab] Simulink 自定义函数中的矩阵乘法工作不正常时可以使用模块库中的矩阵乘法模块代替
MySQL multi column index (composite index) features and usage scenarios
Linux server development, MySQL index principle and optimization
Linux server development, MySQL process control statement
Thinkcmf6.0安装教程
Cnopendata American Golden Globe Award winning data
[Stanford Jiwang cs144 project] lab3: tcpsender
Pytorch(六) —— 模型调优tricks
JSON data flattening pd json_ normalize
PHP exports millions of data