当前位置:网站首页>王爽 《汇编语言》之寄存器
王爽 《汇编语言》之寄存器
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。
边栏推荐
- Value sequence (subsequence contribution problem)
- [SUCTF 2019]Game
- Pytest+allure+jenkins environment -- completion of pit filling
- [OBS] win capture requires winrt
- Thinkcmf6.0安装教程
- [UTCTF2020]file header
- 2022 National latest fire-fighting facility operator (primary fire-fighting facility operator) simulation questions and answers
- Force buckle 144 Preorder traversal of binary tree
- Record a stroke skin bone error of the skirt
- 青龙面板--花花阅读
猜你喜欢
![[mathematical notes] radian](/img/43/2af510adb24fe46fc0033d11d60488.jpg)
[mathematical notes] radian

【数字IC验证快速入门】10、Verilog RTL设计必会的FIFO

Linux server development, redis protocol and asynchronous mode

Few-Shot Learning && Meta Learning:小样本学习原理和Siamese网络结构(一)

Thinkcmf6.0安装教程

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

2022 tea master (intermediate) examination questions and mock examination

LeetCode 40:组合总和 II

Numbers that appear only once

JSON data flattening pd json_ normalize
随机推荐
[2022 actf] Web Topic recurrence
CTF daily question day43 rsa5
Content of string
【数字IC验证快速入门】11、Verilog TestBench(VTB)入门
Few shot Learning & meta learning: small sample learning principle and Siamese network structure (I)
Pytest+allure+jenkins environment -- completion of pit filling
dash plotly
2022 welder (elementary) judgment questions and online simulation examination
Codeforce c.strange test and acwing
Linux server development, detailed explanation of redis related commands and their principles
Linux server development, MySQL stored procedures, functions and triggers
2022茶艺师(初级)考试题模拟考试题库及在线模拟考试
Introduction to basic components of wechat applet
Main window in QT learning 27 application
[matlab] when matrix multiplication in Simulink user-defined function does not work properly, matrix multiplication module in module library can be used instead
[guess-ctf2019] fake compressed packets
Paddlepaddle 29 dynamically modify the network structure without model definition code (relu changes to prelu, conv2d changes to conv3d, 2D semantic segmentation model changes to 3D semantic segmentat
Niu Mei's mathematical problem --- combinatorial number
太真实了,原来自己一直没有富裕起来是有原因的
Regular e-commerce problems part1