freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

dsp匯編語言程序設(shè)計-資料下載頁

2025-01-12 18:06本頁面
  

【正文】 MEMORY命令用來定義目標系統(tǒng) 中所包含的各種形式的存儲器 的存儲器配置圖 , 包括對存儲器各部分命名 , 以及規(guī)定它們的起始地址和長度 。 ( 1) MEMORY命令 功 能 MEMORY { PAGE 0: name 1 [( attr) ]: origin=constant, length=constant ┆ PAGE n: name n [( attr) ]: origin=constant, length=constant } MEMORY命令的一般句法 對一個存儲空間加以標記 , 每一個 PAGE代表一個完全獨立的地址空間 。 頁號 n最多可規(guī)定為 255,取決于目標存儲器的配置 。 通常 PAGE 0定為程序存儲器 , PAGE 1定為數(shù)據(jù)存儲器 。 如果沒有規(guī)定PAGE, 則鏈接器就目標存儲器配置在 PAGE 0。 MEMORY { PAGE 0: name 1 [( attr) ]: origin=constant, length=constant ┆ PAGE n: name n [( attr) ]: origin=constant, length=constant } MEMORY命令的一般句法 名字可以包含 8個字符 , A~ Z、 a~ z、 $、 .、 _均可 。名字并沒有特殊的含義 , 用來標記存儲器的區(qū)間而已;名字都是內(nèi)部記號 , 不需要保留在輸出文件或者符號表中 。 不同 PAGE上的存儲器區(qū)間可以取相同的名字 , 但在同一 PAGE內(nèi)的名字不能相同 , 且不許重疊配置 。 MEMORY { PAGE 0: name 1 [( attr) ]: origin=constant, length=constant ┆ PAGE n: name n [( attr) ]: origin=constant, length=constant } MEMORY命令的一般句法 任選項 , 為命名區(qū)規(guī)定1~ 4個屬性 。 如果有選項 ,應(yīng)寫在括號內(nèi) 。 當(dāng)輸出段定位到存儲器時 ,可利用屬性加以限制 。 規(guī)定一個存儲區(qū)的起始地址 。 鍵入 origin、 或 o都可以 。 這個值是一個 16位二進制常數(shù) , 可以用十進制數(shù) 、 八進制數(shù)或十六進制數(shù)表示 。 規(guī)定一個存儲區(qū)的長度,鍵入 length、 len或 l都可以。 R 規(guī)定可以對存儲器執(zhí)行讀操作 。 W 規(guī)定可以對存儲器執(zhí)行寫操作 。 X 規(guī)定存儲器可以裝入可執(zhí)行的程序代碼 。 I 規(guī)定可以對存儲器進行初始化 。 如果一項屬性都沒有選 , 就可以將輸出段不受限制地定位到任何一個存儲器位置 。 任何一個沒有規(guī)定屬性的存儲器都默認有全部 4項屬性 。 fill:任選項 , 不常用 , 在句法中未列出 , 為沒有定位輸出段的存儲器空單元填充一個數(shù) , 鍵入 fill或 f均可 。 這是 2個字節(jié)的整型常數(shù) , 可以是十進制數(shù) 、八進制數(shù)或十六進制數(shù)表示 。 如 fill=0FFFFh。 屬性選項一共有 4項 例 47 MEMORY命令的使用方法 。 /* Example mand file with MEMORY directive */ /* Input files */ o /* Options */ MEMORY { PAGE0: ROM: origin=cooh, length=1000h PAGE1: SCRTCH: origin=60h, length=20h ONCHIP: origin=80h, length=200h } 名為 ROM的 程序存儲器: 4K字 ROM,起始地址 C00h。 名為 SCRATCH的數(shù)據(jù)存儲器: 32字 RAM, 起始地址 60h。 名為 ONCHIP的數(shù)據(jù)存儲器: 512字 RAM, 起始地址為 80h。 告訴鏈接器如何將輸入段合成輸出段 在可執(zhí)行程序中定義輸出段 規(guī)定輸出段在存儲器中的存放位置 允許重新命名輸出項 。 ( 2) SECTIONS命令 功 能 在鏈接器命令文件中 , SECTIONS命令用大寫字母 , 緊隨其后并用大括號括起來的是關(guān)于輸出段的詳細說明 。 每一個輸出段的說明都從段名開始 。 段名后面是一行說明段的內(nèi)容和如何給段分配存儲單元的性能參數(shù) 。 注意 SECTIONS { name: [property,property,property,… ] name: [property,property,property,… ] name: [property,property,property,… ] } SECTIONS命令的一般句法 性能參數(shù) 1) load allocation 定義將輸出段加載到存儲器中 的什么位置 。 句法: load=allocation 或 者 用 大 于 號 代 替“ load=” allocation 或者省掉 “ load=” allocation 其中 allocation是關(guān)于輸出段地址的說明 , 即給輸出段分配存儲單元 。 .text: load=0x1000 將輸出段 .text定位到一個特定地址 。 .text: ROM 將輸出段 .text定位到名為 ROM的存儲區(qū) 。 .bss: ( RW) 將 .bss段定位到屬性為 R、 W的存儲區(qū) 。 2) Run allocation 用來定義輸出段在存儲器的 什么位置上開始運行 。 句法: run=allocation 或者用大于號代替等號 runallocation 鏈接器為每個輸出段在目標存儲器中分配兩個地址:一個是加載的地址 , 另一個是執(zhí)行程序的地址 。 通常 ,這兩個地址是相同的 , 可以認為每個輸出段只有一個地址 。 有時要想把程序的加載和運行區(qū)分開 ( 先將程序加載到 ROM, 然后在 RAM中以較快的速度運行 ) , 只要用 SECTIONS命令讓鏈接器對這個段定位兩次就行了 。一次是設(shè)置加載地址 , 另一次是設(shè)置運行地址 。 例如: .fir: load=ROM, run=RAM 3) Input sections 用來定義由哪些輸入段組 成輸出段 。 句法: {input_sections} 大多數(shù)情況下 , 在 SECTIONS命令中是不列出每個輸入文件的輸入段的段名的: SECTIONS { .text: .data: .bss } 這樣 , 在鏈接時 , 鏈接器就將所有輸入文件的 .text段鏈接成 .text輸出段 , 其它段也一樣 。 SECTIONS { .text: /* 建立 .text 輸出段 */ { ( .text) /* 鏈接源于 .text段 */ ( sec1) /*鏈接源于 sec1段 */ /*鏈接源于 */ ( .text,sec2) /*鏈接源于 .text 段和 sec2段 */ } } 用文件名和段名來明確地規(guī)定輸入段 如果沒有利用 MEMORY和 SECTIONS命令 , 鏈接器就按默認算法來定位輸出段: MEMORY { PAGE 0: PROG: origin=0x0080, length=0xFF00 PAGE 1: DATA: origin=0x0080, length=0xFF80 } SECTIONS { .text: PAGE=0 .data: PAGE=0 .cinit: PAGE=0 .bss: PAGE=1 } (3) MEMORY和 SECTIONS命令的默認算法 所有的 .text輸入段 , 鏈接成一個 .text輸出段 , 它是可執(zhí)行的輸出文件; 所有的 .data輸入段組合成 .data輸出段 所有的 .bss輸入段則組合成一個 .bss輸出段 .text和 .data段定位到配置為 PAGE 0上的存儲器 , 即程序存儲空間 。 【 例 8】 鏈接 。 o m e start MEMORY { PAGE 0: EPROM : =0E000H, len=100H PAGE 1: SPRAM : =0060H, len=20H DARAM : =0080H, len=100H } SECTIONS { .text : EPROM PAGE 0 .data : EPROM PAGE 0 .bss : SPRAM PAGE 1 STACK : DARAM PAGE 1 } 程序重定位 匯編器處理每個段都是從地址 0開始 , 每段中所有需要重新定位的符號 (標號 )都是相對于 0地址而言的 。事實上 , 所有段都不可能從存儲器中的 0地址開始 , 因此鏈接器必須通過下列方法對各個段進行重新定位: ● 將各個段定位到存儲器圖中 , 使每個段有合適的起始地址 。 ● 調(diào)整符號值 , 使之對應(yīng)于新的段地址 。 ● 調(diào)整對重新定位后符號的引用 。 匯編器對源程序匯編時 , 匯編后將生成一個列表文件 。 列表文件中目標代碼后面在需要引用重新定位的符號處留了一個重新定位入口 , 鏈接器就在符號重定位時 , 利用這些入口修正對符號的引用值 。 表示在鏈接時需要重新定位的符號如下: ! :定義的外部引用 。 39。: .text段重新定位 。 : .data段重新定位 。 +: .sect段重新定位 。 : .bss和 .usect段重新定位 。 例 45 列表文件中 , 匯編器為需要重新定位的符號所留的重定位入口 。 1 0100 X .set 0100h ;給 X賦值 2 0000 .text 3 0000 FO73 B Y ;生成一個重定位入口 0000 0004’ 4 0002 F020 LD X,A ;生成一個重定位入口 0003 0000! 5 0004 F7E0 Y: RESET 在 .text段對 X的引用是一次外部引用 .text段內(nèi)對 Y的引用是一次內(nèi)部引用 .text段內(nèi) 定義 Y 另一個模塊中定義的 X。這里賦初值 假設(shè)鏈接時 X重新定位在地址 7100h, .text段重新定位到從地址 7200h開始 , 那么 Y的重定位值為 7204h。鏈接器利用兩個重定位入口 , 對目標文件中的兩次引用進行修正: f073 B Y 變成 f073 0004’ 7204 f020 LD X,A 變成 f020 0000! 7100 在 COFF目標文件中有一張重定位入口表 。 鏈接器在處理完之后就將重定位入口消去 , 以防止在重新鏈接或加載時再次重新定位 。 一個沒有重定位入口的文件稱為絕對文件,它的所有地址都是絕對地址。 匯編程序舉例 1. 多模塊鏈接 以例 2中的 , 將復(fù)位與中斷在一起的向量文件列為一個單獨的文件 , 對兩個目標文件進行鏈接 。 (1) 編寫向量文件 。 【 例 20】 向量文件 。 ************************************** * * * Reset vector * ************************************** .title ********** ResetVector ************ .ref start .sect .vectors
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1