我買了一本王爽著的匯編語言課本,通過這個課本我認識到了匯編的基礎,請各位指教不知道理解是不是沒有偏離方向!
總結如下:
1、計算機只認識二進制,也就是0/1,CPU每根地址線/資料線/控制線會發出這樣的信號給與記憶體,首先CPU要按自己的地址芯線多少來分配地址給記憶體,一般為8位/16位/32位/64位,對應的最大的地址分配就是256位/64Kb/4G/16G的總數,CPU通過地址找到某個記憶體,找到記憶體后,就傳送資料,資料總線可以是8位,也可以是16位,相當于傳送一個位元組或兩個位元組,無論地址總線還是資料總線,均用8421碼看待,因為這樣可以大幅度提高人的識別能力,控制總線意味CPU對外部設備的控制能力,即有多少種指令集合。
CPU通過總線和各類存盤器連接,對存盤器進行讀寫操作,為了讓外部設備能夠都高速讀取存盤器,CPU給各存盤器分配了了相應固定的地址,例如分配給顯存,而顯示幕會在顯存中不斷讀取,時刻保持顯示幕的資料更新。
計算機要執行程式,必須通過CPU一條一條指令執行,運算器負責邏輯運算和算數運算,控制器則負責控制各種設備進行作業,暫存器則負責把其他記憶體的資料拿到手后交給運算器執行程式,×86架構有14個暫存器,每個暫存器的作業均有分工,如下:
1、通用暫存器AX BOX CX DX 用于獲取或寫入記憶體內資料
2、代碼段暫存器 code segment CS和配套使用的指標暫存器 IP,搭配段地址+偏移地址,如物理地址21F60H相當于2000:1F60單元,修改CS和IP即意味改變CPU執行不同的指令,需要留意能改變CS和IP的指令,不是每個指令都可以改變CS和IP暫存器的內容。CPU只會按照CS:IP所指向的第一條指令的首地址開始運行執行。
3、DS暫存器,是用來存放要訪問資料的記憶體段地址,段地址輸入到DS里后,通用暫存器才能直接獲取段地址下的偏移地址的資料,如move alarm [0],即DS段地址:0
記憶體和暫存器之間傳遞資料必須確定資料型別是什么,以便確認是單位元組還是雙位元組,字型是雙位元組資料!
4、SS暫存器和SP暫存器是用于堆疊頂概念的地址的,如果涉及push/pop控制指令,CPU即使有CS:IP的指引也不能知道堆疊頂位置,必須在使用push/POP時先給SS/SP指定地址,按照先進后出的機制運行程式,這是CPU特殊的堆疊操作機制!
第一個程式的實際理解主要是編輯源程式/編譯鏈接/執行可執行exe檔案!
需要留意加載記憶體中的程式是通過command執行的,command是DOS里默認加載exe檔案到CPU的默認指令,程式運行完后就回傳command狀態。
剩下來的就是各種指令的理解了,這些指令太多,需要慢慢消化!
請各位老師指點,這樣理解是否準確,我打算在稍微看看后,理解了,就進入其他需要學習,不知道是C語言/C++/JAVA哪種以匯編為基礎的,我以前學過C++和JAVA,但是都忘了,再拿起來不知道能不能理解
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/258553.html
標籤:匯編語言
