寄存器(CPU的工作原理)
通用寄存器
8086CPU有14個(gè)寄存器,他們的名字稱為誒:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。
8086CPU所有的寄存器都是16位的,可以存放兩個(gè)字節(jié)。
為了保證兼容性,這四個(gè)寄存器都可以分為兩個(gè)獨(dú)立的8位寄存器使用。
AX可以分為 AH還有AL; AH還有AL寄存器是可以獨(dú)立使用的8位寄存器。
BX可以分為BH還有BL;
CX可以分為CH還有CL;
DX可以分為DH還有DL;
字在寄存器中的存儲(chǔ)
一個(gè)字可以存在一個(gè)16位的寄存器中,這個(gè)字的高位字節(jié)和低位字節(jié)自然就存在這個(gè)寄存器的高8位寄存器和低8位寄存器中。
幾條匯編指令
匯編指令是不區(qū)分大小寫的
mov AX,BX 的意思是將BX中的數(shù)據(jù)放在AX中
add AX,BX 的意思是將BX與AX相加,放在AX中
如果超過數(shù)據(jù)的存儲(chǔ)范圍,就會(huì)有數(shù)據(jù)的丟失
這里的丟失,指的就是進(jìn)位制不能在8位寄存器中保存,但是CPU不是真的丟棄這個(gè)進(jìn)位值。
物理地址
CPU訪問內(nèi)存單元的時(shí)候要給出內(nèi)存單元的地址,所有的內(nèi)存單元構(gòu)成的存儲(chǔ)空間是一個(gè)一維的線性空間。
我們將這個(gè)唯一的地址稱為物理地址。
決定一個(gè)CPU是多少位的,有以下三方面的特點(diǎn)
運(yùn)算器一次最多可以處理16位的數(shù)據(jù)。
寄存器的最大寬度為16位。
寄存器和運(yùn)算器之間的通路是16位的。
8086CPU在讀寫內(nèi)存的時(shí)候,發(fā)生了一些事情:
CPU中的相關(guān)部件提供兩個(gè)16位的地址,一個(gè)稱為段地址,另一稱為偏移地址
段地址和偏移地址通過內(nèi)部總線送入一個(gè)稱為地址加法器的部件;
地址加法器將兩個(gè)16位地址合并成一個(gè)20位的地址。
地址加法器合成物理地址的方法:
物理地址=段地址×16+偏移地址
段的概念
內(nèi)存并沒有分段,段的劃分來自于CPU,由于8086CPU用“段地址*16”+偏移地址=物理地址的方式。實(shí)際上,內(nèi)存并沒有劃分成一個(gè)一個(gè)的段。
以后在編程的時(shí)候,根據(jù)需要將若干個(gè)地址連續(xù)的內(nèi)存單元看作一個(gè)段,用段地址X16定位段的起始地址(基礎(chǔ)地址),用偏移地址定位段中的內(nèi)存單元。
段的起始地址一定是16的倍數(shù)。
偏移地址為16位,所以一個(gè)段的長(zhǎng)度最大為64k。
CPU可以用不同的段地址還有偏移地址來形成同一個(gè)物理地址。
段寄存器
段寄存器就是用來提供段地址的。8086CPU有4個(gè)段寄存器:CS、DS、SS、ES
當(dāng)8086CPU要訪問內(nèi)存的時(shí)候,由這4個(gè)段寄存器提供內(nèi)存單元的段地址。
CS和IP
CS和IP是8086CPU中最關(guān)鍵的寄存器,他們指示了CPU當(dāng)前要讀取的指令的地址。
CS為代碼段寄存器。用來存放指令的段地址。
IP為指令指針寄存器。用來存放指令的偏移地址。
轉(zhuǎn)移指令
修改CS、IP的內(nèi)容不能使用MOV指令,而是通過使用 JMP進(jìn)行的。
jmp 段地址:偏移地址
功能:用指令中給出的段地址修改CS,偏移地址修改IP
jmp 1000:3 表示CS= 1000,IP=3
代碼段
可以將長(zhǎng)度為N(N<=64KB)的一組代碼,存在一組地址連續(xù)、起始地址為16的倍數(shù)的內(nèi)存單元中,這段內(nèi)存是用來存放代碼的,從而定義了一個(gè)代碼段。
CPU只認(rèn)被CS:IP指向的內(nèi)存單元中的內(nèi)容為指令。
?————————————————?
版權(quán)聲明:本文為CSDN博主「云上行者Gorge」的原創(chuàng)文章,遵循CC 4.0 by-sa版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_39536716/article/details/89791602
總結(jié)
以上是生活随笔為你收集整理的寄存器(CPU的工作原理)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决:vue 用 axios 发送请求,
- 下一篇: 解决:RabbitMQ 连接报错:amq