微機(jī)課件第五單元_第1頁
微機(jī)課件第五單元_第2頁
微機(jī)課件第五單元_第3頁
微機(jī)課件第五單元_第4頁
微機(jī)課件第五單元_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第五章

匯編語言程序設(shè)計(jì)5.1匯編語言的基本概念

5.1.1匯編語言源程序格式

5.1.2

匯編程序上機(jī)過程5.2偽指令語句

5.2.1數(shù)據(jù)定義偽指令

5.2.2符號(hào)定義偽指令

5.2.3段定義語句

5.2.4過程定義語句5.3宏指令語句5.4DOS系統(tǒng)與BIOS系統(tǒng)IO子過程調(diào)用5.5匯編語言程序設(shè)計(jì)的基本方法

5.5.1順序結(jié)構(gòu)程序

5.5.2分支結(jié)構(gòu)程序設(shè)計(jì)

5.5.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

5.5.4子程序設(shè)計(jì)重點(diǎn)

1.子程序設(shè)計(jì)方法

2.宏匯編設(shè)計(jì)方法

3.程序設(shè)計(jì)基本思路

難點(diǎn) 程序(分支循環(huán)等結(jié)構(gòu))設(shè)計(jì)思路本章重點(diǎn)、難點(diǎn)5匯編語言程序設(shè)計(jì)(5.1匯編語言的基本概念)5.1.1匯編語言格式1.整體格式—分段結(jié)構(gòu):匯編語言源程序由若干段(SEGMENT)組成。每個(gè)段以SEGMENT語句開始,以ENDS語句結(jié)束。各段內(nèi)均有若干行語句。源程序的結(jié)尾是END語句;后面的地址標(biāo)號(hào)指明最開始執(zhí)行指令。D

segment

Array

db12h,34hD

endsC

segment

Start:

leasi,Array

mov

al,[si]

cmpal,80h

jbL

subal,80h

L:

nop

C

endsendStart5匯編語言程序設(shè)計(jì)(5.1匯編語言的基本概念)5.1.1匯編語言格式2.語句類型:指令語句:指令是給CPU的命令,在運(yùn)行時(shí)由CPU執(zhí)行。每條指令對(duì)應(yīng)CPU一種特定的操作,例如傳送、加法等語句;編譯后,每條指令產(chǎn)生一一對(duì)應(yīng)的機(jī)器指令碼;偽指令語句:偽指令是給編譯程序的命令,在編譯過程中由編譯程序處理。如定義段、定義變量等語句;編譯后,偽指令不產(chǎn)生與之相應(yīng)的機(jī)器碼。宏指令語句:是一種用戶利用偽指令語句自己定義的語句。D

segment

Array

db12h,34hD

endsC

segment

Start:

leasi,Array

mov

al,[si]

cmpal,80h

jbL

subal,80h

L:

nop

C

endsendStart5匯編語言程序設(shè)計(jì)(5.1匯編語言的基本概念)5.1.1匯編語言格式3.語句格式:指令語句與偽指令語句的格式類似。格式一般為:[名字]

助記符

[操作數(shù)]對(duì)于指令語句:名字即為地址標(biāo)號(hào),存放其后指令在代碼段的偏址。名字后須加“:”對(duì)于偽指令語句:名字為段名、變量名等(也常含地址)。通常后面不用加“:”D

segment

Array

db12h,34hD

endsC

segment

Start:

leasi,Array

mov

al,[si]

cmpal,80h

jbL

subal,80h

L:

nop

C

endsendStart5匯編語言程序設(shè)計(jì)(5.1匯編語言的基本概念)5.1.2匯編語言生成可執(zhí)行文件過程用常用軟件(如Windows記事本軟件)編寫源程序(.asm文件)用編譯程序(如masm)編譯源程序,生成目標(biāo)文件(.obj文件)用鏈接程序(如link)鏈接目標(biāo)文件,生成可執(zhí)行文件(.exe文件等)2.實(shí)現(xiàn)方法:1)可用集成環(huán)境較高的軟件實(shí)現(xiàn),如emu8086。這些軟件集編寫源程序、編譯、鏈接功能與一體,以上步驟可自動(dòng)完成。2)可用宏編譯程序(如masm)、鏈接程序(如link)逐步實(shí)現(xiàn)。3)可用行編譯程序(如debug)實(shí)現(xiàn)。1.實(shí)現(xiàn)過程:5匯編語言程序設(shè)計(jì)5.2偽指令語句

5.2.1數(shù)據(jù)定義偽指令

5.2.2符號(hào)定義偽指令

5.2.3段定義語句

5.2.4過程定義語句5匯編語言程序設(shè)計(jì)(5.2偽指令語句)5.2.1數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令用途是:定義變量并給變量賦初值,或僅定義變量(分配存儲(chǔ)單元),而不賦予特定的值。常用的有DB,DW,DD。

1.DB(DefineByte)

用于定義字節(jié)型變量。

DB后面的操作數(shù)每個(gè)占有1個(gè)字節(jié)。2.DW(DefineWord)

定義變量的類型為字(WORD)。DW后面的操作數(shù)每個(gè)占1個(gè)字,即2個(gè)字節(jié)。在內(nèi)存中存放時(shí),低位字節(jié)在前,高位字節(jié)在后。

3.DD(DefineDoubleword)

定義變量的類型為雙字(DWORD)。DD后面的操作數(shù)每個(gè)占有2個(gè)字,即4個(gè)字節(jié)。在內(nèi)存中存放時(shí),低位字在前,高位字在后。5匯編語言程序設(shè)計(jì)(5.2偽指令語句)5.2.1數(shù)據(jù)定義偽指令指令的格式一般為:[變量名]助記符操作數(shù)[,操作數(shù)…]

如:ValDB11,22,33,44;定義了4個(gè)字節(jié)型單元,分別存11,22,33,44

StrDB‘Hello’;定義了5個(gè)字節(jié)型單元,分別存5個(gè)字符的ASC碼

SDW100dup(0);定義了100個(gè)字型單元,均存入預(yù)存值0

注:1.變量名后面不跟冒號(hào)。

2.助記符后的操作數(shù)(變量)可為數(shù)組,數(shù)組元素間用逗號(hào)分開。

也可為若干字符組成的串,整串外加引號(hào)

datasegmentval1db012hval2dw034hval3db0abh,0cdhval4dw034h,0abcdhString1db2dup('0')String2dw2dup('0')dataends5.2.2

子程序定義偽指令符號(hào)定義偽指令的用途是給一個(gè)符號(hào)重新命名,或定義新的類型屬性等。符號(hào)包括匯編語言的變量名、標(biāo)號(hào)名、過程名、寄存器名以及指令助記符等。

常用的符號(hào)定義偽指令有EQU、=(等號(hào))和LABEL。

1.EQU

格式:名字

EQU表達(dá)式

其將表達(dá)式的值賦予一名字。以后可用該名字代替此表達(dá)式。式中的表達(dá)式可以是一個(gè)常數(shù)、數(shù)值表達(dá)式等。如:5.2.2

子程序定義偽指令

CR EQU 0100H ;常數(shù)如果源程序中多次引用某表達(dá)式,可利用EQU給其賦一名字,以代替程序中的表達(dá)式,使程序簡(jiǎn)潔。將來如果改變表達(dá)式的值,也只需修改一處5匯編語言程序設(shè)計(jì)(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.包括段定義偽指令和段關(guān)系說明偽指令等3.段定義語句為Segment/Ends。使用格式為:

段名字segment …

段名字ends4.段關(guān)系說明偽指令為Assume,用以指明程序中的段與CPU中段寄存器的關(guān)系。格式為:

Assume段寄存器名:段名[,段寄存器名:段名,…]

注:1)Assume應(yīng)放在可執(zhí)行指令的前面。

2)Assume只是說明了這種關(guān)系,并沒有給CPU段寄存器賦予實(shí)際初值。用戶需添加指令賦值給段寄存器。子程序也稱過程,格式為:子程序名PROC..

子程序名ENDP

5匯編語言程序設(shè)計(jì)(5.2偽指令語句)5.2.4

子程序定義偽指令codesegmentstart:.

call

mysub

;調(diào)用子程序語句

.

mysub

proc

;定義子程序起點(diǎn)語句

.

ret

;返回主程序語句

mysub

endp

;定義子程序終點(diǎn)語句codeendsendstart兩偽指令(PROC與ENDP)前面的子過程名必須一致,且成對(duì)。程序中其他地方用CALL指令調(diào)用子過程,格式為:

Call

過程名子程序中應(yīng)一般有返回指令RET。執(zhí)行RET后,程序返回到Call指令的下一條指令。5.2.2

子程序定義偽指令

(示例):

定義一子過程,實(shí)現(xiàn)輸出n個(gè)‘笑臉’(ASC碼為01h)。n由主程序指定。`codesegmentStart:callmysub

hlt

mysubprocpushaxpushdx

movah,02h

movdl,01h

int21hpopdxpopaxret

mysub

endp

endsendStart

5匯編語言程序設(shè)計(jì)5.3宏指令語句(宏語句)宏指令語句:用宏定義偽指令定義的語句(包括指令與偽指令)。宏定義偽指令為:MACRO與ENDM。使用格式為:宏指令名MACRO參數(shù)[,參數(shù),…]

(宏定義體)

宏指令名

ENDM

以上語句將一個(gè)宏指令名定義為宏定義體(宏偽指令中包含的程序段)。宏語句定義后,用宏調(diào)用語句調(diào)用,格式為:宏指令名參數(shù)[,參數(shù),…]

編譯時(shí),宏指令名被替換為相應(yīng)的宏定義體(這個(gè)過程稱為宏擴(kuò)展)。宏必須先定義后調(diào)用。codesegment

mymac

macroN;

定義宏起點(diǎn)語句

. .

mymac

endm

;定義宏終點(diǎn)語句

Start:.

mymac

N

;宏調(diào)用語句

.codeendsendstart5.3宏定義指令

(示例):Csegment

MymacmacroN

movah,02h

movdl,N

int21h

Mymac

endm

Start:

mymac1

hltCendsendStart定義一宏,實(shí)現(xiàn)輸出n個(gè)‘笑臉’(ASC碼為01h)。n由宏參數(shù)指定。宏指令與子程序比較:

宏指令是用一條指令來代替一段程序以簡(jiǎn)化源程序,子程序也有類似功能。兩者區(qū)別為:

(1)宏指令在匯編過程中進(jìn)行處理,在每個(gè)宏調(diào)用處,將相應(yīng)的宏體插入;而子程序指令由CPU處理,調(diào)用子程序時(shí),將IP轉(zhuǎn)移到子程序的入口地址。

(2)宏指令簡(jiǎn)化了源程序,但不能簡(jiǎn)化目標(biāo)程序。匯編以后,在每個(gè)宏調(diào)用處,宏體中指令的機(jī)器代碼被拷入,因此不節(jié)省內(nèi)存單元;對(duì)于子程序來說,在目標(biāo)程序中定義子程序的地方將產(chǎn)生相應(yīng)的機(jī)器代碼,但每次調(diào)用時(shí),只需用CALL指令,不再重復(fù)出現(xiàn)子程序的機(jī)器代碼,可以節(jié)省內(nèi)存單元。

(3)從執(zhí)行時(shí)間來看,調(diào)用子程序和從子程序返回需要保護(hù)斷點(diǎn)、恢復(fù)斷點(diǎn)等,這些都將額外占用CPU的時(shí)間;而宏指令不需要,相對(duì)來說,執(zhí)行速度較快。5匯編語言程序設(shè)計(jì)5.4DOS系統(tǒng)與BIOS系統(tǒng)IO子過程調(diào)用

8086微機(jī)提供了兩個(gè)子程序庫,方便程序員實(shí)現(xiàn)磁盤、I/O的使用與管理。一個(gè)包含在磁盤操作系統(tǒng)(DOS,DiskOperationSystem),為DOS提供的一組子程序,稱為DOS系統(tǒng)功能調(diào)用。另一個(gè)包含在基本輸入輸出系統(tǒng)

(BIOS,BasicInputOutputSystem),稱為BIOS服務(wù)子程序。BIOS是一組固化到主板上的ROM芯片上的程序,保存著重要的基本I/O的程序。兩子程序庫實(shí)現(xiàn)的功能主要有:

(1)磁盤的讀/寫及控制管理;

(2)基本輸入/輸出管理(如鍵盤、打印機(jī)、顯示器等);DOS調(diào)用中(INT21H),與鍵盤和顯示器操作相關(guān)功能調(diào)用過程:均采用軟中斷指令I(lǐng)NTn完成。一般有三個(gè)步驟:①子程序的入口參數(shù)送相應(yīng)的寄存器(有些子程序調(diào)用不需要入口參數(shù),可略)。②子程序編號(hào)(即功能號(hào))送AH。③

發(fā)出中斷請(qǐng)求:INTn(n為中斷類型號(hào),如DOS功能調(diào)用時(shí)n=21H)。

5.4DOS系統(tǒng)與BIOS系統(tǒng)IO子過程調(diào)用例1:INT21H中,1號(hào)功能調(diào)用格式:MOV AH,1 INT 21H系統(tǒng)執(zhí)行該功能時(shí)將掃描鍵盤,等待鍵入。一旦有鍵按下,就將鍵值(相應(yīng)字符的ASCII碼值)讀入。先檢查是否是Ctrl+Break,若是,則退出;否則將鍵值送入AL,同時(shí)將字符顯示在屏幕上。5.4DOS系統(tǒng)與BIOS系統(tǒng)IO子過程調(diào)用codesegmentstart:

movah,1h

int21h

hltcodeendsendstart例2:INT21H中,9號(hào)功能調(diào)用格式:MOV DX,待顯示串

首單元的偏址

MOV AH,9

INT 21H功能:本功能使顯示器顯示字符串。要求DS:DX必須指向內(nèi)存中一個(gè)以“$”作為結(jié)束標(biāo)志的串。5.4DOS系統(tǒng)與BIOS系統(tǒng)IO子過程調(diào)用datasegmentStringdb'Assembly,Iloveyou!','$'codesegmentstart:

movax,data

mov

ds,ax

mov

dx,offsetptrString

mov

ah,09h

int21h

hltcodeendsendstart5.5匯編語言程序設(shè)計(jì)的基本方法

5匯編語言程序設(shè)計(jì)5.5.1順序結(jié)構(gòu)程序5.5.2分支結(jié)構(gòu)程序設(shè)計(jì)5.5.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)5.5.4子程序設(shè)計(jì)5匯編語言程序設(shè)計(jì)(5.5匯編語言程序設(shè)計(jì)的基本方法

)5.5.2分支結(jié)構(gòu)程序設(shè)計(jì)

分支程序是利用

能改變標(biāo)志位的指令和轉(zhuǎn)移指令實(shí)現(xiàn)的。

轉(zhuǎn)移指令有無條件轉(zhuǎn)移指令JMP、條件轉(zhuǎn)移指令Jx兩類。

無條件轉(zhuǎn)移指令

將程序轉(zhuǎn)向其后的目的標(biāo)號(hào)指定的地址。

條件轉(zhuǎn)移指令

跟在能改變狀態(tài)標(biāo)志的指令后,根據(jù)狀態(tài)標(biāo)志決定是否轉(zhuǎn)移到其后的目的地址處。

分支與循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(示例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第一單元的段內(nèi)偏址;設(shè)置循環(huán)次數(shù);取得val中的元素;比較該元素與80h;若小于等于,直接處理下一個(gè);否則,將該元素減80h;再將其存至原位置;修改si,指向下一單元;循環(huán)DS:0H存儲(chǔ)器數(shù)據(jù)段:12H84H80H:分支與循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(示例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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論