組合語言大後天考試,原諒我忍不住寫部落格
好多問題必須深入地說一下,當然以下是我默寫的:
1.在馮·諾曼依體系中,我們知道計算機組成最重要的五個部分是運算器、控制器、儲存器、輸入輸出介面和輸入輸出裝置。其中運算器和控制器合稱中央處理器,即CPU。計算機的硬體之間通過匯流排進行連線,其中地址匯流排是單向的,由CPU指向儲存器、輸入輸出介面,資料匯流排和控制匯流排是雙向的。
2.計算機中的資料分為有符號數和無符號數。有符號數會在儲存單元中額外拿出最高位作為符號位,因此機器數長為n的有符號數,其機器數的真值範圍僅是無符號數的一半。機器數的原碼、補碼和反碼符號是不變的,因此在後面的有符號數的右移中,最高位需要一直保持下去。而在機器數的原碼、補碼和反碼的討論中,大多應是討論負數的。只需要保持最高位的符號,取反就是把後面的位0/1互換,取補就是取反完畢之後進行+1操作。正數和零原碼、反碼和補碼相同即可。在補碼的運算中,有符號數要看O標誌判斷是否結果有效,無符號數看C標誌。原因無非是數值超出-127~127之後,無法正確表示的原因。在程式碼中,NEG即為求補指令。
3.在微機中使用ASCLL碼,30~39H表示0~9,41~46H表示A~F,0AH表示換行(LF),0DH表示回車(CR)。
4.在80x86微處理器中,有8位、16位和32位的基本體系結構暫存器。從定址角度來說,因實體地址的表示上需要使用邏輯地址,即段基址:偏移地址,所謂段基址就是邏輯段的基址,偏移地址表示形式多樣。當然了,順便先提一下,如果定址的時候,直接給了數值、字元或者表示式,則為立即定址。如果定址的時候直接是單個的暫存器,則為暫存器定址。而如果採用段基址:偏移地址,即定址時使用實體地址,則為儲存器定址。其中,邏輯段有CS、DS、ES、SS,段後直接為[偏移地址數值]或變數名,則為直接定址。段:[通用暫存器中的指標BP和三變址暫存器DI、SI、BX]時,為間接定址/暫存器間接定址/間址。如果為段基址:[BP/BX+位移量]則為基址定址,換成DI/SI+位移量則為變址定址,換位基址之一+變址之一+位移量則為基址加變址定址。在暫存器中的指標有三個,除了表示段基址的BP和棧頂指標SP,還有與CS結合使用的IP。還有很多有用的通用暫存器,如CX用於迴圈次數的設定,AX常用語DATA資料轉移到DS的容器。尤其是標誌暫存器FLAG中的6個狀態標誌和3個控制標誌,更是重中之重,如標誌暫存器中狀態標誌的值常常是程式碼執行中執行中斷的契機,A標誌和C標誌是執行加減時是否使用ADC和SBB修正的決定者。使用POPF/PUSHF可用於標誌暫存器進/出棧,POPA/PUSHA可用於十六位通用暫存器進/出棧。
5.個人感受,程式碼執行中轉移指令的意義在於跳過一些步驟,呼叫指令則用於多執行一些步驟。子程式會讓程式碼簡潔,巨集定義卻只是表面簡潔。
ADD,12.7
1.80486有32根地址線,可定址4GB的儲存單元;有32根資料線,這意味著CPU和儲存器、I/O埠每一次可傳輸4B的資料。 微型計算機的儲存器以位元組為單元。
2.負數如-66的原碼機器數為10110011,保留符號位其他位按位取反加1即求補後為11001101。也可先找到其絕對值的補碼為00110011,對其進行按位所有位取反加,為11001101。
3.32位處理器有3種工作模式:實地址模式、保護虛擬地址模式和虛擬8086模式。
4.32位微處理器的地址空間裡,儲存地址空間分為物理空間、虛擬空間和線性空間。物理空間80486為4GB,虛擬空間可達2^46B(64TB);輸入輸出地址空間00000000H~0000FFFFH,為64KB。
5.指令是CPU操作的基本單位,是單個CPU操作,每條指令執行一個特定的操作。指令編碼為二進位制的序列成為機器指令。
6.標號表示該條指令的符號地址,在分支或迴圈等指令的轉移目標或程式開始執行的首條語句需要設定標號。具有三個屬性:段屬性、偏移屬性和型別屬性。
7.開發應用程式的步驟:編輯為.asm,編譯為.obj,連結為可執行檔案.exe/.com
8.指令性語句即為符號指令,指示性語句分為偽指令和巨集指令。
9.變數定義在DS、SS和ES中,表示邏輯段中的儲存單元。
6.MOV BX,OFFSET BUF 和LEA BX,BUF作用相同。
7.在DOS功能呼叫中,0A功能是用於從鍵盤處讀取字元,存入DX中所存的偏移地址所指向的變數,INT 21H執行後,輸入回車符後,功能呼叫結束,0DH存在緩衝區中。