【正文】
要動作所需的指令(按功能選擇指令),并決定數(shù)據(jù)在這些指令中的存放形式,最后則按照指令的要求,用 MOV或其他的指令把數(shù)據(jù)傳送的正確的位置。 例題: : 已知某日的最高溫度和最低溫度,要求計算這一天的平均溫度。 初始化表 : 數(shù)據(jù)段寄存器 DS 堆棧段寄存器 SS 附加段寄存器 ES 堆棧段指針 SP 8255A可編程并行端口 8259A優(yōu)先級中斷控制器 8254可編程計數(shù)器 8251可編程串行端口 初始化數(shù)據(jù)變量 設置中斷允許標志 ( 3)選擇實現(xiàn)算法中每一主要動作所需要的指令,并決定數(shù)據(jù)在這些指令中的存放形式。 用來表示程序設計問題的操作序列成為算法,即“怎樣做?”。 。 在說明變量或過程的模塊中,必須用偽指令PUBLIC告訴鏈接程序此變量或過程能被其他模塊所訪問。initialize carry count MOV AX, VALUE1 MOV DX, VALUE2 ADD AX, DX ADC BX, 00 MOV SUM, AX MOV SUM+2, BX RET SUBPROG1 ENDP END 。this program finds the sum of two externally defined words and stores 。call subprog1 to add value1+value2 CALL SUBPROG2 。 .DATA VALUE1 DW 2050 VALUE2 DW 500 SUM DW 2 DUP(?) PRODUCT DW 2 DUP(?) 。declare data here to be shared .MODEL SMALL 。 匯編,鏈接和運行程序 E D I T O RP R O G R A MA S S E M B L E RP R O G R A ML I N K E RP R O G R A Mm y f i l e . e x em y f i l e . m a pm y f i l e . c r fm y f i l e . l s tm y f i l e . a s mO t h e r o b j f i l e sm y f i l e . o b j 模塊化的程序設計 (從功能分析 ——戰(zhàn)略上看) 主 模 塊模 塊 1 模 塊 2 模 塊 N 庫 存 更 新輸 入 銷 售記 錄部 分 庫 存更 新輸 出 結 果打 印 總 庫存打 印 各 部門 庫 存打 印 訂 貨清 單 。 在基本匯編的基礎上,進一步允許在源程序中把一個指令序列定義為一條宏指令的匯編程序,就叫做宏匯編(MASM)。它除了能夠將匯編語言源程序翻譯成機器語言程序這一主要功能外,還能夠根據(jù)用戶的要求自動分配存儲區(qū)域 (包括程序區(qū)、數(shù)據(jù)區(qū)、暫存區(qū)等 );自動地把各種進位制數(shù)轉換成二進制數(shù),把字符轉換成 ASCII碼,計算表達式的值等;自動對源程序進行檢查,給出錯誤信息 (如非法格式,未定義的助記符、標號,漏掉操作數(shù)等 )等。這個翻譯過程稱為匯編,完成匯編任務的程序稱為匯編程序,見圖 。當然,由于源程序和所要解決的問題的數(shù)學模型之間的關系不夠直觀,使得匯編語言程序設計需要較多的軟件開發(fā)時間,也增加了程序設計過程中出錯的可能性。實際上,用匯編語言編寫的匯編語言源程序就是機器語言程序的符號表示,匯編語言源程序與其經過匯編所產生的目標代碼程序之間有明顯的一一對應關系,故也稱匯編語言為符號語言。 用 高級 語 言編 寫的 源 程序編 譯或 解 釋 程 序 目 標程 序 3.匯編語言 (Assembly Language) 匯編語言是一種采用助記符表示的程序設計語言,即用助記符來表示指令的操作碼和操作數(shù),用標號或符號代表地址、常量或變量。 由于高級語言程序是在未考慮機器的結構特點的條件下編寫的,因而它就不能充分利用某種具體 CPU所具有的某些特性,而通過編譯或解釋程序生成的目標程序往往比較冗長, 占有較多的內存空間,執(zhí)行時間也比較長,這就限制了它在某些場合下的運用。但是,這種用高級語言編寫的源程序并不能在機器上直接執(zhí)行,需要被翻譯成對應的目標程序 (即機器語言程序 ),機器才能運行。利用這些語言編程,程序員可以完全不考慮機器的結構特點,不必了解和熟記機器的指令系統(tǒng),僅使用一些接近人們書寫習慣的英語和數(shù)學表達式形式的語句去編制程序。 但機器語言程序是計算機惟一能夠直接理解和執(zhí)行的程序 , 具有執(zhí)行速度快 、 占用內存少等特點 。 程序設計概述 客 觀 世 界 的對 象 和 操 作程 序 設 計 語 言的 對 象 和 操 作問 題 空 間解 空 間客 觀 世 界 的 算 法計 算 機 的 算 法程序員對問題的表達人們對結果的解釋H . L e d g a r d 模 型客 觀 世 界 的 對 象輸 出 數(shù) 據(jù) 1. 機器語言 (Machine Language) 機器語言是一種用二進制表示指令和數(shù)據(jù) , 能被機器直接識別的計算機語言 。 3. 掌握子程序與堆棧技術。匯編語言程序設計 程序設計概述 匯編,鏈接和運行程序 模塊化的程序設計 匯編語言程序設計的基本方法 內容與要求: 1. 掌握匯編語言的基本語法、語句、操作數(shù)的尋址 2. 方式與匯編表示、常量與數(shù)值表達式,標號、變量與地址表達式。 2. 掌握順序、分支、循環(huán)程序設計的基本方法和一 般技巧。 4. 了解宏匯編和宏指令的應用。 它的缺點是不直觀 , 不易理解和記憶 , 因此編寫 、 閱讀和修改機器語言程序都比較繁瑣 。 2.高級語言 (High Level Language) 如果說機器語言是面向機器的,那么高級語言 (如 BASIC, FORTRAN等 )則是“面向過程”的語言。這樣編寫的程序與問題本身的數(shù)學模型之間有著良好的對應關系,可在各種機器上通用 (不同機器之間僅做少量修改 )。把具有這種翻譯作用的程序稱為解釋程序或編譯程序,見圖 。例如,實時的數(shù)據(jù)采集、檢測和在線的實時控制等,往往要求程序的目標代碼盡可能少占內存并有盡可能快的執(zhí)行速度,在這些場合下,使用高級語言編寫的程序常常不能滿足要求。助記符一般都是英文字的縮寫,以方便人們書寫、閱讀和檢查。 用匯編語言編寫程序能夠直接利用硬件系統(tǒng)的特性(如寄存器、標志、中斷系統(tǒng)等 )直接對位、字節(jié)、字寄存器或存儲單元、 I/O端口進行處理,同時也能直接使用 CPU 指令系統(tǒng)和指令系統(tǒng)提供的各種尋址方式,編制出高質量的程序,這樣的程序不但占用內存空間少,而且執(zhí)行速度快。 用匯編語言編寫的源程序也需要翻譯成目標程序才能被機器執(zhí)行。 圖 匯編程序的功能示意圖 用 匯 編 語 言編 寫的 源程 序匯 編程 序 目 標 程 序 匯編程序是最早也是最成熟的一種系統(tǒng)軟件。具有這些功能的匯編程序又稱為基本匯編 (或小匯編 ASM)。它包含全部 ASM功能,還增加了宏指令、結構、記錄等高級匯編語言功能。one file will contain the main module: EXTRN SUBPROG1: FAR EXTRN SUBPROG2: FAR PUBLIC VALUE1,VALUE2,SUM,PRODUCT 。 .STACK 64 。 .CODE MAIN PROC FAR MOV AX, DATA MOV DS, AX CALL SUBPROG1 。call subprog2 to mul value1*value2 MOV AH, 4CH INT 21H MAIN ENDP END MAIN 。the sum in a location defined by the calling module EXTRN VALUE1: WORD EXTRN VALUE2: WORD EXTRN SUM: WORD PUBLIC SUBPROG1 .MODEL SMALL .CODE SUBPROG1 PROC FAR SUB BX, BX 。this program finds the product of two externally defined words and stores the product in a location defined by the calling module EXTRN VALUE1: WORD EXTRN VALUE2: WORD EXTRN PRODUCT: WORD PUBLIC SUBPROG2 .MODEL SMALL .CODE SUBPROG2 PROC FAR MOV AX, VALUE1 MOV CX, VALUE2 MUL AX, CX MOV PRODUCT, AX MOV PRODUCT+2, DX RET SUBPROG2 ENDP END 注意: 在調用其他模塊的過程中,必須用偽指令 EXTRN告訴匯編程序 EXTRN后的過程或變量不在此模塊中。 :LINK ++…+ E D I T O RP R O G R A M 1A S S E M B L E RP R O G R A ML I N K E RP R O G R A Mm y f i l e . e x eE D I T O RP R O G R A M 2E D I T O RP R O G R A M nA S S E M B L E RP R O G R A MA S S E M B L E RP R O G R A M 匯編語言程序設計的基本方法(戰(zhàn)術上看) 程序設計步驟 1. 問題的定義 2. 算法及表示方法 3. 選擇適當?shù)闹噶? 4. 編寫程序 結構化程序設計 1. 順序結構 2. 分支結構 3. 循環(huán)結構 4. 子程序設計 1. 編輯程序 2. 匯編源程序 3. 鏈接程序 4. 調試源程序 仔細思考程序所要解決的問題,即用自然語言描述“做什么?以及程序做這些工作時的時序” 如: 。 。 表示方法: 1) 流程圖 2) 偽指令 是否開 始從 傳 感 器讀 數(shù) 值加 7存 儲 結 果延 時 1 小 時2 4 個 樣 本 了 嗎 ?結 束 3. 選擇適當?shù)闹噶睿ò垂δ?) 一、數(shù)據(jù)傳送類指令 二、算術運算指令 三、位操作指令 四、串操作指令 五、程序轉移指令 六、處理機控制指令 4. 編寫程序(從算法到程序) 將算法轉換成匯編語言 ( 1) 建立算法使用的數(shù)據(jù)結構 1) 數(shù)據(jù)將存放在存儲器還是存放在寄存器中 2) 數(shù)據(jù)類型是字節(jié)、字或雙字? 3) 有多少數(shù)據(jù)項? 4) 數(shù)據(jù)為無符號數(shù)還是符號數(shù)? ( 2) 在代碼段開始處寫出變量、段寄存器、外圍設備等所需要的初始化指令。 ( 4)按照主要指令的要求,用 MOV指令或其他的指令把數(shù)據(jù)送到正確的位置。 : 最高溫度加最低溫度 將和除以 2得到平均溫度 : DATA SEGMENT HI_TEMP DB 92H 。 ADD dest, source 。dest= dest+ source+ CF DIV source 。 2. 算法設計: 轉換第一個 ASCII碼到非壓縮 BCD數(shù)。 將第一個 BCD數(shù)的低半字節(jié)左移四位。 3. 數(shù)據(jù)結構: DATA SEGMENT VAL_ASC DB ‘ 47’ VAL_BCD DB ? DATA ENDS 4. 初始化表: MOV AX, DATA