今天要做什么?
為了更好的理解書中內容,需要學習下進制分析和匯編。
匯編語言其實應該叫叫機器指令符號化語言,目前的匯編語言是學習操作系統的基礎。
一:觸發器
電路觸發器的鎖存命令默認是斷開的,是控制電路觸發器是否鎖存。
觸發器有輸入端和輸出端,輸入端就類似電路的開關,輸出端就類似用小燈泡來控制顯示。
二:
- 寄存器(鎖存器)
寄存器是一個多輸入,多輸出的器件
當按下鎖存的命令,所有的寄存器都在同一時刻命令。
問題:若某個寄存器是由八個觸發器組成,它最大可以保存的數是多少?
1111 1111 =255
三:
帶寄存器的加法機
5+7+25
這個預置開關是將左側的輸入鎖存到寄存器R,一個個進入
先撥動開關 ,預置進去5,在撥動開關,然后撥動相加,在加法電路中進行相加操作,,然后寄存器R中的數字是12,再按照相同 步驟進入25
四:四則運算電路
根據預置加減乘除操作,寄存器中存放的內容,根據左側電路生成的二進制數字和右側寄存器中的存放內容,做出相應的變化(加減乘除)
(12+3)/(12+3) 如果做稍微復雜點的運算,但是寄存器只能保存一個值,就需要另外的去記
五
指令的概念,引入指令
增加一個寄存器,目前有兩個寄存器,寄存器R和寄存器Z,左側的電路輸入,可以選擇進入哪個寄存器, 兩個寄存器中的值 也可以相互傳送,如果這些命令都由開關控制,那開關就太多了,需要換一種思路。
指令:
根據接受的指令去執行相應的操作,可以囊括上面所有的開關。
六:
指令太多,最好有個容器保存起來,方便用,可以用內存
內存簡單介紹
1:每個內存單元都有其編號,每個內存單元由八個二進制位組成
2:每個內存單元都有相應的編號,地址線輸入相應的編號即可讀取到相應的內存,地址線的數量決定了可以讀到的最多的內存單元。
如果有八個二進制地址線,從0000 0000 到1111 1111,最多256個內存單元,2的n次方個內存單元。
3:內存單元的編號,就是他的內存地址
4習慣上,字節是用來描述二進制序列的長度單位。8個比特組成一個字節。字節的英語單純是Byte,簡稱位B。1001 1101的長度是一個字節。
5:在主流的計算機上,內存單元的長度是8個比特,換句話說,每個內存單元的長度都是一個自己
6:內存的容量可以用內存單元的數量來統計。因為每個內存單元的長度是1個字節,所以經常用字節數來衡量。
根據內存的大小,內存的容量是以字節(B)、千字節(KB)、兆字節(MB)、吉字節(GB)和太字節(TB)來標稱
1kb = 1024b
1MB =1024KB
1GB = 1024MB
1TB = 1024GB
7:練習,某內存有16條地址線,則他的容量有多大?每個內存單元的長度是多少?一個字節(8個比特)
0000 - FFFF ?65536個字節 64KB
七:
內存數據線(入或者出)
內存要入或者出數據,需要通過數據線,是雙向的
內存的操作入和出需要一個控制器,也就是讀/寫控制
如何寫入:
1:先在地址線給一個地址
2:在數據線上給出一個要寫入的數據
3:讀寫控制線發出寫命令,就可以把數據寫入給定的地址
如何讀出:
1:現在先在地址線上給出一個地址,指出要讀哪個單元
2:由讀寫控制線發出讀命令,數據就會從指定的數據線上讀出,并發送到數據線上
八:自動計算學習
運算器是在剛才四則運算的基礎上增加了一i個指令指針寄存器
1:第一條指令是將207傳送到寄存器R
2:將寄存器R中的內容和9相加,結果在寄存器R
3:將56傳送到寄存器Z
4:將寄存器Z中的內容和48相減,結果在寄存器Z
5:將寄存器Z中的內容和48相減,結果在寄存器Z
6:將寄存器R和寄存器Z的內容相出,結果在寄存器R
7:將寄存器R的內容傳送到地址位12的內存單元
8:可以進行停機
九:
處理器組成
總線接口部件、控制部件、指令執行部件
8086 是跨時代的16位處理器,因特爾一直保持兼容
每種處理器。例如64位處理器對應64位的寄存器和64位的算數邏輯部件。
指令集:任何一款處理器,所有包含的指令的集合稱為指令集
算術運算指令和邏輯運算指令:邏輯運算
數據傳送指令:內部寄存器之間,處理器和內存之間,處理器和外圍設備之間
處理器狀態控制指令:處理器的工作模式和工作狀態
十:
Mov 指令 傳送 賦值
add 加法指令 將,r和9中的數據相加在保存到r中
sub 減法指令,把寄存器z中的內容和48相減,在賦值給z。
div 除法指令,將寄存器r中的內容和z相除得到的商,再傳給r
mov [12] ,r ,中括號中的地址是內存中的地址,把寄存器r中的內容,傳送到寄存器[12]里面去。
Hlt 停機指令
十一:認識intel 8086處理器(低端字節序)內部的通用寄存器
AX/BX/CX/DX/SI/DI/BP/SP ?16位寄存器 16個比特組成,從右往左寄存器編號是0-15
十進制 23235
16進制5AC3
換算方式
INTEL 8086通用寄存器劃分
AX、BX、CX、DX 可以拆分成兩個八進制的寄存器,分別是:
AX:AH AL
BX:BH BL
CX:CH CL
DX:DH DL
寄存器使用編號:
AX是16位的寄存器,一個字節八個比特,兩個單詞 一個字就是AX。
寄存器AH是寄存器AX的高字節部分,寄存器AL是寄存器AX的低字節部分
改變了寄存器AH的值,就改變了寄存器AX的值
DX(083C)(DH(08)、DL(3C))
十二:
8086的內存訪問和字節序
十六進制的寄存器寫入八位的內存,需要拆分成兩個字節,假設寫入0002編號的內存,那么0002編號的內存保存的就是16位寄存器的低字節部分,0003保存的是16位寄存器的高字節部分。(像這種寄存器低字節部分寫入內存編號低地址單元,寄存器高字節部分寫入內存編號高字節單元的稱為低端字節序)。
看的李忠老師網易云的匯編課程,筆記就先整理到這里,后續統一提交git倉庫