組合語言期末複習——第一章
零、DOS基本功能的呼叫(int 21H)
功能號 | 入口引數 | 出口引數 | 說明 |
AH=01H | AL=ASCII字元 | 從鍵盤輸入一個字元 | |
AH=02H | DL=欲顯示的ASCII字元 | 顯示一個字元 | |
AH=09H |
DS:DX=欲顯示字串的邏輯地址 |
1.必須以'$'結尾 2.因為入口引數是地址所以總是以offset xxx的形式寫 |
|
AH=0AH | DS:DX=鍵盤輸入緩衝區邏輯地址 | 讀取一個字串 |
(總感覺入口出口的位置是不是有問題……但是教材上是這樣
一、關於8086處理器
- 組成:匯流排介面單元BIU(Bus Interface Unit)+執行單元EU(Execution Unit)
- 組成結構圖
- 一條指令的執行過程——取指和執行
- 指令在儲存器中的地址由程式碼段暫存器CS和指令指標暫存器IP共同提供,再由地址寄加法器得到20位儲存器地址。
- BIU完成取指(是處理器最頻繁的操作,8086中為預取,實現了最簡單的指令流水線)
- EU完成執行。
- 暫存器
- 從應用的角度可以分成透明暫存器和可程式設計暫存器。
- 可程式設計暫存器可以分成通用暫存器和專業暫存器
- 通用暫存器:一般是指處理器中最經常使用的整數通用暫存器,可用於儲存資料、地址等。如圖上所示8086共有八個通用暫存器。
- 資料暫存器又可以分成高位元組H和低位元組L兩個部分。高對高低對低。
- 用途包括存放資料、暫存運算結果、存放儲存器地址、作為變數的指標。
- 具體特定作用表格如下:
- 標誌暫存器FLAGS
- 狀態標誌(6)
- 進位標誌CF//Carry Flag
- 奇偶標識PF//Parity Flag
- 調整標誌AF//Adjust Flag
- 零標誌ZF//Zero Flag
- 符號標誌SF//Sign Flag
- 溢位標誌OF//Overflow Flag
- 控制標誌(3)
- 方向標誌DF//Direction Flag
- 中斷允許標誌IF//Iterrupt-enable Flag
- 陷阱標誌TF//Trap Flag
- 狀態標誌(6)
- 指令指標暫存器IP
- 專用暫存器 自動增量
- 段暫存器
- 程式碼段暫存器CS
- 資料段暫存器DS
- 堆疊段暫存器SS
- 附加段暫存器ES
- 儲存器
- 儲存單元和儲存單位
- 位元組編址:主儲存器的每個儲存單元具有一個地址,儲存一個位元組的資訊。
- 一個二進位制資料的右邊最低位稱為最低有效位LSB//D0位
- 左邊最高位稱為最高有效位MSB
- 實體地址和邏輯地址
- 8086處理器具有20位地址匯流排,故可以支援1M個儲存單元 每個儲存單元可以儲存一個位元組資料
- 暫存器為16位,故邏輯段空間不超過64KB
- 段記憶體儲單元使用16位地址表示,且每個段只能起始於低4位(二進位制)都為零的實體地址
- 邏輯地址包括基址地址和偏移地址 都可以用十六位表示。
- 段基地址(段地址)確定該段在主存中的起始位置。
- 以段基地址為起點,段內的位置可以用距離該起點的位移量表示,稱為偏移地址
- 邏輯地址為1460H:0100H則實體地址為14700H
- 同一個實體地址可以有多個邏輯地址
- 應用程式的基本段
-
段名稱 段基地址 偏移地址 程式碼段 CS IP 堆疊段 SS SP 資料段 DS EA 附加段 ES EA
-
- 儲存器的分段管理
- 各段之間可以分開可以重疊
- 儲存單元和儲存單位
二、組合語言的格式
- 指令程式碼格式
- 操作碼佔1或2位元組
- 語句格式
- 每條語句佔一行 續行符‘\’ 每行不超過132字元
- 執行性語句——表達處理器指令的語句:
- 標號: 處理器指令助記符 運算元,運算元;註釋
- 說明性語句——表達彙編程式命令的語句:
- 名字 偽指令助記符 引數,引數,……;註釋
- 標號與名字
- 冒號前的標號表示處理器指令在主存中的邏輯地址
- 識別符號一般最多由31個字母、數字、和特殊符號(_、$、?、@)組成
- 不能以數字開頭
- 每個源程式自定的識別符號必須唯一,且不能是保留字
- 不區分大小寫
- 程式框架
- 例子
- .model small
- .stack
- .data
- ……
- .code
- .startup
- ……
- .exit
- ……
- end
-
- small 是一種儲存模型;儲存模型後還可以定義語言型別 略了
三、課後習題!
1.1(1)傳統計算機的5大部件演變為現代計算機的哪3個硬體子系統?
源於馮諾依曼設計思想的計算機的5大部件:控制器、運算器、儲存器、輸入裝置、輸出裝置;
3個硬體子系統:處理器、儲存系統、輸入輸出系統。
(3)什麼是通用暫存器?
通用暫存器一般是指處理器中最經常使用的整數通用暫存器,可用於儲存資料、地址等。
(7)組合語言中的識別符號與高階語言的變數和變數名的組成原則有本質的區別嗎?
沒有。
(8)組合語言的識別符號大小寫不敏感意味著什麼?
表示大小寫不同但是是同一個符號。
(9)組合語言源程式檔案中,END語句後的語句會被彙編嗎?
不會。
1.2 判斷題
(1)AX被稱為累加器,在8086程式中使用很頻繁。
對。
(6)處理器的傳送指令MOV屬於組合語言的執行性語句。
對。
(8)MASM組合語言的註釋用分號開始,但不能用中文分號。
對。
(10)源程式檔案和列表檔案都是文字性質的檔案。
沒查到,我覺得對。
1.3 填空題
(1)8086處理器支援 1M 容量主存空間,因為它有20個地址匯流排訊號。
(2)一個位元位是一個二進位制位, 8位 被稱為一個位元組。
(3)8086處理器有8個16位通用暫存器,其中AX, BX , CX 和DX可以分成八位操作;另外四個是 SI , DI , SP , BP 。
(4)暫存器DX是 16 位的,但可以分成兩個8位的暫存器,其中D0~D7和D8~D15部分可以用名程 DH 和 DL 表示。
(5)8086處理器有 4 個段暫存器,他們都是 16 位的。
(6)8086分段管理主儲存器,但要求起始段始於 段基地址後四位均為零 的實體地址位置,並且每段最大不超過 64KB。
(7)邏輯地址由 段基地址 和 偏移地址 兩個部分組成。程式碼段中下一條要執行的指令由 CS 和 IP 暫存器指示。
(9)指令由表示指令功能的 操作碼 和表示操作物件的 運算元(地址碼)部分組成。
(10)MASM要求組合語言源程式檔案的副檔名是 .ASM ,彙編產生副檔名為.OBJ檔案被稱為 目標模組 檔案,可執行檔案通常使用 .EXE 副檔名。
1.6 將如下8086的邏輯地址用其實體地址表示(均為16進位制形式)
(1)FFFF:0 FFFF0H
(2)40:17 00417H
(3)2000:4500 24500H
(4)B821:4567 BC777H
1.7 應用程式中主要有哪三類基本段,各有什麼用途?
程式碼段:存放程式的指令程式碼
資料段:存放當前執行程式所用的資料
堆疊段:主存中堆疊所在的區域
1.11 組合語言語句有哪兩種,每種語句由那四個部組成?
兩種語句:執行性語句,說明性語句
四個部分:標號 指令助記符 運算元或引數 註釋
1.13 MASM組合語言中,下面哪些是程式設計師可以使用的自定義識別符號
FFH √
DS
Again √
next √
@data
h_ascii √
6364b
small