




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第五章
匯編語言程序設計5.1匯編語言的基本概念
5.1.1匯編語言源程序格式
5.1.2
匯編程序上機過程5.2偽指令語句
5.2.1數(shù)據(jù)定義偽指令
5.2.2符號定義偽指令
5.2.3段定義語句
5.2.4過程定義語句5.3宏指令語句5.4DOS系統(tǒng)與BIOS系統(tǒng)IO子過程調用5.5匯編語言程序設計的基本方法
5.5.1順序結構程序
5.5.2分支結構程序設計
5.5.3循環(huán)結構程序設計
5.5.4子程序設計重點
1.子程序設計方法
2.宏匯編設計方法
3.程序設計基本思路
難點 程序(分支循環(huán)等結構)設計思路本章重點、難點5匯編語言程序設計(5.1匯編語言的基本概念)5.1.1匯編語言格式1.整體格式—分段結構:匯編語言源程序由若干段(SEGMENT)組成。每個段以SEGMENT語句開始,以ENDS語句結束。各段內均有若干行語句。源程序的結尾是END語句;后面的地址標號指明最開始執(zhí)行指令。D
segment
Array
db12h,34hD
endsC
segment
Start:
leasi,Array
mov
al,[si]
cmpal,80h
jbL
subal,80h
L:
nop
C
endsendStart5匯編語言程序設計(5.1匯編語言的基本概念)5.1.1匯編語言格式2.語句類型:指令語句:指令是給CPU的命令,在運行時由CPU執(zhí)行。每條指令對應CPU一種特定的操作,例如傳送、加法等語句;編譯后,每條指令產生一一對應的機器指令碼;偽指令語句:偽指令是給編譯程序的命令,在編譯過程中由編譯程序處理。如定義段、定義變量等語句;編譯后,偽指令不產生與之相應的機器碼。宏指令語句:是一種用戶利用偽指令語句自己定義的語句。D
segment
Array
db12h,34hD
endsC
segment
Start:
leasi,Array
mov
al,[si]
cmpal,80h
jbL
subal,80h
L:
nop
C
endsendStart5匯編語言程序設計(5.1匯編語言的基本概念)5.1.1匯編語言格式3.語句格式:指令語句與偽指令語句的格式類似。格式一般為:[名字]
助記符
[操作數(shù)]對于指令語句:名字即為地址標號,存放其后指令在代碼段的偏址。名字后須加“:”對于偽指令語句:名字為段名、變量名等(也常含地址)。通常后面不用加“:”D
segment
Array
db12h,34hD
endsC
segment
Start:
leasi,Array
mov
al,[si]
cmpal,80h
jbL
subal,80h
L:
nop
C
endsendStart5匯編語言程序設計(5.1匯編語言的基本概念)5.1.2匯編語言生成可執(zhí)行文件過程用常用軟件(如Windows記事本軟件)編寫源程序(.asm文件)用編譯程序(如masm)編譯源程序,生成目標文件(.obj文件)用鏈接程序(如link)鏈接目標文件,生成可執(zhí)行文件(.exe文件等)2.實現(xiàn)方法:1)可用集成環(huán)境較高的軟件實現(xiàn),如emu8086。這些軟件集編寫源程序、編譯、鏈接功能與一體,以上步驟可自動完成。2)可用宏編譯程序(如masm)、鏈接程序(如link)逐步實現(xiàn)。3)可用行編譯程序(如debug)實現(xiàn)。1.實現(xiàn)過程:5匯編語言程序設計5.2偽指令語句
5.2.1數(shù)據(jù)定義偽指令
5.2.2符號定義偽指令
5.2.3段定義語句
5.2.4過程定義語句5匯編語言程序設計(5.2偽指令語句)5.2.1數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令用途是:定義變量并給變量賦初值,或僅定義變量(分配存儲單元),而不賦予特定的值。常用的有DB,DW,DD。
1.DB(DefineByte)
用于定義字節(jié)型變量。
DB后面的操作數(shù)每個占有1個字節(jié)。2.DW(DefineWord)
定義變量的類型為字(WORD)。DW后面的操作數(shù)每個占1個字,即2個字節(jié)。在內存中存放時,低位字節(jié)在前,高位字節(jié)在后。
3.DD(DefineDoubleword)
定義變量的類型為雙字(DWORD)。DD后面的操作數(shù)每個占有2個字,即4個字節(jié)。在內存中存放時,低位字在前,高位字在后。5匯編語言程序設計(5.2偽指令語句)5.2.1數(shù)據(jù)定義偽指令指令的格式一般為:[變量名]助記符操作數(shù)[,操作數(shù)…]
如:ValDB11,22,33,44;定義了4個字節(jié)型單元,分別存11,22,33,44
StrDB‘Hello’;定義了5個字節(jié)型單元,分別存5個字符的ASC碼
SDW100dup(0);定義了100個字型單元,均存入預存值0
注:1.變量名后面不跟冒號。
2.助記符后的操作數(shù)(變量)可為數(shù)組,數(shù)組元素間用逗號分開。
也可為若干字符組成的串,整串外加引號
datasegmentval1db012hval2dw034hval3db0abh,0cdhval4dw034h,0abcdhString1db2dup('0')String2dw2dup('0')dataends5.2.2
子程序定義偽指令符號定義偽指令的用途是給一個符號重新命名,或定義新的類型屬性等。符號包括匯編語言的變量名、標號名、過程名、寄存器名以及指令助記符等。
常用的符號定義偽指令有EQU、=(等號)和LABEL。
1.EQU
格式:名字
EQU表達式
其將表達式的值賦予一名字。以后可用該名字代替此表達式。式中的表達式可以是一個常數(shù)、數(shù)值表達式等。如:5.2.2
子程序定義偽指令
CR EQU 0100H ;常數(shù)如果源程序中多次引用某表達式,可利用EQU給其賦一名字,以代替程序中的表達式,使程序簡潔。將來如果改變表達式的值,也只需修改一處5匯編語言程序設計(5.2偽指令語句)5.2.3段定義偽指令Datasegment…DataendsStacksegment
stack…StackendsCodesegmentassumecs:Code,ds:Data,ss:StackStart:
movax,Data
mov
ds,ax
movax,Extr
mov
es,ax
movax,Stack
mov
ss,ax…Codeends1.其用途是在匯編程序中定義段。2.包括段定義偽指令和段關系說明偽指令等3.段定義語句為Segment/Ends。使用格式為:
段名字segment …
段名字ends4.段關系說明偽指令為Assume,用以指明程序中的段與CPU中段寄存器的關系。格式為:
Assume段寄存器名:段名[,段寄存器名:段名,…]
注:1)Assume應放在可執(zhí)行指令的前面。
2)Assume只是說明了這種關系,并沒有給CPU段寄存器賦予實際初值。用戶需添加指令賦值給段寄存器。子程序也稱過程,格式為:子程序名PROC..
子程序名ENDP
5匯編語言程序設計(5.2偽指令語句)5.2.4
子程序定義偽指令codesegmentstart:.
call
mysub
;調用子程序語句
.
mysub
proc
;定義子程序起點語句
.
ret
;返回主程序語句
mysub
endp
;定義子程序終點語句codeendsendstart兩偽指令(PROC與ENDP)前面的子過程名必須一致,且成對。程序中其他地方用CALL指令調用子過程,格式為:
Call
過程名子程序中應一般有返回指令RET。執(zhí)行RET后,程序返回到Call指令的下一條指令。5.2.2
子程序定義偽指令
(示例):
定義一子過程,實現(xiàn)輸出n個‘笑臉’(ASC碼為01h)。n由主程序指定。`codesegmentStart:callmysub
hlt
mysubprocpushaxpushdx
movah,02h
movdl,01h
int21hpopdxpopaxret
mysub
endp
endsendStart
5匯編語言程序設計5.3宏指令語句(宏語句)宏指令語句:用宏定義偽指令定義的語句(包括指令與偽指令)。宏定義偽指令為:MACRO與ENDM。使用格式為:宏指令名MACRO參數(shù)[,參數(shù),…]
(宏定義體)
宏指令名
ENDM
以上語句將一個宏指令名定義為宏定義體(宏偽指令中包含的程序段)。宏語句定義后,用宏調用語句調用,格式為:宏指令名參數(shù)[,參數(shù),…]
編譯時,宏指令名被替換為相應的宏定義體(這個過程稱為宏擴展)。宏必須先定義后調用。codesegment
mymac
macroN;
定義宏起點語句
. .
mymac
endm
;定義宏終點語句
Start:.
mymac
N
;宏調用語句
.codeendsendstart5.3宏定義指令
(示例):Csegment
MymacmacroN
movah,02h
movdl,N
int21h
Mymac
endm
Start:
mymac1
hltCendsendStart定義一宏,實現(xiàn)輸出n個‘笑臉’(ASC碼為01h)。n由宏參數(shù)指定。宏指令與子程序比較:
宏指令是用一條指令來代替一段程序以簡化源程序,子程序也有類似功能。兩者區(qū)別為:
(1)宏指令在匯編過程中進行處理,在每個宏調用處,將相應的宏體插入;而子程序指令由CPU處理,調用子程序時,將IP轉移到子程序的入口地址。
(2)宏指令簡化了源程序,但不能簡化目標程序。匯編以后,在每個宏調用處,宏體中指令的機器代碼被拷入,因此不節(jié)省內存單元;對于子程序來說,在目標程序中定義子程序的地方將產生相應的機器代碼,但每次調用時,只需用CALL指令,不再重復出現(xiàn)子程序的機器代碼,可以節(jié)省內存單元。
(3)從執(zhí)行時間來看,調用子程序和從子程序返回需要保護斷點、恢復斷點等,這些都將額外占用CPU的時間;而宏指令不需要,相對來說,執(zhí)行速度較快。5匯編語言程序設計5.4DOS系統(tǒng)與BIOS系統(tǒng)IO子過程調用
8086微機提供了兩個子程序庫,方便程序員實現(xiàn)磁盤、I/O的使用與管理。一個包含在磁盤操作系統(tǒng)(DOS,DiskOperationSystem),為DOS提供的一組子程序,稱為DOS系統(tǒng)功能調用。另一個包含在基本輸入輸出系統(tǒng)
(BIOS,BasicInputOutputSystem),稱為BIOS服務子程序。BIOS是一組固化到主板上的ROM芯片上的程序,保存著重要的基本I/O的程序。兩子程序庫實現(xiàn)的功能主要有:
(1)磁盤的讀/寫及控制管理;
(2)基本輸入/輸出管理(如鍵盤、打印機、顯示器等);DOS調用中(INT21H),與鍵盤和顯示器操作相關功能調用過程:均采用軟中斷指令INTn完成。一般有三個步驟:①子程序的入口參數(shù)送相應的寄存器(有些子程序調用不需要入口參數(shù),可略)。②子程序編號(即功能號)送AH。③
發(fā)出中斷請求:INTn(n為中斷類型號,如DOS功能調用時n=21H)。
5.4DOS系統(tǒng)與BIOS系統(tǒng)IO子過程調用例1:INT21H中,1號功能調用格式:MOV AH,1 INT 21H系統(tǒng)執(zhí)行該功能時將掃描鍵盤,等待鍵入。一旦有鍵按下,就將鍵值(相應字符的ASCII碼值)讀入。先檢查是否是Ctrl+Break,若是,則退出;否則將鍵值送入AL,同時將字符顯示在屏幕上。5.4DOS系統(tǒng)與BIOS系統(tǒng)IO子過程調用codesegmentstart:
movah,1h
int21h
hltcodeendsendstart例2:INT21H中,9號功能調用格式:MOV DX,待顯示串
首單元的偏址
MOV AH,9
INT 21H功能:本功能使顯示器顯示字符串。要求DS:DX必須指向內存中一個以“$”作為結束標志的串。5.4DOS系統(tǒng)與BIOS系統(tǒng)IO子過程調用datasegmentStringdb'Assembly,Iloveyou!','$'codesegmentstart:
movax,data
mov
ds,ax
mov
dx,offsetptrString
mov
ah,09h
int21h
hltcodeendsendstart5.5匯編語言程序設計的基本方法
5匯編語言程序設計5.5.1順序結構程序5.5.2分支結構程序設計5.5.3循環(huán)結構程序設計5.5.4子程序設計5匯編語言程序設計(5.5匯編語言程序設計的基本方法
)5.5.2分支結構程序設計
分支程序是利用
能改變標志位的指令和轉移指令實現(xiàn)的。
轉移指令有無條件轉移指令JMP、條件轉移指令Jx兩類。
無條件轉移指令
將程序轉向其后的目的標號指定的地址。
條件轉移指令
跟在能改變狀態(tài)標志的指令后,根據(jù)狀態(tài)標志決定是否轉移到其后的目的地址處。
分支與循環(huán)結構程序設計(示例1):例:編程將一串中大于80H的數(shù)減去80H,小于等于80H的不變。datasegment
valdb012h,084h,080h,0ffhendscodesegmentStart:
…leasi,val
mov
cx,4Next:
moval,[si]
cmpal,80h
jbeSmallersubal,80hmov[si],alSmaller:incsiloopNextcodeendsendStart;獲得val第一單元的段內偏址;設置循環(huán)次數(shù);取得val中的元素;比較該元素與80h;若小于等于,直接處理下一個;否則,將該元素減80h;再將其存至原位置;修改si,指向下一單元;循環(huán)DS:0H存儲器數(shù)據(jù)段:12H84H80H:分支與循環(huán)結構程序設計(示例2):例:一串中含有一@,找出其在串中位置loc,并將loc存到整串下一單元。datasegmentstr1db‘Hi’str2db‘Email@’locdb0endscodesegmentStart:..
leasi,str2
mov
bx,si
mov
cx,11Next:
moval,[si]
cmpal,‘@’
jnzbreakincsiloopBreak:subsi,bx
mov[loc],sicodeendsendStartDS:0H
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025河南鄭州市建筑設計研究院招聘35人考前自測高頻考點模擬試題及答案詳解(奪冠系列)
- 2025年臨沂平邑縣部分事業(yè)單位公開招聘教師(17名)模擬試卷及1套完整答案詳解
- 2025湖北隨州市曾都醫(yī)院引進急需緊缺高層次人才15人模擬試卷及一套答案詳解
- 2025年咸陽秦都怡心學校招聘考前自測高頻考點模擬試題及一套完整答案詳解
- 2025廣東東莞市寮步鎮(zhèn)人民政府招聘專職安全員10人模擬試卷及參考答案詳解1套
- 2025海南三亞市第二人民醫(yī)院第一次(考核)招聘員額制工作人員(第12號)考前自測高頻考點模擬試題附答案詳解(完整版)
- 2025第十三屆貴州人才博覽會貴陽貴安事業(yè)單位引進人才770人考前自測高頻考點模擬試題及答案詳解(有一套)
- 2025黑龍江黑河市漠河市公益性崗位招聘18名考前自測高頻考點模擬試題及答案詳解一套
- 2025廣東中共中山市委政法委員會所屬事業(yè)單位招聘事業(yè)單位人員4人模擬試卷及答案詳解一套
- 2025年陜西中煙工業(yè)有限責任公司招聘筆試模擬試卷及答案詳解一套
- 四講四有課件
- 滬教3起五年級上冊Module 2 Relationships 單元整體作業(yè)設計
- 出租物業(yè)安全協(xié)議書
- AP微積分BC2024-2025年真題匯編試卷(積分與級數(shù)深度解析與挑戰(zhàn))
- GB/T 45637-2025電動牙刷性能測試方法
- 【中國信通院】eSIM產業(yè)熱點問題研究報告(2025年)
- 2024-2025學年河北省石家莊市新華區(qū)四年級(上)期末數(shù)學試卷(含答案)
- 2024年陜西省學業(yè)水平考試地理試題分析 課件
- GB/T 25820-2025包裝用鋼帶
- 小學生消防安全課件圖片
- 實驗室人員準入制度
評論
0/150
提交評論