当前位置:网站首页>王爽 《汇编语言》之寄存器
王爽 《汇编语言》之寄存器
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。
边栏推荐
- misc ez_ usb
- 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
- JSON data flattening pd json_ normalize
- [OBS] win capture requires winrt
- [SUCTF 2019]Game
- The principle and implementation of buffer playback of large video files
- PHP exports millions of data
- 解决问题:Unable to connect to Redis
- Codeforces Global Round 19
- SQL优化的魅力!从 30248s 到 0.001s
猜你喜欢

Quickly use Jacobo code coverage statistics

PHP exports millions of data

Leetcode 90: subset II

Implementation of replacement function of shell script

Introduction to basic components of wechat applet

Custom class loader loads network class

mysql多列索引(组合索引)特点和使用场景

Es FAQ summary
![[quickstart to Digital IC Validation] 15. Basic syntax for SystemVerilog Learning 2 (operator, type conversion, loop, Task / Function... Including practical exercises)](/img/e1/9a047ef13299b94b5314ee6865ba26.png)
[quickstart to Digital IC Validation] 15. Basic syntax for SystemVerilog Learning 2 (operator, type conversion, loop, Task / Function... Including practical exercises)

Linux server development, MySQL transaction principle analysis
随机推荐
Linux server development, detailed explanation of redis related commands and their principles
芯片 設計資料下載
Button wizard script learning - about tmall grabbing red envelopes
Few-Shot Learning && Meta Learning:小样本学习原理和Siamese网络结构(一)
央视太暖心了,手把手教你写HR最喜欢的简历
2022年茶艺师(中级)考试试题及模拟考试
[SUCTF 2019]Game
【數字IC驗證快速入門】15、SystemVerilog學習之基本語法2(操作符、類型轉換、循環、Task/Function...內含實踐練習)
解决问题:Unable to connect to Redis
【数字IC验证快速入门】12、SystemVerilog TestBench(SVTB)入门
Few shot Learning & meta learning: small sample learning principle and Siamese network structure (I)
padavan手动安装php
What is the interval in gatk4??
Padavan manually installs PHP
Content of string
Shell 脚本的替换功能实现
LeetCode 40:组合总和 II
Chip information website Yite Chuangxin
Use and analysis of dot function in numpy
[Stanford Jiwang cs144 project] lab3: tcpsender