当前位置:网站首页>王爽 《汇编语言》之寄存器
王爽 《汇编语言》之寄存器
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。
边栏推荐
- Numbers that appear only once
- Rust versus go (which is my preferred language?)
- [UTCTF2020]file header
- Linux server development, MySQL cache strategy
- Yugu p1020 missile interception (binary search)
- The element with setfieldsvalue set is obtained as undefined with GetFieldValue
- buuctf misc USB
- Bugku CTF daily one question chessboard with only black chess
- QT learning 28 toolbar in the main window
- C语言二叉树与建堆
猜你喜欢
Yugu p1020 missile interception (binary search)
Implementation of replacement function of shell script
【數字IC驗證快速入門】15、SystemVerilog學習之基本語法2(操作符、類型轉換、循環、Task/Function...內含實踐練習)
Qt学习28 主窗口中的工具栏
The charm of SQL optimization! From 30248s to 0.001s
json 数据展平pd.json_normalize
快速使用 Jacoco 代码覆盖率统计
Operation suggestions for today's spot Silver
Explore dry goods! Apifox construction ideas
Open source ecosystem | create a vibrant open source community and jointly build a new open source ecosystem!
随机推荐
C语言航班订票系统
Detailed explanation of Kalman filter for motion state estimation
追风赶月莫停留,平芜尽处是春山
Info | webrtc M97 update
Linux server development, detailed explanation of redis related commands and their principles
2022 tea master (intermediate) examination questions and mock examination
【数字IC验证快速入门】12、SystemVerilog TestBench(SVTB)入门
CTF daily question day43 rsa5
Yugu p1020 missile interception (binary search)
Common method signatures and meanings of Iterable, collection and list
解决问题:Unable to connect to Redis
Thinkcmf6.0安装教程
Thinkcmf6.0 installation tutorial
pytest+allure+jenkins环境--填坑完毕
Implementation of replacement function of shell script
Linux Installation MySQL 8.0 configuration
Summary of redis functions
Visualization Document Feb 12 16:42
The principle and implementation of buffer playback of large video files
Pytest+allure+jenkins environment -- completion of pit filling