寄存器概述:
1,一個典型的CPU由運算器,控制器,寄存器等器件組成,這些器件靠內部總線相連。
內部總線實現CPU內部各個器件之間的聯繫。外部總線實現CPU和主板上其它器件的聯繫。
通用寄存器:
8086CPU,寄存器都是16位的,能夠存放兩個字節。AX,BX,CX,DX我們稱之爲通用寄存器。
一個16位寄存器能存放的數據最大值是多少?答案:2^16-1
AX可以分爲:AH AL
字在寄存器中的存儲:
一個字可以存放在一個16位寄存器中,那麼字的高位以及低位就自然存儲在寄存器中相應的高位以及低位中。
一個字等於兩個字節!
彙編指令簡單講解:
彙編指令不區分大小寫!
AX AH AL 三者並無聯繫。注意區分!
做監測點2.1https://blog.csdn.net/weixin_42859280/article/details/106780472
物理地址:
一般將唯一的地址稱爲物理地址。
16位結構的CPU:
運算器一次最多可以處理16位的數據;寄存器的最大寬度爲16位;寄存器和運算器之間的通路是16位的。
8086有20位地址總線,可以傳送20位地址,尋址能力爲1M;但是8086只能16位,那麼只能通過地址合成來形成20位地址。
圖:
地址加法器合成物理地址的方法:
物理地址=段地址*16+偏移地址【16進制數據,乘以16就會向左移動一位!】
如果,你希望告訴一個人,2860。如果你有一個可以寫下4位數的紙條自然,很好。
但是,如果你只有兩個能夠寫下三位數字的紙條。那麼,你就需要告訴別人。記得進行這樣的計算:
200乘以10,再加上另外一個紙條的860。就可以得到你想要的東西啦!
段的概念:
錯誤的認識:內存被劃分爲一個一個的段,每一個段都有一個段地址。
其實內存並沒有分段,段的劃分來自於CPU,由於“物理地址=段地址*16+偏移地址”。我們可以通過使用分段的方式來管理內存!
注意兩點:
- 段地址乘以16必然是16的倍數,所以一個段的起始地址也是16的倍數;
- 偏移地址爲16位,16位地址的尋址能力爲64K,所以一個段的最大長度爲64K;
CPU可以用不同的段地址和偏移地址形成一個物理地址!
小例子:
給定段地址1000H,用偏移地址進行尋址,CPU的尋址範圍爲:10000H-1FFFFH。
就是乘以16,然後加上:0~FFFFH。
做監測點2.2:https://blog.csdn.net/weixin_42859280/article/details/106780472
段寄存器:
CS [代碼地址],DS [數據地址],SS [堆棧地址],ES [存放當前執行程序中一個輔助數據段的段地址]
CS:代碼段寄存器;IP:指令指針寄存器。
8086PC工作過程:
8086CPU,加電啓動或者復位後,CS,IP分別被設置爲:FFFFH,0000H
根據計算過程,CPU就會先從內存FFFF0H單元中讀取指令執行。故而,FFFF0H單元中的指令
就是8086PC機開機執行的第一條指令。
JMP同時修改CS和IP。
CPU只認被CS:IP指向的內存單元中的內容爲指令。
實驗一:
https://www.bilibili.com/video/BV1Rs411c7HG?p=11
https://www.bilibili.com/video/BV1Rs411c7HG?p=12
win10對應的解決辦法:win10環境下 運行debug程序