第4章匯編語言程序設(shè)計(jì)_第1頁
第4章匯編語言程序設(shè)計(jì)_第2頁
第4章匯編語言程序設(shè)計(jì)_第3頁
第4章匯編語言程序設(shè)計(jì)_第4頁
第4章匯編語言程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩136頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1第第4 4章章匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)2 引言3主要內(nèi)容主要內(nèi)容n匯編語言源程序的結(jié)構(gòu)匯編語言源程序的結(jié)構(gòu)n匯編語言語句格式匯編語言語句格式n偽指令偽指令n功能調(diào)用功能調(diào)用n匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)44.1 匯編語言源程序匯編語言源程序了解:了解:n匯編語言源程序的結(jié)構(gòu)匯編語言源程序的結(jié)構(gòu)n匯編語言語句類型及格式匯編語言語句類型及格式51.程序設(shè)計(jì)語言分類程序設(shè)計(jì)語言分類6789計(jì)算機(jī)語言到機(jī)器碼102.匯編語言源程序與匯編程序匯編語言源程序與匯編程序n匯編語言源程序匯編語言源程序n匯編程序匯編程序用助記符編寫用助記符編寫匯編程序匯編程序匯編語言匯編語言源程序源程序機(jī)器語言機(jī)

2、器語言目標(biāo)程序目標(biāo)程序能把匯編語言源程能把匯編語言源程序翻譯成機(jī)器語言序翻譯成機(jī)器語言程序的系統(tǒng)程序程序的系統(tǒng)程序(.ASM)(8086宏匯編程序?yàn)楹陞R編程序?yàn)镸ASM.EXE)113. 匯編語言程序設(shè)計(jì)與執(zhí)行過程匯編語言程序設(shè)計(jì)與執(zhí)行過程n輸入?yún)R編語言源程序(輸入?yún)R編語言源程序(EDIT)n匯編(匯編(MASM)n鏈接(鏈接(LINK)n調(diào)試(調(diào)試(DEBUG)源文件源文件 . ASM目標(biāo)文件目標(biāo)文件 .OBJ可執(zhí)行文件可執(zhí)行文件.EXE最終程序最終程序 匯編語言源程序的執(zhí)行流程匯編語言源程序的執(zhí)行流程用編輯軟件用編輯軟件(EDIT)編輯匯編輯匯編語言源程序編語言源程序 文件名文件名.ASM

3、用匯編程序用匯編程序MASM.EXE對(duì)源程序?qū)υ闯绦?文件名文件名.ASM 進(jìn)行匯編進(jìn)行匯編有語法錯(cuò)誤有語法錯(cuò)誤嗎?嗎?在磁盤上形成目標(biāo)程序文件在磁盤上形成目標(biāo)程序文件 文件名文件名.OBJ用連接程序用連接程序LINK.EXE對(duì)對(duì) 文件名文件名.OBJ 進(jìn)行連接進(jìn)行連接有錯(cuò)誤嗎?有錯(cuò)誤嗎?在磁盤上形成了可執(zhí)行文件在磁盤上形成了可執(zhí)行文件 文件名文件名.EXE 有有沒沒有有沒沒調(diào)試(調(diào)試(DEBUG)1213一、匯編語言源程序結(jié)構(gòu)一、匯編語言源程序結(jié)構(gòu)141. 匯編語言源程序結(jié)構(gòu)匯編語言源程序結(jié)構(gòu)數(shù)據(jù)段名數(shù)據(jù)段名 SEGMENT 數(shù)據(jù)段名數(shù)據(jù)段名 ENDS附加段名附加段名 SEGMENT 附加段

4、名附加段名 ENDS堆棧段名堆棧段名 SEGMENT 堆棧段名堆棧段名 ENDS代碼段名代碼段名 SEGMENT 代碼段名代碼段名 ENDS END 2.完整的匯編語言源程序例完整的匯編語言源程序例;段定義開始(;段定義開始(DATA段)段);段定義結(jié)束(;段定義結(jié)束(DATA段)段);段定義開始(;段定義開始(CODE段)段);指定段寄存器;指定段寄存器;段定義結(jié)束(;段定義結(jié)束(CODE段)段);整個(gè)源程序結(jié)束;整個(gè)源程序結(jié)束該程序的功能是完成兩個(gè)字節(jié)數(shù)據(jù)相加。該程序的功能是完成兩個(gè)字節(jié)數(shù)據(jù)相加。單段程序框架單段程序框架 CODECODESEGMENTSEGMENTASSUMEASSUME

5、CSCS:CODE CODE ,DSDS:CODECODESTARTSTART:;:; 內(nèi)的部分代表若程序無數(shù)據(jù)定義則可省略內(nèi)的部分代表若程序無數(shù)據(jù)定義則可省略 JMPJMPBEGINBEGIN (數(shù)據(jù)定義)(數(shù)據(jù)定義) BEGINBEGIN: MOVMOVAXAX,CSCS ;置;置DSDS段初值段初值 MOVMOVDSDS,AXAX (功能程序)(功能程序) MOVMOVAHAH,4CH4CH ;返回;返回DOSDOSINTINT21H21HCODECODE ENDS ENDS END ENDSTARTSTART兩段程序框架兩段程序框架 DATADATASEGMENTSEGMENT (數(shù)據(jù)

6、定義)(數(shù)據(jù)定義) DATADATA ENDS ENDSCODECODESEGMENTSEGMENTASSUMEASSUMECSCS:CODECODE,DSDS:DATADATASTARTSTART: MOVMOVAXAX,DATADATA;置;置DSDS段初值段初值 MOV MOV DSDS,AXAX (功能程序)(功能程序) MOV MOVAHAH,4CH4CH ;返回;返回DOSDOS INTINT21H21HCODECODE ENDS ENDSENDENDSTARTSTART四段程序框架四段程序框架 DATA SEGMENT DATA SEGMENT ;置;置DSDS段初值段初值 .(

7、.(數(shù)據(jù)定義數(shù)據(jù)定義) )DATA ENDSDATA ENDSEXTRA SEGMENTEXTRA SEGMENT ( (數(shù)據(jù)定義)數(shù)據(jù)定義)EXTRA ENDSEXTRA ENDSSTAK SEGMENTSTAK SEGMENTBUF DB BUF DB N DUP(?) N DUP(?) ;N;N為預(yù)留堆棧區(qū)間字節(jié)數(shù)為預(yù)留堆棧區(qū)間字節(jié)數(shù)TOP EQU TOP EQU THIS WORDTHIS WORDSTAK ENDSSTAK ENDSCODE SEGMENTCODE SEGMENT ASSUME ASSUMECSCS:CODECODE,DSDS:DATA DATA ASSUME ASS

8、UME SS: STAK, ESSS: STAK, ES:EXTRAEXTRASTARTSTART: MOVMOVAXAX,DATADATA;置;置DSDS段初值段初值 MOVMOVDSDS,AXAX MOV MOVAXAX,STAKSTAK;置;置SSSS段初值段初值 MOVMOVSSSS,AXAX LEA LEASPSP,TOPTOP;置棧頂指針;置棧頂指針 MOVMOVAXAX,EXTRAEXTRA;置;置ESES段初值段初值 MOVMOVESES,AXAX (功能程序)(功能程序) MOVMOVAHAH,4CH4CH;返回;返回DOSDOSINTINT21H21HCODE ENDSCO

9、DE ENDS END ENDSTARTSTART19二、匯編語言語句類型及格式二、匯編語言語句類型及格式201. 匯編語言語句類型匯編語言語句類型指令性語句指令性語句指示性語句指示性語句CPU執(zhí)行的語句,執(zhí)行的語句,能夠生成目標(biāo)代碼能夠生成目標(biāo)代碼CPU不執(zhí)行,而由匯不執(zhí)行,而由匯編程序執(zhí)行的語句,編程序執(zhí)行的語句,不生成目標(biāo)代碼不生成目標(biāo)代碼n匯編指令語句匯編指令語句 匯編后能產(chǎn)生機(jī)器語言匯編后能產(chǎn)生機(jī)器語言代碼,是代碼,是CPU能執(zhí)行的能執(zhí)行的語句。語句。n偽指令語句偽指令語句 也叫指示性語句,只是也叫指示性語句,只是為為匯編程序匯編程序在翻譯源程序在翻譯源程序時(shí)提供相關(guān)信息,并不產(chǎn)時(shí)提

10、供相關(guān)信息,并不產(chǎn)生機(jī)器代碼。生機(jī)器代碼。n宏指令語句宏指令語句 是由若干條指令語句形是由若干條指令語句形成的語句體,編譯時(shí)被展成的語句體,編譯時(shí)被展開。開。匯編語言程序中語句的種類:匯編語言程序中語句的種類:222. 匯編語言語句格式匯編語言語句格式 指令性語句:指令性語句: 標(biāo)號(hào):標(biāo)號(hào): 前綴前綴 助記符助記符 操作數(shù)操作數(shù),操作數(shù)操作數(shù) ;注釋;注釋指令的符號(hào)地址指令的符號(hào)地址標(biāo)號(hào)后要有冒號(hào)標(biāo)號(hào)后要有冒號(hào)操作碼操作碼命令命令CPU要完成的操作要完成的操作注釋前加分號(hào)注釋前加分號(hào)23指示性語句格式指示性語句格式名字名字 偽指令助記符偽指令助記符 參數(shù)表參數(shù)表 ;注釋;注釋可以可以其后不加冒

11、號(hào)其后不加冒號(hào)要處理的對(duì)象要處理的對(duì)象;由符號(hào)由符號(hào)(叫變量名叫變量名)AA指定的內(nèi)存單元類型指定的內(nèi)存單元類型; 定義為兩個(gè)字定義為兩個(gè)字,初值為初值為20H和和30H指示匯編程序指示匯編程序要完成的操作。要完成的操作。243. 標(biāo)號(hào)、名字標(biāo)號(hào)、名字n標(biāo)號(hào)后有冒號(hào),在指令性語句前;名字后不加標(biāo)號(hào)后有冒號(hào),在指令性語句前;名字后不加冒號(hào),在指示性語句前。冒號(hào),在指示性語句前。n命名規(guī)則:英文字母、數(shù)字及專用字符組成命名規(guī)則:英文字母、數(shù)字及專用字符組成( (如如? ?、下劃線、下劃線、 等等) ), ,最大長(zhǎng)度不能超過最大長(zhǎng)度不能超過3131個(gè)個(gè), ,且不能由數(shù)字打頭且不能由數(shù)字打頭, ,不能

12、用保留字不能用保留字( (如寄存器名如寄存器名, ,指令助記符指令助記符, ,偽指令偽指令) )。 254. 操作碼操作碼n指令碼指令碼n偽指令助記符偽指令助記符n指示匯編程序要完成的操作。指示匯編程序要完成的操作。n作用:作用:n定義變量定義變量n分配存儲(chǔ)單元分配存儲(chǔ)單元n指示程序開始和結(jié)束等指示程序開始和結(jié)束等命令命令CPU要完成的操作要完成的操作265. 注注 釋釋n用分號(hào)作為注釋的開始;用分號(hào)作為注釋的開始;n用于說明程序或語句的功能,以便于閱讀用于說明程序或語句的功能,以便于閱讀和理解和理解276. 操作數(shù)操作數(shù)寄存器寄存器存儲(chǔ)器單元存儲(chǔ)器單元常量常量變量或標(biāo)號(hào)變量或標(biāo)號(hào)表達(dá)式表達(dá)式

13、28常常 量量n數(shù)字常量數(shù)字常量n字符串常量字符串常量n例:例:A nMOV AL,An例:例:ABCD匯編時(shí)被譯成對(duì)應(yīng)的匯編時(shí)被譯成對(duì)應(yīng)的ASCII碼碼用單引號(hào)引起的字符或字符串用單引號(hào)引起的字符或字符串29變變 量量n代表內(nèi)存中的數(shù)據(jù)區(qū),程序中視為存儲(chǔ)器代表內(nèi)存中的數(shù)據(jù)區(qū),程序中視為存儲(chǔ)器操作數(shù)操作數(shù)n變量的屬性:變量的屬性: 變量所在段的段地址變量所在段的段地址 變量單元地址與段首地址之變量單元地址與段首地址之 間的位移量。間的位移量。 字節(jié)型、字型和雙字型字節(jié)型、字型和雙字型段段 值值偏移量偏移量類類 型型標(biāo)標(biāo) 號(hào)號(hào)n用以指示某條指令語句的位置(地址)。它可用以指示某條指令語句的位置(

14、地址)。它可以作為程序轉(zhuǎn)移指令的操作數(shù)。以作為程序轉(zhuǎn)移指令的操作數(shù)。標(biāo)號(hào)也具有了三個(gè)屬性:標(biāo)號(hào)也具有了三個(gè)屬性:段地址段地址 標(biāo)號(hào)對(duì)應(yīng)的指令所在段的段地址標(biāo)號(hào)對(duì)應(yīng)的指令所在段的段地址段內(nèi)偏移地址段內(nèi)偏移地址 標(biāo)號(hào)對(duì)應(yīng)的指令所在的段內(nèi)標(biāo)號(hào)對(duì)應(yīng)的指令所在的段內(nèi)EA類型類型NEAR型型 該標(biāo)號(hào)與轉(zhuǎn)移指令在同該標(biāo)號(hào)與轉(zhuǎn)移指令在同一一代碼段。代碼段。FAR型型 該標(biāo)號(hào)與轉(zhuǎn)移指令不在同該標(biāo)號(hào)與轉(zhuǎn)移指令不在同一一代碼段。代碼段。31表達(dá)式表達(dá)式算術(shù)運(yùn)算算術(shù)運(yùn)算邏輯運(yùn)算邏輯運(yùn)算關(guān)系運(yùn)算關(guān)系運(yùn)算取值運(yùn)算和屬性運(yùn)算取值運(yùn)算和屬性運(yùn)算其它運(yùn)算其它運(yùn)算32算術(shù)運(yùn)算和邏輯運(yùn)算符算術(shù)運(yùn)算和邏輯運(yùn)算符n算術(shù)運(yùn)算符算術(shù)運(yùn)算符

15、n+,-,*,/,MODn邏輯運(yùn)算符邏輯運(yùn)算符nAND,OR,NOT,XORn例:例:nMOV AL,8+4-1nMOV AL,8 AND 4注意注意n變量運(yùn)算變量運(yùn)算n只能用只能用變量變量常量,常量,代表的是變量的地址代表的是變量的地址常常量后作為地址所對(duì)應(yīng)的存儲(chǔ)單元??捎昧亢笞鳛榈刂匪鶎?duì)應(yīng)的存儲(chǔ)單元??捎米兞孔兞? -變量,變量,實(shí)質(zhì)是兩個(gè)變量的地址相減,是兩個(gè)變實(shí)質(zhì)是兩個(gè)變量的地址相減,是兩個(gè)變量之間間隔的字節(jié)數(shù)。量之間間隔的字節(jié)數(shù)。33例例 設(shè):設(shè): A ADBDB1 1,2 2,3 3,4 4B BDW 1DW 1,2 2,3 3 ;內(nèi)存分配圖如圖所示;內(nèi)存分配圖如圖所示則則 MOV

16、MOVALAL,A+3A+3;ALAL04H04HMOVMOVBXBX,B+3B+3;BXBX0300H0300HMOVMOVCXCX,B-AB-A;CXCX0004H0004H 01H02H03H04H01H00H02H00H03H00HBAA+3B+3B-A內(nèi)存分配圖返回n邏輯運(yùn)算符與邏輯運(yùn)算指令不同,它只能用于邏輯運(yùn)算符與邏輯運(yùn)算指令不同,它只能用于數(shù)值表達(dá)式中數(shù)值表達(dá)式中例例 AND AL 5 AND 635CPU執(zhí)行時(shí)完成的操作執(zhí)行時(shí)完成的操作匯編程序匯編時(shí)完成的操作匯編程序匯編時(shí)完成的操作返回36關(guān)系運(yùn)算符關(guān)系運(yùn)算符n表示關(guān)系是否成立的運(yùn)算符表示關(guān)系是否成立的運(yùn)算符n參與關(guān)系運(yùn)算的

17、必須是兩個(gè)數(shù)值參與關(guān)系運(yùn)算的必須是兩個(gè)數(shù)值n關(guān)系成立,結(jié)果關(guān)系成立,結(jié)果=FFFFHn關(guān)系不成立,結(jié)果關(guān)系不成立,結(jié)果=0。n運(yùn)算符:運(yùn)算符:nEQ,NE,LT,GT,LE,GE例:例:MOV ALMOV AL,3 LT 43 LT 4MOVMOVAXAX,(M GE N) AND M) OR (M LT N) AND N)(M GE N) AND M) OR (M LT N) AND N);M M、N N為常量,將為常量,將M M、N N中較大者送中較大者送AXAX37取值運(yùn)算符取值運(yùn)算符取得其后變量或標(biāo)號(hào)的偏移地址取得其后變量或標(biāo)號(hào)的偏移地址取得其后變量或標(biāo)號(hào)的段地址取得其后變量或標(biāo)號(hào)的段

18、地址TYPE 取取LENGTH 取所定義存儲(chǔ)區(qū)的長(zhǎng)度取所定義存儲(chǔ)區(qū)的長(zhǎng)度SIZE 取所定義存儲(chǔ)區(qū)的字節(jié)數(shù)取所定義存儲(chǔ)區(qū)的字節(jié)數(shù)n 用于分析存儲(chǔ)器操作數(shù)的屬性用于分析存儲(chǔ)器操作數(shù)的屬性O(shè)FFSETSEG(LENGTH值和TYPE值的乘積)注意:注意: (1 1)如果是變量,則變量的類型有五種:)如果是變量,則變量的類型有五種:1 1(DB DB 字節(jié))、字節(jié))、2 2(DW DW 字)、字)、4 4(DD DD 雙字)、雙字)、8 8(DQ 8DQ 8字節(jié))、字節(jié))、1010(DT 10DT 10字節(jié))字節(jié))。 (2 2)如果是標(biāo)號(hào),則標(biāo)號(hào)的類型有兩種:)如果是標(biāo)號(hào),則標(biāo)號(hào)的類型有兩種:-1-1

19、(NEARNEAR段內(nèi))和段內(nèi))和-2-2(FARFAR段間)段間)。3839取值運(yùn)算符例取值運(yùn)算符例 MOV AX,SEG DATA MOV DS,AX MOV BX,OFFSET DATA LEA BX,DATA等價(jià)于等價(jià)于40取值運(yùn)算符例取值運(yùn)算符例n若若BUFFER存儲(chǔ)區(qū)用如下偽指令定義:存儲(chǔ)區(qū)用如下偽指令定義: BUFFER DW 200 DUP(0)BUFFER DW 200 DUP(0) 則:則: TYPETYPE BUFFER BUFFER 等于等于2 2 LENGTH BUFFERLENGTH BUFFER等于等于200200 SIZE BUFFERSIZE BUFFER等于

20、等于40040041屬性運(yùn)算符屬性運(yùn)算符n 用于指定其后存儲(chǔ)器操作數(shù)的類型用于指定其后存儲(chǔ)器操作數(shù)的類型n 運(yùn)算符:運(yùn)算符:PTRn 例:例: MOV BYTR PTRBX,12H42其它運(yùn)算符其它運(yùn)算符n方括號(hào):方括號(hào): n段重設(shè)符段重設(shè)符 段寄存器名:段寄存器名: 方括號(hào)中內(nèi)容為操作數(shù)的偏移地址方括號(hào)中內(nèi)容為操作數(shù)的偏移地址用于修改默認(rèn)的段基地址用于修改默認(rèn)的段基地址例:MOV AX,ES:BX434.2 偽指令偽指令掌握:掌握:n偽指令的格式及功能偽指令的格式及功能n偽指令的應(yīng)用偽指令的應(yīng)用44偽指令偽指令n由匯編程序執(zhí)行的由匯編程序執(zhí)行的“指令系統(tǒng)指令系統(tǒng)”n作用:作用:n定義變量;定

21、義變量;n分配存儲(chǔ)區(qū)分配存儲(chǔ)區(qū)n定義邏輯段;定義邏輯段;n指示程序開始和結(jié)束;指示程序開始和結(jié)束;n定義過程等。定義過程等。45常用偽指令常用偽指令數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令符號(hào)定義偽指令符號(hào)定義偽指令段定義偽指令段定義偽指令結(jié)束偽指令結(jié)束偽指令過程定義偽指令過程定義偽指令宏命令偽指令宏命令偽指令46一、數(shù)據(jù)定義偽指令一、數(shù)據(jù)定義偽指令n用于定義數(shù)據(jù)區(qū)中變量的類型及大小用于定義數(shù)據(jù)區(qū)中變量的類型及大小n格式:格式: 變量名變量名 偽指令助記符偽指令助記符 操作數(shù),操作數(shù), ;注釋注釋表示符號(hào)地址表示符號(hào)地址定義變量類型定義變量類型定義變量值定義變量值及區(qū)域大小及區(qū)域大小471. 數(shù)據(jù)定義偽指

22、令助記符數(shù)據(jù)定義偽指令助記符nDB 定義的變量為字節(jié)型定義的變量為字節(jié)型nDW 定義的變量為字類型(雙字節(jié))定義的變量為字類型(雙字節(jié))nDD 定義的變量為雙字型(定義的變量為雙字型(4字節(jié))字節(jié))nDQ 定義的變量為定義的變量為4字型(字型(8字節(jié)字節(jié))nDT 定義的變量為定義的變量為10字節(jié)型字節(jié)型48數(shù)據(jù)定義偽指令例數(shù)據(jù)定義偽指令例nDATA1 DB 11H,22H,33H,44HnDATA2 DW 11H,22H,3344HnDATA3 DD 11H*2,22H,33445566H以上變量在內(nèi)存以上變量在內(nèi)存中的存放形式中的存放形式49數(shù)據(jù)定義偽指令例數(shù)據(jù)定義偽指令例_變量在內(nèi)存中的分

23、布變量在內(nèi)存中的分布DATA111223344DATA2224411000033DATA322002200006655443350數(shù)據(jù)定義偽指令的幾點(diǎn)說明數(shù)據(jù)定義偽指令的幾點(diǎn)說明n偽指令的性質(zhì)決定所定義變量的屬性;偽指令的性質(zhì)決定所定義變量的屬性;n定義超過兩個(gè)字符的字符串必須用定義超過兩個(gè)字符的字符串必須用DB偽指令;偽指令;n例:例: DATA1 DB ABCD,66HABCD41H42H43H44H66H注意:注意: 單個(gè)字符可定義為單個(gè)字符可定義為5 5種類型中的任一種種類型中的任一種 兩個(gè)字符的字符串只能使用兩個(gè)字符的字符串只能使用DBDB或或DWDW定義定義 兩個(gè)以上字符的字符串只

24、能用兩個(gè)以上字符的字符串只能用DBDB定義定義51n所定義的值為標(biāo)號(hào)名或變量名所定義的值為標(biāo)號(hào)名或變量名:只能用只能用DWDW或或DDDD定義定義,用用DWDW定義時(shí),取標(biāo)號(hào)或變量的偏移地址作定義時(shí),取標(biāo)號(hào)或變量的偏移地址作為所定義變量的初值。用為所定義變量的初值。用DDDD定義時(shí),取標(biāo)號(hào)或變量的定義時(shí),取標(biāo)號(hào)或變量的段地址及偏移地址作為所定義變量的初值,段地址及偏移地址作為所定義變量的初值,段地址為段地址為高字,偏移地址為低字。高字,偏移地址為低字。例如:例如:OFFAB OFFAB DW DW AB AB ;存入變量;存入變量ABAB的偏移地址的偏移地址ADRS ADRS DW DW ST

25、RSTR,STRSTR3 3,STRSTR5 5 ;存入;存入3 3個(gè)偏移地址個(gè)偏移地址TOTAL TOTAL DD DD DATA DATA ;先存;先存DATADATA的偏移地址,再存段地址的偏移地址,再存段地址 數(shù)據(jù)定義偽指令的幾點(diǎn)說明數(shù)據(jù)定義偽指令的幾點(diǎn)說明532. 重復(fù)操作符重復(fù)操作符n作用:作用:n常用于聲明一個(gè)數(shù)據(jù)區(qū)并為各單元設(shè)置初值常用于聲明一個(gè)數(shù)據(jù)區(qū)并為各單元設(shè)置初值n格式:格式: 變量名變量名 偽指令助記符偽指令助記符 n DUP(初值,初值,)n例:例: BW 20 DUP(0)M1 DB 10 DUP(5) 20個(gè)初值為個(gè)初值為0的字單元的字單元10個(gè)初值為個(gè)初值為5的

26、字節(jié)單元的字節(jié)單元543. “?”的作用的作用n表示隨機(jī)值,用于預(yù)留存儲(chǔ)空間表示隨機(jī)值,用于預(yù)留存儲(chǔ)空間nMEM1 DB 34H,A,?,? DW 20 DUP(?)(?)預(yù)留預(yù)留40個(gè)字節(jié)單元,每單元為隨機(jī)值個(gè)字節(jié)單元,每單元為隨機(jī)值隨機(jī)數(shù)隨機(jī)數(shù)占占1個(gè)字節(jié)單元個(gè)字節(jié)單元55數(shù)據(jù)定義偽指令例數(shù)據(jù)定義偽指令例nM1 DB How are you?nM2 DW 3 DUP(11H),3344Hn DB 4 DUP(?)(?)nM3 DB 3 DUP(22H,11H,?),?)變量在內(nèi)存中的分區(qū)變量在內(nèi)存中的分區(qū)56數(shù)據(jù)定義偽指令例數(shù)據(jù)定義偽指令例M1How aM211H11H00H44H33H

27、r e you?11H00H00H隨機(jī)數(shù)隨機(jī)數(shù)M311H22H11H22H11H22HXXXXXXXXXXXXXX57二、符號(hào)定義偽指令二、符號(hào)定義偽指令n格式:格式: 符號(hào)名符號(hào)名 EQUEQU 表達(dá)式表達(dá)式n操作:操作: 用符號(hào)名取代后邊的表達(dá)式,不可重新定義用符號(hào)名取代后邊的表達(dá)式,不可重新定義n例:例: CONSTANTCONSTANTEQUEQU100100 VAR EQU 30H+99HVAR EQU 30H+99H注意:注意: (1 1)表達(dá)式可以是任何有效的操作數(shù)格式,)表達(dá)式可以是任何有效的操作數(shù)格式,可以是可以是一個(gè)一個(gè)常數(shù)、符號(hào)、數(shù)值表達(dá)式或地址表達(dá)式常數(shù)、符號(hào)、數(shù)值表達(dá)

28、式或地址表達(dá)式等等,也可,也可以是以是任何有效的助記符任何有效的助記符。 (2 2)符號(hào)定義偽指令并不給符號(hào)名分配存儲(chǔ)單元。)符號(hào)定義偽指令并不給符號(hào)名分配存儲(chǔ)單元。 例:例: N N EQUEQU 1010 M M EQUEQU N+2N+2* *3 3 ;數(shù)值表達(dá)式;數(shù)值表達(dá)式 B B EQUEQU BX+SI BX+SI ;地址表達(dá)式;地址表達(dá)式 AB EQU DATE+3 AB EQU DATE+3 ;表達(dá)式中如果有變量或標(biāo)號(hào)則;表達(dá)式中如果有變量或標(biāo)號(hào)則 在該語句之前應(yīng)該先將它們定義在該語句之前應(yīng)該先將它們定義。 CBD EQU AAM CBD EQU AAM ;指令助記符;指令助記

29、符 (3 3) 與與EQUEQU的區(qū)別是:的區(qū)別是:EQUEQU不可再定義、可再定不可再定義、可再定義義,例如:例如:N N1010 . N NN+5N+55859三、段定義偽指令三、段定義偽指令n說明邏輯段的起始和結(jié)束;說明邏輯段的起始和結(jié)束;n說明不同程序模塊中同類邏輯段之間的聯(lián)系形說明不同程序模塊中同類邏輯段之間的聯(lián)系形 態(tài)態(tài)60段定義偽指令格式段定義偽指令格式段名段名 SEGMENT SEGMENT 定位類型定位類型 組合類型組合類型 類別類別 段名段名 ENDSENDS說明邏輯說明邏輯段的起點(diǎn)段的起點(diǎn)說明不同模塊中同名說明不同模塊中同名段的組和連接方式段的組和連接方式邏輯段的裝入順序

30、邏輯段的裝入順序61定位類型定位類型nBYTE: 段的起點(diǎn)從存儲(chǔ)器任何地址開始段的起點(diǎn)從存儲(chǔ)器任何地址開始nWORD:段的起點(diǎn)從偶地址開始段的起點(diǎn)從偶地址開始nPARA: 段的起點(diǎn)從節(jié)邊界開始(段的起點(diǎn)從節(jié)邊界開始(缺省值)缺省值) (16個(gè)字節(jié)為個(gè)字節(jié)為1節(jié)節(jié), 0H )nPAGE: 段的起點(diǎn)從頁邊界開始段的起點(diǎn)從頁邊界開始 (256個(gè)字節(jié)為個(gè)字節(jié)為1頁頁,00H )例如各邏輯段的起始地址和結(jié)束地址例如各邏輯段的起始地址和結(jié)束地址 段 名定位類型字節(jié)數(shù)起始地址結(jié)束地址STACKPARA100(64H)00000H00063HDATA1BYTE19(13H)00064H00076HDATA2W

31、ORD80(50H)00078H000C7HCODE1PAGE13(0DH)00100H0010CHCODE2PARA52(34H)00110H00143H63組合類型組合類型n與其它模塊中的與其它模塊中的在滿足定位類型的前提在滿足定位類型的前提 下具有的組合方式:下具有的組合方式:nNONE: 不組合(不組合(缺省值)缺省值)nPUBLIC: 依次連接(順序由依次連接(順序由LINK程序確定)程序確定)nCOMMON: 覆蓋連接覆蓋連接nSTACK: 堆棧段的依次連接堆棧段的依次連接nAT 表達(dá)式:段定義在表達(dá)式值為段基的節(jié)邊界表達(dá)式:段定義在表達(dá)式值為段基的節(jié)邊界nMEMORY: 相應(yīng)段在

32、同名段的最高地址處。相應(yīng)段在同名段的最高地址處。P156例例64類別類別n不同模塊連接時(shí)將相同類別的段放在連不同模塊連接時(shí)將相同類別的段放在連續(xù)的內(nèi)存區(qū)域中;續(xù)的內(nèi)存區(qū)域中;n 沒有類別名的邏輯段,與其他無類別名沒有類別名的邏輯段,與其他無類別名的邏輯段一起連續(xù)裝入內(nèi)存。的邏輯段一起連續(xù)裝入內(nèi)存。 STK1段段 STACKCODE1段段 無無DATA1段段 BUFFER DATA2段段 TABLE DATA3段段 BUFFER DATA4段段 TABLE DATA5段段 BUFFER STK2段段 STACK CODE2段段 無無 段名類別名主程序STK1STACKCODE1DATA1DATA

33、2DATA3無BUFFERTABLEBUFFER段名類別名子程序DATA4DATA5STK2TABLEBUFFERSTACKCODE2無無DATA1DATA3DATA5DATA2DATA4CODE2CODE1STK2STK1存儲(chǔ)器STACK無類別名BUFFERTABLE 當(dāng)將上述主程序和子程序進(jìn)行連接時(shí),兩個(gè)程序模塊中各當(dāng)將上述主程序和子程序進(jìn)行連接時(shí),兩個(gè)程序模塊中各邏輯段裝入內(nèi)存的順序如上圖。邏輯段裝入內(nèi)存的順序如上圖。67四、設(shè)定段寄存器偽指令四、設(shè)定段寄存器偽指令n指出段名和段寄存器之間的對(duì)應(yīng)關(guān)系指出段名和段寄存器之間的對(duì)應(yīng)關(guān)系,說明,說明所定義邏輯段的性質(zhì)所定義邏輯段的性質(zhì)。n格式:

34、格式: ASSUME 段寄存器名:段名段寄存器名:段名 ,段寄存器名:段名,段寄存器名:段名,CODE SEGMENT PARA PUBLIC CODEASSUME CS:CODE,DS:DATA1, ES:DATA2, SS:STACKMOVAX,DATA1MOV DS,AX ;給DS賦值 MOVAX,DATA2MOV ES,AX ;給ES賦值MOV AX,STACKMOV SS,AX ;給SS賦值 CODE ENDS DS、ES的值必須在程序段中用指令語句進(jìn)行裝填,而CS、SS由系統(tǒng)負(fù)責(zé)設(shè)置,程序中也可對(duì)SS進(jìn)行裝填。 69五、結(jié)束偽指令五、結(jié)束偽指令n表示源程序結(jié)束表示源程序結(jié)束n格式:

35、格式: END 標(biāo)號(hào)標(biāo)號(hào)實(shí)際編程中必有,該實(shí)際編程中必有,該處標(biāo)號(hào)須與程序第處標(biāo)號(hào)須與程序第1條條指令前的標(biāo)號(hào)一致。指令前的標(biāo)號(hào)一致。70一個(gè)完整源程序結(jié)構(gòu)例一個(gè)完整源程序結(jié)構(gòu)例DSEG SEGMENTDATA1 DB 1,2,DATA2 DW 1234HDSEG ENDSESEG SEGMENT DB 20 DUP(?)(?)ESEG ENDSSSEG SEGMENT STACK STACK DB 200 DUP(?)(?)SSEG ENDS71一個(gè)完整源程序結(jié)構(gòu)例一個(gè)完整源程序結(jié)構(gòu)例 CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG, ES:ESEG,SS:SSEG

36、START:MOV AX,DSEG MOV DS,AX MOV AX,ESEG MOV ES,AX MOV AX,SSEG MOV SS,AX CSEG ENDS END START源程序源程序 代碼代碼72例例DATA SEGMENT TABLE DW 3400H,5600H,2300H,4500H, 2300H,1200H, 2344H,3500HDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS;DATASTART:MOV AX,DATA MOV DS,AX MOV BX,OFFSET TABLE MOV SI,6 A:JMP DWORD PTRBX+SI+2

37、 畫出畫出TABLETABLE在內(nèi)存中的存放情況在內(nèi)存中的存放情況程序執(zhí)行完標(biāo)號(hào)為程序執(zhí)行完標(biāo)號(hào)為A A的指令后:的指令后: CS= CS=? IP= IP=?73程序程序(續(xù))(續(xù)) MOV BX,OFFSET TABLE MOV SI,06HA:JMP DWORD PTRBX+SI+2 程序執(zhí)行完標(biāo)號(hào)為程序執(zhí)行完標(biāo)號(hào)為A的指令后:的指令后: CS=? IP=?74六、過程定義偽指令六、過程定義偽指令n用于定義一個(gè)過程體用于定義一個(gè)過程體n格式:格式: 過程名過程名 PROC NEAR / FAR (過程體)(過程體) RET 過程名過程名 ENDP過程入口的過程入口的符號(hào)地址符號(hào)地址默認(rèn)類

38、型默認(rèn)類型n 調(diào)用一個(gè)過程的格式為:調(diào)用一個(gè)過程的格式為: CALL 過程名過程名 至少要有一條能至少要有一條能夠執(zhí)行到返回主夠執(zhí)行到返回主程序的指令程序的指令過程定義及調(diào)用例過程定義及調(diào)用例n定義延時(shí)子程序定義延時(shí)子程序 nDELAY PROCn PUSH BXn PUSH CXn MOV BL,2nNEXT: MOV CX,4167nW10M: LOOP W10Mn DEC BLn JNZ NEXTn POP CXn POP BXn RETnDELAY ENDP75n調(diào)用延時(shí)子程序:調(diào)用延時(shí)子程序: nCALL DELAY P158例例n過程定義的嵌套過程定義的嵌套 :NAME1PROC

39、FAR CALL NAME2 RETNAME2PROC NEAR RETNANE2 ENDPNAME1ENDP RET指令在過程體指令在過程體中可以有不止一條,中可以有不止一條,也不一定是最后一也不一定是最后一條指令。條指令。77七、宏命令偽指令七、宏命令偽指令n 源程序中由匯編程序識(shí)別的具有獨(dú)源程序中由匯編程序識(shí)別的具有獨(dú) 立功能的一段程序代碼立功能的一段程序代碼n格式:格式: 宏命令名宏命令名 MACRO ENDM宏體宏體P163例例宏宏例:定義一個(gè)宏實(shí)現(xiàn)AB送給CABCABCMACROMACROA A,B B,C CMOVMOVALAL,A AADDADDALAL,B BMOVMOVC

40、C,ALALENDMENDM78調(diào)用宏的一般格式為:調(diào)用宏的一般格式為: 標(biāo)號(hào):標(biāo)號(hào): 宏指令名宏指令名 實(shí)參表實(shí)參表 79其宏展開為:MOVAL,ALADDAL,BLMOVCL,AL上例的宏可調(diào)用如下:上例的宏可調(diào)用如下:ABCABCALAL,BLBL,CLCL宏調(diào)用在匯編時(shí)會(huì)按定義宏調(diào)用在匯編時(shí)會(huì)按定義展開為各條指令,并以展開為各條指令,并以實(shí)參按位置一一替代形實(shí)參按位置一一替代形參。參。使用宏指令的過程共有使用宏指令的過程共有三步三步:宏定義宏定義 宏調(diào)用宏調(diào)用 宏擴(kuò)展(宏擴(kuò)展(匯編時(shí)由MASM進(jìn)行)宏與子程序的比較宏與子程序的比較 相同點(diǎn)相同點(diǎn):均可一次定義多次調(diào)用,簡(jiǎn)化源程序的書寫。

41、:均可一次定義多次調(diào)用,簡(jiǎn)化源程序的書寫。不同點(diǎn)不同點(diǎn):定義格式不同;:定義格式不同; 調(diào)用的格式不同;調(diào)用的格式不同; 參數(shù)的傳遞方式不同;參數(shù)的傳遞方式不同; (實(shí)參替代形參(實(shí)參替代形參/ /主子程序參數(shù)帶進(jìn)帶出)主子程序參數(shù)帶進(jìn)帶出) 匯編后目標(biāo)程序長(zhǎng)度不同匯編后目標(biāo)程序長(zhǎng)度不同 (宏會(huì)展開加長(zhǎng)(宏會(huì)展開加長(zhǎng)/ /子程序不會(huì)展開較短);子程序不會(huì)展開較短); 程序執(zhí)行流程不同程序執(zhí)行流程不同 (宏展開后是順序執(zhí)行(宏展開后是順序執(zhí)行/ /子程序調(diào)用及返回要轉(zhuǎn)來轉(zhuǎn)子程序調(diào)用及返回要轉(zhuǎn)來轉(zhuǎn) 去并且還需保護(hù));去并且還需保護(hù)); 適用場(chǎng)合不同適用場(chǎng)合不同 (程序段較短或參數(shù)較多時(shí)較適合用宏(

42、程序段較短或參數(shù)較多時(shí)較適合用宏/ /程序段較長(zhǎng)程序段較長(zhǎng) 較適合用子程序);較適合用子程序); 宏需要宏匯編的支持。宏需要宏匯編的支持。工作方式工作方式: n子程序調(diào)用工作方式:子程序調(diào)用工作方式:XA,yBCALL QxC,yDCALL Q主程序Q: . . . RET子程序Q執(zhí)行時(shí)調(diào)用n宏調(diào)用工作方式:宏調(diào)用工作方式:Q A,BQ C,D主程序宏調(diào)用Q x,y匯編時(shí)展開Q A,BQ C,DQ MACRO x,yENDM八、其它偽指令八、其它偽指令 段內(nèi)程序代碼或變量的起始偏移地址段內(nèi)程序代碼或變量的起始偏移地址n格式:格式:nORG 表達(dá)式表達(dá)式n例:例:nDATA SEGMENTn O

43、RG 200n M1 DB 12H,4 DUP(0)n M2 DW 1234HnDATA ENDS計(jì)算值為計(jì)算值為非負(fù)常數(shù)非負(fù)常數(shù)ORGM10034121200M220020584其它偽指令其它偽指令nNAME-為目標(biāo)程序設(shè)定一個(gè)名字為目標(biāo)程序設(shè)定一個(gè)名字n格式:格式: NAME 模塊名模塊名nTITLE-為程序清單指定打印標(biāo)題為程序清單指定打印標(biāo)題n格式:格式: TITLE 標(biāo)題名標(biāo)題名可以缺省可以缺省854.3 功能調(diào)用功能調(diào)用nBIOSn駐留在駐留在ROM中的基本輸入中的基本輸入/輸出系統(tǒng)輸出系統(tǒng)n加電自檢,裝入引導(dǎo),主要加電自檢,裝入引導(dǎo),主要I/O設(shè)備處理程序及接口控制設(shè)備處理程序及

44、接口控制nBIOS功能調(diào)用使程序員不必了解硬件操作的細(xì)節(jié)而功能調(diào)用使程序員不必了解硬件操作的細(xì)節(jié)而實(shí)現(xiàn)相應(yīng)的操作。實(shí)現(xiàn)相應(yīng)的操作。nDOSn磁盤操作系統(tǒng)磁盤操作系統(tǒng)n相比相比BIOS,對(duì)硬件的依賴性小,對(duì)硬件的依賴性小nDOSDOS功能與功能與BIOSBIOS功能均通過中斷方式調(diào)用功能均通過中斷方式調(diào)用。DOS中斷與中斷與BIOS中斷中斷nDOS中斷中斷,占用類型號(hào)為,占用類型號(hào)為20H3FH。目前使用。目前使用的為的為20H27H和和2FH,其余類型號(hào)保留。其余類型號(hào)保留。n見附錄見附錄D.2nBIOS中斷中斷比比DOS級(jí)別更低,其與硬件相關(guān)性級(jí)別更低,其與硬件相關(guān)性更強(qiáng)執(zhí)行速度更快,但兼容

45、性較差。更強(qiáng)執(zhí)行速度更快,但兼容性較差。BIOS中中斷的中斷號(hào)為斷的中斷號(hào)為10H1FH。n見附錄見附錄En在某些情況下,同樣的功能既可選擇在某些情況下,同樣的功能既可選擇DOS中斷中斷,也可選擇,也可選擇BIOS中斷中斷86DOS中斷中斷87參看附錄參看附錄D.3包括:包括:設(shè)備設(shè)備管理,管理,BIOS中斷中斷88DOS和和BIOS中斷調(diào)用的基本步驟中斷調(diào)用的基本步驟n將調(diào)用參數(shù)裝入指定的寄存器;將調(diào)用參數(shù)裝入指定的寄存器;n將功能號(hào)裝入將功能號(hào)裝入AH;n按中斷類型號(hào)調(diào)用按中斷類型號(hào)調(diào)用DOS或或BIOS中斷;中斷;n檢查返回參數(shù)是否正確。檢查返回參數(shù)是否正確。8990一、一、DOS 功能

46、調(diào)用功能調(diào)用n說明:說明:n用軟中斷指令調(diào)用,中斷類型碼固定為用軟中斷指令調(diào)用,中斷類型碼固定為21H。nDOS系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用是包含多個(gè)子功能的功能包;是包含多個(gè)子功能的功能包;n各子功能用功能號(hào)區(qū)分;各子功能用功能號(hào)區(qū)分;n調(diào)用格式:調(diào)用格式:nMOV AH,功能號(hào)功能號(hào) INT 21H 附錄附錄D.3911. 單字符輸入單字符輸入n調(diào)用方法:調(diào)用方法: MOV AH,01 INT 21Hn輸入的字符在輸入的字符在AL中中注意:注意: 1 1號(hào)、號(hào)、7 7號(hào)、號(hào)、8 8號(hào)功能調(diào)用,都可實(shí)現(xiàn)上述功能,號(hào)功能調(diào)用,都可實(shí)現(xiàn)上述功能,將所鍵入字符的將所鍵入字符的ASCIIASCII碼存于

47、碼存于ALAL中。區(qū)別是:中。區(qū)別是:1 1號(hào)所鍵號(hào)所鍵入字符會(huì)回顯,入字符會(huì)回顯,7 7號(hào)和號(hào)和8 8號(hào)不會(huì)回顯。號(hào)不會(huì)回顯。92單字符輸入例單字符輸入例GET_KEY:GET_KEY: MOVMOVAH,1AH,1 INTINT21H21H CMPCMPAL,AL,Y Y JZ JZ YESYES CMP CMPAL,AL,N N JZ JZ NONO JMP JMPGET_KEYGET_KEY YES: YES: NO: NO: 交互式應(yīng)交互式應(yīng) 答程序答程序932. 字符串輸入字符串輸入n注意問題:注意問題:n調(diào)用格式調(diào)用格式n字符輸入緩沖區(qū)的定義字符輸入緩沖區(qū)的定義94調(diào)用格式調(diào)用格

48、式 功能號(hào)功能號(hào)OAH 字符串在內(nèi)存中的存放地址字符串在內(nèi)存中的存放地址nINT 21Hn AHn DS:DX95定義字符緩沖區(qū)定義字符緩沖區(qū)n用戶自定義緩沖區(qū)格式:用戶自定義緩沖區(qū)格式:0DHN1N2整個(gè)緩沖區(qū)整個(gè)緩沖區(qū)最大可鍵入字符數(shù)最大可鍵入字符數(shù)實(shí)際鍵入字符數(shù)實(shí)際鍵入字符數(shù)存放鍵入的字符存放鍵入的字符存放字符個(gè)數(shù):存放字符個(gè)數(shù):25596輸入字符串程序段輸入字符串程序段n DAT1 DB 20,?,?,20 DUP(?)(?) n LEA DX,DAT1 MOV AH,0AH INT 21H在數(shù)據(jù)段在數(shù)據(jù)段中定義中定義97輸入緩沖區(qū)輸入緩沖區(qū)14H ?20個(gè)字節(jié)個(gè)字節(jié)定義后的輸入緩定義

49、后的輸入緩沖區(qū)初始狀態(tài):沖區(qū)初始狀態(tài):983. 單字符顯示輸出單字符顯示輸出 功能號(hào)功能號(hào)O2H 待輸出字符待輸出字符nINT 21H注意:注意:AL 輸出字符輸出字符n AHn DL99單字符顯示輸出例單字符顯示輸出例nMOVAH,02nMOVDL,41HnINT21H執(zhí)行結(jié)果:執(zhí)行結(jié)果:屏幕顯示屏幕顯示A1004. 字符串輸出顯示字符串輸出顯示 功能號(hào)功能號(hào)O9H 待輸出字符串的偏移地址待輸出字符串的偏移地址nINT 21Hn AHn DS:DX101字符串輸出顯示字符串輸出顯示n注意點(diǎn):注意點(diǎn):n被顯示的字符串必須以被顯示的字符串必須以$ $結(jié)束;結(jié)束;n所顯示的內(nèi)容不應(yīng)出現(xiàn)非可見的所顯

50、示的內(nèi)容不應(yīng)出現(xiàn)非可見的ASCIIASCII碼;碼;n若考慮輸出格式需要,在定義字符串后,加上若考慮輸出格式需要,在定義字符串后,加上回車符和換行符?;剀嚪蛽Q行符。102字符串輸出顯示例字符串輸出顯示例DATA SEGMENT MESS1 DB Input String:, 0DH,0AH,$DATA ENDSCODE SEGMENT MOV AH,09MOV DX,OFFSET MESS1INT21H 5. 返回操作系統(tǒng)返回操作系統(tǒng)(DOS)功能功能n功能號(hào):功能號(hào):n4CHn調(diào)用格式:調(diào)用格式:nMOV AH,4CHnINT 21Hn功能:功能:n程序執(zhí)行完該程序執(zhí)行完該2條語句后能正常

51、返回條語句后能正常返回DOSn常位于程序結(jié)尾處。常位于程序結(jié)尾處。103二、二、BIOS功能調(diào)用功能調(diào)用n通過中斷指令調(diào)用相應(yīng)的通過中斷指令調(diào)用相應(yīng)的BIOS中斷服務(wù)程序中斷服務(wù)程序n屏幕顯示、磁盤管理、鍵盤輸入和打印機(jī)輸出等屏幕顯示、磁盤管理、鍵盤輸入和打印機(jī)輸出等104附錄附錄E鍵盤狀態(tài)檢驗(yàn)鍵盤狀態(tài)檢驗(yàn)n可利用類型碼為可利用類型碼為16H的的BIOS中斷判斷是否有中斷判斷是否有任意鍵按下任意鍵按下n調(diào)用格式:調(diào)用格式:nAHnINT 16Hn判斷方法:判斷方法:n若若ZF=0n若若ZF=1105功能號(hào)功能號(hào)1有鍵按下有鍵按下無鍵按下無鍵按下例:例:在屏幕上顯示信息,當(dāng)有任意鍵按下時(shí)退出在屏

52、幕上顯示信息,當(dāng)有任意鍵按下時(shí)退出106DSEG SEGMENT MESS DB Hello,World!,0DH,0AH,$DSEG ENDSCSEG SEGMENT ASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DSEGMOV DS,AXAGAIN:LEA DX,MESSMOV AH,9INT 21H MOV AH,1INT 16HJZ AGAINMOV AH,4CHINT 21H CSEG ENDSEND START鍵盤狀態(tài)檢驗(yàn)鍵盤狀態(tài)檢驗(yàn)n判斷是否有任意鍵按下的方法可以用判斷是否有任意鍵按下的方法可以用DOS軟中軟中斷,功能號(hào)為斷,功能號(hào)為0BH,出口參數(shù)為,出

53、口參數(shù)為AL。n格式:格式:nMOV AH,0BHnINT 21Hn若若AL=FFH,則有鍵按下;,則有鍵按下;n若若AL=0,則無鍵按下,則無鍵按下107 例如:從鍵盤輸入一個(gè)字符例如:從鍵盤輸入一個(gè)字符 MOV AH, 0 ;功能號(hào)送;功能號(hào)送AH INT 16 ;調(diào)用類型為;調(diào)用類型為16H的中斷的中斷執(zhí)行結(jié)果:執(zhí)行結(jié)果:AL=字符碼,字符碼,AH=掃描碼掃描碼108例:例:9號(hào)功能的顯示器號(hào)功能的顯示器I/O調(diào)用調(diào)用(在當(dāng)前光標(biāo)位置在當(dāng)前光標(biāo)位置寫字符和屬性寫字符和屬性);入口參數(shù):;入口參數(shù):AH=9,BH=頁號(hào),頁號(hào),AL=要寫字符要寫字符的的ASCII碼,碼,BL=屬性值,屬性值

54、,CX=重復(fù)次數(shù)。重復(fù)次數(shù)。MOV AH,9 MOV BH,0 MOV AL,A MOV BL,17H MOV CX,10 ;顯示十個(gè);顯示十個(gè)A INT 10H背景色為藍(lán)色,前景色為白色,8位編碼分別為L(zhǎng)RGBIRGB,L代表BLINK閃爍,I代表BRIGHT亮色,R代表RED,G代表GREEN,B代表BLUE。109DOS和和BIOS功能調(diào)用小結(jié)功能調(diào)用小結(jié)n均通過中斷指令調(diào)用。均通過中斷指令調(diào)用。1個(gè)中斷類型碼對(duì)應(yīng)個(gè)中斷類型碼對(duì)應(yīng)1個(gè)個(gè)功能程序包;功能程序包;n每個(gè)程序包中的子功能通過功能號(hào)區(qū)分,調(diào)用每個(gè)程序包中的子功能通過功能號(hào)區(qū)分,調(diào)用時(shí)功能號(hào)須送時(shí)功能號(hào)須送AH;n部分功能既可用部

55、分功能既可用DOS中斷也可以用中斷也可以用BIOS中斷;中斷;n注意不同子功能的入口注意不同子功能的入口/出口參數(shù)要求;出口參數(shù)要求;nDOSDOS和和BIOSBIOS中斷均可能影響中斷均可能影響AXAX。1101114.4 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì)設(shè)計(jì)步驟:設(shè)計(jì)步驟:n分析問題,抽象出數(shù)學(xué)模型分析問題,抽象出數(shù)學(xué)模型n確定算法確定算法n畫程序流程圖畫程序流程圖 n確定內(nèi)存單元和分配寄存器確定內(nèi)存單元和分配寄存器n程序編碼程序編碼n調(diào)試調(diào)試112匯編語言程序結(jié)構(gòu)匯編語言程序結(jié)構(gòu)n順序結(jié)構(gòu)順序結(jié)構(gòu)n分支結(jié)構(gòu)分支結(jié)構(gòu)n單分支單分支n多分支多分支n循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)n先判定型先判定型n后判定型

56、后判定型n子程序結(jié)構(gòu)子程序結(jié)構(gòu)一、順序結(jié)構(gòu)程序一、順序結(jié)構(gòu)程序n 順序結(jié)構(gòu)程序順序結(jié)構(gòu)程序就是各種非轉(zhuǎn)移類指令的順序就是各種非轉(zhuǎn)移類指令的順序書寫,其書寫順序即為執(zhí)行順序。書寫,其書寫順序即為執(zhí)行順序。n其流程如右圖所示:其流程如右圖所示:113例例4-17( p171) n內(nèi)存自內(nèi)存自TABLE開始的連續(xù)開始的連續(xù)16個(gè)單元中存放著個(gè)單元中存放著015的平方值,查表求的平方值,查表求DATA中任意數(shù)中任意數(shù)X(介(介意意015之間)的平方值,并將結(jié)果放之間)的平方值,并將結(jié)果放RESULT中。中。分析:分析: 由表的存放規(guī)律知,表的起始地址與數(shù)由表的存放規(guī)律知,表的起始地址與數(shù)X的和的和就是

57、就是X的平方值所在單元地址。的平方值所在單元地址。114完整程序如下:完整程序如下:TABLE DB0,1,4,9,16,25,36, 49,64,81,100,121, 144,169,196,225DATA DB ?RESULT DB ? ASSUMECS:CSEG, DS:DSEG MOVAX,DSEG MOVDS,AX LEA BX,TABLE MOV AH,0 MOV AL,DATA ADD BX,AX MOVAL,BX MOV RESULT , AL ENDn例:簡(jiǎn)單輸入輸出,例:簡(jiǎn)單輸入輸出,實(shí)現(xiàn)一位十進(jìn)制數(shù)的實(shí)現(xiàn)一位十進(jìn)制數(shù)的加法運(yùn)算。加法運(yùn)算。n(屏幕效果如:屏幕效果如:3+

58、2=5,其中,被,其中,被加數(shù)加數(shù)為輸入,其加數(shù)加數(shù)為輸入,其它為自動(dòng)輸出它為自動(dòng)輸出)二、分支結(jié)構(gòu)程序二、分支結(jié)構(gòu)程序n 分支結(jié)構(gòu)程序分支結(jié)構(gòu)程序是指包含條件轉(zhuǎn)移或無條件跳是指包含條件轉(zhuǎn)移或無條件跳轉(zhuǎn)指令的程序,其又可以具體再分為單分支轉(zhuǎn)指令的程序,其又可以具體再分為單分支程序、雙分支程序、多分支程序。程序、雙分支程序、多分支程序。117例例1 1 分析:分析: 一個(gè)字節(jié)為一個(gè)字節(jié)為8 8位二進(jìn)制數(shù)據(jù)即二位十六進(jìn)制,以十六位二進(jìn)制數(shù)據(jù)即二位十六進(jìn)制,以十六進(jìn)制顯示也就是分離出高位和低位十六進(jìn)制并分別送出進(jìn)制顯示也就是分離出高位和低位十六進(jìn)制并分別送出顯示。顯示。 通過右移通過右移4 4位獲取

59、高位十六進(jìn)制,通過屏蔽高位獲取高位十六進(jìn)制,通過屏蔽高4 4位二位二進(jìn)制獲取低位十六進(jìn)制。進(jìn)制獲取低位十六進(jìn)制。 十六進(jìn)制數(shù)值為十六進(jìn)制數(shù)值為0F0F,2 2號(hào)功能顯示只用于字符顯示,號(hào)功能顯示只用于字符顯示,所以還必須將它們轉(zhuǎn)化為所以還必須將它們轉(zhuǎn)化為對(duì)應(yīng)的對(duì)應(yīng)的ASCIIASCII碼字符碼字符,0909對(duì)應(yīng)對(duì)應(yīng)的的ASCIIASCII碼要加碼要加30H30H,AFAF對(duì)應(yīng)的對(duì)應(yīng)的ASCIIASCII碼要加碼要加37H37H。 用單分支結(jié)構(gòu)實(shí)現(xiàn),用單分支結(jié)構(gòu)實(shí)現(xiàn),統(tǒng)一均先加統(tǒng)一均先加30H30H,判斷是否比,判斷是否比99大,若大再加大,若大再加7 7,否則不加。,否則不加。119十六進(jìn)制數(shù)

60、十六進(jìn)制數(shù)ASCII碼碼十六進(jìn)制數(shù)十六進(jìn)制數(shù)ASCII碼碼0 01 12 23 34 45 56 67 73030H H3131H H3232H H3333H H3434H H3535H H3636H H3737H H8 89 9A AB BC CD DE EF F3838H H3939H H4141H H4242H H4343H H4444H H4545H H4646H H完整程序如下:完整程序如下:A DB 5FH ASSUMECS:CODE,DS:DATA MOVAX,DATA ;置;置DS段初值段初值 MOVDS,AX MOV DL,A MOV CL,4 SHR DL,CL ;右移;右

溫馨提示

  • 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)論