如何編寫匯編程序
㈠ 如何用Keil編寫匯編語言程序
1、打開Keil,新建一個51工程,同時新建一個main.c文件,並加入到工程源代碼當中。
㈡ 如何用匯編編寫以下程序
一個匯編程序是由多個段組成的,這些段被用來存放代碼、數據或當作棧空間來使用。
一個有意義的匯編程序中至少要有一個段,這個段用來存放代碼。
程序結束標記
End 是一個匯編程序的結束標記,編譯器在編譯匯編程序的過程中,如果碰到了偽指令 end,就結束對源程序的編譯。
如果程序寫完了,要在結尾處加上偽指令end 。否則,編譯器在編譯程序時,無法知道程序在何處結束。
㈢ 匯編程序是怎麼編譯的
匯編語言是一種低級語言,匯編語言是匯編指令集、偽指令集和使用它們規則的統稱,使用具有一定含義的符號為助憶符,用指令助憶符、符號地址等組成的符號指令稱為匯編格式指令。
過程:
編輯:用編輯軟體(EDIT.EXE或記事本)形成源程序(.ASM)
匯編:用匯編程序(MASM.EXE)對源程序進行匯編,形成目標文件(.OBJ),格式如下:MASM LX.ASM;
連接:用連接程序(LINK.EXE)對目標程序進行連接,形成可執行文件(.EXE),格式如下:LINK LX.OBJ;
執行:如果結果在屏幕在顯示,則直接執行可執行文件。
調試:用調試程序(LINK.EXE)對可執行文件進行調試,格式如下:DEBUG LX.EXE
匯編語言中,用助記符(Memoni)代替操作碼,用地址符號(Symbol)或標號(Label)代替地址碼。匯編程序(如MASM)的原理實際上就是把匯編的代碼轉成電腦可以識別的二進制碼
㈣ 匯編語言程序設計的一般步驟是什麼
匯編語言程序設計的基本步驟 了解了匯編語言指令的功能和用法,了解了匯編語言程序的編寫格式,就可以編制完整的匯編語言程序了。一個程序通常具有順序、分支、循環和子程序4種結構形式。順序程序結構就是指完全按順序逐條執行的指令序列。在程序設計過程中,順序結構大量存在,屢見不鮮。但一個完整的程序只是逐條去執行指令,這非常少見。常見的程序結構,是上述4種結構的混合體。一般來說,編制一個匯編語言程序的步驟如下:(1) 分析題意,確定演算法或演算法思想。演算法是指解決問題的方法和步驟。比如現有的一些計算方法和日常生活中解決問題的邏輯思維推理方法等。(2) 根據演算法畫出流程圖,簡單的情況也可不畫。畫出描述演算法的流程圖,可以首先從圖上檢驗演算法的正確性,減少出錯的可能,使得動手編寫程序時的思路更加清晰。(3) 分配存儲空間和工作單元,合理地使用寄存器。分配存儲空間和工作單元,是指存儲空間的分段和數據定義。另外,由於寄存器的數量有限,編寫程序時經常會感到寄存器不夠用。因此,對於位元組數據,要盡量使用8位寄存器。而採用適當的定址方式,也會達到節省寄存器的目的。(4) 根據流程圖編寫程序。這是編制匯編語言程序最為重要的一步。演算法里規定的功能,是要通過一條條指令描述出來的。為了提高編程能力,對於初學者,一是要多閱讀現有的程序,以學習別人的編程經驗;而更為重要的是,必須多親自動手編寫,不要怕失敗,只有通過無數次失敗,才能從中積累自己的編程經驗。(5) 上機調試運行程序。通過匯編的源程序,只能說明它裡面不存在語法錯誤。但是它是否能達到演算法所要求的預期效果,還必須經過上機調試,用一些實驗數據來測試,才能夠真正地得出結論。可以這么說,即使是一個非常有經驗的程序員,也沒有百分之百的把握說他編寫的程序一次就成功。 用流程圖表示演算法 流程圖用一些圖形框來代表各種操作。用圖形表示演算法,直觀形象,可以用來幫助人們對演算法的理解。下圖給出了一些常用的流程圖符號。
上圖中的判斷框(菱形)用來對一個給定的條件作出判斷,以決定如何執行其後的操作。它有一個入口,兩個出口,如下圖(a)所示。
連接點(圓圈)是用來將畫在不同地方的流程線連接起來。例如在下圖(b)里,有兩個圈裡寫著數字1的圓圈,它表示是從左邊的1出來,進到右邊圖的1里(這由流程線的方向給出)。可以看出,這兩個點其實就是同一個點,只是由於畫不下而分開來畫的。用連接點,可以避免流程圖中的流程線相互交叉或過長,從而使流程圖清晰。
注釋框不是流程圖中必需的部分。在流程圖中使用它,是為了對流程圖中的某些框的操作做一些必要的說明,以便使人們能夠更好地通過流程圖來理解演算法。
處理框反映做些什麼樣的操作,如把某個單元的內容送入某個寄存器,從某個存儲單元取出數據等。它是流程圖里最為本質的、出現最多的圖形框。
輸入/輸出框反映程序的輸入和輸出情況。計算機程序無外乎接收數據,進行處理,然後加以輸出,所以輸入/輸出框是必不可少的。
㈤ 匯編語言程序設計步驟 有那幾步
匯編語言程序設計步驟: 1、 分析問題,抽象出描述問題的數據模型 2、 確定問題的演算法思想 3、 畫出流程圖或結構圖 4、 分配存儲器和工作單元(寄存器) 5、 逐條編寫程序 6、 靜態檢查,上機調試 例:編程查找考生的最高分,假設所有考生分數已存入計算機內存。 1、 分析問題 根據條件、特點、規律 →數學模型 本例分數已給定為0~200之間的整數集合(考慮加試分) ,記為{S},找max{S}(註: 簡單問題不一定寫數學模型) 。 2、 確定演算法思想 最好利用現成演算法和程序設計方法,若無,則需根據實踐經驗總結演算法思想。如本例, 從成績單第一分數往下看,邊看邊比較,記住較高分,舍棄較低分,直至看完,最高分存於 腦中。歸納演算法思想:建立數據指針並指向數據區首地址。將第一數取入寄存器(如AL) , 與下一數比較,若下一數大則將其取入寄存器,否則調整指針,再與下一數比較,重復上述 過程,直至比較完畢,寄存器中即最高分。 讀分數用MOV指令,比較用CMP指令,分析判斷用條件轉移指令。 3、 畫流程圖或結構圖 有邏輯流程、演算法流程、程序流程等,復雜問題需畫模塊結構。本例簡單,只畫出程序 流程圖(用模塊化結構的N-S流程圖表示) : 本例的N-S流程圖 圖中初始化包括:設一個計數器,將分數個數減一後送計數器,每比較一次減一,至 零查找結束;建立一個指針指向數據區。 開始 初始化 取第一數到寄存器 與下一數比較 下一數大? 是 否 取大數到寄存器 修改指針,計數次數減一 返回到循環體開始,直到計數次數為0退出循環 結束 4、 分配存儲器空間和工作單元(寄存器) 定義數據段、堆棧段、代碼段等。工作單元一般用寄存器。本例:分數放數據段,建100 位元組堆棧空間,BX作數據指針,CX作計數器,AL放最高分。 5、 逐條編寫程序 DATA SEGMENT FEN DB 85,90,60,75,87,35,80,78,96,82…… ;存分數 MAX DB ? ;存最高分 DATA ENDS STACK SEGMENT PARA STACK 『STACK』 DB 100 DUP(?) ;100位元組堆棧 STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START PROC FAR PUSH DS MOV AX,0 PUSH AX ;為了返回DOS MOV AX,DATA MOV DS,AX ;置數據段寄存器 MOV BX,OFFSET FEN ;置數據指針 MOV CX,MAX-FEN ;置計數器初值 DEC CX ;N個分數比較N-1次 MOV AL,[BX] ;取第一個分數 LOP: INC BX ;調整指針 CMP AL,[BX] ;與下一數比較 JAE NEXT ;大於等於則轉 MOV AL,[BX] ;否則取下一數 NEXT: LOOP LOP ;計數器減一, ;不為零轉LOP MOV MAX,AL ;存放最高分 RET ;返回DOS START ENDP CODE ENDS END START 6、 靜態檢查,上機調試 選用指令盡量位元組少,使其執行速度快。易錯處應重點查,如比較次數、轉移條件等。 確信無錯後方可上機調試。