南京理工大學(xué)《微機原理與接口技術(shù)》微機原理(第三章 程序設(shè)計2)
《南京理工大學(xué)《微機原理與接口技術(shù)》微機原理(第三章 程序設(shè)計2)》由會員分享,可在線閱讀,更多相關(guān)《南京理工大學(xué)《微機原理與接口技術(shù)》微機原理(第三章 程序設(shè)計2)(96頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、12021-8-13 南 京 理 工 大 學(xué) 動 力 學(xué) 院2009年11月 22021-8-13 匯 編 語 言 : 匯 編 語 言 是 一 種 面 向 計 算 機 的 符 號 語 言 。 用 指 令 的 助 記 符 、 符 號 地 址 、 標(biāo) 號 、 偽 指 令 等 書 寫 程 序 的 語 言 。匯 編 語 言 源 程 序 : 用 匯 編 語 言 書 寫 的 源 程 序 。匯 編 : 將 匯 編 語 言 源 程 序 翻 譯 成 機 器 語 言 程 序 的 過 程 。匯 編 程 序 : 完 成 匯 編 過 程 的 系 統(tǒng) 程 序 。 32021-8-13 在 8086/8088匯 編 語 言
2、 中 , 有 兩 類 匯 編 語 言 指 令 。 一 類 是 指 令 性 語 句 , 稱 為 真 指 令 匯 編 程 序 匯 編 后 可 產(chǎn) 生 機 器 指 令 代 碼 ; 另 一 類 是 指 示 性 語 句 , 稱 為 偽 指 令 其 作 用 僅 僅 是 告 訴 匯 編 程 序 對 源 程 序 中 的執(zhí) 行 性 指 令 應(yīng) 該 如 何 產(chǎn) 生 代 碼 , 或 分 配 存 儲 區(qū) 。3.1 匯 編 語 言 的 基 本 元 素 42021-8-13 一 、 匯 編 語 言 的 指 令 語 句 格 式 由 匯 編 語 言 編 寫 的 源 程 序 是 由 許 多 語 句(也 可 稱 為 匯 編 指
3、令 )組 成 的 。 每 個 語 句 由1-4個 部 分 組 成 。 其 格 式 是 : 標(biāo) 識 符 指 令 助 記 符 操 作 數(shù) ; 注 釋 其 中 , 帶 方 括 號 的 項 是 任 選 項 。 52021-8-13 1 標(biāo) 號 (標(biāo) 識 符 Identifiers )標(biāo) 識 符 是 由 程 序 員 定 義 的 具 有 特 定 意 義 的 字符 序 列 , 是 給 指 令 或 某 一 存 儲 單 元 地 址 所 起的 名 字 。 標(biāo) 識 符 可 由 下 列 字 符 組 成 : 字 母 : A - z ; 數(shù) 字 : 0 - 9 ; 特 殊 字 符 : ?、 、 、 _、 $ 。 6202
4、1-8-13 標(biāo) 識 符 最 多 為 31個 字 符 。 數(shù) 字 不 能 作 標(biāo) 識 符的 第 一 個 字 符 。當(dāng) 標(biāo) 識 符 后 跟 冒 號 時 , 表 示 是 標(biāo) 號 。 它 代 表該 行 指 令 的 起 始 地 址 。當(dāng) 標(biāo) 識 符 后 不 帶 冒 號 時 , 表 示 變 量 。偽 指 令 前 的 標(biāo) 識 符 不 加 冒 號 。 標(biāo) 識 符 指 令 助 記 符 操 作 數(shù) ; 注 釋 72021-8-13 2 指 令 助 記 符 (保 留 字 Reserved words) 是 一 類 特 殊 的 標(biāo) 識 符 , 可 以 是 8086/8088的 指令 助 記 符 , 也 可 以 是
5、偽 指 令 。 如 果 指 令 帶 有 前 綴 (如LOCK、 REP、 REPE REPZ、 REPNE REPNZ), 則 指 令前 綴 和 指 令 助 記 符 要 用 空 格 分 開 。 標(biāo) 識 符 指 令 助 記 符 操 作 數(shù) ; 注 釋 82021-8-13 3 操 作 數(shù) 指 令 執(zhí) 行 的 對 象例 如 : RET ; 無 操 作 數(shù) INC BX ; 一 個 操 作 數(shù) MOV CX, DI ; 兩 個 操 作 數(shù) 如 果 是 偽 指 令 , 則 可 能 有 多 個 操 作 數(shù) , 例 如 : COST DB 3, 4, 5, 6, 7 ; 5個 操 作 數(shù) 當(dāng) 操 作 數(shù)
6、超 過 1個 時 , 操 作 數(shù) 之 間 應(yīng) 用 逗 號 分開 。 操 作 數(shù) 可 以 是 常 數(shù) 、 寄 存 器 名 、 標(biāo) 號 、 變 量 ,也 可 以 是 表 達(dá) 式 , 例 如 : MOV AX, BP+4 ; 標(biāo) 號 指 令 助 記 符 操 作 數(shù) ; 注 釋 92021-8-13 4 注 釋 該 項 是 為 源 程 序 所 加 的 注 解 , 用 于 提 高 程 序的 可 讀 性 。 在 注 釋 前 面 要 加 分 號 “ ; ” , 它 位 于操 作 數(shù) 之 后 。 匯 編 時 , 對 注 解 不 作 處 理 , 僅 在 列源 程 序 清 單 時 列 出 , 供 編 程 人 員
7、閱 讀 。例 如 : IN AL, PORTB ; 讀 B口 到 AL中標(biāo) 號 指 令 助 記 符 操 作 數(shù) ; 注 釋 102021-8-13 注 釋 語 句 中 由 分 號 “ ; ” 開 始 的 部 分 為 注 釋 內(nèi) 容 ,用 以 增 加 源 程 序 的 可 讀 性 必 要 時 , 一 個 語 句 行 也 可 以 由 分 號 開 始 作 為階 段 性 注 釋 匯 編 程 序 在 翻 譯 源 程 序 時 將 跳 過 該 部 分 , 不對 它 們 做 任 何 處 理 112021-8-13 二 、 匯 編 語 言 的 運 算 符 匯 編 語 言 運 算 符 所 指 定 的 操 作 由 匯
8、 編 程 序 在匯 編 過 程 中 完 成 , 結(jié) 果 作 為 指 令 的 目 標(biāo) 代 碼 被 保存 , 與 程 序 執(zhí) 行 時 CPU完 成 的 可 執(zhí) 行 指 令 是 兩 回 事 ,故 匯 編 語 言 運 算 符 也 稱 為 偽 操 作 符 。匯 編 語 言 的 運 算 符 有 : 算 術(shù) 運 算 符 : + 、 、 、 、 MOD; 邏 輯 運 算 符 : AND、 OR、 NOT 、 XOR ; 關(guān) 系 運 算 符 : EQ、 NE、 LT、 GT、 LE、 GE; 取 值 運 算 符 : SEG OFFSET TYPE 屬 性 運 算 符 : PTR 122021-8-13 1 算
9、術(shù) 運 算 符 和 邏 輯 運 算 符 ( 1) 算 術(shù) 運 算 符 : + 、 、 、 、 MOD算 術(shù) 運 算 符 只 能 用 于 數(shù) 字 量 操 作 數(shù) , 結(jié) 果 也 是 數(shù) 字 量 。用 于 存 儲 器 操 作 數(shù) 時 , 只 有 、 運 算 符 有 意 義 。MOD取 模 是 求 數(shù) 字 量 除 法 所 得 的 余 數(shù) 。( 2) 邏 輯 運 算 符 : AND、 OR、 NOT 、 XOR邏 輯 運 算 符 的 操 作 只 能 是 數(shù) 字 的 , 且 結(jié) 果 也 是 數(shù) 字 的 。注 : 1.存 儲 器 操 作 數(shù) 不 能 進(jìn) 行 邏 輯 運 算 。 2.邏 輯 運 算 作 為
10、運 算 符 時 , 是 在 程 序 匯 編 時 計 算 作 為 指 令 助 記 符 時 , 則 是 在 程 序 執(zhí) 行 時 計 算 。 132021-8-13 2 關(guān) 系 運 算 符 關(guān) 系 運 算 符 : EQ、 NE、 LT、 GT、 LE、 GE;相 等 EQ (Equal)、 不 等 NE (Not Equal)、小 于 LT(Less Than)、 大 于 GT (Greater Than)、小 于 等 于 LE (Less Than or Equal)、大 于 等 于 GE (Greater Than or Equal)關(guān) 系 運 算 符 連 接 的 兩 個 操 作 數(shù) , 必 須
11、 都 是 數(shù) 字 的或 是 在 同 一 段 內(nèi) 的 存 儲 器 的 地 址 。若 關(guān) 系 為 假 (關(guān) 系 不 成 立 ) , 則 結(jié) 果 為 0;若 關(guān) 系 為 真 (關(guān) 系 成 立 ) , 則 結(jié) 果 為 全 1。 142021-8-13 MOV BX, ( ( PORT LT 5) AND 20) OR ( ( PORT GE 5) AND 30)當(dāng) PORT的 值 小 于 5時 , 上 述 指 令 匯 編 為 : MOV BX, 20否 則 上 述 指 令 匯 編 為 : MOV BX, 30關(guān) 系 為 假 , 結(jié) 果 為 0關(guān) 系 為 真 , 結(jié) 果 為 全 1 152021-8-1
12、3 3 取 值 運 算 符 (分 析 運 算 符 )把 存 儲 器 地 址 操 作 數(shù) 分 解 成 它 的 組 成 部 分 。取 值 運 算 符 有 :SEG、 OFFSET、 TYPE、 SIZE和 LENGTH SEG 給 出 一 個 變 量 或 標(biāo) 號 的 段 地 址 ; OFFSET 給 出 一 個 變 量 或 標(biāo) 號 的 16位 偏 移 量 ; TYPE 返 回 表 示 存 儲 器 操 作 數(shù) 內(nèi) 存 變 量 和 標(biāo) 號 類 型 的 數(shù) 值 。類 型 byte word dword qword tbyte NEAR FAR類 型 值 1 2 4 8 10 -1 (FFH) -2 (F
13、EH) 162021-8-13 格 式 : SEG 符 號 名 OFFSET 符 號 名 TYPE 符 號 名 例 如 : MOV AX, SEG SLOT ; 將 SLOT的 段 地 址 送 入 AX寄 存 器 MOV AX, OFFSET SLOT ; 將 SLOT的 偏 移 地 址 送 入 AX寄 存 器 172021-8-13 SIZE 取 得 并 返 回 由 DUP定 義 的 內(nèi) 存 變 量 的 字 節(jié) 數(shù) 。 LENGTH 取 得 并 返 回 由 DUP定 義 的 內(nèi) 存 變 量 基 本 單 元 的 個 數(shù) 。關(guān) 系 : SIZE=LENGTH TYPE例 如 : 若 MULT-W
14、ORD DW 50DUP( 0)則 LENGTH MULT-WORD = 50 TYPE MULT-WORD = 2 SIZE MULT-WORD = 100 182021-8-13 定 義 的 變 量 名 具 有 五 種 屬 性 : 5) 規(guī) 模 屬 性 表 示 格 式 : SIZE 變 量 名表 示 變 量 所 在 數(shù) 組 的 字 節(jié) 總 數(shù) 。 即 : SIZE=LENGTH TYPE4) 長 度 屬 性 表 示 格 式 : LENGTH 變 量 名表 示 變 量 所 在 數(shù) 組 的 數(shù) 據(jù) 元 素 個 數(shù) 。 只 當(dāng) 數(shù) 據(jù) 用 DUP定 義 時 , LENGTH才 等 于 數(shù) 組 的
15、 元 素 個 數(shù) , 否 則 LENGTH=1。3) 類 型 屬 性 表 示 格 式 : TYPE 變 量 名 表 示 變 量 所 在 內(nèi) 存 數(shù) 據(jù) 的 類 型 ; DB( TYPE=1) DW( TYPE=2) DQ( 8)2) 偏 移 地 址 屬 性 表 示 格 式 : OFFSET 變 量 名 表 示 變 量 在 所 在 段 中 的 偏 移 地 址1) 段 屬 性 表 示 格 式 : SEG 變 量 名 表 示 變 量 所 在 段 的 段 基 值 。 192021-8-13 定 義 的 標(biāo) 號 具 有 三 種 屬 性 :1) 段 屬 性 表 示 格 式 : SEG 標(biāo) 號 表 示 標(biāo)
16、號 所 在 段 的 段 基 值 。2) 偏 移 地 址 屬 性 表 示 格 式 : OFFSET 標(biāo) 號 表 示 標(biāo) 號 所 在 段 的 偏 移 地 址3) 類 型 屬 性 表 示 格 式 : TYPE 標(biāo) 號 表 示 標(biāo) 號 的 轉(zhuǎn) 移 類 型 ; 對 近 和 遠(yuǎn) 轉(zhuǎn) 移 標(biāo) 號 TYPE依 次 返 回 FFFFH、 FFFEH取 值 運 算 符 返 回 的是 一 個 字 操 作 數(shù) ! 202021-8-13 $ 運 算 符$: 當(dāng) 前 地 址 偏 移 量 的 值BLOCK DB HELLO!NUM EQU $-BLOCK HELLO!BLOCK $;NUM為 6 212021-8-13
17、4 屬 性 運 算 符 (合 成 運 算 符 ) 屬 性 運 算 符 用 來 給 指 令 中 的 操 作 數(shù) 指 定 一 個 臨 時 屬 性 ,而 暫 時 忽 略 當(dāng) 前 的 屬 性 。(1) 合 成 運 算 符 PTR 忽 略 當(dāng) 前 操 作 數(shù) 的 類 型 (字 節(jié) 或 字 )及 (NEAR或 FAR),而 給 出 一 個 臨 時 的 類 型 。一 般 格 式 如 下 : 類 型 PTR 操 作 數(shù) 表 達(dá) 式 PTR 運 算 符 建 立 一 個 存 儲 器 地 址 操 作 數(shù) , 它 與 PTR右 邊的 存 儲 器 地 址 操 作 數(shù) 有 相 同 的 段 地 址 與 偏 移 量 , 而
18、其 類 型 由左 邊 給 出 的 類 型 重 新 確 定 。 222021-8-13 SLOT DW 25 MOV AL, BYTE PTR SLOT SLOT已 定 義 成 字 單 元 。 若 想 取 出 它 的 第 一 個 字節(jié) 內(nèi) 容 , 則 可 用 PTR使 它 暫 時 改 變 為 字 節(jié) 單 元 。 MOV BX, 5 ; 匯 編 程 序 不 知 道 是 字 節(jié) 還 是 字 傳 送 MOV BYTE PTR BX, 5 ; 若 是 字 節(jié) 傳 送 MOV WORD PTR BX, 5 ; 若 是 字 傳 送標(biāo) 號 也 可 以 改 變 類 型 屬 性 JMP FAR PTR STEP
19、即 使 標(biāo) 號 STEP原 先 是 NEAR型 的 , 使 用 FAR PTR后 , 這 個 轉(zhuǎn) 移 就 變 成 段 間 轉(zhuǎn) 移 了 。 232021-8-13 (2) 合 成 運 算 符 THIS 象 PTR一 樣 可 用 來 建 立 一 個 特 殊 類 型 的 存 儲 器 地 址 操 作數(shù) , 新 的 存 儲 器 地 址 操 作 數(shù) 的 段 和 偏 移 量 部 分 就 是 下 一 個能 分 配 的 存 儲 單 元 的 段 和 偏 移 量 , 即 匯 編 程 序 進(jìn) 行 匯 編 遇到 THIS時 的 當(dāng) 前 值 。 其 類 型 在 THIS運 算 符 后 面 指 定 。 MY_BYTE EQ
20、U THIS BYTE MY_WORD DW ?將 建 立 MY_BYTE具 有 字 節(jié) 類 型 , 且 與 MY_WORD 具 有相 同 的 段 和 偏 移 地 址 屬 性 。 242021-8-13 (3)符 用 于 在 一 條 指 令 中 以 新 的 段 屬 性 取 代 舊 的 段 屬 性 。有 兩 種 格 式 : 段 寄 存 器 : 地 址 表 達(dá) 式例 如 : ADD AX, ES: ALT 段 名 : 地 址 表 達(dá) 式 所 用 的 段 名 事 前 必 須 通 過 ASSUME偽 指 令 與 一 個 段 寄 存 器 建立 聯(lián) 系 。例 如 : ASSUME ES: EXTRA_DA
21、TA ADD AX, EXTRA_DATA: ALT 252021-8-13 三 、 表 達(dá) 式 表 達(dá) 式 是 由 運 算 符 和 操 作 數(shù) 組 成 的 序 列 。在 匯 編 時 , 它 產(chǎn) 生 一 個 確 定 的 值 。僅 表 示 一 個 常 量 , 相 應(yīng) 的 表 達(dá) 式 稱 為 常 量 表達(dá) 式 ;也 可 以 表 示 一 個 存 儲 單 元 的 偏 移 地 址 , 相 應(yīng)的 表 達(dá) 式 稱 為 地 址 表 達(dá) 式 。 262021-8-13 二 進(jìn) 制 數(shù) 二 進(jìn) 制 數(shù) 字 后 跟 字 母 B。 如 01000001B。 八 進(jìn) 制 數(shù) 八 進(jìn) 制 數(shù) 字 后 跟 字 母 Q或 O
22、。 如 202Q或 202O。 十 進(jìn) 制 數(shù) 十 進(jìn) 制 數(shù) 字 后 跟 D或 不 跟 字 母 。 如 85D或 85。 十 六 進(jìn) 制 數(shù) 十 六 進(jìn) 制 數(shù) 字 后 跟 H。 如 56H, 0FFH。注 意 : 當(dāng) 數(shù) 字 的 第 一 個 字 符 是 A-F時 , 在 字 符 前 應(yīng) 添 加 一 個 數(shù) 字 0, 以 示 和 變 量 的 區(qū) 別 。 1 常 數(shù) 272021-8-13 十 進(jìn) 制 浮 點 數(shù) 浮 點 十 進(jìn) 制 數(shù) 。 如 25E-2 十 六 進(jìn) 制 實 數(shù) 十 六 進(jìn) 制 實 數(shù) 后 跟 R。 數(shù) 字 的 位 數(shù) 必 須 是 8, 16或 20。 在 第 一 位 是 0
23、 的 情 況 下 , 數(shù) 字 的 位 數(shù) 可 以 是 9, 17或 21。 如 0FFFFFFFFR。注 意 : 、 兩 種 數(shù) 字 格 式 只 允 許 在 MASM中 使 用 。 字 符 和 字 符 串 字 符 和 字 符 串 要 求 用 單 引 號 括 起 來 , 如 BD 。 282021-8-13 2 常 量 操 作 數(shù) 常 量 操 作 數(shù) 是 一 個 數(shù) 值 操 作 數(shù) , 一 般 是 常 量或 者 是 表 示 常 量 的 標(biāo) 識 符 。例 如 常 量 操 作 數(shù) 有 100, PORT, VAL等 。數(shù) 字 常 量 操 作 數(shù) 可 采 用 二 、 八 、 十 或 十 六 進(jìn) 制 等
24、形 式 。 操 作 數(shù) 值 的 允 許 范 圍 為 2n - 2n-1。字 符 串 常 量 操 作 數(shù) 值 為 相 應(yīng) 字 符 的 ASCII碼 。 常 量 操 作 數(shù) 是 出 現(xiàn) 在 程 序 中 的 確 定 值 , 它 在 程序 的 運 行 期 間 不 會 發(fā) 生 變 化 。 292021-8-13 存 儲 器 操 作 數(shù) 是 一 個 地 址 操 作 數(shù) , 代 表 一 個 存 儲單 元 的 地 址 。 可 以 分 為 變 量 及 標(biāo) 號 兩 者 類 型 : 變 量 是 存 放 該 變 量 的 存 儲 單 元 的 符 號 地 址存 儲 器 操 作 數(shù) 所 代 表 的 是 某 個 數(shù) 據(jù) 在
25、數(shù) 據(jù) 段 、 附加 段 或 堆 棧 段 中 的 地 址 , 稱 變 量 。 變 量 所 對 應(yīng) 的存 儲 單 元 內(nèi) 容 在 程 序 的 運 行 過 程 中 是 可 以 改 變 的 。 標(biāo) 號 則 是 指 令 代 碼 的 符 號 地 址存 儲 器 操 作 數(shù) 所 代 表 的 是 某 條 指 令 代 碼 在 代 碼 段中 的 地 址 , 在 程 序 運 行 過 程 中 不 能 改 變 , 標(biāo) 號 通常 作 為 轉(zhuǎn) 移 指 令 或 調(diào) 用 指 令 的 目 標(biāo) 操 作 數(shù) 。3 存 儲 器 操 作 數(shù) 302021-8-13 存 儲 器 操 作 數(shù) 具 有 有 三 個 屬 性 : (1) 段 地
26、址 : 存 儲 單 元 所 在 段 的 段 地 址 ; (2) 偏 移 地 址 : 存 儲 單 元 在 所 在 段 內(nèi) 的 偏 移 地 址 ; (3) 類 型 : 變 量 的 類 型 是 存 儲 單 元 所 存 放 數(shù) 據(jù) 項 的 字 節(jié) 數(shù) ;標(biāo) 號 的 類 型 作 為 轉(zhuǎn) 移 或 調(diào) 用 指 令 的 目 標(biāo) 操 作 數(shù) 的 尋 址方 式 , 即 NEAR和 FAR。 標(biāo) 號 的 默 認(rèn) 類 型 屬 性 為 NEAR。 312021-8-13 4 常 量 表 達(dá) 式 常 量 表 達(dá) 式 通 常 由 常 量 操 作 數(shù) 及 運 算 符 構(gòu) 成 ,在 匯 編 時 , 產(chǎn) 生 一 個 常 量 。
27、PORT_VAL十 1 PORT_VAL AND 20H 分 析 運 算 符 作 用 于 存 儲 器 操 作 數(shù) 所 形 成 的 表達(dá) 式 也 是 常 量 表 達(dá) 式 。 OFFSET SUM SEG SUM TYPE CYCLE 322021-8-13 5 地 址 表 達(dá) 式地 址 表 達(dá) 式 通 常 由 存 儲 器 操 作 數(shù) 與 運 算 符 構(gòu) 成 。地 址 操 作 數(shù) 構(gòu) 成 地 址 表 達(dá) 式 時 , 必 須 有 明 確 的 物理 意 義 。 所 以 對 存 儲 器 操 作 數(shù) 的 運 算 可 以 是 加 或減 一 個 常 量 。例 : SUM 2、 CYCLE 5表 達(dá) 式 SUM
28、 2、 CYCLE 5的 值 仍 然 是 一 個 存 儲 器操 作 數(shù) , 其 段 地 址 與 類 型 分 別 與 存 儲 器 操 作 數(shù) SUM及 CYCLE相 同 , 但 偏 移 地 址 分 別 比 SUM大 2及 CYCLE小 5。 表 達(dá) 式 是 在 匯 編 時 計 算 的 , 而 變 量 單 元 的 內(nèi)容 在 程 序 的 運 行 過 程 中 可 以 改 變 。 332021-8-13 四 、 匯 編 語 言 程 序 匯 編 步 驟編輯程序 源程序 連接程序匯編程序 目標(biāo)程序 執(zhí)行程序.ASM .OBJ .EXE匯 編 連 接 342021-8-13 宏 匯 編 程 序 : MASM.
29、EXE連 接 程 序 : LINK.EXE步 驟 :1)編 寫 源 程 序 ; 2)匯 編 ; 3)連 接 ; 4)調(diào) 試 。 352021-8-13 1.編 寫 源 程 序 用 文 本 編 輯 程 序 EDIT.EXE或 EDLIN編 寫 匯 編 語言 源 程 序 , 產(chǎn) 生 擴(kuò) 展 名 為 .ASM的 源 文 件 。2.匯 編 用 匯 編 語 言 編 寫 的 源 程 序 經(jīng) 過 匯 編 程 序 MASM.EXE自 動 翻 譯 成 目 標(biāo) 程 序 , 產(chǎn) 生 擴(kuò) 展 名 為 .OBJ的 目 標(biāo)文 件 ; 對 源 程 序 中 使 用 了 非 法 指 令 , 標(biāo) 號 重 復(fù) , 相對 轉(zhuǎn) 移 超
30、 出 轉(zhuǎn) 移 范 圍 等 非 邏 輯 性 錯 誤 給 出 提 示 。 8086的 匯 編 程 序 為 ASM-86, 擴(kuò) 展 后 的 宏 匯 編程 序 為 MASM-86, 增 加 了 宏 處 理 功 能 、 條 件 匯 編 及某 些 偽 指 令 , 且 可 支 持 8087協(xié) 處 理 器 的 操 作 。 362021-8-13 3.鏈 接 用 鏈 接 程 序 LINK.EXE將 一 個 或 多 個 .OBJ目 標(biāo) 程 序進(jìn) 行 鏈 接 , 生 成 擴(kuò) 展 名 為 .EXE的 可 執(zhí) 行 程 序 。4.調(diào) 試 經(jīng) 過 上 述 步 驟 所 獲 得 的 .EXE可 執(zhí) 行 文 件 , 在 運 行過
31、 程 中 可 能 出 現(xiàn) 邏 輯 錯 誤 , 需 對 可 執(zhí) 行 文 件 .EXE進(jìn) 行調(diào) 試 。 調(diào) 試 匯 編 程 序 最 常 用 的 工 具 是 動 態(tài) 調(diào) 試 程 序DEBUG。 其 中 從 某 地 址 運 行 程 序 、 設(shè) 置 斷 點 、 單 步 跟蹤 等 功 能 , 可 以 支 持 對 程 序 的 調(diào) 試 。 372021-8-13 偽 指 令 語 句 也 稱 為 指 示 性 語 句 , 是 用 來 對 程序 的 匯 編 過 程 進(jìn) 行 控 制 , 所 以 , 偽 指 令 不 是 CPU運 行 的 指 令 , 而 是 程 序 員 給 匯 編 程 序 下 達(dá) 的 命 令 。是 在
32、匯 編 源 程 序 期 間 由 匯 編 程 序 執(zhí) 行 的 命 令 。3.2 偽 指 令偽 指 令 用 來 對 匯 編 程 序 進(jìn) 行 控 制 , 對 程 序 中的 數(shù) 據(jù) 進(jìn) 行 存 儲 空 間 分 配 、 實 現(xiàn) 條 件 匯 編 、 列 表 等處 理 , 其 格 式 和 匯 編 指 令 一 樣 , 但 不 產(chǎn) 生 目 標(biāo) 代 碼 ,即 不 直 接 命 令 CPU去 執(zhí) 行 什 么 操 作 。 382021-8-13 3.2.1 定 義 數(shù) 據(jù) 偽 指 令 該 類 偽 指 令 用 來 定 義 存 儲 空 間 及 其 所 存 數(shù) 據(jù) 長 度 。 DB: 定 義 字 節(jié) , 即 每 個 數(shù) 據(jù)
33、是 1個 字 節(jié) ; DW: 定 義 字 , 即 每 個 數(shù) 據(jù) 占 1個 字 (2個 字 節(jié) ); DD: 定 義 雙 字 , 即 每 個 數(shù) 據(jù) 占 2個 字 。 低 字 部 分 在 低 地 址 , 高 字 部 分 在 高 地 址 ; DQ: 定 義 4字 長 , 即 每 個 數(shù) 據(jù) 占 4個 字 ; DT: 定 義 10個 字 節(jié) 長 , 用 于 壓 縮 式 十 進(jìn) 制 數(shù) 。 392021-8-13 例 : DATA1 DB 5, 6, 8, 100, ABCD ,表 示 從 DATA1單 元 開 始 , 連 續(xù) 存 放 5, 6, 8, 100,共 占 4個 字 節(jié) 地 址 。 DA
34、TA2 DW 7, 287表 示 從 DATA2單 元 開 始 , 連 續(xù) 存 放 7, 287兩 個 字 ,共 占 4個 字 節(jié) 地 址 。 TABLE DB ? ;定 義 一 個 存 儲 區(qū) 時 , 也 可 以 不 放 數(shù) 據(jù) , 表 示 在TABLE單 元 中 存 放 的 內(nèi) 容 是 隨 機 的 。 402021-8-13 05H06H08H64H41H42H43H44H 07H00H1FH01H42H41H44H43HDATA1 DATA2DATA1 DB 5, 6, 8, 100, ABCDDATA2 DW 7, 287, AB , CDDATA3 DD AB , CD 42H41H
35、00H00H44H43H00H00HDATA3 412021-8-13 當(dāng) 定 義 一 個 存 儲 區(qū) 內(nèi) 的 每 個 單 元 要 放 置 同 樣的 數(shù) 據(jù) 時 , 可 用 DUP操 作 符 , 一 般 格 式 為 : COUNT DUP( ? ) ; COUNT 為 重 復(fù) 的 次 數(shù) , ? 為 要 重 復(fù) 的 數(shù) 據(jù) 。如 : BUFFER DB 100 DUP (0) ;表 示 以 BUFFER為 首 地 址 的 100個 字 節(jié) 中 存 放 00H數(shù)據(jù) BUFFER1 DB 100 DUP( 3, 5, 2DUP( 10) , 35) , 24, NUM 422021-8-13 3.
36、2.2 符 號 定 義 偽 指 令 等 值 偽 指 令 EQU 給 左 邊 符 號 定 義 一 個 值 。 該 值可 以 是 任 何 有 效 的 操 作 數(shù) 表 達(dá) 式 , 如 一 個 常 數(shù) 、另 一 個 符 號 名 或 地 址 表 達(dá) 式 , 甚 至 一 個 指 令 助 記符 。 在 程 序 中 , 凡 是 出 現(xiàn) 該 符 號 的 地 方 , 匯 編 時均 用 該 值 代 替 。 如 : TIMES EQU 50; TIMES = 50 FIRST EQU SECOND + 1; FIRST=SECOND + 1 ADD1 EQU ADD; 為 ADD指 定 一 個 別 名 ADD1 OR
37、G 100H ABC DB 41H, 42H, 43H, 44H XYZ EQU ABC+2 432021-8-13 解 除 偽 指 令 PURGE 用 于 釋 放 由 EQU偽 指 令 定義 的 符 號 變 量 , 這 樣 這 些 變 量 就 可 以 被 重 新 定義 。 EQU偽 指 令 定 義 的 符 號 在 PURGE偽 指 令 解除 前 , 不 能 重 新 定 義 。 例 : PURGE 符 號 名 1, 符 號 名 2, 符 號 名 N 等 號 賦 值 偽 指 令 “ = ” 功 能 與 EQU相 似 , 能對 已 定 義 的 符 號 名 重 新 定 義 而 無 須 先 釋 放 。
38、 TIMES = 50; FIRST = SECOND + 1; ADD1 = ADD; 442021-8-13 3.2.3 段 定 義 偽 指 令 一 個 完 整 的 匯 編 源 程 序 由 代 碼 段 、 堆 棧 段 、 數(shù) 據(jù)段 , 有 時 還 有 附 加 段 所 組 成 。 段 定 義 偽 指 令 可 將源 程 序 劃 分 成 若 干 段 , 以 便 匯 編 和 連 接 時 將 各 同名 段 進(jìn) 行 組 合 。 段 定 義 偽 指 令 一 般 格 式 為 : 段 名 SEGMENT 定 位 類 型 組 合 類 型 類 別 ; 段 體 內(nèi) 容 , 由 指 令 及 偽 指 令 組 成 。
39、段 名 ENDS SEGMENT和 ENDS應(yīng) 成 對 使 用 , 缺 不 可 。 452021-8-13 段 名 : 段 名 是 不 可 省 略 的 , 是 給 定 義 的 段 所 起 的 名 稱 。例 如 : STACK SEGMENT STACK DW 20DUP(?) STACK ENDS 定 位 類 型 : 表 示 該 段 起 始 地 址 位 于 何 處 。 字 節(jié) 型 (BYTE), 段 起 始 地 址 可 位 于 任 何 地 方 ; 字 型 (WORD), 段 起 始 地 址 必 須 位 于 偶 地 址 ; 節(jié) 型 (PARA), 即 段 起 始 地 址 必 須 能 被 16除
40、盡 ; 頁 型 (PAGE), 即 段 起 始 地 址 可 被 256除 盡 ); 缺 省 時 , 段 起 始 地 址 便 定 位 為 PARA型 的 。 462021-8-13 組 合 類 型 : 組 合 類 型 用 于 告 訴 連 接 程 序 , 該 段和 其 它 段 的 組 合 關(guān) 系 。 連 接 程 序 可 以 將 不 同 模 塊 的同 名 段 進(jìn) 行 組 合 。 組 合 類 型 有 : NONE 表 明 本 段 與 其 它 段 邏 輯 上 不 發(fā) 生 關(guān) 系 ,省 略 時 , 便 指 定 為 這 一 組 合 類 型 。PUBLIC與 其 它 模 塊 中 用 PUBLIC說 明 的 同
41、 名 段 按 先 后 連 接 成 一 個 邏 輯 段 , 使 用 同 一 個 物 理 段 地 址 。STACK 將 具 有 STACK類 型 的 同 名 段 連 接 成 一 個 大 的 堆 棧 , 由 各 模 塊 共 享 。 472021-8-13 COMMON與 其 它 模 塊 中 由 COMMON說 明的 所 有 同 名 段 連 接 時 , 被 重 疊 放 在 一 起 , 其 長 度是 同 名 段 中 最 長 者 的 長 度 。 MEMORY由 MEMORY說 明 的 段 。 在 連 接時 , 它 被 放 在 所 裝 載 程 序 的 最 后 存 儲 區(qū) (最 高 地址 )。 若 幾 個 段
42、 都 有 MEMORY組 合 類 型 , 則 連 接程 序 只 認(rèn) 定 首 先 遇 到 的 段 具 有 MEMORY組 合 類型 , 其 它 段 則 認(rèn) 為 是 COMMON類 型 , 并 被 疊 放在 一 起 。AT表 達(dá) 式 段 地 址 是 表 達(dá) 式 所 給 定 的 值 。 在 程序 中 就 可 由 用 戶 直 接 來 定 義 段 地 址 。 但 這 種 方 式不 適 用 于 代 碼 段 。 482021-8-13 類 別 : 是 用 單 引 號 括 起 來 的 字 符 串 , 以 表 明 該 段 的 類 別 。 如 代 碼 段 (CODE)、 數(shù) 據(jù) 段 (DATA), 堆 棧 段 (
43、STACK)等 。 各 模 塊 中 同 一 類 型 的 段 可 能 具 有 不 同 的 名 字 ,連 接 時 將 同 類 別 的 段 (但 不 一 定 同 名 )放 在 連 續(xù) 的 存儲 區(qū) 內(nèi) 。 上 述 的 組 合 類 型 便 于 多 個 模 塊 的 連 接 。 若 程 序僅 有 一 個 模 塊 , 即 只 包 括 代 碼 段 、 數(shù) 據(jù) 段 和 堆 棧 段時 , 為 了 和 其 它 段 有 區(qū) 別 , 除 了 堆 棧 段 用 STACK說明 外 , 其 它 段 的 組 合 類 型 、 類 別 均 可 省 略 。 492021-8-13 例 如 有 兩 個 模 塊 : 模 塊 1 STAC
44、K SEGMENT STACK DW 300DUP(?) STACK ENDS DATA SEGMENT COMMON ; 重 疊 DATA ENDS CODE SEGMENT PUBLIC ; 先 后 連 接 CODE ENDS 模 塊 2 STACK SEGMENT STACK; 同 類 成 一 個 大 堆 棧 DW 30DUP(?) STACK ENDS DATA SEGMENT COMMON DATA ENDS CODE SEGMENT PUBLIC CODE ENDS END 502021-8-13 3.2.4 設(shè) 定 段 寄 存 器 偽 指 令A(yù)SSUME段 寄 存 器 定 義 偽
45、 指 令 。 用 于 建 立 段 名和 段 寄 存 器 之 間 的 嚴(yán) 格 對 應(yīng) 關(guān) 系 。 可 通 知 匯 編 程 序哪 一 個 段 寄 存 器 是 當(dāng) 前 段 的 段 寄 存 器 , 以 便 對 使 用變 量 或 標(biāo) 號 的 指 令 匯 編 出 正 確 的 目 的 代 碼 。其 格 式 為 : ASSUME 段 寄 存 器 : 段 名 , 段 寄 存 器 : 段 名 , ASSUME偽 指 令 只 是 指 明 某 一 個 段 地 址 與 段 寄 存 器的 聯(lián) 系 , 沒 有 將 段 地 址 送 入 該 寄 存 器 的 操 作 。 因 此要 將 段 地 址 裝 入 段 寄 存 器 還 需
46、用 匯 編 指 令 來 實 現(xiàn) 。 512021-8-13 例 如 :CODE SEGMENT ASSUME CS: CODE, DS: DATA, SS: STACK MOV AX, DATA ; DATA段 值 送 AX MOV DS, AX ; AX內(nèi) 容 送 DS, 本 指 令 執(zhí) 行 完 之 后 , DS才 為 實 際 段 值CODE ENDS 由 于 DOS的 裝 入 程 序 負(fù) 責(zé) 把 CS初 始 化 成 正 確 的 代 碼段 地 址 , SS初 始 化 為 正 確 的 堆 棧 段 地 址 , 在 程 序 中就 不 必 設(shè) 置 。 但 DS數(shù) 據(jù) 段 或 ES附 加 段 必 須
47、MOV指令 對 DS和 ES進(jìn) 行 初 始 化 , 以 裝 入 段 地 址 。 522021-8-13 3.2.7 ORG 偽 指 令 ORG偽 指 令 用 于 指 定 段 內(nèi) 程 序 或 數(shù) 據(jù) 代 碼 存 放 的起 始 偏 移 地 址 , 即 用 語 句 中 表 達(dá) 式 的 值 作 為 起 始 偏移 地 址 , 此 后 的 程 序 或 數(shù) 據(jù) 代 碼 將 連 續(xù) 存 放 , 除 非遇 到 另 一 個 新 的 ORG語 句 。 一 般 格 式 為 : ORG 例 如 : DATA SEGMENT BUFF1 DB 23, 56H, EOF ORG 2000H BUFF2 DB STRING
48、DATA ENDS 532021-8-13 3.2.5 定 義 過 程 的 偽 指 令 具 有 一 定 功 能 的 程 序 段 作 為 一 個 過 程 (相 當(dāng) 于 一 個 子 程序 )。 可 以 被 別 的 程 序 調(diào) 用 (用 CALL指 令 )或 由 JMP指令 轉(zhuǎn) 移 到 此 執(zhí) 行 ; 也 可 以 由 程 序 順 序 執(zhí) 行 ; 或 作 為 中斷 處 理 程 序 , 在 中 斷 響 應(yīng) 后 轉(zhuǎn) 此 執(zhí) 行 。一 個 過 程 由 偽 指 令 PROC和 ENDP來 定 義 。 其 格 式 為 :過 程 名 PROC 類 型 (FAR/NEAR, 缺 省 為 NEAR) RET過 程 名
49、 ENDP 過 程 體 內(nèi) 至 少 應(yīng) 有 一 條 RET指 令 。 過 程 可 以 嵌 套 , 也可 以 遞 歸 使 用 , 即 過 程 可 以 調(diào) 用 過 程 或 本 身 。過 程 體 542021-8-13 3.2.8 匯 編 結(jié) 束 偽 指 令 END偽 指 令 表 示 源 程 序 的 結(jié) 束 。 每 個 源 程 序 模 塊必 須 且 只 能 用 一 條 END偽 指 令 指 明 結(jié) 束 位 置 , 匯編 程 序 遇 到 END時 立 刻 停 止 匯 編 。 其 一 般 格 式 為 : END 表 達(dá) 式 其 中 表 達(dá) 式 是 可 選 項 , 表 示 該 匯 編 程 序 模 塊 的
50、啟動 地 址 。 例 如 : END START則 表 明 該 程 序 的 啟 動 地 址 為 START。 552021-8-13 程 序 設(shè) 計 是 應(yīng) 用 計 算 機 解 決 實 際 問 題 的 重 要 環(huán) 節(jié) 。一 個 優(yōu) 秀 的 程 序 設(shè) 計 的 標(biāo) 準(zhǔn) 為 : 程 序 結(jié) 構(gòu) 清 晰 合 理 , 易 于 理 解 和 維 護(hù) ; 程 序 執(zhí) 行 時 間 短 ; 源 程 序 的 語 句 行 少 ; 程 序 存 儲 的 字 節(jié) 數(shù) 少 ;這 些 要 求 可 通 過 選 擇 算 法 和 優(yōu) 化 程 序 結(jié) 構(gòu) 來 實 現(xiàn) 。3.3 匯 編 語 言 程 序 設(shè) 計 562021-8-13
51、3.3.1 匯 編 語 言 程 序 設(shè) 計 概 述一 、 匯 編 語 言 程 序 的 基 本 結(jié) 構(gòu) 框 架匯 編 語 言 源 程 序 由 可 執(zhí) 行 的 指 令 語 句 和 指 示 性的 偽 指 令 組 成 。 在 匯 編 語 言 源 程 序 至 少 包 括 三段 : 代 碼 段 、 數(shù) 據(jù) 段 、 堆 棧 段 , 必 要 時 還 有 附加 段 。 572021-8-13 二 、 匯 編 語 言 程 序 設(shè) 計 的 基 本 步 驟 1. 分 析 實 際 問 題 , 建 立 解 決 問 題 的 模 型 ; 2. 確 定 解 決 問 題 的 算 法 、 方 法 和 步 驟 ; 3. 根 據(jù) 算
52、法 畫 出 程 序 流 程 圖 , 即 將 解 決 問 題 的思 路 用 圖 形 表 示 。 4. 對 程 序 中 的 數(shù) 據(jù) 的 組 織 、 存 儲 單 元 分 配 、 寄存 器 使 用 規(guī) 劃 等 進(jìn) 行 統(tǒng) 一 考 慮 和 安 排 。 5. 根 據(jù) 程 序 流 程 圖 編 寫 程 序 ; 6. 程 序 檢 查 、 調(diào) 試 與 修 改 ; 582021-8-13 三 、 匯 編 語 言 程 序 的 基 本 結(jié) 構(gòu) 程 序根 據(jù) Boehm和 Jacobi的 結(jié) 構(gòu) 定 理 , 任 何 程 序 可 以由 三 種 最 基 本 的 結(jié) 構(gòu) 程 序 構(gòu) 成 , 如 下 圖 :順 序 結(jié) 構(gòu) 程 序
53、 分 支 結(jié) 構(gòu) 程 序 循 環(huán) 結(jié) 構(gòu) 程序每 個 結(jié) 構(gòu) 程 序 只 有 一 個 入 口 和 一 個 出 口 , 通 過 三 種結(jié) 構(gòu) 的 組 合 和 嵌 套 可 構(gòu) 成 任 何 復(fù) 雜 的 結(jié) 構(gòu) 化 程 序 。 592021-8-13 3.3.2 順 序 結(jié) 構(gòu) 程 序 設(shè) 計 順 序 程 序 設(shè) 計 是 沒 有 分 支 , 沒 有 循 環(huán) 的 直 線 運行 程 序 , 程 序 執(zhí) 行 按 照 IP自 動 增 加 的 順 序 進(jìn) 行 。例 1: 利 用 查 表 法 計 算 平 方 值 。 已 知 0 9的 平 方 值 連續(xù) 存 在 以 SQTAB開 始 的 存 儲 區(qū) 域 中 , 求
54、SUR單 元 內(nèi)容 X的 平 方 值 , 并 放 在 DIS單 元 中 。 假 定 0 X 9且為 整 數(shù) 。解 : ( 1) 了 解 平 方 表 的 存 放 位 置 ; ( 2) 根 據(jù) X的 值 , 找 到 X對 應(yīng) X 2在 表 中 位 置 。 602021-8-13 STACK SEGMENT DB 100 DUP( ? )STACK ENDSDATA SEGMENT SUR DB ? DIS DB ? SQTAB DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81DATA ENDSCODE SEGMENT ASSUME CS: CODE, DS: DATA,
55、SS: STACK, ES: DATA 612021-8-13 BEGIN: PUSH DS MOV AX, 0 PUSH AX MOV AX, DATA MOV DS, AX LEA BX, SQTAB; 取 平 方 表 基 地 址 MOV AH, 0 MOV AL, SUR ; AL=X ADD BX, AX ; 計 算 地 址 偏 移 MOV AL, BX ; 取 出 X的 平 方 值 MOV DIS, AL RETCODE ENDS END BEGIN 622021-8-13 BEGIN: PUSH DS MOV AX, 0 PUSH AX MOV AX, DATA MOV DS, A
56、X LEA BX, SQTAB MOV AL, SUR ; AL=X XLAT SQTAB MOV DIS, AL RETCODE ENDS END BEGIN為 使 程 序 精 練 , 可 采 用 換 碼 指 令 XLAT, 代 碼 段如 下 : 632021-8-13 3.3.3 分 支 結(jié) 構(gòu) 程 序 設(shè) 計 分 支 結(jié) 構(gòu) 程 序 的 基 本 思 想 是 根 據(jù) 某 些 條 件 和狀 態(tài) 來 控 制 程 序 下 一 步 的 走 向 。 首 先 執(zhí) 行 能 影響 狀 態(tài) 的 指 令 , 如 算 術(shù) 邏 輯 運 算 指 令 、 移 位 指令 或 位 操 作 指 令 , 然 后 用 條 件
57、轉(zhuǎn) 移 類 指 令 對 各種 狀 態(tài) 標(biāo) 志 進(jìn) 行 判 斷 , 進(jìn) 而 轉(zhuǎn) 移 形 成 分 支 。設(shè) 計 分 支 結(jié) 構(gòu) 程 序 一 般 有 兩 種 方 法 : 比 較 /測 試 分 支 結(jié) 構(gòu) 法 跳 轉(zhuǎn) 表 分 支 結(jié) 構(gòu) 法 642021-8-13 1. 比 較 /測 試 分 支 結(jié) 構(gòu) 法 采 用 比 較 指 令 CMP和 測 試 指 令 TEST, 產(chǎn) 生 相應(yīng) 的 狀 態(tài) 標(biāo) 志 , 選 擇 適 當(dāng) 的 條 件 轉(zhuǎn) 移 指 令 , 實 現(xiàn)不 同 情 況 的 分 支 轉(zhuǎn) 移 。 一 條 轉(zhuǎn) 移 指 令 產(chǎn) 生 兩 路 分支 , n 條 轉(zhuǎn) 移 指 令 可 產(chǎn) 生 n + 1條 分
58、支 。 = 0? BX= 0BX= 1BX= 1 YY 0?例 1 實 現(xiàn) 符 號 函 數(shù) 。 1 X 0Y= 0 X = 0 1 X SI?一 次 排 序 結(jié) 束 ? 總 排 序 結(jié) 束 ?YN N YYAXSI 782021-8-13 程 序 如 下 : LEA DI, BUFFER ; 取 首 地 址MOV BL, 99 ; 須 經(jīng) N-1次 排 序NEXT0: MOV SI, DI ; SI恢 復(fù) 指 向 首 地 址MOV CL, BL ; 每 次 排 序 的 比 較 次 數(shù)NEXT3: MOV AX, SI ; 當(dāng) 前 16位 數(shù) 放 在 AX中ADD SI, 2 ; SI指 向 下
59、 一 個 16位 數(shù)CMP AX, SI ; 當(dāng) 前 數(shù) 與 下 一 個 數(shù) 比 較JNC NEXT5 ; 大 于 等 于 則 不 交 換MOV DX, SI ; 小 于 則 交 換MOV SI 2, DX ; 可 XCHG SI, AXMOV SI, AX ; MOV SI-2, AXNEXT5: DEC CL ; 計 算 比 較 次 數(shù)JNZ NEXT3DEC BL ; 每 次 排 序 的 比 較 次 數(shù) 減 一 JNZ NEXT0HLT 792021-8-13 LEA DI, BUFFER ; 取 首 地 址 MOV COUNT, 100 ; 排 序 元 素 的 個 數(shù) CLD ; 地
60、址 遞 增 排 序NEXT1: MOV BX, 1 ; 交 換 標(biāo) 記 DEC COUNT ; 每 次 排 序 的 比 較 次 數(shù) 減 一 JZ EXIT ; 比 較 次 數(shù) 為 0則 結(jié) 束 MOV SI, DI ; SI恢 復(fù) 指 向 首 地 址 MOV CX, COUNT ; 每 次 排 序 的 比 較 次 數(shù)NEXT2: LODSW ; 當(dāng) 前 數(shù) AX, SI 下 一 個 數(shù) CMP AX, SI ; 當(dāng) 前 數(shù) 與 下 一 個 數(shù) 比 較 JNC NEXT3 ; 大 于 等 于 則 不 交 換 XCHG SI, AX ; 小 于 則 交 換 MOV SI 2, AX ; 大 數(shù) 存
61、 入 上 一 位 置 XOR BX, BX ; 有 交 換 則 交 換 標(biāo) 記 清 零NEXT3: LOOP NEXT2 ; 一 次 排 序 是 否 結(jié) 束 ? CMP BX, 0 ; 一 次 排 序 是 否 有 交 換 ? JE NEXT1 ; 有 交 換 則 繼 續(xù)EXIT: MOV AX, 4C00H INT 21H 802021-8-13 3.3.5 子 程 序 設(shè) 計 子 程 序 是 常 用 的 程 序 結(jié) 構(gòu) , 將 頻 繁 使 用 的 功 能 寫 成 子 程 序 的形 式 , 可 使 源 程 序 及 目 標(biāo) 程 序 縮 短 , 提 高 效 率 和 可 靠 性 。 在8086/80
62、88中 , 子 程 序 和 過 程 的 含 義 是 一 致 的 。 主 程 序 可 多 次 調(diào) 用 一 個 或 多 個 子 程 序 ; 子 程 序 可 被 多 個 主 程 序 調(diào) 用 , 也 可 再 調(diào) 用 其 他 子 程 序 ; 子 程 序 調(diào) 用 子 程 序 , 稱 子 程 序 嵌 套 ; 調(diào) 用 自 己 稱 遞 歸 調(diào) 用 ; 子 程 序 調(diào) 用 時 , CPU自 動 將 調(diào) 用 時 的 斷 點 壓 入 堆 棧 保 存 ; 子 程 序 調(diào) 用 時 , 由 程 序 將 要 用 到 寄 存 器 內(nèi) 容 壓 入 堆 棧 保 護(hù) ; 子 程 序 返 回 前 , 將 壓 入 堆 棧 的 寄 存 器
63、 內(nèi) 容 彈 出 , 恢 復(fù) 現(xiàn) 場 ; 812021-8-13 編 寫 子 程 序 有 以 下 幾 點 基 本 要 求 :1. 子 程 序 必 須 有 一 定 的 通 用 性 , 確 定 入 口 參 數(shù) 和 出 口 參 數(shù) 。2. 選 用 適 當(dāng) 的 方 法 進(jìn) 行 主 程 序 和 子 程 序 間 參 數(shù) 的 傳 遞 。 利 用 寄 存 器 進(jìn) 行 參 數(shù) 傳 遞 。 例 9 利 用 存 儲 單 元 按 事 先 約 定 的 規(guī) 則 進(jìn) 行 參 數(shù) 傳 遞 。 利 用 堆 棧 進(jìn) 行 參 數(shù) 傳 遞 。 例 10 3. 注 意 現(xiàn) 場 信 息 的 保 護(hù) 和 恢 復(fù) , 最 好 在 子 程 序
64、 中 進(jìn) 行 保 護(hù) 。4. 正 確 使 用 堆 棧 。 子 程 序 嵌 套 較 多 時 , 使 用 堆 棧 要 仔 細(xì) 。5. 編 制 子 程 序 文 件 , 主 要 包 括 以 下 內(nèi) 容 : 子 程 序 的 名 稱 ; 子 程 序 的 功 能 描 述 ; 子 程 序 的 入 口 參 數(shù) 和 出 口 參 數(shù) ; 子 程 序 所 使 用 的 寄 存 器 和 存 儲 單 元 列 表 , 對 其 作 用 描 述 ; 本 子 程 序 所 調(diào) 用 的 其 他 子 程 序 列 表 ; 子 程 序 調(diào) 用 形 式 舉 例 ; 822021-8-13 例 9 兩 個 6字 節(jié) 數(shù) 相 加 。程 序 如 下
65、 :DATA SEGMENTADD1 DB 0FEH, 86H, 7CH, 35H, 68H, 77HADD2 DB 45H, 0BCH, 7DH, 6AH, 87H, 90HSUM DB 6DUP( 0)COUNT DB 6DATA ENDSSTACK SEGMENT DB 100DUP( ? )STACK ENDSCODE SEGMENTASSUME CS: CODE, DS: DATA, SS: STACKMADD: MOV AX, DATA MOV DS, AX MOV AX, STACK MOV SS, AX 832021-8-13 MOV SI, OFFSET ADD1MOV DI
66、, OFFSET ADD2MOV BX, OFFSET SUMMOV CX, COUNTCLCAGAIN: CALL SUBADDLOOP AGAINMOV AX, 4C00HINT 21HSUBADD PROC ; 完 成 一 個 字 節(jié) 相 加PUSH AX ; 入 口 參 數(shù) : SI, DI, BXMOV AL, SI ; 出 口 參 數(shù) : SI, DI, BXADC AL, DIMOV BX, ALINC SIINC DIINC BXPOP AXRET SUBADD ENDPCODE ENDSEND MADD 842021-8-13 例 12 數(shù) 的 階 乘 n*(n 1)!按 照 階 乘 的 定 義 n!= 這 是 一 個 遞 歸 定 義 式 , 1在 程 序 設(shè) 計 時 , 可 采 用 子 程 序 的 的 遞 歸 調(diào) 用 形 式 。DATA SEGMENTNUM DB 5FNUM DW ?DATA ENDSSTACK SEGMENTDB 100DUP( ? )STACK ENDSCODE SEGMENTASSUME CS: CODE, DS: DATA, SS: STA
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案