版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第七章 微型計(jì)算機(jī)匯編語(yǔ)言及匯編程序,7.1 宏匯編語(yǔ)言的基本語(yǔ)法 7.2 偽指令 7.3 宏指令 7.4 系統(tǒng)功能調(diào)用 7.5 匯編程序的功能及匯編過(guò)程,7.1 宏匯編語(yǔ)言的基本語(yǔ)法,匯編程序:用來(lái)把匯編語(yǔ)言編寫的程序自動(dòng)翻譯成目的 程序的軟件,7.1.1 偽指令語(yǔ)句格式,內(nèi)存數(shù)據(jù)定義偽指令,7.1.2 常量、變量和標(biāo)號(hào),常數(shù):沒(méi)有任何屬性的純數(shù)值。在程序運(yùn)行中不發(fā)生變化。,如:10010011B、0A5H、”ZHIFUCHUAN”,變 量:表示存儲(chǔ)單元,單元中的數(shù)在程序運(yùn)行期間隨時(shí) 可以修改。 變量名:存放數(shù)據(jù)單元的符號(hào)地址,標(biāo) 號(hào):表示存儲(chǔ)單元,單元中存放的是機(jī)器指令代碼,段屬性(SEG
2、):變量或標(biāo)號(hào)對(duì)應(yīng)存儲(chǔ)單元所在段的段值 偏移量屬性(OFFSET):變量或標(biāo)號(hào)對(duì)應(yīng)存儲(chǔ)單元的起始地址的段內(nèi)偏移 類型屬性(TYPE): 變量類型主要是字節(jié)(BYTE)、字(WORD)、雙字(DWORD) 標(biāo)號(hào)類型主要是近(NEAR)和遠(yuǎn)(FAR),標(biāo)號(hào)指令所在內(nèi)存單元的符號(hào)地址,有三個(gè)屬性: 段地址:即標(biāo)號(hào)所在段的段地址; 偏移量:標(biāo)號(hào)所代表存儲(chǔ)單元的段內(nèi)偏移地址; 類 型:NEAR或FAR: NEAR表示標(biāo)號(hào)所在語(yǔ)句與轉(zhuǎn)移指令/ 調(diào)用指令在同一碼段內(nèi),跳轉(zhuǎn)時(shí) 只需改變IP即可。 FAR標(biāo)號(hào)所在語(yǔ)句與轉(zhuǎn)移指令/調(diào)用 指令不在同一代碼段內(nèi)。 若沒(méi)有對(duì)類型進(jìn)行說(shuō)明,默認(rèn)為NEAR。 標(biāo)號(hào)通常作為轉(zhuǎn)
3、移指令或CALL指令的轉(zhuǎn)移地址。,變量,變量即內(nèi)存中的存儲(chǔ)單元或數(shù)據(jù)區(qū)。 變量名是存儲(chǔ)單元(數(shù)據(jù)區(qū))的符號(hào)地 址或名字。 變量也有三個(gè)屬性: 段地址變量所在段的段地址 偏移量變量單元地址與段首地址之間的位移量。 類 型有BYTE、WORD和DWORD三種。 變量在程序中作為存儲(chǔ)器操作數(shù)被引用。,標(biāo)號(hào)和變量名的使用規(guī)則 組成:A-Z(不分大小寫), 0-9, ? . _ $ 不能以數(shù)字開(kāi)頭,句號(hào)(.)只能作為首字符 長(zhǎng)度小于31個(gè)字符 不能與保留字(指令助記符、偽指令、預(yù)定義符號(hào)等)重名 不能重復(fù)定義 例如: 正確的:LP1, AGAIN, NEXT, _GO, OK_1 錯(cuò)誤的:4M, LOO
4、P, AAA, #HELP, +ONE (P457),匯編語(yǔ)言的一個(gè)實(shí)例: hello.asm data SEGMENT Hello DB Hello, world!,0DH,0AH,$ data ENDS prog SEGMENT ASSUME CS:prog,DS:data start: MOV AX,data MOV DS,AX LEA DX,hello;取字符串首地址 MOV AH,9 INT 21H;顯示字符串 MOV AH,4CH INT 21H;退回DOS prog ENDS END start,名字,標(biāo)號(hào),ORG 100H X DB 33H Y DW 0A65DH,變量名,MO
5、V AL,X MOV BX,Y,7.1.3 表達(dá)式與運(yùn)算符(1),表達(dá)式:由操作數(shù)和運(yùn)算符組成的式子,算術(shù)運(yùn)算符: +、-、*、/、MOD(除法取余)、SHL(左移)、 SHR(右移),例: MOV AX,100*4+5 ;AX=405,例1)算術(shù)運(yùn)算符 +、-、*、/,MOD,用于數(shù)字表達(dá)式: MOV AX , 4*1024 匯編后的形式為: MOV AX , 4096 用于地址表達(dá)式,例: LEA SI , TAB+3 若TAB的偏移地址為1000H,則匯編后的形式為: LEA SI , 1003H,例2)邏輯運(yùn)算符 AND、OR、XOR、NOT,邏輯運(yùn)算符只能用于數(shù)字表達(dá)式中。 例:MO
6、VCL , 36H AND 0FH 經(jīng)匯編后:MOV CL , 06H 注意,不要把邏輯運(yùn)算符與邏輯運(yùn)算指令混淆: 例:AND AX , 3FC0H AND 0FF00H 匯編后源操作數(shù)被翻譯為:3F00H,所以上述指令與AND AX, 3F00H等價(jià)。,例3)關(guān)系運(yùn)算符EQ、NE、LT、GT、LE、GE,關(guān)系運(yùn)算的結(jié)果是一個(gè)邏輯值:真或假 關(guān)系為真,結(jié)果為全1 關(guān)系為假,結(jié)果為全0 例:MOV BX , PORT GT 300H 若PORT的值大于300H,則匯編后為: MOV BX,0FFFFH 否則匯編后為: MOV BX,0, 分析運(yùn)算符(數(shù)值回送操作符): SEG(計(jì)算段基址) OF
7、FSET(計(jì)算偏移地址) TYPE(計(jì)算符號(hào)類型值; P157) SIZE(計(jì)算符號(hào)名分配的字節(jié)數(shù))(=TYPE*LENGTH) LENGTH(計(jì)算符號(hào)名分配的數(shù)),7.1.3 表達(dá)式與運(yùn)算符(2),例2:把VARW的偏移地址送BX MOV BX,OFFSET VARW,例3:假設(shè)VARW變量是字變量,把VARW的類型值送AL MOV AL, TYPE VARW ;AL =2,例4)取地址運(yùn)算符SEG、OFFSET,SEG:取變量/標(biāo)號(hào)的段地址 OFFSET:取變量/標(biāo)號(hào)的偏移地址 例:VAR DB 12H MOV BX,OFFSETVAR ;取變量VAR的偏移地址 MOV AX,SEG VA
8、R ;取變量VAR的段地址 注意,以下指令的異同: MOV BX, OFFSET VAR LEA BX, VAR OFFSET只能取靜態(tài)的偏移地址; LEA指令即可取靜態(tài)的偏移地址,也可取動(dòng)態(tài)的偏移地址。,例5)取值運(yùn)算符TYPE、LENGTH、SIZE,TYPE 取變量的類型(1,2,4) LENGTH 取所定義變量的長(zhǎng)度 (即變量中元素的個(gè)數(shù)) SIZE 取所定義存儲(chǔ)區(qū)的字節(jié)數(shù) (=TYPE*LENGTH) 例:VAR DW 1,2,3,4,5 則 TYPE VAR = 2 LENGTH VAR = 5 SIZE VAR = 10 執(zhí)行: MOV CX, SIZE VAR ; (CX)=1
9、0,7.1.3 表達(dá)式與運(yùn)算符(3), 組合運(yùn)算符(屬性操作符),定義符號(hào)名為新類型PTR,格式: PTR 功能:用于指定或臨時(shí)改變變量或標(biāo)號(hào)的類型,例:MOV WORD PTR SI,1 ;指明字類型,執(zhí)行后 SI = 01 SI+1=00,屬性運(yùn)算符PTR,用來(lái)指定地址操作數(shù)的類型。 格式: PTR 類型BYTE, WORD, DWORD, NEAR, FAR BYTE、WORD、DWORD 用于描述數(shù)據(jù)存儲(chǔ)單元(變量)地址 NEAR、FAR 用于描述轉(zhuǎn)移、調(diào)用的目的地址,例6) :MOVBYTE PTRDI,0 ;字節(jié)類型 MOVWORD PTRDI,0 ;字類型 MOVDI,0B5H
10、;類型不定 PTR也可用來(lái)進(jìn)行強(qiáng)制類型轉(zhuǎn)換 例:STR1 DW 1234H ;STR1定義為字類型 MOVAX,STR1 ;合法 MOVAL,STR1 ;非法 MOV AL,BYTE PTR STR1 ;合法,7.1.3 表達(dá)式與運(yùn)算符(4), 分離運(yùn)算符,LOW 取低字節(jié) 格式:LOW HIGH 取高字節(jié) 格式:HIGH ,例:設(shè)SSY=2050H MOV AL,LOW 3080H ;AL=80H MOV AH,HIGH SSY ;AH=20 MOV CL, LOW 3A4BH ;CL=4BH,7.2 偽指令,1. 符號(hào)定義偽指令(賦值語(yǔ)句)(1),格式: EQU 功能:用符號(hào)來(lái)代表表達(dá)式的
11、內(nèi)容, 等價(jià)語(yǔ)句EQU,表達(dá)式可以是常數(shù)、數(shù)值表達(dá)式、字符串、存儲(chǔ)器符號(hào)等,例:COUNT EQU 100 ;符號(hào)COUNT代表常數(shù)100 BUFF EQU 4*COUNT ;BUFF代表400 HELLO EQU “How are you! ” ;HELLO代表How are you VARW EQU THIS WORD ;變量VARW的類型是字,注意:等價(jià)語(yǔ)句的符號(hào)名不能被重新賦值,1. 符號(hào)定義偽指令(賦值語(yǔ)句)(2), 等號(hào)語(yǔ)句=,格式: = 功能:用符號(hào)來(lái)代表表達(dá)式的數(shù)值,數(shù)值表達(dá)式,例:FIVE EQU 5 COUNT EQU CX TEN EQU 10 DIST = BYTE P
12、TRSI+BP GOTO = JMP MOV AX, TEN MOV CX, COUNT ADD DIST, FIVE DIST = WORD PTRSI+BP+1 ADD DIST, AX GOTO LABEL,先定義,后引用,2. 內(nèi)存數(shù)據(jù)定義偽指令(1), 字節(jié)定義語(yǔ)句DB,格式:名字 DB 功能:表達(dá)式值或項(xiàng)表中的每一項(xiàng)是一個(gè)字節(jié)數(shù), 它們從符號(hào)名地址開(kāi)始按字節(jié)連續(xù)存放。,例:COUNT DB 100 DB 0DH,0AH, VARW DB ?,6,?,?,可以使用重復(fù)操作符DUP如: BUFFER DB 8 DUP(0),符號(hào)地址,DUP可以嵌套如: ARRAY DB 100 DUP
13、(0,2 DUP(1,2),3),2. 內(nèi)存數(shù)據(jù)定義偽指令(2), 字定義語(yǔ)句DW,格式:名字 DW 功能:表達(dá)式值或項(xiàng)表中的每一項(xiàng)是一個(gè)字?jǐn)?shù), 它們從符號(hào)名地址開(kāi)始按字連續(xù)存放。,例:FLAG DW 2FCDH,24H DW ?,2. 內(nèi)存數(shù)據(jù)定義偽指令(3), 四字節(jié)定義語(yǔ)句DD,格式:名字 DD 功能:表達(dá)式值或項(xiàng)表中的每一項(xiàng)是四個(gè)字節(jié)數(shù),它們 從符號(hào)名地址開(kāi)始按四字節(jié)從小地址連續(xù)存放。, 10字節(jié)定義指令DT,例1: DSEG1 SEGMENT DATA_B DB 10,5,10H DATA_W DW 100H,-4 DATA_D DD 0FFFBH DSEG1 ENDS 匯編后的內(nèi)存
14、分配情況 如右圖所示。,05H,10H,00H,01H,FCH,FFH,FBH,FFH,00H,00H,0AH,DSEG1: DATA_B,DATA_W,DATA_D,10,5,10H,100H,-4,0FFFBH,例2:操作數(shù)可以是字符串,例如 STR DBHELLO 匯編后的情況如圖:,STR,H,E,L,L,O,注意下面兩個(gè)定義的不同之處: X DBAB ;41H在低字節(jié),42H在高字節(jié) Y DW AB ;42H在低字節(jié),41H在高字節(jié),48H,45H,4CH,4CH,4FH,41H,42H,42H,41H,X,Y,例3: TABLE DB 10 DUP(?) BUFFER DW TAB
15、LE,$+3 設(shè)TABLE的偏移地址為0080H,則匯編后如下圖所示:,BUFFER,0080H,80H,TABLE,008AH 008BH 008CH 008DH 008EH,. . .,8FH,00H,00H,0089H,10 Bytes,程序計(jì)數(shù)器 $,程序計(jì)數(shù)器 $,3. 段定義偽指令(1),段定義的一般格式:, SEGMENT 定位方式連接方式類型名, ENDS,段開(kāi)始語(yǔ)句,段結(jié)束語(yǔ)句,例:一個(gè)簡(jiǎn)單的數(shù)據(jù)段 DSEG SEGMENT BUFFER DB 8 DUP(0) DSEG ENDS,3. 段定義偽指令(2), 定位方式(定位類型) 書(shū)(P162),定位類型指出了對(duì)當(dāng)前段起始地
16、址的要求,有4個(gè)選項(xiàng),PAGE 指定起始地址的低8位是0,即其值能被256整除(稱頁(yè)邊界) PARA 指定起始地址的低4為是0,即其值能被16整除(稱段邊界) WORD指定起始地址的最低位是0,即其值能被2整除(稱為字邊界) BYTE 指定起始地址是任意值,缺省定位,定位類型是用來(lái)確定程序段與程序段之間的銜接,如BYTE 使得當(dāng)前段緊接前一段,而PAGE可能導(dǎo)致最大的段間隔,3. 段定義偽指令(3), 連接方式(組合類型),連接方式告訴連接程序本段可按某種方式連接,PUBLIC告訴連接程序本段與其它同名同類別 的段連接起來(lái),公用一個(gè)起始點(diǎn)。 STACK 表示是堆棧段,連接方式同上。 NONE
17、表示本段不與任何段連接。 COMMON表示本段與同名同類別的段共用同一段地址, 即同名同類段相重疊。 MEMORY本段連接時(shí)定位在所有段之上,即高地址處。 AT 表達(dá)式表示本段定位在表達(dá)式值指定的段地址處。,隱含連接方式,一個(gè)源程序至少有一個(gè)堆棧段,例:連接方式,Bmax,C(S),B(C),A(P),B(C),A,C(S),A(P),B(C),A,C2,C1,A1,A2,P,C,S,模塊1,模塊2,模塊1,N,3. 段定義偽指令(4), 類別名,類別名是由程序員指定的字符串,沒(méi)有給出類別時(shí), 這個(gè)段的類別就為空。,例1:某個(gè)源程序,例2: 類別 用單引號(hào)括起來(lái)的字符串。所有同類別的段被安排在
18、連續(xù)的存儲(chǔ)區(qū)域中。 如:給出類別時(shí),在模塊1中有段定義: seg1 SEGMENT PARA STACK stack seg1 ENDS 在模塊2中有段定義: seg2 SEGMENT PARA STACK stack seg2 ENDS 則連接時(shí)這兩個(gè)段被安排在一起。,PUBLICCODE,PUBLICCODE,COMMONDATA,COMMONDATA,AT 2000H,AT 8000H,4. 段寄存器說(shuō)明偽指令,格式:ASSUME 段寄存器:段定義名1,段寄存器:段定義名2, 功能:告訴匯編程序在匯編時(shí),段寄存器的符號(hào)基址,ASSUME偽指令,在代碼段中,還必須明確段和段寄存器的關(guān)系,這
19、由ASSUME語(yǔ)句來(lái)指定。如 ASSUME CS:code, DS:data, ES:data 語(yǔ)句中的code和data為段名。 這個(gè)語(yǔ)句說(shuō)明: 1. CS將指向名字為code的代碼段 2. DS和ES將指向名字為data的數(shù)據(jù)段,但要注意,ASSUME偽指令只是告知匯編程序有關(guān)段寄存器與段的關(guān)系,并沒(méi)有給段寄存器賦予實(shí)際的初值。故下面的語(yǔ)句 MOVAX,DATA MOVDS,AX MOVES,AX 將段基址裝入段寄存器。如果程序中用到堆棧段,則SS也需裝入實(shí)際的初值。 代碼段基地址不需要程序員裝入CS寄存器,而由DOS負(fù)責(zé)裝入。,5. 過(guò)程(子程序)定義偽指令,格式: PROC 過(guò)程屬性
20、ENDP,段間為FAR 段內(nèi)為NEAR,XXX SEGMENT main proc far call subr1 ret main endp subr1 proc near ret subr1 endp XXX ENDS,XXX SEGMENT main proc far call subr1 ret subr1 proc near ret subr1 endp main endp XXX ENDS,例1: 調(diào)用程序和子程序在同一代碼段中,一個(gè)過(guò)程,一個(gè)過(guò)程,例2: 調(diào)用過(guò)程和 子過(guò)程不在 同一個(gè)代碼 段內(nèi),SEGX SEGMENT subt proc far ret subt endp ca
21、ll subt SEGX ENDS SEGY SEGMENT call subt SEGY ENDS,所以過(guò)程屬性為FAR,6. 模塊開(kāi)始偽指令,格式:NAME 模塊名 書(shū)(P182),8. 定位偽指令,格式:ORG 功能:把以下語(yǔ)句定義的內(nèi)存數(shù)據(jù)或程序,從表達(dá)式 指定的起點(diǎn)開(kāi)始連續(xù)存放。,例: ABC SEGMENT ORG 100H begin: ABC ENDS,10. 系統(tǒng)隱含進(jìn)位制偽指令,格式:RADIX 表達(dá)式 功能:改變隱含進(jìn)制數(shù),11. 連接模塊引用偽指令(1),格式:PUBLIC 功能:本模塊用PUBLIC說(shuō)明了的符號(hào)名,可以被其它程 序模塊引用, 公用符號(hào)語(yǔ)句PUBLIC,
22、變量名、標(biāo)號(hào)、過(guò)程名、符號(hào)常量, 公用符號(hào)語(yǔ)句PUBLIC (P182)例: 引用符號(hào)語(yǔ)句EXTRN,PUBLIC 5,EXTRN,二級(jí)模塊,PUBLIC 6,EXTRN,二級(jí)模塊,PUBLIC 4,EXTRN,二級(jí)模塊,PUBLIC 7,EXTRN,二級(jí)模塊,PUBLIC 2,EXTRN 5,6,一級(jí)模塊,PUBLIC 3,EXTRN 6,7,一級(jí)模塊,PUBLIC 1,EXTRN 4,5,一級(jí)模塊,NAME XX,EXTRN 1,2,3,主模塊,NAME 4,NAME 5,NAME 6,NAME 7,NAME 3,NAME 2,NAME 1,12. 塊注釋偽指令,格式:COMMENT 定界
23、符 注釋 定界符 功能:為模塊程序加注釋,自定義的非空格符,7.3 宏指令,宏指令:為了簡(jiǎn)化匯編語(yǔ)言源程序的書(shū)寫提供的指令,宏指令的使用要經(jīng)過(guò)三個(gè)步驟: 宏定義:對(duì)各個(gè)宏指令進(jìn)行定義,并分別起一個(gè)名字 宏調(diào)用:在需要的地方,通過(guò)宏指令名來(lái)調(diào)用它 宏展開(kāi):由匯編程序用宏定義中的指令替代宏指令名,由匯編程序完成的,1. 宏代換語(yǔ)句,格式:宏名 MACRO 形式參數(shù)1,形式參數(shù)2, ENDM 功能:為指令序列定義一個(gè)宏名,稱宏指令,宏體,形式參數(shù)是任選項(xiàng),可以用來(lái)代換宏體中的某些參數(shù) 或符號(hào)。需要代換的符號(hào)前,必須加一個(gè)宏代換符緩沖區(qū)最大容量數(shù) DB ? ;存放實(shí)際讀入的字符數(shù) DB 20 DUP(
24、?) MOV DX,OFFSET BUF MOV AH,0AH INT 21H ;輸入字符串 ,3. 輸出單字符02H號(hào)功能調(diào)用,功能:寄存器DL中的字符從屏幕上顯示輸出 入口參數(shù):DL=要輸出字符的ASCII碼 出口參數(shù):無(wú),例: MOV DL,A MOV AH,2 INT 21H ,4. 輸出字符串09H號(hào)功能調(diào)用,功 能:將指定緩沖區(qū)中的字符串從屏幕上顯示輸出 入口參數(shù):DS:DX=要輸出字符的首址,字符串以字符 為結(jié)束標(biāo)志 出口參數(shù):無(wú),5. 直接控制臺(tái)輸入/輸出單字符06H號(hào)功能調(diào)用,功 能:直接鍵盤輸入屏幕顯示輸出 入口參數(shù):DL=OFFH,表示輸入;否則表示輸出, DL=輸出字符
25、代碼 出口參數(shù):輸入時(shí),AL=輸入字符代碼,輸出時(shí),無(wú),例: MOV DL,0FFH MOV AH,6 INT 21H MOV DL,a MOV AH,6 INT 21H ,鍵盤輸入單字符送AL,將DL的內(nèi)容送屏幕顯示,說(shuō)明:1、在輸入時(shí),如無(wú)字符可讀,不等待 2、不檢查Ctrl+C或Ctrl+Break鍵 3、在讀到字符時(shí)也不回顯,6. 無(wú)回顯直接控制臺(tái)輸入單字符07H號(hào)功能調(diào)用,功 能:從鍵盤上讀一個(gè)字符到AL 入口參數(shù):無(wú) 出口參數(shù):AL=讀到字符的代碼,8. 從串口輸入單字符03H號(hào)功能調(diào)用,功 能:從異步通信口串行輸入的字符到AL中 入口參數(shù):無(wú) 出口參數(shù):AL=讀到字符的代碼,10
26、. 設(shè)置日期2BH號(hào)功能調(diào)用,功 能:設(shè)置有效日期 入口參數(shù):CX=年號(hào),DH=月號(hào),DL=日期 都是裝配型BCD碼 出口參數(shù):AL=0,表示設(shè)置成功;否則AL=0FFH,例: MOV CX,2008H MOV DH,04H MOV DL,14H MOV AH,2BH INT 21H ,11. 取得日期2AH號(hào)功能調(diào)用,功 能:將當(dāng)前日期取到CX和DX寄存器中 入口參數(shù):無(wú) 出口參數(shù):CX=年號(hào),DH=月號(hào),DL=日期 都是裝配型BCD碼,12. 設(shè)置時(shí)間2DH號(hào)功能調(diào)用,功 能:設(shè)置有效時(shí)間 入口參數(shù):CH=時(shí)數(shù),CL=分?jǐn)?shù),DH=秒數(shù), DL=百分之一秒數(shù),都是裝配型BCD碼 出口參數(shù):A
27、L=0,表示設(shè)置成功;否則AL=0FFH,13. 取得時(shí)間2CH號(hào)功能調(diào)用,功 能:將當(dāng)前時(shí)間取到CX和DX寄存器中 入口參數(shù):無(wú) 出口參數(shù):CX=時(shí)分,DH=秒,都是裝配型BCD碼,例: MOV AH,2CH INT 21H ,14. 返回操作系統(tǒng)4CH號(hào)功能調(diào)用,功 能:結(jié)束當(dāng)前正在執(zhí)行的程序,并返回操作系統(tǒng) 入口參數(shù):無(wú) 出口參數(shù):無(wú),回到DOS提示符下C:,例: MOV AH,4CH INT 21H ,(一)基本的匯編語(yǔ)言程序框架如下: stack SEGMENT PARA stack DB 100 DUP(stack) stack ENDS data SEGMENT data END
28、S code SEGMENT ASSUME CS:code, DS:data, ES:data start: MOV AX, data MOV DS, AX MOV ES, AX MOV AX , stack MOV SS , AX MOV AL, 4CH INT 21H code ENDS END start,堆棧段,數(shù)據(jù)段,代碼段,15.INT 20H 指令來(lái)返回操作系統(tǒng),.EXE文件裝入內(nèi)存時(shí)都產(chǎn)生一個(gè)PSP程序前綴段,里面是程序運(yùn)行的一些基本信息,存放在程序的開(kāi)始位置0-0FFH,PSP的長(zhǎng)度是100H。 在程序裝入存儲(chǔ)器后,CS和IP、SS和SP四個(gè)寄存器的值會(huì)自動(dòng)分配好,而DS和E
29、S指向PSP的段基址。程序運(yùn)行結(jié)束時(shí),返回到PSP的開(kāi)始位置執(zhí)行 。,start: push ds sub ax,ax push ax ret,不可用存儲(chǔ)區(qū)低端,程序前綴段PSP,INT 20,內(nèi)存大小,程序模塊 (可包括多個(gè)段),不可用存儲(chǔ)區(qū)高端,.EXE文件裝入內(nèi)存 FAR,程序前綴段PSP入口地址:DS:0;ES:0 100H個(gè)字節(jié),功能調(diào)用,SP,SP,SP,DSL,DSH,00H,00H,(二)基本的匯編語(yǔ)言程序框架如下: stack SEGMENT PARA stack DB 100 DUP(?) stack ENDS data SEGMENT data ENDS code SEG
30、MENT ASSUME CS:code, DS:data, ES:data , SS:stack begin proc far start push ds sub ax,ax push ax MOV AX, data MOV DS , AX MOV ES , AX MOV AX , stack MOV SS , AX ret begin endp code ENDS END start,堆棧段,數(shù)據(jù)段,代碼段,.COM文件裝入內(nèi)存時(shí)都產(chǎn) 生一個(gè)PSP程序前綴段,里面 是程序運(yùn)行的一些基本信息, 存放在程序的開(kāi)始位置0-0FFH, PSP的長(zhǎng)度是100H。,不可用存儲(chǔ)區(qū)低端,程序前綴段PSP,程
31、序模塊 (只能有一個(gè)段) 堆棧,不可用存儲(chǔ)區(qū)高端,.COM文件裝入內(nèi)存 NEAR,內(nèi)存大小,程序前綴段PSP入口地址:DS:0;ES:0; SS:0 ;CS:0 100H個(gè)字節(jié),功能調(diào)用,屬性,.EXE文件,.COM文件,許可的段數(shù),多個(gè)段,只能有一個(gè)段,段引用,可以引用,無(wú),無(wú),堆棧段,必須定義,程序代碼起點(diǎn),不要求,ORG 100H,程序大小,可為任意大小,小于64K,PSP地址,初始化時(shí)賦給ES和DS,初始化時(shí)賦給ES,DS,SS和CS,重定位信息,需要,不需要,(三)基本的匯編語(yǔ)言程序框架如下: 例(P190),堆棧段,數(shù)據(jù)段,代碼段,code SEGMENT ASSUME CS:co
32、de, DS:code, ES:code ORG 100H begin proc near MOV AX, CS MOV DS, AX MOV ES, AX INT 20H begin endp code ENDS END begin,例1:,從鍵盤接收并顯示一個(gè)字符串,回車,換行后再次顯示輸入的字符,Stack segment stack dw 32 dup(?) stack ends data segment OBUF DB , 0DH, 0AH, $ IBUF DB 0FFH, 0, 255 DUP(?) data ends code segment assume ds:data,cs:
33、code,ss:stack begin proc far start: push ds sub ax,ax push ax mov ax,data mov ds,ax MOV DX, OFFSET OBUF MOV AH,9 INT 21H,MOV DX, OFFSET IBUF MOV AH,10 INT 21H MOV BL, IBUF+1 MOV BH, 0 MOV IBUFBX+2, $ MOV DL,0AH MOV AH, 2 INT 21H MOV DX, OFFSET IBUF+2 MOV AH, 9 INT 21H ret Begin endp code ends end st
34、art,;堆棧段定義,;代碼段定義,;段聲明,;過(guò)程定義,;初始化段寄存器,;主子程序返回,;源程序結(jié)束,;數(shù)據(jù)段定義,;程序段前綴入棧,;BX=實(shí)際字節(jié)串長(zhǎng),;顯示提示符,;鍵入字符串,;換行,;再次顯示字符串,匯編程序編程應(yīng)注意的問(wèn)題,任何一個(gè)源程序必須至少有一個(gè)代碼段,其它段視程序要求而定。 段寄存器的裝填(DS、ES、SS由用戶自行裝填,CS不須用戶處理)。 方法:MOV AX,* MOV DS,AX (或ES、SS) DOS下匯編程序的正常結(jié)束 方法1: MOV AH,4CH INT 21H 方法2: 程序名: PROC FAR PUSH DS MOV AX,0 PUSH AX .
35、RET 程序名 ENDP,例2:在CRT上循環(huán)顯示0-98之間的十進(jìn)制數(shù)。(實(shí)驗(yàn)4B),DATA SEGMENT BUF DB 3 DUP(?) DATA ENDS,CODE SEGMENT ASSUME CS:CODE, DS:DATA MAIN PROC FAR PUSH DS MOV AX,0 PUSH AX MOV AX , DATA MOV DS , AX MOV BL,-1 PUSH BX ;保護(hù)BL NEXT: MOV SI,OFFSET BUF MOV DL,0DH;回車符 MOV AH,2 INT 21H ;送顯示,mov dl,0ah ;輸出換行符 mov ah,2 int
36、 21h pop bx ;取出bl mov al, bl ;產(chǎn)生十進(jìn)制數(shù) inc al daa cmp al,99h jc next1 ;al低于99H轉(zhuǎn)Next1 mov al, 0 Next1: mov bl,al push bx ;暫存bl(十進(jìn)制數(shù)) mov dl,al ;十進(jìn)制數(shù)轉(zhuǎn)ASCII mov cl,4 ;高4位轉(zhuǎn)ASCII shr al,cl or al,30h mov si,al,inc si mov al,dl ;低4位轉(zhuǎn)ASCII and al,0fh or al,30h mov si,al inc si mov al,$ mov si,al ;字符串結(jié)束符 mov dx,offset buf ;9號(hào)調(diào)用送顯示 mov ah,9 int 21h mov cx,0ffffh ;延時(shí) Dy: loop dy jmp next ret Main endp code ends end main,7.5.1 匯編程序的功能,(EDIT)匯編語(yǔ)言 源文件(.ASM),匯編程序 (MASM或ASM),目標(biāo)代碼文件.BOJ,列表文件.LST,交叉索引文件.CRF,輸入,翻譯,輸出,匯編程序的功能就是把用助記符書(shū)寫的匯編語(yǔ)言源程序, 翻譯成機(jī)器語(yǔ)言目標(biāo)代碼;同時(shí)進(jìn)行語(yǔ)法檢查,指出語(yǔ) 法錯(cuò)誤所在行的行號(hào)。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 46763-2025稀土鐵硼燒結(jié)永磁體晶界擴(kuò)散效果評(píng)價(jià)方法
- 2025年大學(xué)大四(交通運(yùn)輸)智能交通系統(tǒng)應(yīng)用試題及答案
- 2025年中職(中藥)中藥炮制階段測(cè)試題及答案
- 2025年高職(康復(fù)營(yíng)養(yǎng)治療)營(yíng)養(yǎng)治療專項(xiàng)測(cè)試試題及答案
- 2025年中職計(jì)算機(jī)平面設(shè)計(jì)(設(shè)計(jì)節(jié)能規(guī)范)試題及答案
- 2025年大學(xué)大四(安全工程)安全評(píng)價(jià)綜合測(cè)試試題及答案
- 2025年中職數(shù)據(jù)綜合技能實(shí)訓(xùn)(處理技能)試題及答案
- 2025年中職畜牧獸醫(yī)(動(dòng)物解剖生理)試題及答案
- 2025年大學(xué)漢語(yǔ)言文學(xué)(中國(guó)現(xiàn)代文學(xué)研究)試題及答案
- 2025年中職機(jī)器人應(yīng)用技術(shù)(機(jī)器人應(yīng)用技術(shù)案例)試題及答案
- 清華大學(xué)教師教學(xué)檔案袋制度
- 公租房完整租賃合同范本
- 東南大學(xué)附屬中大醫(yī)院2026年招聘?jìng)淇碱}庫(kù)及答案詳解參考
- 2025新疆阿瓦提縣招聘警務(wù)輔助人員120人參考筆試題庫(kù)及答案解析
- 貴州國(guó)企招聘:2025貴州鹽業(yè)(集團(tuán))有限責(zé)任公司貴陽(yáng)分公司招聘考試題庫(kù)附答案
- 2025-2026學(xué)年秋季學(xué)期教學(xué)副校長(zhǎng)工作述職報(bào)告
- GB/T 3098.5-2025緊固件機(jī)械性能第5部分:自攻螺釘
- 2026年服裝電商直播轉(zhuǎn)化技巧
- 2025-2026學(xué)年小學(xué)美術(shù)浙美版(2024)二年級(jí)上冊(cè)期末練習(xí)卷及答案
- 水電站壓力管道課件
- 鐵總建設(shè)201857號(hào) 中國(guó)鐵路總公司 關(guān)于做好高速鐵路開(kāi)通達(dá)標(biāo)評(píng)定工作的通知
評(píng)論
0/150
提交評(píng)論