匯編語(yǔ)言編程學(xué)習(xí)教案_第1頁(yè)
匯編語(yǔ)言編程學(xué)習(xí)教案_第2頁(yè)
匯編語(yǔ)言編程學(xué)習(xí)教案_第3頁(yè)
匯編語(yǔ)言編程學(xué)習(xí)教案_第4頁(yè)
匯編語(yǔ)言編程學(xué)習(xí)教案_第5頁(yè)
已閱讀5頁(yè),還剩73頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、會(huì)計(jì)學(xué)1匯編語(yǔ)言匯編語(yǔ)言(hu bin y yn)編程編程第一頁(yè),共78頁(yè)。程序結(jié)構(gòu)偽指令程序結(jié)構(gòu)偽指令第1頁(yè)/共77頁(yè)第二頁(yè),共78頁(yè)。 段定義偽指令用于將源程序劃分成若干段,這些邏輯段定義偽指令用于將源程序劃分成若干段,這些邏輯(lu j)段按段按用途可分為代碼段(用于存放程序)、數(shù)據(jù)段(用于存放數(shù)據(jù))、用途可分為代碼段(用于存放程序)、數(shù)據(jù)段(用于存放數(shù)據(jù))、堆棧段(用于堆棧操作)和附加段(附加的數(shù)據(jù)段)。堆棧段(用于堆棧操作)和附加段(附加的數(shù)據(jù)段)。2、 段定義偽指令段定義偽指令第2頁(yè)/共77頁(yè)第三頁(yè),共78頁(yè)。例:例:STACK SEGMENT STACK DW 20DUP(?)S

2、TACK ENDS 偽指令偽指令SEGMENT有有3個(gè)可選擇的操作數(shù):定位個(gè)可選擇的操作數(shù):定位方式方式(fngsh),組合方式,組合方式(fngsh)和類(lèi)別名。和類(lèi)別名。第3頁(yè)/共77頁(yè)第四頁(yè),共78頁(yè)。1)定位類(lèi)型)定位類(lèi)型定位類(lèi)型規(guī)定段的起始地址要求,有如下定位類(lèi)型規(guī)定段的起始地址要求,有如下4種方式(默種方式(默認(rèn)方式為認(rèn)方式為PARA):):(1)PARA段地址從小段邊界開(kāi)始,段起始單元段地址從小段邊界開(kāi)始,段起始單元20位地址的最低位地址的最低4位必須位必須(bx)為為0。(2)BYTE段地址從字節(jié)邊界開(kāi)始,該段可從任段地址從字節(jié)邊界開(kāi)始,該段可從任意單元開(kāi)始。意單元開(kāi)始。(3)W

3、ORD段地址從字邊界開(kāi)始,段起始單元段地址從字邊界開(kāi)始,段起始單元20位地址的最低位地址的最低1位必須位必須(bx)為為0。(4)PAGE段地址從頁(yè)邊界開(kāi)始,段起始單元段地址從頁(yè)邊界開(kāi)始,段起始單元20位地址的最低位地址的最低8位必須位必須(bx)為為0。第4頁(yè)/共77頁(yè)第五頁(yè),共78頁(yè)。PAGE:頁(yè)邊界:頁(yè)邊界(binji) XXXX XXXX XXXX 0000 0000BPARA:節(jié)邊界:節(jié)邊界(binji) XXXX XXXX XXXX XXXX 0000BWORD:字邊界:字邊界(binji) XXXX XXXX XXXX XXXX XXX0BBYTE:字節(jié)邊界:字節(jié)邊界(binji

4、) XXXX XXXX XXXX XXXX XXXXB第5頁(yè)/共77頁(yè)第六頁(yè),共78頁(yè)。2)組合類(lèi)型)組合類(lèi)型告訴連接程序本段與其他段的關(guān)系,有告訴連接程序本段與其他段的關(guān)系,有5種種(默認(rèn)默認(rèn)NONE):(1)NONE連接時(shí)表示該段與其他段在邏輯上沒(méi)有連接時(shí)表示該段與其他段在邏輯上沒(méi)有(mi yu)關(guān)系,即各有各的段地址。關(guān)系,即各有各的段地址。(2)PUBLIC連接時(shí)表示該段可與其他模塊中的同名段連接時(shí)表示該段可與其他模塊中的同名段在滿(mǎn)足定位類(lèi)型前提下,依次連接起來(lái)。連接的順序由在滿(mǎn)足定位類(lèi)型前提下,依次連接起來(lái)。連接的順序由連接程序連接程序LINK確定。確定。第6頁(yè)/共77頁(yè)第七頁(yè),共7

5、8頁(yè)。(3)COMMON定義該段與其他模塊中的同名段定義該段與其他模塊中的同名段,采用覆蓋方式在存儲(chǔ)器中定位,即它們具有,采用覆蓋方式在存儲(chǔ)器中定位,即它們具有(jyu)相同的段首地址。通常不同模塊采用公用相同的段首地址。通常不同模塊采用公用緩沖區(qū)時(shí)使用這種組合類(lèi)型。緩沖區(qū)時(shí)使用這種組合類(lèi)型。COMMON的連接的連接長(zhǎng)度是各分段中的最大長(zhǎng)度。長(zhǎng)度是各分段中的最大長(zhǎng)度。(4)STACK表示該段是堆棧段,連接方式與表示該段是堆棧段,連接方式與PUBLIC段相同。段相同。(5)AT這種組合類(lèi)型后面跟一個(gè)常數(shù)表達(dá)式,表這種組合類(lèi)型后面跟一個(gè)常數(shù)表達(dá)式,表達(dá)式的值指定了段地址。不能用于代碼段。達(dá)式的值指

6、定了段地址。不能用于代碼段。第7頁(yè)/共77頁(yè)第八頁(yè),共78頁(yè)。(6)MEMORY 指定指定(zhdng)該段將分配在所有其他該段將分配在所有其他連接在一起的段的前面連接在一起的段的前面(在高地址上在高地址上), 如果連接時(shí)有幾個(gè)指定如果連接時(shí)有幾個(gè)指定(zhdng)MEMORY的的段,則遇到的第一段作為段,則遇到的第一段作為MEMORY段,其他則作段,其他則作為為COMMON段。段。第8頁(yè)/共77頁(yè)第九頁(yè),共78頁(yè)。3)字長(zhǎng)選擇)字長(zhǎng)選擇用于定義段中使用的偏移用于定義段中使用的偏移(pin y)地址和寄存器的字地址和寄存器的字長(zhǎng)長(zhǎng)USE16表示該段字長(zhǎng)表示該段字長(zhǎng)(z chn)為為16位,按位

7、,按16位方位方式尋址,最大段長(zhǎng)為式尋址,最大段長(zhǎng)為64K;USE32表示該段字長(zhǎng)表示該段字長(zhǎng)(z chn)為為32位,按位,按32位方位方式尋址,最大段長(zhǎng)為式尋址,最大段長(zhǎng)為4GB。第9頁(yè)/共77頁(yè)第十頁(yè),共78頁(yè)。4) 類(lèi)別名類(lèi)別名 連接時(shí)用于組成段組的名字。連接時(shí)用于組成段組的名字。 類(lèi)別名是一個(gè)用單引號(hào)括起來(lái)的字符串,進(jìn)類(lèi)別名是一個(gè)用單引號(hào)括起來(lái)的字符串,進(jìn)行連接處理時(shí),行連接處理時(shí),LINK程序把類(lèi)別名相同的所有段程序把類(lèi)別名相同的所有段放在連續(xù)的存儲(chǔ)區(qū)域放在連續(xù)的存儲(chǔ)區(qū)域(qy)內(nèi)。內(nèi)。 同類(lèi)的各個(gè)段連接時(shí),先出現(xiàn)的在前,后出同類(lèi)的各個(gè)段連接時(shí),先出現(xiàn)的在前,后出現(xiàn)的在后?,F(xiàn)的在后

8、。 第10頁(yè)/共77頁(yè)第十一頁(yè),共78頁(yè)。3、 段分配段分配(fnpi)偽指令偽指令 格式:格式:ASSUME 段寄存器:段名段寄存器:段名,段寄存器:段名,段寄存器:段名,功能:該語(yǔ)句安排在代碼段的開(kāi)始,通知匯編程序功能:該語(yǔ)句安排在代碼段的開(kāi)始,通知匯編程序,某個(gè)段是以哪一個(gè),某個(gè)段是以哪一個(gè)(y )段寄存器為它的段地址段寄存器為它的段地址寄存器。寄存器。 例:例:ASSUME CS:CODE,DS:DATA,ES:EXTRA,SS:ASTACK邏輯段邏輯段CODE、DATA、EXTRA、ASTACK分別以分別以CS、DS、ES、SS為它們的段寄存器,這為它們的段寄存器,這4個(gè)邏輯段分別被

9、定義為代個(gè)邏輯段分別被定義為代碼段、數(shù)據(jù)段、附加碼段、數(shù)據(jù)段、附加(fji)數(shù)據(jù)段和堆棧段。數(shù)據(jù)段和堆棧段。 第11頁(yè)/共77頁(yè)第十二頁(yè),共78頁(yè)。ASSUME語(yǔ)句只是建立語(yǔ)句只是建立(jinl)當(dāng)前段與段寄存器之間當(dāng)前段與段寄存器之間的聯(lián)系,但不能把各段的段地址裝入相應(yīng)的段寄存器的聯(lián)系,但不能把各段的段地址裝入相應(yīng)的段寄存器中,而是通過(guò)給段寄存器賦初值的方法來(lái)實(shí)現(xiàn)。中,而是通過(guò)給段寄存器賦初值的方法來(lái)實(shí)現(xiàn)。段寄存器不能用立即尋址方式直接傳送,必須借助于段寄存器不能用立即尋址方式直接傳送,必須借助于通用寄存器進(jìn)行傳遞。通用寄存器進(jìn)行傳遞。對(duì)于堆棧段,不僅要將段地址置入對(duì)于堆棧段,不僅要將段地址

10、置入SS段寄存器中,而段寄存器中,而且還要將堆棧棧頂?shù)钠频刂分萌攵褩V羔樇拇嫫髑疫€要將堆棧棧頂?shù)钠频刂分萌攵褩V羔樇拇嫫鱏P中。中。 第12頁(yè)/共77頁(yè)第十三頁(yè),共78頁(yè)。DATASEGMENTAADB 0DH,20HDATAENDSEXTRA SEGMENTBNDW 3478HEXTRA ENDSASTACK SEGMENTSTACK DW 256 DUP(0)TOP LABEL WORDASTACK ENDSCODESEGMENT ASSUME CS:CODE,DS:DATA,ES:EXTRA,SS:ASTACKSTART:MOV AX,DATA;初始化;初始化DSMOV DS,AXM

11、OV AX,EXTRA;初始化;初始化ESMOV ES,AXMOV AX,ASTACK;初始化;初始化SSMOV SS,AXLEA SP,TOP;初始化;初始化SP CODEENDSEND START 第13頁(yè)/共77頁(yè)第十四頁(yè),共78頁(yè)。CS和和IP裝入通常是按照源程序結(jié)束裝入通常是按照源程序結(jié)束(jish)偽指令偽指令的地址來(lái)完成的,格式是:的地址來(lái)完成的,格式是: END 起始地址起始地址起始地址是一個(gè)標(biāo)號(hào)或表達(dá)式,該起始地址是程序起始地址是一個(gè)標(biāo)號(hào)或表達(dá)式,該起始地址是程序裝入內(nèi)存后開(kāi)始執(zhí)行的起始點(diǎn)裝入內(nèi)存后開(kāi)始執(zhí)行的起始點(diǎn) 。第14頁(yè)/共77頁(yè)第十五頁(yè),共78頁(yè)。4、置匯編地址計(jì)數(shù)器

12、偽指令、置匯編地址計(jì)數(shù)器偽指令 符號(hào)符號(hào)(fho)$用來(lái)記錄正在被匯編程序翻譯的語(yǔ)句的用來(lái)記錄正在被匯編程序翻譯的語(yǔ)句的地址。地址。匯編過(guò)程中,每個(gè)新段都分配一個(gè)初值為匯編過(guò)程中,每個(gè)新段都分配一個(gè)初值為0的匯編地的匯編地址計(jì)數(shù)器,然后再對(duì)該段中的語(yǔ)句匯編,且該計(jì)數(shù)器址計(jì)數(shù)器,然后再對(duì)該段中的語(yǔ)句匯編,且該計(jì)數(shù)器按語(yǔ)句目標(biāo)代碼的長(zhǎng)度增值。按語(yǔ)句目標(biāo)代碼的長(zhǎng)度增值。因此,段內(nèi)定義的所有標(biāo)號(hào)和變量的偏移地址就是當(dāng)因此,段內(nèi)定義的所有標(biāo)號(hào)和變量的偏移地址就是當(dāng)前匯編地址計(jì)數(shù)器的值。前匯編地址計(jì)數(shù)器的值。 DATASEGMENTBUFDB1234ABCDCOUNTEQU$-BUFDATAENDSCOU

13、NT的值就是的值就是(jish)BUF數(shù)據(jù)區(qū)所占的字節(jié)數(shù)。數(shù)據(jù)區(qū)所占的字節(jié)數(shù)。第15頁(yè)/共77頁(yè)第十六頁(yè),共78頁(yè)。5、指定地址偽指令。、指定地址偽指令。格式格式(g shi): ORG 數(shù)值表達(dá)式數(shù)值表達(dá)式功能:將匯編地址計(jì)數(shù)器設(shè)置成數(shù)值表達(dá)式的值。注功能:將匯編地址計(jì)數(shù)器設(shè)置成數(shù)值表達(dá)式的值。注意:該值為意:該值為065535之間的非負(fù)整數(shù)。之間的非負(fù)整數(shù)。DATASEGMENTORG 10H;設(shè)置;設(shè)置(shzh)$的值為的值為10HBUFDB ABCD;變量;變量BUF的偏移地址為的偏移地址為10HDATAENDS設(shè)置設(shè)置(shzh)ORG使變量使變量BUF的首偏移地址為的首偏移地址為

14、10H,否則變量,否則變量BUF的首偏移地址為的首偏移地址為0。 第16頁(yè)/共77頁(yè)第十七頁(yè),共78頁(yè)。第17頁(yè)/共77頁(yè)第十八頁(yè),共78頁(yè)。第18頁(yè)/共77頁(yè)第十九頁(yè),共78頁(yè)。符號(hào)符號(hào)(fho)定義偽指令定義偽指令 1. 賦值偽指令賦值偽指令EQU格式:格式: 符號(hào)符號(hào)(fho)名名 EQU 表達(dá)式表達(dá)式功能:功能: 給符號(hào)給符號(hào)(fho)定義一個(gè)值、別的符號(hào)定義一個(gè)值、別的符號(hào)(fho)名、表名、表達(dá)式或助記符達(dá)式或助記符注意:經(jīng)注意:經(jīng)EQU語(yǔ)句定義的符號(hào)語(yǔ)句定義的符號(hào)(fho)在同一個(gè)程序模塊中在同一個(gè)程序模塊中不允許重新定義。不允許重新定義。CONST EQU 256;數(shù)賦以符號(hào)數(shù)

15、賦以符號(hào)(fho)名名BETA EQU BX+SI; BX+SI賦以符號(hào)賦以符號(hào)(fho)名名ALPEQUCONST-6; CONST-6賦以符號(hào)賦以符號(hào)(fho)名名BUTEQUSEG MN;段地址賦以符號(hào)段地址賦以符號(hào)(fho)名名EMPEQUOFFSET MN;偏移地址賦以符號(hào)偏移地址賦以符號(hào)(fho)名名第19頁(yè)/共77頁(yè)第二十頁(yè),共78頁(yè)。2. 等號(hào)偽指令等號(hào)偽指令 =格式格式(g shi): 符號(hào)名符號(hào)名 = 表達(dá)式表達(dá)式功能:給符號(hào)定義一個(gè)值、別的符號(hào)名、表達(dá)式或助記符功能:給符號(hào)定義一個(gè)值、別的符號(hào)名、表達(dá)式或助記符注意:等號(hào)偽指令(注意:等號(hào)偽指令(=)與)與EQU語(yǔ)句有相同

16、的格式語(yǔ)句有相同的格式(g shi)與功能與功能,區(qū)別僅在于用等號(hào)語(yǔ)句定義的符號(hào)允許重新定義,使用更靈,區(qū)別僅在于用等號(hào)語(yǔ)句定義的符號(hào)允許重新定義,使用更靈活方便?;罘奖恪O铝械忍?hào)語(yǔ)句都是有效的:下列等號(hào)語(yǔ)句都是有效的:EMP=200HCOUNT=100EMP=AX第20頁(yè)/共77頁(yè)第二十一頁(yè),共78頁(yè)。3. 定義符號(hào)名偽指令定義符號(hào)名偽指令格式:名稱(chēng)格式:名稱(chēng) LABEL 類(lèi)型類(lèi)型功能:用來(lái)給已定義的變量功能:用來(lái)給已定義的變量(binling)或標(biāo)號(hào)重新定義它的或標(biāo)號(hào)重新定義它的類(lèi)型或距離屬性。類(lèi)型或距離屬性。 例如,在定義堆棧段時(shí),常用下面的格式:例如,在定義堆棧段時(shí),常用下面的格式:A

17、STACK SEGMENT STACKDW 256 DUP(?)(?)ATOP LABEL WORDASTACK ENDS定義定義256個(gè)字的堆棧,用個(gè)字的堆棧,用LABEL語(yǔ)句定義的語(yǔ)句定義的ATOP,是給堆棧,是給堆棧棧底取的名稱(chēng),把它的類(lèi)型定義為字。棧底取的名稱(chēng),把它的類(lèi)型定義為字。 第21頁(yè)/共77頁(yè)第二十二頁(yè),共78頁(yè)。數(shù)據(jù)定義語(yǔ)句有數(shù)據(jù)定義語(yǔ)句有5條,其格式相同,如下:條,其格式相同,如下: 變量名變量名 DB 初值表達(dá)式初值表達(dá)式 變量名變量名 DW 初值表達(dá)式初值表達(dá)式 變量名變量名 DD 初值表達(dá)式初值表達(dá)式 變量名變量名 DQ 初值表達(dá)式初值表達(dá)式 變量名變量名 DT 初值

18、表達(dá)式初值表達(dá)式功能:功能: 讓匯編程序讓匯編程序(hu bin chn x)在內(nèi)存中劃出指定個(gè)數(shù)的存在內(nèi)存中劃出指定個(gè)數(shù)的存儲(chǔ)單元,然后將這些存儲(chǔ)單元與變量名聯(lián)系起來(lái),并在存儲(chǔ)儲(chǔ)單元,然后將這些存儲(chǔ)單元與變量名聯(lián)系起來(lái),并在存儲(chǔ)單元中預(yù)置初值。單元中預(yù)置初值。 DB偽指令定義字節(jié)類(lèi)型變量,其每個(gè)初值都占一個(gè)字節(jié)的偽指令定義字節(jié)類(lèi)型變量,其每個(gè)初值都占一個(gè)字節(jié)的存儲(chǔ)空間。存儲(chǔ)空間。 DW偽指令用來(lái)定義字類(lèi)型變量,其每個(gè)初值都占一個(gè)字的偽指令用來(lái)定義字類(lèi)型變量,其每個(gè)初值都占一個(gè)字的存儲(chǔ)空間。存儲(chǔ)空間。 DD偽指令用來(lái)定義雙字類(lèi)型變量,其每個(gè)初值都占二個(gè)字偽指令用來(lái)定義雙字類(lèi)型變量,其每個(gè)初值都

19、占二個(gè)字的存儲(chǔ)空間。的存儲(chǔ)空間。第22頁(yè)/共77頁(yè)第二十三頁(yè),共78頁(yè)。第23頁(yè)/共77頁(yè)第二十四頁(yè),共78頁(yè)。這實(shí)際上是為數(shù)據(jù)分配存儲(chǔ)單元,并把變量名作為該存儲(chǔ)單元的名稱(chēng)。這實(shí)際上是為數(shù)據(jù)分配存儲(chǔ)單元,并把變量名作為該存儲(chǔ)單元的名稱(chēng)。第24頁(yè)/共77頁(yè)第二十五頁(yè),共78頁(yè)。可以用可以用DB偽指令為偽指令為ASCII字符串中的每一個(gè)字符分配一個(gè)字節(jié)單元。字符串中的每一個(gè)字符分配一個(gè)字節(jié)單元。第25頁(yè)/共77頁(yè)第二十六頁(yè),共78頁(yè)。 這是為數(shù)據(jù)項(xiàng)分配存儲(chǔ)單元的一種方法,只是存儲(chǔ)單元中不預(yù)置這是為數(shù)據(jù)項(xiàng)分配存儲(chǔ)單元的一種方法,只是存儲(chǔ)單元中不預(yù)置(y zh)確定的值,常用來(lái)預(yù)留存儲(chǔ)單元,存放程序的

20、中間結(jié)果或最終結(jié)果。確定的值,常用來(lái)預(yù)留存儲(chǔ)單元,存放程序的中間結(jié)果或最終結(jié)果。第26頁(yè)/共77頁(yè)第二十七頁(yè),共78頁(yè)。第27頁(yè)/共77頁(yè)第二十八頁(yè),共78頁(yè)。1 過(guò)程過(guò)程(guchng)定義定義偽指令偽指令 過(guò)程由偽指令過(guò)程由偽指令PROC和和ENDP定義。定義過(guò)程的定義。定義過(guò)程的格式為:格式為: 過(guò)程名過(guò)程名 PROCNEAR或或FAR 過(guò)程名過(guò)程名 ENDP 其中,其中,PROC和和ENDP必須成對(duì)出現(xiàn)必須成對(duì)出現(xiàn)(chxin),且前面都,且前面都有同一過(guò)程名,過(guò)程的類(lèi)型由有同一過(guò)程名,過(guò)程的類(lèi)型由PROC的操作數(shù)指出。的操作數(shù)指出。若若PROC后無(wú)操作數(shù),則默認(rèn)為后無(wú)操作數(shù),則默認(rèn)為

21、NEAR類(lèi)型。類(lèi)型。過(guò)程過(guò)程(guchng)與宏定義偽指令與宏定義偽指令第28頁(yè)/共77頁(yè)第二十九頁(yè),共78頁(yè)。 在匯編程序中,可以使用過(guò)程定義偽指令在匯編程序中,可以使用過(guò)程定義偽指令(zhlng)定義子定義子程序,通過(guò)調(diào)用指令程序,通過(guò)調(diào)用指令(zhlng)CALL調(diào)用子程序。過(guò)程名是為調(diào)用子程序。過(guò)程名是為該子程序起的名字。該子程序起的名字。PROC和和ENDP兩偽指令兩偽指令(zhlng)之間,之間,是為實(shí)現(xiàn)某功能的程序段,其中至少有一條子程序返是為實(shí)現(xiàn)某功能的程序段,其中至少有一條子程序返回指令回指令(zhlng)RET以便返回調(diào)用它的程序。以便返回調(diào)用它的程序。 第29頁(yè)/共77頁(yè)

22、第三十頁(yè),共78頁(yè)。 子程序也可以用子程序也可以用“:”定義,定義,“:” 定義的定義的標(biāo)號(hào)是為該子程序起的名字。標(biāo)號(hào)是為該子程序起的名字。主程序把用主程序把用“:”定義的子程序作為遠(yuǎn)過(guò)程來(lái)調(diào)定義的子程序作為遠(yuǎn)過(guò)程來(lái)調(diào)用用(dioyng)。若子程序與調(diào)用若子程序與調(diào)用(dioyng)它的主程序在同一它的主程序在同一代碼段,則必須用過(guò)程來(lái)定義該子程序。代碼段,則必須用過(guò)程來(lái)定義該子程序。中斷調(diào)用中斷調(diào)用(dioyng)都是遠(yuǎn)調(diào)用都是遠(yuǎn)調(diào)用(dioyng),所,所以中斷服務(wù)子程序用以中斷服務(wù)子程序用“:”定義。定義。若用過(guò)程來(lái)定義中斷服務(wù)子程序定義過(guò)程為遠(yuǎn)若用過(guò)程來(lái)定義中斷服務(wù)子程序定義過(guò)程為遠(yuǎn)過(guò)

23、程,而不論他與調(diào)用過(guò)程,而不論他與調(diào)用(dioyng)程序是否在程序是否在不同的代碼段。不同的代碼段。第30頁(yè)/共77頁(yè)第三十一頁(yè),共78頁(yè)。(1 1)NEARNEAR屬性:調(diào)用屬性:調(diào)用(dioyng)(dioyng)程序和子程序在同一代程序和子程序在同一代碼段中碼段中 (段內(nèi)調(diào)用(段內(nèi)調(diào)用(dioyng)(dioyng))(2 2)FARFAR屬性:調(diào)用屬性:調(diào)用(dioyng)(dioyng)程序和子程序不在同一代程序和子程序不在同一代碼段中碼段中 (段間調(diào)用(段間調(diào)用(dioyng)(dioyng))第31頁(yè)/共77頁(yè)第三十二頁(yè),共78頁(yè)。.DS : 0 進(jìn)棧 ( INT 20H )第

24、32頁(yè)/共77頁(yè)第三十三頁(yè),共78頁(yè)。第33頁(yè)/共77頁(yè)第三十四頁(yè),共78頁(yè)。編輯程序編輯程序Prog.asm文件文件匯編程序匯編程序Prog.obj文件文件連接程序連接程序Prog.exe文件文件Edit.exeMasm.exeLink.exe第34頁(yè)/共77頁(yè)第三十五頁(yè),共78頁(yè)。第35頁(yè)/共77頁(yè)第三十六頁(yè),共78頁(yè)。調(diào)用調(diào)用 MASM.EXE.ASM匯編匯編.OBJ.LST.CRF可選可選第36頁(yè)/共77頁(yè)第三十七頁(yè),共78頁(yè)。第37頁(yè)/共77頁(yè)第三十八頁(yè),共78頁(yè)。第38頁(yè)/共77頁(yè)第三十九頁(yè),共78頁(yè)。調(diào)用調(diào)用LINK.EXE.OBJ.OBJ.LIB連接連接.EXE.MAP.LIB

25、可選可選第39頁(yè)/共77頁(yè)第四十頁(yè),共78頁(yè)。DEBUG PROG.EXE- U 起始地址起始地址 結(jié)束地址結(jié)束地址 (反匯編反匯編)- G =起始地址起始地址 斷點(diǎn)地址斷點(diǎn)地址- T = 地址地址 (可選執(zhí)行可選執(zhí)行(zhxng)指令的條數(shù))指令的條數(shù))- D 顯示存儲(chǔ)單元的內(nèi)容顯示存儲(chǔ)單元的內(nèi)容- E 修改存儲(chǔ)單元的內(nèi)容修改存儲(chǔ)單元的內(nèi)容- Q 退出退出 DEBUG第40頁(yè)/共77頁(yè)第四十一頁(yè),共78頁(yè)。3.4 常用系統(tǒng)功能常用系統(tǒng)功能(gngnng)調(diào)用調(diào)用 IBM PC微機(jī)系統(tǒng)為匯編用戶(hù)微機(jī)系統(tǒng)為匯編用戶(hù)(yngh)提供了兩個(gè)程序接提供了兩個(gè)程序接口。一個(gè)是口。一個(gè)是DOS系統(tǒng)功能調(diào)用

26、,另一個(gè)是系統(tǒng)功能調(diào)用,另一個(gè)是ROM中的中的BIOS(basic input/output system)。系統(tǒng)功能調(diào)用和。系統(tǒng)功能調(diào)用和BIOS由一系列的服務(wù)子程序構(gòu)成,但調(diào)用與返回不由一系列的服務(wù)子程序構(gòu)成,但調(diào)用與返回不是使用子程序調(diào)用指令是使用子程序調(diào)用指令CALL和返回指令和返回指令RET,而是,而是通過(guò)軟中斷指令通過(guò)軟中斷指令I(lǐng)NT N和中斷返回指令和中斷返回指令I(lǐng)RET調(diào)用和返調(diào)用和返回?;?。 第41頁(yè)/共77頁(yè)第四十二頁(yè),共78頁(yè)。類(lèi)類(lèi)型型號(hào)號(hào)中中斷斷功功能能名名稱(chēng)稱(chēng)模模 塊塊中中 斷斷 源源20H程程序序結(jié)結(jié)束束返返回回系系統(tǒng)統(tǒng)DOSINT 指指令令21H系系統(tǒng)統(tǒng)功功能能調(diào)

27、調(diào)用用DOSINT 指指令令22H程程序序結(jié)結(jié)束束地地址址DOS非非中中斷斷向向量量23HCtrl-Break 處處理理DOSINT 指指令令24H嚴(yán)嚴(yán)重重錯(cuò)錯(cuò)誤誤處處理理DOSINT 指指令令25H按按扇扇區(qū)區(qū)讀讀磁磁盤(pán)盤(pán)DOSINT 指指令令26H按按扇扇區(qū)區(qū)寫(xiě)寫(xiě)磁磁盤(pán)盤(pán)DOSINT 指指令令27H程程序序結(jié)結(jié)束束駐駐留留內(nèi)內(nèi)存存DOSINT 指指令令28-3FH保保留留40H軟軟盤(pán)盤(pán) I/OBIOSINT 指指令令41,46H硬硬盤(pán)盤(pán)參參數(shù)數(shù)表表 1,2BIOS非非中中斷斷向向量量42-5FH保保留留60-67H為為用用戶(hù)戶(hù)保保留留INT 指指令令68-7FH保保留留80-F0HBASI

28、C 使使用用BIOSINT 指指令令F1-FFH保保留留第42頁(yè)/共77頁(yè)第四十三頁(yè),共78頁(yè)。DOS功能功能(gngnng)調(diào)用調(diào)用 系統(tǒng)功能調(diào)用是系統(tǒng)功能調(diào)用是IBM PC微機(jī)系統(tǒng)為匯編用戶(hù)提微機(jī)系統(tǒng)為匯編用戶(hù)提供的一個(gè)程序接口。系統(tǒng)功能調(diào)用共有供的一個(gè)程序接口。系統(tǒng)功能調(diào)用共有4類(lèi)。我們僅類(lèi)。我們僅介紹介紹(jisho)設(shè)備管理系統(tǒng)功能調(diào)用中基本的設(shè)備管理系統(tǒng)功能調(diào)用中基本的I/O管理功能。管理功能。 使用系統(tǒng)功能調(diào)用的一般過(guò)程為:把調(diào)用號(hào)放入使用系統(tǒng)功能調(diào)用的一般過(guò)程為:把調(diào)用號(hào)放入AH中,設(shè)置入口參數(shù),然后執(zhí)行中,設(shè)置入口參數(shù),然后執(zhí)行INT 21H指令,最后指令,最后分析處理出口參

29、數(shù)。分析處理出口參數(shù)。 第43頁(yè)/共77頁(yè)第四十四頁(yè),共78頁(yè)。 調(diào)用調(diào)用(dioyng)方法方法設(shè)置入口參數(shù)設(shè)置入口參數(shù)在在AH設(shè)置功能號(hào)設(shè)置功能號(hào)m執(zhí)行中斷指令執(zhí)行中斷指令I(lǐng)NT N分析、應(yīng)用出口參數(shù)分析、應(yīng)用出口參數(shù)第44頁(yè)/共77頁(yè)第四十五頁(yè),共78頁(yè)。 1. 1號(hào)功能調(diào)用(從鍵盤(pán)輸入一個(gè)字符)號(hào)功能調(diào)用(從鍵盤(pán)輸入一個(gè)字符) MOV AH,1 INT 21H 執(zhí)行該調(diào)用時(shí)將等待鍵入,一旦有鍵按下就將該按執(zhí)行該調(diào)用時(shí)將等待鍵入,一旦有鍵按下就將該按鍵字符的鍵字符的ASCII碼讀入碼讀入AL,并同時(shí),并同時(shí)(tngsh)顯示該字符。顯示該字符。 2 . 2號(hào)功能調(diào)用(在顯示器上顯示一個(gè)字

30、符)號(hào)功能調(diào)用(在顯示器上顯示一個(gè)字符) MOV DL,待顯示字符的,待顯示字符的ASCII碼碼 MOV AH,2 INT 21H 本調(diào)用執(zhí)行后,顯示器顯示待顯示的字符。本調(diào)用執(zhí)行后,顯示器顯示待顯示的字符。第45頁(yè)/共77頁(yè)第四十六頁(yè),共78頁(yè)。 3. 9號(hào)功能號(hào)功能(gngnng)調(diào)用(顯示字符串)調(diào)用(顯示字符串) MOV DX,待顯示字符串的首偏移地址,待顯示字符串的首偏移地址 MOV AH,9 INT 21H 本調(diào)用執(zhí)行后,顯示器顯示待顯示的字符串。執(zhí)本調(diào)用執(zhí)行后,顯示器顯示待顯示的字符串。執(zhí)行前要在行前要在DS數(shù)據(jù)段定義一以數(shù)據(jù)段定義一以$結(jié)尾的字符串。結(jié)尾的字符串。 當(dāng)需要輸出數(shù)

31、據(jù)區(qū)中某一字符串時(shí),若該字符串當(dāng)需要輸出數(shù)據(jù)區(qū)中某一字符串時(shí),若該字符串的尾部無(wú)的尾部無(wú) $,一定要在其尾部置入一個(gè),一定要在其尾部置入一個(gè) $;若該字符;若該字符串中間就有串中間就有 $,則要采用,則要采用2號(hào)功能號(hào)功能(gngnng)調(diào)用逐個(gè)輸出該字調(diào)用逐個(gè)輸出該字符串中的字符。符串中的字符。第46頁(yè)/共77頁(yè)第四十七頁(yè),共78頁(yè)。 4. 10號(hào)功能調(diào)用(輸入字符串)號(hào)功能調(diào)用(輸入字符串) MOV DX,數(shù)據(jù)區(qū)的首偏移地址,數(shù)據(jù)區(qū)的首偏移地址(dzh) MOV AH,10 INT 21H 當(dāng)需要輸入字符串時(shí),應(yīng)在當(dāng)需要輸入字符串時(shí),應(yīng)在DS數(shù)據(jù)段中事先定數(shù)據(jù)段中事先定義一個(gè)變量數(shù)據(jù)區(qū)義一

32、個(gè)變量數(shù)據(jù)區(qū)IBUF,其定義格式如下:,其定義格式如下: IBUF DB 數(shù)據(jù)區(qū)大小,數(shù)據(jù)區(qū)大小,?,數(shù)據(jù)區(qū)大小,數(shù)據(jù)區(qū)大小 DUP(?)其中:數(shù)據(jù)區(qū)大小是一個(gè)無(wú)符號(hào)數(shù)(其中:數(shù)據(jù)區(qū)大小是一個(gè)無(wú)符號(hào)數(shù)(2255)。)。 執(zhí)行該調(diào)用時(shí)將等待鍵入執(zhí)行該調(diào)用時(shí)將等待鍵入1254個(gè)字符,鍵入的個(gè)字符,鍵入的字符數(shù)可以少不能多,最后以回車(chē)結(jié)束本調(diào)用。字符數(shù)可以少不能多,最后以回車(chē)結(jié)束本調(diào)用。第47頁(yè)/共77頁(yè)第四十八頁(yè),共78頁(yè)。 DUP(?)前的前的“數(shù)據(jù)區(qū)大小數(shù)據(jù)區(qū)大小”應(yīng)與前面一個(gè)應(yīng)與前面一個(gè)“數(shù)據(jù)數(shù)據(jù)區(qū)大小區(qū)大小”一致,因?yàn)閿?shù)據(jù)區(qū)的大小是由前面的即第一致,因?yàn)閿?shù)據(jù)區(qū)的大小是由前面的即第1個(gè)單元規(guī)

33、定的,從第個(gè)單元規(guī)定的,從第3個(gè)單元開(kāi)始是預(yù)留給個(gè)單元開(kāi)始是預(yù)留給10號(hào)功能號(hào)功能調(diào)用裝載鍵入字符的,留多了不能多裝,是浪費(fèi);留調(diào)用裝載鍵入字符的,留多了不能多裝,是浪費(fèi);留少了可多裝,當(dāng)輸入的字符數(shù)超過(guò)預(yù)留的單元數(shù)時(shí),少了可多裝,當(dāng)輸入的字符數(shù)超過(guò)預(yù)留的單元數(shù)時(shí),數(shù)據(jù)區(qū)就會(huì)自動(dòng)往下延伸,沖掉緊跟其后的存儲(chǔ)單元數(shù)據(jù)區(qū)就會(huì)自動(dòng)往下延伸,沖掉緊跟其后的存儲(chǔ)單元中的內(nèi)容,造成程序運(yùn)行的混亂中的內(nèi)容,造成程序運(yùn)行的混亂(hnlun)。第。第2個(gè)單元是預(yù)留個(gè)單元是預(yù)留給裝載給裝載10號(hào)功能調(diào)用時(shí)實(shí)際鍵入字符數(shù)的,實(shí)際鍵入號(hào)功能調(diào)用時(shí)實(shí)際鍵入字符數(shù)的,實(shí)際鍵入的字符數(shù)不包括回車(chē)的字符數(shù)不包括回車(chē)(0DH)

34、。第48頁(yè)/共77頁(yè)第四十九頁(yè),共78頁(yè)。 最后,要特別強(qiáng)調(diào)的是:最后,要特別強(qiáng)調(diào)的是:2號(hào)功能調(diào)用、號(hào)功能調(diào)用、9號(hào)功能號(hào)功能調(diào)用和調(diào)用和10號(hào)功能調(diào)用雖然未使用號(hào)功能調(diào)用雖然未使用AL,但調(diào)用后也會(huì)破,但調(diào)用后也會(huì)破壞壞AL中原來(lái)的內(nèi)容。為防止中原來(lái)的內(nèi)容。為防止(fngzh)AL中原來(lái)的內(nèi)容被破壞中原來(lái)的內(nèi)容被破壞,在調(diào)用前應(yīng)先保護(hù),在調(diào)用前應(yīng)先保護(hù)AL,調(diào)用后再恢復(fù)。,調(diào)用后再恢復(fù)。第49頁(yè)/共77頁(yè)第五十頁(yè),共78頁(yè)。第50頁(yè)/共77頁(yè)第五十一頁(yè),共78頁(yè)。 BIOS中斷程序處于DOS功能調(diào)用和硬件(yn jin)環(huán)境之間,和DOS功能調(diào)用相比其優(yōu)點(diǎn)是效率高,缺點(diǎn)是編程相對(duì)復(fù)雜;和直接對(duì)硬件(yn jin)編程相比,優(yōu)點(diǎn)是實(shí)現(xiàn)相對(duì)容易,缺點(diǎn)是效率相對(duì)較低。 在一些情況下既能選擇DOS中斷也能選擇BIOS中斷來(lái)執(zhí)行同樣的功能。例如,打印機(jī)輸出一個(gè)字符的功能,可用DOS中斷21H的功能5,也可用BIOS中斷17H的功能0。因?yàn)锽IOS比DOS更靠近硬件(yn jin)。一般情況下,盡可能地使用DOS功能,但在少數(shù)情況下必須使用BIOS功能。例如,BIOS中斷17H的功能2為讀打印機(jī)狀態(tài),DOS就沒(méi)有等效的功能。

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論