零、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