日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

當(dāng)前位置:電子發(fā)燒友網(wǎng) > 圖書頻道 > 電子 > 《計(jì)算機(jī)組成原理與匯編語言》 > 第3章 指令系統(tǒng)與匯編語言設(shè)計(jì)

第10節(jié) 匯編語言運(yùn)算符

 1.定義數(shù)據(jù)偽指令

   該類偽指令用來定義存貯空間及其所存數(shù)據(jù)的長度。
   
   DB——定義字節(jié),即每個(gè)數(shù)據(jù)是1個(gè)字節(jié)。
   DW——定義字,即每個(gè)數(shù)據(jù)占1個(gè)字(2個(gè)字節(jié))。
   DD——定義雙字,即每個(gè)數(shù)據(jù)占2個(gè)字。低字部分在低地址,高字部分在高地址。
   DQ——定義4字長,即每個(gè)數(shù)據(jù)占4個(gè)字。
   DT——定義10個(gè)字節(jié)長,用于壓縮式十進(jìn)制數(shù),

   例如:

   DATA1DB5,6,8,100表示從DATA1單元開始,連續(xù)存放5,6,8,100,共占4個(gè)字節(jié)地址。
   DATA2 DW 7,287

表示從DATA2單元開始,連續(xù)存放7,287兩個(gè)字,共占4個(gè)字節(jié)地址。定義一個(gè)存貯區(qū)時(shí),也可以不放數(shù)據(jù),如:
   TABLE DB?
  
表示在TABLE單元中存放的內(nèi)容是隨機(jī)的。當(dāng)一個(gè)定義的存貯區(qū)內(nèi)的每個(gè)單元要放置同樣的數(shù)據(jù)時(shí),可用DUP操作符,

     如:

     BUFFER DB 100DUP(0)
   
  表示以BUFFER為首地址的100個(gè)字節(jié)中存放00H數(shù)據(jù)。
 
   2. 符號(hào)定義偽指令EQU

EQU偽指令給符號(hào)定義一個(gè)值。在程序中,凡是出現(xiàn)該符號(hào)的地方,匯編時(shí)均用其值代替,

     如:

   TIMES EQU 50
   DATA DB TIMESDUP(?)

上述兩個(gè)語句實(shí)際等效于如下一條語句:DATA DB 50DUP(?)

   3. 包含偽指令I(lǐng)NCLUDE
 
包含偽指令I(lǐng)NCLUDE用來在程序中指明包含另一個(gè)程序。如果在用戶所編寫的程序中,某些地方需要這種轉(zhuǎn)換程序,在該處寫一條偽指令:

   INCLUDE B:CONVERT.LIB
   
即可。匯編程序在匯編時(shí),一旦遇到該指令,就在B盤上尋找CONVERT.LIB程序,找到后就將這個(gè)程序包含在用戶程序中。
   
   4. 段定義偽指令SEGMENT和ENDS

一般來說,一個(gè)完整的匯編源程序由3個(gè)段組成,即堆棧段、數(shù)據(jù)段和代碼段。段定義偽指令可將源程序劃分成若干 段,以便生成目的代碼和連接時(shí)將各同名段進(jìn)行組合。

   段定義偽指令一般格式為

   段名SEGMENT[定位類型][組合類型][類別]
    … 段名 ENDS
   SEGMENT和ENDS應(yīng)成對(duì)使用,缺一不可。

   偽指令各部分書寫規(guī)定如下: 

   ①段名:段名是不可省略的。其他是可選項(xiàng),是賦予段名的屬性,可以省略。段名是給定義的段所起的名稱,
    
     例如:

   STACK SEGMENT STACK
   DW 20DUP(?)
   STACK ENDS

   ②定位類型:定位類型表示該段起始地址位于何處,它可以是字節(jié)型的(BYTE),即段起始地址可位于任何地方;可以是字型(WORD)的,段起始地址必須
               
             位于偶地址,即地址最后一位是0(二進(jìn)制的);也可以是節(jié)型(PARA)的,即段起始地址必須能被16除盡;也可以是頁型的(PAGE),即段起始
               
             地址可被256除盡(一頁為256個(gè)字節(jié));也可以缺省。缺省時(shí),段起始地址便定位為PARA型的。

   ③組合類型:組合類型用于告訴連接程序,該段和其他段的組合關(guān)系。連接程序可以將不同模塊的同名段進(jìn)行組合。根據(jù)組合類型,可將各段連接在一起,

             或重疊在一起,

             組合類型有:

             NONE——表明本段與其他段邏輯上不發(fā)生關(guān)系,當(dāng)組合類型項(xiàng)省略時(shí),便指定為這一組合類型。
                
             PUBLIC——表明該段與其他模塊中用PUBLIC說明的同名段連接成一個(gè)邏輯段,運(yùn)行時(shí)裝入同一個(gè)物理段中,使用同一個(gè)段地址。 
                
             STACK——每個(gè)程序模塊中,必須有一個(gè)堆棧段。 
                
             COMMON——表明該段與其他模塊中由COMMON說明的所有同名段連接時(shí),被重疊放在一起,其長度是同名段中最長者的長度。 
                
             MEMORY——由MEMORY說明的段。在連接時(shí),它被放在所裝載程序的最后存貯區(qū)(最高地址)。 

   ④類別:是用單引號(hào)括起來的字符串,以表明該段的類別,如代碼段(CODE)、數(shù)據(jù)段(DATA),堆棧段(STACK)等。 

   例如有兩個(gè)模塊: ;

   模塊1

   STACK SEGMENT STACK
   DW 200DUP(?)
   STACK ENDS
   DATA SEGMENT COMMON
    …DATA ENDS
   CODE SEGMENT PUBLIC
   …CODE ENDS

   模塊2

   STACK SEGMENT STACK
   DW 30DUP(?)
   STACK ENDS
   DATA SEGMENT COMMON
    …DATA ENDS
   CODE SEGMENT PUBLIC
   …CODE ENDS
   END 

 5. 設(shè)定段寄存器偽指令A(yù)SSUME

  ASSUME——段寄存器定義偽指令。它可通知匯編程序,哪一個(gè)段寄存器是該段的段寄存器,以便對(duì)使用變量或標(biāo)號(hào)的指令匯編出正確的目的代碼,

   其格式為:

   ASSUME段寄存器:段名[,段寄存器:段名,……]

   例如:

   CODE SEGMENT
   ASSUMECS:CODE,DS:DATA,SS:STACK
   MOV AX,DATA
   MOV DS,AX
    …CODE ENDS
 6.定義過程的偽指令PROC和ENDP

  在程序設(shè)計(jì)中,可將具有一定功能的程序段看成為一個(gè)過程(相當(dāng)于一個(gè)子程序)。它可以被別的程序調(diào)用(用CALL指令)或由JMP指令轉(zhuǎn)移到此執(zhí)行;也可以由程序
    
  順序執(zhí)行;也可以作為中斷處理程序,在中斷響應(yīng)后轉(zhuǎn)此執(zhí)行。一個(gè)過程由偽指令PROC和ENDP來定義,

    其格式為

   過程名 PROC[類型]
    … 過程體
   RET
   過程名 ENDP

   例如 :一個(gè)延時(shí)100ms的子程序,其過程可定義如下:

   SOFTDLY PROC
   MOV BL,10
   ;內(nèi)環(huán)延時(shí)10ms
   DELAY: MOV CX,2801
   WAIT: LOOP WAIT 
   DEC BL
   JNZ DELAY
   RET
   SOFTDLY ENDP

 為了不破壞主程序的工作狀態(tài),通常在過程中應(yīng)保護(hù)該過程所用到的通用寄存器的內(nèi)容。考慮到這種情況過程應(yīng)改成:

   SOFTDLY PROC
   PUSH BX
   PUSH CX
   MOV BL,10
   ;內(nèi)環(huán)延時(shí)10ms
   DELAY:MOV CX,2801
   WAIT: LOOP WAIT
   DEC BL
   JNZ DELAY
   POP CX
   POP BX
   RET
   SOFTDLY ENDP
   遠(yuǎn)過程調(diào)用時(shí)被調(diào)用過程必定不在本段內(nèi)。

   例如,有兩個(gè)程序段,
 
     其結(jié)構(gòu)如下:
   CODE1 SEGMENT
   ASSUME CS:CODE1
    … FARPROC RPOC FAR
   … RET
    … FARPROC ENDP
   CODE1 ENDSCODE2 SEGMENT
   ASSUME CS:CODE2
    … CALL FARPROC
    … CALL NEARPROC
    … NEARPROC PROC NEAR
    … RET
   NEARPROC ENDP
   CODE2 ENDS

   7. 模塊間通信的偽指令PUBLIC,EXTRN

PUBLIC和EXTRN偽指令可完成此功能,其一般格式為

PUBLIC 名稱[,名稱,……]
   EXTRN 名稱:類型[,名稱:類型……]
   例如:
      目的模塊1 
   EXTRN VAR1:WORD,OUTPUT:FAR
   EXTRN VAR2:WORD
   LOCAL –DATA SEGMENT
   …LOCAL –DATA ENDS
   CODE SEGMENT
   ASSUME CS:CODE,DS:LOCAL --DATA
   START: MOV AX,LOCAL --DATA
   MOV DS,AX;初始化DS… MOV AX,SE :GVAR1
   MOV ES,AX;初始化ES
   ADD BX,ES:VAR1
    … MOV AX,SEGVAR2
   MOV ES,AX
   SUB ES:VAR2,50
   … JMP OUTPUT;段間跳轉(zhuǎn)
    …CODE ENDS
   END START;目的模塊2
   PUBLIC VAR1
   EXTDATA1 SEGMENT ;定義EXTDATA1數(shù)據(jù)段
    …VAR1: DW? ;定義變量VAR1
   EXTDATA1 ENDS
    … END
   ;

    目的模塊3

   PUBLIC VAR2
   EXTDATA2 SEGMENT ;定義EXTDATA2數(shù)據(jù)段
    … VAR2: DW?
    … EXTDATA2 ENDS
   END
   PUBLIC OUTPUT
   ROUTINE SEGNENTASSUME CS:ROUTINE
    …OUTPUT LABEL FAR ;定義OUTPUT標(biāo)號(hào)
    …ROUTIN EENDS
   END
8. 條件偽指令

  匯編語言提供了一組條件偽操作,用來指示匯編程序應(yīng)該測(cè)試的條件,使匯編程序能根據(jù)測(cè)試結(jié)果有選擇 地對(duì)源程序中的語句進(jìn)行匯編處理。

  所有條件偽操作都采用如下格式:

   IF××××[〈表達(dá)式〉]
    … ELSE
    … ENDIF
9.宏命令偽指令

   在匯編語言書寫的源程序中,若有的程序段要多次使用,為了簡(jiǎn)化程序書寫,該程序段可以用一條宏命令來代替,而匯編程序匯編到該宏命令時(shí),

  仍會(huì)產(chǎn)生源程序所需的代碼。

   例如:

   MOV CL,4
   SAL AL,CL

  若該兩條指令在程序中要多次使用,就可以用一條宏命令來代替。當(dāng)然在使用宏命令前首先要對(duì)宏命令進(jìn)行定義,

   例如:

   SHIFT MACRO
   MOV CL,4
   SAL AL,CL
   ENDM

   這樣定義以后,凡是要使AL中內(nèi)容左移4位的操作都可用一條宏命令SHIFT來代替。

   宏命令的一般格式為宏

   命令名MACRO[形式參量表]…宏體
   
   ENDMMACRO是宏定義符,是和ENDM宏定義結(jié)束符成對(duì)出現(xiàn)的。這兩者之間就是宏體,也就是該宏命令要代替的那一段程序,

    例如:

   GADD MACRO X,Y,ADD
   MOV AX,Y
   ADD AX,Y
   MO VADD,AX
   ENDM
   
其中X,Y,ADD都是形式參量。調(diào)用時(shí),下面宏命令書寫格式是正確的:
  
   GADD DATA1,DATA2,SUM
   這里DATA1,DATA2,SUM是實(shí)參量。實(shí)際上與該宏命令對(duì)應(yīng)的源程序?yàn)椋?
   MOV AX,DATA1
   ADD AX,DATA2
   MOV SUM,AX
   10.匯編結(jié)束偽指令END

該偽指令表示源程序的結(jié)束,令匯編程序停止匯編。因此,任何一個(gè)完整的源程序均應(yīng)有END指令,

   其一般格式為

   END[表達(dá)式]
   
 其中表達(dá)式表示該匯編程序的啟動(dòng)地址。

     例如:
    … END START

   則表明該程序的啟動(dòng)地址為START。
    

 

?
通州市| 永新县| 江西省| 焦作市| 河北区| 清涧县| 屏东县| 高阳县| 深州市| 大港区| 怀柔区| 锡林郭勒盟| 西华县| 玉树县| 墨竹工卡县| 商城县| 香港| 宁晋县| 兰西县| 九寨沟县| 安岳县| 合作市| 绥化市| 吉木乃县| 永川市| 略阳县| 罗定市| 曲靖市| 丰城市| 佛坪县| 大理市| 铜鼓县| 耒阳市| 隆化县| 庄浪县| 平阳县| 阿克陶县| 棋牌| 修武县| 靖江市| 古蔺县|