《微型計算機(jī)原理及應(yīng)用-偽指令》由會員分享,可在線閱讀,更多相關(guān)《微型計算機(jī)原理及應(yīng)用-偽指令(28頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、,單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,中原工學(xué)院電子信息學(xué)院-微機(jī)原理課程,微型計算機(jī)原理及應(yīng)用,主 講:李春雷(,),學(xué) 時:,64,電子信息教研室,中原工學(xué)院,第十二講,回顧及本講重點(diǎn),回顧,匯編語言概述,匯編語言的基本語法,本講重點(diǎn),偽指令語句格式,宏指令語句格式,7.3,偽指令,符號定義偽指令(賦值語句),名字,EQU,表達(dá)式,名字,表達(dá)式,該語句把表達(dá)式的值賦給符號名,在同一程序中,用,EQU,語句,賦值的符號名不能被重新賦值,但用“”號賦值的符號名可以被,重新賦值。,同一個標(biāo)號不能被兩次賦值,除非先清除標(biāo)號的原值。與,EQU,相對應(yīng)的
2、清除指令:,PURGE,PURGE ABC ;,清除對,ABC,的賦值,7.3,偽指令,數(shù)據(jù)定義偽指令,DB,、,DW,、,DD,、,DQ,、,DT,用來定義存儲單元的符號名,并初始化該單元或該單元開始的若,干連續(xù)單元。初始化可以采用確定值,也可以采用不確定值。,DB(Define Byte),格式:,符號名,DB ,表達(dá)式的值或項(xiàng)表中的每一項(xiàng)定義為一個字節(jié)數(shù),它們從符號地址開始按字節(jié)連續(xù)存放,直到表中數(shù)據(jù)項(xiàng)結(jié)束(地址遞增方向)。表達(dá)式的值或或項(xiàng)應(yīng)小于,8,位,2,進(jìn)制數(shù)表示的最大值。,例如:,FIRST DB 3,18,25H,ABC,SECOND DB?,7.3,偽指令,DW(Define
3、 word),格式,:,符號名,DW ,表達(dá)式的值或項(xiàng)表中的每一項(xiàng)都是兩個字節(jié)數(shù),應(yīng)小于,16,位,2,進(jìn)制數(shù)表示的最大值。,例如:,DON DW 10 DUP(?),;,在內(nèi)存中留出,10,個空單元,其中每個項(xiàng)都是,2,個字節(jié)。,7.3,偽指令,DD,:定義雙字,DQ,:定義,4,個字,DT,:定義,10,個字,例如:,N1 DD 2.5,3.2E+2,DD,可以用來定義有小數(shù)點(diǎn)的十進(jìn)制數(shù)或用科學(xué)計數(shù),法表示的數(shù)據(jù)。小數(shù)在匯編時被譯成四字節(jié)浮點(diǎn)數(shù),,尾數(shù)在低地址一端,階碼在高地址一端。,DQ,和,DT,也允許浮點(diǎn)數(shù)形式。,COUNT DT?,;,在內(nèi)存中留出,1,個空單元。,7.3,偽指令,
4、舉例,S1 DB ABCDEF,S2 DB A,B,C,D,E,F,S3 DW AB,CD,EF,S4 DD AB,CD,EF,7.3,偽指令,帶,DUP,的表達(dá)式,DUP,是定義重復(fù)數(shù)據(jù)操作符,例:,DB1 DB 10H DUP(?),DB2 DB 10H DUP(ABCD),DB3 DB 2H DUP(0,2,?),第一個語句表示保留,10H,個字節(jié);第二個語句是重,復(fù),10H,個字符串,ABCD,,共占用,40H,個字節(jié);第三個,語句是重復(fù),2H,個數(shù)字串和空單元。,7.3,偽指令,注意數(shù)據(jù)定義與引用時,要保證數(shù)據(jù)類型正確性。,舉例:,數(shù)據(jù)定義:,D1 DB 3 DUP(12H),引用:
5、,MOV AX,D1,;,引用錯誤,MOV AX,WORD PTR D1,;,正確,7.3,偽指令,存儲單元類型定義偽指令,BYTE,、,WORD,、,DWORD,在指令中與,PTR,運(yùn)算符結(jié)合起來使用。,例如:,MOV BYTE PTRDI,00,MOV WORD PTR1000,00,INC WORD PTRDI,JMP DWORD PTR2000H,7.3,偽指令,段定義偽指令,SEGMENT,、,ENDS,、,ASSUME,、,ORG,SEGMENT,、,ENDS,成對出現(xiàn),定義段。,格式:,段名,SEGMENT,段的內(nèi)容,段名,ENDS,段名為用戶自定義的標(biāo)號,可以為任何有效的標(biāo)識符
6、。,例如:,DATA_SEG SEGMENT,.,DATA_SEG ENDS,7.3,偽指令,ASSUME,:,用于指定用戶定義的哪一個段為數(shù)據(jù)段、代碼段或堆棧段。對,DS,、,SS,只知道段基址,而實(shí)際值要在程序中使用傳送命令來具體賦值。,例如:,ASSUME CS:CODE_SEG,DS:DATA_SEG,該指令指出,CODE_SEG,的段地址在,CS,中,,DATA_SEG,的,段地址在,DS,中,但并沒有把段地址裝入相應(yīng)的段寄存,器。因此除了,CS,以外(,CS,通過在啟動代碼段時由段間,轉(zhuǎn)移裝入),將段地址裝入相應(yīng)寄存器的工作必須通,過,MOV,傳送指令完成。,7.3,偽指令,例:,
7、CODE_SEG SEGMENT,ASSUME CS:CODE_SEG,DS:DATA_SEG,SS:STACK:SEG,START:MOV AX,DATA_SEG,MOV DS,AX,MOV AX,STACK_SEG,MOV SS,AX,CODE_SEG ENDS,7.3,偽指令,例:實(shí)現(xiàn)兩個,16,位二進(jìn)制數(shù)的相乘,DATA SEGMENT,M1 DW 00FFH,M2 DW 00FFH,P1 DW?,P2 DW?,DATA ENDS,STACK SEMENT,ST DB 100 DUP(?),TOP EQU LENGTH ST,STACK ENDS,CODE SEGMENT,ASSUME
8、 CS:CODE,DS:DATA,SS:STACK,START:MOV AX,DATA,MOV DS,AX,MOV AX,STACK,MOV SS,AX,數(shù)據(jù)段,包括數(shù)據(jù)定義,堆棧段,代碼段,7.3,偽指令,MOV AX,TOP,MOV SP,AX,MOV BX,OFFSET M1,MOV AX,BX,MOV DX,00,MOV BX,OFFSET M2,MUL BX,MOV BX,OFFSET P1,MOV BX,AX,MOV BX,OFFSET P2,MOV BX,DX,HLT,CODE ENDS,END START,代碼段,7.3,偽指令,過程定義偽指令,PROC,、,ENDP,、,NE
9、AR,、,FAR,PROC,、,ENDP,成對出現(xiàn),用于定義過程,即子過程。,格式:,過程名,RPOC NEAR,(或,FAR,),過程的內(nèi)容,過程名,ENDP,過程名為用戶自定義的標(biāo)號,定義過程是為實(shí)現(xiàn)子過程調(diào)用而設(shè)的。,調(diào)用格式為:,CALL,過程名,過程由,RET,指令返回??梢栽O(shè)置多個返回點(diǎn)。,7.3,偽指令,過程調(diào)用分為段內(nèi)調(diào)用和段間調(diào)用,段內(nèi)調(diào)用和段間調(diào)用由被調(diào)用子程序頭部的,FAR,或,NEAR,偽指令指出,,NEAR,可以省略。,段內(nèi)調(diào)用和段間調(diào)用的返回指令助記符都是,RET,,,但執(zhí)行的操作不同,段內(nèi)調(diào)用時匯編程序?qū)?RET,產(chǎn)生,指令編碼,C3H,,實(shí)現(xiàn)段內(nèi)返回;段間調(diào)用時
10、匯編程序,對,RET,產(chǎn)生指令編碼,CBH,,實(shí)現(xiàn)段間返回。,7.3,偽指令,模塊開始,/,結(jié)束偽指令,模塊開始偽指令,格式:,NAME,模塊名,指明程序模塊的開始,并指出模塊名。若該偽指令默認(rèn),則取,TITLE,語句中的頁標(biāo)題前,6,個字符;若沒有,TITLE,語句,則取源程序文件名為模塊名。,模塊結(jié)束偽指令,格式:,END,啟動標(biāo)號或過程名,該偽指令告訴匯編程序源文件結(jié)束。,7.3,偽指令,連接偽指令,PUBLIC,、,EXTRN,、,INCLUDE,、,GROUP,公用符號偽指令,格式:,PUBLIC,符號名,1,,符號名,2,,,PUBLIC,偽指令說明的自定義符號名可由其他程序,模塊
11、引用,沒有說明的符號名不能被其他模塊引用。,符號名可以是變量名、標(biāo)號、過程名或符號常量等。,引用符號偽指令,格式:,EXTRN,符號名,1,:類型,符號名,2,:類型,本模塊引用其他模塊定義的符號名必須用,EXTRN,進(jìn)行說明,否則不能引用。,7.3,偽指令,插入偽指令,(,或稱包含偽指令,),格式:,INCLUDE,模塊名,在本模塊匯編時,把另一模塊插入該偽指令處一起匯編,被插入的模塊可以是不完整的。,合段偽指令,(,或稱組合偽指令,),格式:組名,GROUP,段名,1,,段名,2,,段名,3,,,把其后指定的段組合在一個,64KB,的物理段中,組名和段名都是自定義符,但不可重名。,7.4,
12、宏指令,為了簡化匯編語言源程序的書寫,引入“宏指令”,,有效地縮短了源程序的長度,使源程序易讀,也減少了,由于重復(fù)書寫而引起的錯誤。,與過程區(qū)別,宏調(diào)用語句由宏匯編程序,MASM86,中的宏處理程序來識別,并完成相應(yīng)的處理;而調(diào)用過程的,CALL,語句由,CPU,來執(zhí)行。,過程調(diào)用能有效地縮短目標(biāo)代碼的長度,節(jié)省內(nèi)存空間。,宏調(diào)用有較快的執(zhí)行速度。,7.4,宏指令,同一條宏指令在各次調(diào)用過程中可完成不同的操作;一個“過程”在各次調(diào)用中只能完成完全相同的功能。,結(jié)論:當(dāng)需要多次執(zhí)行的程序段比較長,對速度要求不很高,并且不要求修改參數(shù)的情況下,宜采用過程調(diào)用方式;若要求多次執(zhí)行的程序段比較短,或希
13、望在各次調(diào)用中能修改某些參數(shù)時,則宜采用宏調(diào)用方式。,7.4,宏指令,宏指令使用步驟,宏定義:對各個宏指令進(jìn)行定義,并分別起名字;,宏調(diào)用:在需要的地方,通過宏指令名來調(diào)用;,宏擴(kuò)展:由宏匯編程序用宏定義中的指令來代替宏調(diào)用中的宏指令名。,7.4,宏指令,宏定義偽指令,(MACRO/ENDM),格式:,宏指令名,MACRO,參數(shù),,參數(shù),,(,宏定義體,),ENDM,7.4,宏指令,舉例:定義兩個數(shù)相加的宏,DECADD1MACROOPR1,,,OPR2,MOV AL,,,OPR1,ADD AL,,,OPR2,DAA,MOV OPR1,,,AL,ENDM,假如有如下調(diào)用:,DECADD1 DL
14、,,,BUFFER,DECADD1 AREA1,,,AREA2,7.4,宏指令,匯編時進(jìn)行宏擴(kuò)展,得到以下指令:,DECADD1 DL,,,BUFFER,擴(kuò)展為:,MOV AL,,,DL,ADD AL,,,BUFFER,DAA,MOV DL,,,AL,DECADD1 AREA1,,,AREA2,擴(kuò)展為:,MOV AL,,,AREA1,ADD AL,,,AREA2,DAA,MOV AREA1,,,AL,宏擴(kuò)展后,原來宏定義體中的指令前面加上了符號“,+”,,以示區(qū)別。,作業(yè),下列語句在存儲器中分別為變量分配多少字節(jié)空間?并畫出存儲空間的分配圖。,VAR1 DB10,,,2,VAR2DW5DUP,
15、(?),,0,VAR3DBHOW ARE YOU,?,,$,VAR4DD-1,,,1,,,0,作業(yè),數(shù)據(jù)定義語句如下所示,:,FIRST DB 90H,,,5FH,,,6EH,,,69H,SECOND DB 5 DUP(?),THIRD DB 5 DUP(?),FORTH DB 5 DUP(?),自,FIRST,單元開始存放的是一個四字節(jié)的十六進(jìn)制數(shù),(,低位字節(jié)在前,),要求,:,(,1,)編一段程序?qū)⑦@個數(shù)左移兩位、右移兩位后存放到自,SECOND,開始的單元,(,注意保留移出部分。,(,2,)編一段程序?qū)⑦@個數(shù)求補(bǔ)以后存放到自,FORTH,開始的單元。,試編程序?qū)?nèi)存從,40000H,到,4BFFFH,的每個單元中均寫入,55H,,并再逐個單元讀出比較,看寫入的與讀出的是否一致。若全對,則將,AL,置,7EH,;只要有錯,則將,AL,置,81H,。,