《《微型計算機(jī)原理與接口技術(shù)》第4章匯編語言程序設(shè)計2偽指令、功》由會員分享,可在線閱讀,更多相關(guān)《《微型計算機(jī)原理與接口技術(shù)》第4章匯編語言程序設(shè)計2偽指令、功(37頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、1 DOS系 統(tǒng) 功 能 調(diào) 用 都 是 用 軟 中 斷 指 令 INT 21H來 實(shí)現(xiàn) 的 。 它 具 有 90多 個 子 功 能 的 中 斷 服 務(wù) 程 序 , 它 們 通 過功 能 號 AH來 區(qū) 分 。 它 不 依 賴 于 具 體 的 硬 件 系 統(tǒng) 。 2 DOS系 統(tǒng) 功 能 調(diào) 用 都 是 用 軟 中 斷 指 令 INT 21H來 實(shí)現(xiàn) 的 。 它 具 有 90多 個 子 功 能 的 中 斷 服 務(wù) 程 序 , 它 們 通 過 功能 號 AH來 區(qū) 分 。 它 不 依 賴 于 具 體 的 硬 件 系 統(tǒng) 。 DOS是 IBM PC的 操 作 系 統(tǒng) , 負(fù) 責(zé) 管 理 系 統(tǒng) 的
2、 所 有 資 源 ,協(xié) 調(diào) 微 機(jī) 的 操 作 。 其 中 包 括 大 量 的 可 供 用 戶 調(diào) 用 的 服 務(wù)程 序 。 DOS的 功 能 調(diào) 用 不 依 賴 具 體 的 硬 件 系 統(tǒng) 。 3 定 義 : 基 本 輸 入 輸 出 系 統(tǒng) , 是 固 化 在 EPROM中 的 一 組 實(shí)現(xiàn) 基 本 輸 入 輸 出 功 能 的 子 程 序 。功 能 : 系 統(tǒng) 測 試 程 序 、 初 始 化 引 導(dǎo) 程 序 、 一 部 分 中 斷 矢 量裝 入 程 序 及 外 部 設(shè) 備 的 服 務(wù) 程 序 等 。 BIOS與 系 統(tǒng) 硬 件 有直 接 的 依 賴 關(guān) 系 。調(diào) 用 方 法 : BIOS調(diào)
3、用 通 過 多 個 軟 中 斷 提 供 , 具 體 的 調(diào) 用方 法 為 : 4 BIOS中 的 幾 個 主 要 中 斷 類 型 如 下 :INT 10H屏 幕 顯 示INT 13H磁 盤 操 作INT 14H串 行 口 操 作INT 16H鍵 盤 操 作INT 17H打 印 機(jī) 操 作 每 類 中 斷 由 包 含 許 多 子 功 能 , 調(diào) 用 時 通 過 功能 號 指 定 。 BIOS功 能 調(diào) 用 說 明 見 附 錄 E。 5 1.鍵 盤 輸 入鍵 盤 是 最 基 本 的 輸 入 設(shè) 備 , 它 包 括 三 種 類 型 : 字 符 鍵 、擴(kuò) 展 功 能 鍵 、 及 其 它 組 合 使 用
4、 的 控 制 鍵 。 每 一 個 字 符 鍵對 應(yīng) 一 個 ASCII碼 , 擴(kuò) 展 功 能 鍵 產(chǎn) 生 一 個 動 作 , 而 控 制功 能 鍵 改 變 其 它 鍵 產(chǎn) 生 的 字 符 碼 。鍵 盤 上 的 每 個 鍵 對 應(yīng) 一 個 掃 描 碼 , 掃 描 碼 用 一 個 字 節(jié) 來表 示 , 低 7位 是 數(shù) 字 編 碼 , 最 高 位 表 示 鍵 的 狀 態(tài) 。 當(dāng) 有 鍵按 下 時 , 最 高 位 等 于 0。 根 據(jù) 掃 描 碼 就 能 唯 一 地 確 定 哪 個鍵 改 變 了 狀 態(tài) 。BIOS鍵 盤 處 理 程 序 將 獲 取 的 掃 描 碼 轉(zhuǎn) 換 成 相 應(yīng) 的 字 符 碼
5、 。BIOS的 鍵 盤 中 斷 類 型 碼 為 16H, 送 入 AH的 功 能 號 可 以 是0、 1或 2。 6 ( 1) 只 取 出 按 鍵 的 字 符 碼 的 掃 描 碼 INT 16H執(zhí) 行 結(jié) 果 : AL=字 符 碼 , AH=掃 描 碼( 2) 只 判 斷 有 無 鍵 按 下 MOV AH, 1 INT 16H執(zhí) 行 結(jié) 果 : 若 ZF=0, 則 AL=字 符 碼 , AH=掃 描 碼若 ZF=1, 則 鍵 盤 緩 沖 區(qū) 空 。2號 功 能 用 來 判 斷 Shift Alt Num等 功 能 鍵 是 否 被 按 下 。 7 2.顯 示 器 輸 出 顯 示 器 通 過 顯
6、示 適 配 器 ( 顯 卡 ) 與 PC連 接 是 計 算 機(jī) 與 顯示 器 的 接 口 。 顯 示 器 的 屏 幕 是 由 行 和 列 緩 存 的 二 維 系 統(tǒng) 。每 一 個 字 符 都 對 應(yīng) 一 個 特 定 的 行 和 列 , 0行 0列 表 示 屏 幕 的左 上 角 。BIOS顯 示 器 輸 出 的 類 型 碼 為 10H, 功 能 包 括 設(shè) 置 顯 示 方 式 、設(shè) 置 光 標(biāo) 大 小 和 位 置 、 設(shè) 置 調(diào) 色 板 號 、 顯 示 字 符 等 。每 個 字 符 在 主 存 中 占 兩 個 字 節(jié) , 一 個 是 字 符 的 ASCII碼 ,另 一 個 是 字 符 屬 性 。
7、 若 要 顯 示 一 個 字 符 , 在 先 設(shè) 置 光 標(biāo) 位置 , 然 后 提 供 被 顯 示 字 符 的 ASCII碼 ( 功 能 號 9) 及 其 屬 性( 功 能 號 10) 。 8 4.3.2 DOS功 能 調(diào) 用 所 有 的 DOS系 統(tǒng) 功 能 調(diào) 用 都 是 利 用 軟 中 斷 指 令I(lǐng)NT 21H來 實(shí) 現(xiàn) 的 。 就 是 在 程 序 中 要 調(diào) 用 DOS功能 的 時 候 , 只 要 一 條 INT 21H指 令 即 可 。內(nèi) 存 管 理 、 存 取 時 間 、 存 取 終 端 矢 量 、 終 止程 序 等 。 9 10 11 12(預(yù) 留 的 N1個 字 節(jié) 的 存 儲
8、 單 元 ) N2N1 N1: 緩 沖 區(qū) 長 度 (最 大 鍵 入 字 符 數(shù) ) N2: 實(shí) 際 鍵 入 的 字 符 數(shù) (不 包 括 回 車 符 ) 用 戶 定 義 的 輸 入 字 符 串 的 緩 沖 區(qū) 格 式 13 14 15 16 17 3.返 回 到 DOS 一 個 實(shí) 際 可 運(yùn) 行 的 用 戶 程 序 在 執(zhí) 行 完 后 , 應(yīng) 返 回 到DOS提 示 符 狀 態(tài) 下 , 用 HLT指 令 使 CPU停 止 運(yùn) 行 將 無 法把 控 制 權(quán) 還 給 DOS操 作 系 統(tǒng) 。 為 使 程 序 正 常 退 出 并 返 回DOS, 可 以 用 DOS系 統(tǒng) 功 能 調(diào) 用 的 4C
9、H號 功 能 。MOV AH, 4CHINT 21H 18 BIOS中 斷 程 序 處 于 DOS功 能 調(diào) 用 和 硬 件 環(huán) 境 之 間 ,和 DOS功 能 調(diào) 用 相 比 其 優(yōu) 點(diǎn) 是 效 率 高 , 缺 點(diǎn) 是 編 程 相 對 復(fù)雜 ; 和 直 接 對 硬 件 編 程 相 比 , 優(yōu) 點(diǎn) 是 實(shí) 現(xiàn) 相 對 容 易 , 缺 點(diǎn)是 效 率 相 對 較 低 。 在 一 些 情 況 下 既 能 選 擇 DOS中 斷 也 能 選 擇 BIOS中 斷來 執(zhí) 行 同 樣 的 功 能 。 例 如 , 打 印 機(jī) 輸 出 一 個 字 符 的 功 能 ,可 用 DOS中 斷 21H的 功 能 5, 也
10、 可 用 BIOS中 斷 17H的 功 能0。 因 為 BIOS比 DOS更 靠 近 硬 件 。 一 般 情 況 下 , 盡 可 能 地使 用 DOS功 能 , 但 在 少 數(shù) 情 況 下 必 須 使 用 BIOS功 能 。 例如 , BIOS中 斷 17H的 功 能 2為 讀 打 印 機(jī) 狀 態(tài) , DOS就 沒 有等 效 的 功 能 。 因 此 , 對 BIOS和 DOS調(diào) 用 的 選 擇 原 則 是 , 無 法 使 用DOS功 能 調(diào) 用 或 DOS沒 有 提 供 而 BIOS提 供 了 功 能 的 情 況下 可 以 考 慮 使 用 BIOS中 斷 。BIOS中 斷 調(diào) 用 與 DOS功
11、 能 調(diào) 用 的 比 較 19 20 如 何 繪 制 程 序 框 圖 (流 程 圖 )? NY? 21 框 中 標(biāo) 明 子 程 序 名 字 (入 口 參 數(shù) 等 ) 。 流 程 圖 的 例 子 FlowChart.doc 22 YY Y NNN有 錯 ?有 錯 ?有 錯 ? 結(jié) 束匯 編輸 入 (修 改 )源 程 序連 接運(yùn) 行查 錯開 始 用 EDIT, NOTEPAD等 任 何 文 本 編 輯器 。 源 程 序 存 為 .ASM文 件 用 MASM宏 匯 編 程 序 進(jìn) 行 匯 編 。匯 編 后 生 成 .OBJ目 標(biāo) 文 件 。命 令 格 式 : MASM ; 用 LINK連 接 程 序
12、 進(jìn) 行 連 接 。連 接 后 生 成 .EXE可 執(zhí) 行 文 件 。命 令 格 式 : LINK ; 用 TD、 DEBUG等 調(diào) 試 程 序 進(jìn) 行 調(diào) 試 。命 令 格 式 : TD 23標(biāo) 號 : 條 件 滿 足?處 理 NYIFTHEN結(jié) 構(gòu) 程 序 結(jié) 構(gòu) : 測 試 /比 較 指 令 (TEST/CMP) 條 件 轉(zhuǎn) 移 指 令 (Jx 標(biāo) 號 ) 處 理 體 標(biāo) 號 : 其 他 指 令 24 程 序 結(jié) 構(gòu) : TEST/CMP指 令 Jx 標(biāo) 號 1 處 理 體 P1 JMP 標(biāo) 號 2標(biāo) 號 1: 處 理 體 P2標(biāo) 號 2: 其 他 指 令 條 件 滿 足?處 理 P1
13、處 理 P2標(biāo) 號 1:標(biāo) 號 2:條 件 1 條 件 2IFTHENELSE結(jié) 構(gòu) 25 標(biāo) 號 1:條 件 1成 立? P1N YCASE結(jié) 構(gòu) 程 序 結(jié) 構(gòu) : TEST/CMP指 令 ( 測 試 條 件 1) Jx 標(biāo) 號 1 ;不 滿 足 轉(zhuǎn) 標(biāo) 號 1 處 理 體 P1 JMP 標(biāo) 號 n+1標(biāo) 號 1: TEST/CMP指 令 ( 測 試 條 件 2) Jx 標(biāo) 號 2 ;不 滿 足 轉(zhuǎn) 標(biāo) 號 2 處 理 體 P2 JMP 標(biāo) 號 n+1標(biāo) 號 2: TEST/CMP指 令 ( 測 試 條 件 3) Jx 標(biāo) 號 3 ;不 滿 足 轉(zhuǎn) 標(biāo) 號 3 處 理 體 P3 JMP 標(biāo)
14、 號 n+1標(biāo) 號 3: TEST/CMP指 令 ( 測 試 條 件 4) 標(biāo) 號 n+1: ( 公 共 出 口 )條 件 2成 立?條 件 n成 立?Pn+1標(biāo) 號 2:標(biāo) 號 n:標(biāo) 號 n+1: P2PnNN YY例 : P175, 例 4-17, 統(tǒng) 計 成 績 。 流 程 圖 中 虛 線 框 內(nèi) 26 初 始 化循 環(huán) 體循 環(huán) 控 制繼 續(xù) 循 環(huán) ? YN 27 初 始 化 循 環(huán) 體循 環(huán) 控 制繼 續(xù) 循 環(huán) ? YN 28BSORT.ASM 29 掌 握 以 下 幾 點(diǎn) :調(diào) 用 子 程 序 用 CALL指 令 , 返 回 調(diào) 用 程 序 用 RET指 令 。子 程 序 允
15、 許 嵌 套 調(diào) 用 。進(jìn) 入 子 程 序 后 首 先 要 保 護(hù) 主 程 序 的 運(yùn) 行 狀 態(tài) (標(biāo) 志 位 )和 使 用 的 寄 存 器 內(nèi) 容 (稱 為 保 護(hù) 現(xiàn) 場 ), 退 出 子 程 序前 要 恢 復(fù) 現(xiàn) 場 。調(diào) 用 前 要 預(yù) 先 確 定 子 程 序 中 要 使 用 哪 些 寄 存 器 , 并定 義 入 口 參 數(shù) 和 出 口 參 數(shù) 。 參 數(shù) 傳 遞 可 利 用 寄 存 器 、存 儲 單 元 或 堆 棧 ( 要 用 BP尋 址 ) 。 30 例 1: 二 進(jìn) 制 數(shù) (0-F)轉(zhuǎn) 換 成 ASCII(0-F)的 子 程 序 。BIN2ASC PROC ;要 轉(zhuǎn) 換 的
16、數(shù) 在 AL的 低 四 位 ;轉(zhuǎn) 換 結(jié) 果 仍 在 AL中 CMP AL, 9 JA A2F ADD AL, 30H; 9, +37H DONE: RETBIN2ASC ENDP調(diào) 用 方 法 : ( 在 主 程 序 中 ) MOV AL, 0CH CALL BIN2ASC (AL中 有 0CH的 ASCII碼 43H, C) 31 32 開 始求 串 長串 長 256?顯 示 串 長 高 位顯 示 串 長 低 位結(jié) 束 Y 警 告 : 太 長 求 串 長當(dāng) 前 字 符 是 ?搜 索 CR字 符同 時 指 針 增 量返 回 N串 長 加 1存 串 長N 找 到 ? NYY初 始 化 指 針 /計 數(shù) 器 33 34 35 36 37