《微型計算機原理及應用第三版 (5)》由會員分享,可在線閱讀,更多相關《微型計算機原理及應用第三版 (5)(16頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、單擊此處編輯母版標題樣式,*,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,第七章 8086匯編語言中基本語法,助記符,指令:,CPU,可以執(zhí)行的能完成特定功能的語句,能產生目標代碼。,它主要由,CPU,指令組成。,偽指令:是一種不產生目標代碼的語句,它僅僅在匯編過程中告,訴匯編程序應如何匯編,宏指令:它是一個指令序列。匯編時凡有宏指令語句的地方都用,相應的指令序列的目標代碼插入。,一、匯編語言源程序的一些必要成分,1、段結構的形成,、段定義偽指令:,SEGMENT,與,ENDS,段名,SEGMENT,段名,ENDS,(*),段名字必須在兩處出現(xiàn),而且必須致。,(*),segmen
2、t,和,ends,必須成對出現(xiàn)。,segment,定義一個段的開始,ends,定義一個段的結束,段寄存器說明偽指令:,assume,ASSUME,段寄存器名:段名,段寄存器名:段名,,(*),指出源程序中的邏輯段與物理段之間的關系。,當匯編程序匯編一個邏輯段時,即可利用相應的段寄存器尋址該邏輯段中的指令或數(shù)據(jù)。,(*),只是通知匯編程序有關段寄存器與邏輯段的關系,并沒有給段寄存器賦于實際的初值。,例如:,CODESEGMENT,ASSUMECS:CODE,DS:DATA,SS:STACK,MOVAX,DATA,MOVDS,AX,MOVAX,STACK,MOVSS,AX,CODEENDS,模塊偽
3、指令:,name,end,public,extrn,NAME,用于給源程序匯編以后得到的目標程序指定一個模塊名,連接時需要使用這個目標程序的模塊名。,NAME,模塊名,(2),END,表示源程序到此結束,指示匯編程序停止匯編,對于,END,后面的語句可以不予理會。,END,標號,END,偽指令后面的標號表示程序執(zhí)行的啟動地址。,END,偽指令將標號的段基值和偏移地址分別提供給,CS,和,IP,寄存器。方括號中的標號是任選項。如果有多個模塊連接在一起,則只有主模塊的,END,語句使用標號。,(3),PUBLC,偽指令說明本模塊中的某些符號是公共的,即這些符號可以,提供給將被連接在起的其他模塊使用
4、,PUBLIC,符號,(4),EXTRN,EXTRN,偽指令說明本模塊中所用的某些符號是外部的,即這些符號在將被連接在一起的其他模塊中定義(在定義這些符號的模塊中還必須用,PUBLIC,偽指令說明),EXTRN,名字:類型,,例如:程序的框架,datasegment,dataends,codesegment,assume,cs,:code,ds,:data,start:,mov,ax,data,mov ds,ax,codeends,endstart,2、數(shù)據(jù)的定義,常量、變量和標號,常量,:,一個常量如果是一個字符串,該字符串必須用單引號或雙引號括起來,匯編語言把它們匯編成相應的,ASCII,
5、碼。,變量:,變量實際上代表著內存中一塊存儲單元,,變量有三個屬性:段基址、段內偏移量以及類型。變量的類型是指變量元素具有的字節(jié)數(shù),。字節(jié)變量表示一個8位數(shù)據(jù),其類型為1;字變量表示一個十六位數(shù)據(jù)其類型為2;雙字變量表示一個32位的數(shù)據(jù),其其類型為4;,標號:,實際上是代碼段中的某一指令的地址。它也有三個屬性:段地址、段內偏移量和類型。標號的類型有兩種:,NEAR,標號,,它只能在定義它的段內被引用,其類型為,l,:,FAR,標號,,它既可以在定義它的段內被引用,也可以在其他段內被引用,其類型為,2,,它代表了指令的段地址和偏移量。標號可以在各種轉移指令中作為操作數(shù)使用。它只能定義在可執(zhí)行的代
6、碼段中。,數(shù)據(jù)定義偽指令:,DB,DW,DD,DQ,DT,數(shù)據(jù)定義偽指令的用途是定義一個變量的類型,給存儲器賦初值,或者僅僅給變量分配存儲單元,而不賦于特定的值,第一種格式:,名字 偽指令 表達式,第二種格式:,名字 偽指令,DUP (,表達式),例題:畫出經過如下數(shù)據(jù)定義后內存中數(shù)據(jù)的存放情況,。,var1 db 100,0ffh,var2 db ,abc,注意:字符串定義用,db,var3,dw,?,ab,var4,dw,1,3456h,var5,dd,56789h,var6 db 3 dup(1,2),符號定義偽指令:,equ,=,label,(1)EQU,和=,名字,EQU,表達式,例
7、如:,CHAR EQU HELLO THE WORLD,(*),利用,EQU,偽指令,可以用一個名字代表一個數(shù)值,或用一個較,簡短的名來代替一個較長的名字。,(*),EQU,偽指令不允許對同一符號重復定義。,(*),=偽指令與,EQU,基本相同只是區(qū)別在于它可以對同一個名字,重復定義,(2),LABEL,名字,LABEL,類型,AREAW LABEL WORD MOV AREAW,AX,AREAB DB l00 DUP(?)MOV AREAB,AL,(四)其它的一些偽指令,(1),ORG,和$,ORG,指定了在它之后的代碼或數(shù)據(jù)存放的起始地址的偏移量即 以語句中表達式的值作為起始地址,ORG
8、,在匯編程序對源程序的匯編過程中,使用地址計數(shù)器來保存當前正在匯編的指令的地址地址計數(shù)器的值可用$來表示。匯編語言允許用戶直接,用$來引用地址計數(shù)器的值.,ORG$+8,JNZ$+6,ARRAY DW 11H,12H,$+3,13H,(,假設,ARRAY,的起始地址為0070,H),(2).RADIX,定義源程序中書寫數(shù)據(jù)時的隱含進位方式,.,RADIX ,(3),COMMENT,塊注釋偽指令,COMMENT,定界符 注釋 定界符,二、表達式與運算符,1、算術運算符,算術運算符有加(十)、減(一)、乘(,)、除()、模(,MOD)、,左移(,SHL)、,右移(,SHR),七種。除法返回的是商,
9、而,MOD,操作返回除法操作的余數(shù).例如,PI-INT EQU 3141610000 ;,PI-INT3,P-REM EQU 31416 MOD 10000 ;,P-REM1416,SHL,和,SHR,是移位操作。,般在建立屏蔽字時使用。例如:,MASKB EQU 00110010B,MASKB1 EQU MASKB SHL 2 ;,MASKB1=11001000B,MASKB2 EQU MASKB SHR 2 ;,MASKB2=00001100B,注意:運算符的運算是在匯編時完成的,2、邏輯運算符,匯編語言的邏輯運算符有,AND,邏輯與,OR,邏輯或,XOR,邏輯異或,NOT,邏輯非,邏輯運
10、算符與邏輯運算指令的區(qū)別在于前者在匯編時完成邏輯運算,而后者在執(zhí)行指令時完成邏輯運算,MASKB EQU 00101011B,MOV AL,5EH,AND AL,MASKB AND 0FH;,ANDAL,0BH,;,(AL)=0AH,3、關系運算符,關系運算符有:,EQ,等于;,NE,不等,LT,小于;,GT,大于,LE,小于等于;,GE,大于等于,關系運算符比較兩個操作數(shù)并產生一個邏輯值。如果關系成立,則結果為,真(0,FFFFH),;,否則為,假(0000,H),。,關系運算符一般都,同其他操作結合以構成一個判斷表達式。例如要實現(xiàn),AX=5,如果,CHOICE20,AX=6,如果,CHOI
11、CE20,那么可以使用下列語句:,MOV AX,(,(CH0ICE LT 20),AND 5),OR,(,(CHOICE GT 20),AND 6),4分析運算符,(1),SEG,求段基址,(2),OFFSET,求偏移地址,(3),TYPE,求符號名類型值,(4),SIZE,求為符號名分配的字節(jié)數(shù),(5),LENGTH,求為符號名分配的項數(shù),TABLE DW 100 DUP(?),MOV AX,SEG TABLE ;,把,TABLE,的段地址送,AX,MOV BX,OFFSET TABLE ;,把,TABLE,的偏移地址送,BX,MOV CX,TYPE TABLE ;,MOV DX,LENGT
12、H TABLE,MOV BP,SIZE TABLE,注意:,LENGTH,和,SIZE,運算符只對用,DUP,定義的變量有意義,5.組合運算符,(1),PTR,運算符,PTR,運算符用于指定或暫時改變變量或標號的原有屬性。,MOV,BYTE PTR,SI,0FFH,JMP,DWORD PTR,DI,VAR DW 100 DUP(?),MOV,BYTE PTR,VAR,AL,(2)THIS,運算符,LABC EQU THIS BYTE,LABD DW 4321H,MOV AL,LABC,MOV AX,LABD,操作系統(tǒng)使用的兩種方式,(1)使用者:命令行方式或圖形界面方式,(2)程序員:系統(tǒng)功能
13、調用或應用程序接口(,API),系統(tǒng)功能調用,:,操作系統(tǒng)提供給應用程序的軟件接口,完成應用程 序對系統(tǒng)的使用,系統(tǒng)功能調用的使用方法,(1)傳送入口參數(shù)到指定寄存器中;有的子程序無入口參數(shù),則只需安排后兩個語句,(2)功能號送入,AH,寄存器中;,(3),INT 2lH。,(4),系統(tǒng)將出口參數(shù)送到指定寄存器中或從屏幕顯示出來。,例題:,從鍵盤輸入一串字符到一個內存變量,遇到回車則結束輸入,同時在屏幕上顯示相同個數(shù)的一串星號。,DATASEGMENT,VARDB 10 DUP(0),DATAENDS,CODESEGMENT,ASSUME CS:CODE,DS:DATA,START:MOVAX,DATA,MOVDS,AX,LEADI,VAR,LAB:,MOV AH,8,INT21H,CMPAL,ODH,JZNEXT,MOVDI,AL,INCDI,MOVAH,2,MOVDL,2AH,INT21H,JMPLAB,NEXT:,MOVAH,4CH,INT21H,CODEENDS,END START,