【文章內容簡介】
段 不可 能 都 從 地 址 0 開 始 。★ 段 內 所 有 標 號( 符 號 ) 地 址 都 是 相對 于 地 址 0 的 。?段的重定位 (Reallocation) 鏈 接 時 重 定 位 :● 將 各 個 段 定 位 到 存 儲 器 中 , 每 個 段 都 從 合 適 的 地 址 開始 ;● 將 符 號 值 調 整 到 相 對 于 新 的 段 地 址 的 數(shù) 值 ;● 調 整 對 重 新 定 位 后 符 號 的 引 用 。匯 編 器 通 過 在 需 要 重 定 位 的 符 號 處 預 留 一 個 重 定 位 入 口 ,鏈 接 時 對 這 些 符 號 地 址 的 修 正 實 現(xiàn) 重 定 位 。.ref X.ref Z.def main.textmain:B YB ZLD X,AY: RESET。t e s t 1 .a s m.def X,Z.textX: LD X,AZ: ADD 10,B。t e s t 2 .a s m例 : t e s t 1 . a s m 和 t e s t 2 . a s m 如圖 所 示 , 鏈 接 命 令 文 件 見 下 頁 。試 分 析 其 鏈 接 重 定 位 結 果 。?段的重定位 (Reallocation) M E M O R Y { P A G E 0 : V E C T : o r i g i n = 0 x f f 8 0 , l e n = 0 x 8 0 P A G E 1 : I D A T A : o r i g i n = 0 x 8 0 , l e n = 0 x 8 8 0 P A G E 0 : I P R O G : o r i g i n = 0 x A 0 0 , l e n = 0 x 2 8 0 0 P A G E 1 : E D A T A : o r i g i n = 0 x 8 0 0 0 , l e n = 0 x 8 0 0 0 P A G E 0 : E P R O G : o r i g i n = 0 x 8 0 0 0 , l e n = 0 x 7 f 8 0 P A G E 1 : D M A M E M : o r i g i n = 0 x 9 0 0 , l e n = 0 x 1 0 0} / * M E M O R Y * /S E C T I O N S { . t e x t I P R O G P A G E 0 / * c o d e * / . s w i t c h I P R O G P A G E 0 / * s w i t c h t a b l e i n f o * / . c i n i t I P R O G P A G E 0 . v e c t o r s V E C T P A G E 0 / * i n t e r r u p t v e c t o r s * / . c i o I D A T A P A G E 1 / * C I / O * / . d a t a I D A T A | E D A T A P A G E 1 / * i n i t i a l i z e d d a t a * / . b s s I D A T A | E D A T A P A G E 1 / * g l o b a l amp。 s t a t i c v a r i a b l e s * / . c o n s t I D A T A P A G E 1 / * c o n s t a n t d a t a * / . s y s m e m I D A T A P A G E 1 / * h e a p * / S T A C K I D A T A P A G E 1 / * s t a c k * / . c s l d a t a I D A T A P A G E 1} / * S E C T I O N S * /。 鏈 接 命 令 文 件?鏈接時重定位 1 . d e f X , Z2 0 0 0 0 0 0 . t e x t3 0 0 0 0 0 0 F 0 2 0 X : L D X , A 0 0 0 0 0 1 0 0 0 0 39。4 0 0 0 0 0 2 F 3 0 0 Z : A D D 1 0 , B 0 0 0 0 0 3 0 0 0 A。 t e s t 1 的 匯 編 結 果1 . r e f X2 . r e f Z3 . d e f m a i n4 0 0 0 0 0 0 . t e x t5 0 0 0 0 0 0 m a i n :6 0 0 0 0 0 0 F 0 7 3 B Y 0 0 0 0 0 1 0 0 0 6 39。7 0 0 0 0 0 2 F 0 7 3 B Z 0 0 0 0 0 3 0 0 0 0 !8 0 0 0 0 0 4 F 0 2 0 L D X , A 0 0 0 0 0 5 0 0 0 0 !9 0 0 0 0 0 6 F 7 E 0 Y : R E S E T。 t e s t 2 的 匯 編 結 果a d d r e s s n a m e 0 0 0 0 0 8 . b s s0 0 0 0 0 0 8 0 . d a t a0 0 0 0 0 a 0 0 . t e x t0 0 0 0 0 a 0 7 X0 0 0 0 0 a 0 9 Z0 0 0 0 f f 8 0 _ V E C S T A R T。鏈 接 重 定 位 結 果產生重定位入口 產生重定位入口 產生重定位入口 產生重定位入口 ?段的重定位 (Reallocation) 運 行 時 重 定 位 :將 代 碼 裝 入 存 儲 器 的 一 個 地 方 , 而 運 行 在 另 一 個 地 方 。 利用 S E C T I O N S 命 令 選 項 讓 鏈 接 器 定 位 兩 次 。 一 些 關 鍵 的 執(zhí) 行代 碼 必 須 裝 入 在 系 統(tǒng) 的 R O M 中 , 但 希 望 在 較 快 的 R A M 中 運行 。鏈 接 器 提 供 了 一 個 簡 單 的 處 理 該 問 題 的 方 法 。 利 用 S E C T I O N S 命 令 選 項 讓 鏈 接 器 定 位 兩 次 。 第 一 次 使 用 裝 入 關 鍵 字 設置 裝 入 地 址 , 再 用 運 行 關 鍵 字 設 置 運 行 地 址 。?匯編語言程序的編輯、匯編和鏈接過程 編 輯 器 匯 編 器 鏈 接 器 調 試 器列 表 文 件. l s t鏈 接 命 令文 件( c m d )存 儲 器 映像 文 件( m a p )十 六 進 制轉 換. a s m源 程 序. o b j目 標 文 件. o u t輸 出 文 件 l m o?常用匯編偽指令 類別 偽指令 功能 舉例 段定義 .text 代碼段 .data 數(shù)據段 .bss 未初始化段 .bss a, 10 .sect 命名段 .sect “hu” .usect x .usect “hu”, 8 ?常用匯編偽指令 類別 偽指令 功能 舉例 初始化 常數(shù) .byte 初始化一或多個連續(xù)字節(jié) .byte 10, 1, “ab” .char 初始化一或多個連續(xù)字符 .char 20,?a?, ?b? .field 初始化一或多個域 .field 0ABCh,14 .float 初始化一或多個單精度浮點數(shù) .float 123 .xfloat 同上,但不自動對準長字邊界 【 例 P116】 .int 初始化一或多個 16位整數(shù) .int 10,20 .short 初始化一或多個 16位整數(shù) .short 20,45 .word 初始化一或多個 16位整數(shù) .word 044h,055h .double 初始化一或多個雙精度浮點數(shù) .double .long 初始化一或多個 32位整數(shù) .long 0ABCDh .string 初始化一或多個字符串 .string“abc”, “123” ?常用匯編偽指令 類別 偽指令 功能 舉例 引用其他文件、定義或引用符號 . copy 從其他文件讀取源程序 .copy “” .include 從其他文件讀取源程序 .include “” .def 識別在當前模塊中定義且可被其他模塊引用的符號 .def X,Y,Z .ref 識別在當前模塊引用但在 其他模塊定義的符號 .ref R,S,T .global 聲明全局符號 .global init ?常用匯編