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