




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、二、匯編語言語句二、匯編語言語句指令性語句是能產(chǎn)生目標代碼,CPU可以執(zhí)行的能完成特定功能的語句。其格式為: 標號: 前綴指令助記符 操作數(shù) ;注釋 指示性語句,又叫偽指令是沒有對應的機器指令,不能執(zhí)行,只給匯編程序提供一種信息,用來定義變量,分配存儲單元,指示程序開始和結(jié)束等。其格式為: 名字 偽指令定義符 操作數(shù);注釋 名字是給偽指令取的名稱,通常是變量名、段名、過程名、符號名等。兩種語句的區(qū)別: 在形式上:帶不帶冒號,是否可轉(zhuǎn)向它。 在本質(zhì)上:匯編時能否形成對應的機器碼。第1頁/共74頁三、操作數(shù)(數(shù)據(jù)項三、操作數(shù)(數(shù)據(jù)項) 匯編語言中使用的操作數(shù)可以是常數(shù)、寄存器、名字(變量)、標號或
2、表達式1 1、常數(shù)、常數(shù) 1)數(shù)字常量 用于偽指令中給變量賦值,或作為指令語句中的立即 數(shù)、直接地址。 2)字符串常量 用單引號引起來的字符或字符串也代表常數(shù)。 例:A,BCDE,匯編時被翻譯成對應的ASCII碼41H和42H, 43H,44H,45H。 3)符號常量 PORT EQU 20H IN AL ,PORT第2頁/共74頁2 2、寄存器、寄存器 80X86的寄存器可以作為指令的操作數(shù)。 8位 AH AL BH BL CH CL DH DL 16位 AX BX CX DX BP SP SI DI CS DS SS ES 32位 EAX EBX ECX EDX EBP ESP ESI E
3、DI DS ES SS CS FS GS3 3、變量、變量 變量是內(nèi)存中的數(shù)據(jù)區(qū),在程序中作為存儲器操作數(shù)來使用。在除代碼段以外的其它段中定義。 變量主要有三種屬性:段 值變量定義所在段的段地址偏移量變量單元地址與段起始地址之間的位移量。類 型主要有字節(jié)、字和雙字三種。第3頁/共74頁4 4、標號、標號 標號是可執(zhí)行指令語句所存放單元的符號地址,可作為轉(zhuǎn)移指令的轉(zhuǎn)移地址。 標號也有三種屬性:段值總是在CS段寄存器中,偏移量概念與變量同,類型分NEAR和FAR兩種。NEAR表示標號所在語句與轉(zhuǎn)移指令或調(diào)用指令在同一代碼段內(nèi),只需改變IP即可。FAR標號所在語句與轉(zhuǎn)移指令或調(diào)用指令不在同一碼段內(nèi)。
4、 5 5、表達式、表達式 表達式由運算對象及運算符組成,運算對象可以是常數(shù)、寄存器、變量或標號。在匯編時由匯編程序?qū)λM行運算,得到的運算結(jié)果可以是一個常數(shù),也可以是一個存儲器的地址。表達式中的各類運算符如下:第4頁/共74頁 有+、-、*、/,以及MOD,其中MOD表示除法運算后得到的余數(shù)。例: 19/7的商是2,19 MOD 7則為5(余數(shù)) 算術(shù)運算符可以用于數(shù)字表達式,例: MOV AL,2*7 匯編時計算表達式形成指令為: MOV AL,0EH 算術(shù)運算符也可以用于地址表達式,對地址運算的結(jié)果應有明確的物理意義,例兩個地址的乘或除無意義,而加或減則可以,例: LEA SI,SUM+3
5、 表示變量SUM的地址加上3得到的和作為新存儲器地址。(1)(1)算術(shù)運算符算術(shù)運算符第5頁/共74頁 邏輯運算符有AND、OR、XOR和NOT,它們只能用于數(shù)字表達式中。 例:MOV CL,36H AND 0FH匯編時形成指令:MOV CL,06H 這些邏輯運算符也是8086/8088的指令助記符,但不會造成混亂,前者在匯編時進行,而后者在指令執(zhí)行時進行的。 例:AND DX,PORT AND 0FEH 后一個邏輯運算符AND在匯編時進行,若PORT為81H,則匯編后表達式算出為80H。執(zhí)行前一個指令助記符AND時,將(DX)與80H相與,結(jié)果在DX中。(2)(2)邏輯運算符邏輯運算符 PO
6、RT EQU 81H第6頁/共74頁 共有6個,它們?yōu)椋?EQ(相等),NE(不等),LT(小于),GT(大于), LE(小于或等于),GE(大于或等于) 關(guān)系運算符的兩個操作數(shù)必須都是數(shù)字或者是同一段內(nèi)的兩個存儲器地址。 關(guān)系為真,結(jié)果為0FFH或0FFFFH 關(guān)系為假,結(jié)果為0例:MOV BX,PORT GE 5若PORT的值大于等于5,則匯編后為: MOV BX,0FFFFH若PORT的值小于5, 則匯編后為: MOV BX,0(3)(3)關(guān)系運算符關(guān)系運算符第7頁/共74頁 它可以把存儲器一些特征作為數(shù)值送回。 這些操作符有OFFSET,SEG,TYPE,SIZE及LENGTH。 OF
7、FSET運算符用來取存儲單元的偏移量。例:MOV SI,OFFSET STRI1;將變量STRI1的地址偏移量取到SI中。 注意與 MOV SI,STRI1的差別。 但它與 LEA SI,STRI1等價。 SEG運算符用來取存儲單元的段值。例:MOV AX,SEG STRI1;將變量STRI1所 MOV DS,AX;在段值取到DS中(4)(4)數(shù)值返回運算符數(shù)值返回運算符第8頁/共74頁 TYPE運算符用來取變量或標號的類型值 存儲器單元類型存儲器單元類型 對應值對應值 DBDB( (字節(jié)字節(jié)) ) 1 1 DWDW( (字字) ) 2 2 DDDD( (雙字雙字) ) 4 4 DQ DQ(
8、(四字四字) ) 8 8 DTDT(10(10字節(jié)字節(jié)) ) 10 10 NEAR -1 NEAR -1 FAR -2 FAR -2 LENTH運算符返回DUP定義的數(shù)據(jù)占據(jù)的元素個數(shù),其它返回1。 SIZE運算符返回DUP定義的數(shù)據(jù)占據(jù)的字節(jié)數(shù),其它返回TYPE值。第9頁/共74頁(5)(5)屬性運算符屬性運算符 用來建立或改變已定義變量、內(nèi)存操作數(shù)或標號的類型屬性。運算符有:段操作符“:”、PTR、THIS、SHORT、HIGH、LOW MOV AX, ES:STRI1 INC BYTE PTRBX BUFB EQU THIS BYTE;建立一個指定類型的地址操作數(shù) BUFW DW 123
9、4H,5678H; BUFB與BUFW的偏移地址完全 相同,但類型不同 (6)(6)其它運算符其它運算符 ( )、 第10頁/共74頁5.1.2 匯編語言程序與DOS操作系統(tǒng)的接口1 1)標準方法)標準方法EXP1 PROCEXP1 PROCFARFARSTARTSTART:PUSH DSPUSH DS MOV AX,0 MOV AX,0 PUSH PUSHAXAX RET RETEXP1 ENDPEXP1 ENDP2 2)非標準方法非標準方法 MOV AX,4C00HMOV AX,4C00H INT 21H INT 21H 從從START標號開始的三句標號開始的三句為返回為返回DOS設(shè)置返回
10、地址設(shè)置返回地址, ,它相它相當于把當于把DS:0000H壓棧壓棧. . 連接程連接程序為每一個用戶程序建立了一個序為每一個用戶程序建立了一個程序段前綴區(qū)程序段前綴區(qū), ,在前綴區(qū)開始處在前綴區(qū)開始處安排了一條安排了一條 INT 20H, ,在過程結(jié)在過程結(jié)束時通過束時通過RET返回返回DOS。 在程序結(jié)尾處執(zhí)行功能號在程序結(jié)尾處執(zhí)行功能號為為4CH的的DOS系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用第11頁/共74頁 在源程序中使用一些約定的符號,這些符號在源程序中使用一些約定的符號,這些符號用來告訴匯編程序應如何工作,這就是匯編控制用來告訴匯編程序應如何工作,這就是匯編控制指令,也稱指令,也稱偽指令。偽指令
11、。 偽指令語句包含在源程序中,由匯編程序?qū)沃噶钫Z句包含在源程序中,由匯編程序?qū)υ闯绦蜻M行匯編時解釋執(zhí)行。偽指令語句除了本源程序進行匯編時解釋執(zhí)行。偽指令語句除了本身可以申請分配一部分存儲空間用作數(shù)據(jù)區(qū)和堆身可以申請分配一部分存儲空間用作數(shù)據(jù)區(qū)和堆棧區(qū)外,不產(chǎn)生任何目標代碼。在將源程序翻譯棧區(qū)外,不產(chǎn)生任何目標代碼。在將源程序翻譯成目標程序后,偽指令語句就不存在了。成目標程序后,偽指令語句就不存在了。5.2 偽指令語句第12頁/共74頁5.2.1 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令 常用的變量定義偽指令有常用的變量定義偽指令有 DBDB、DWDW、DDDD、DQDQ、DTDT,分,分別用來定義字節(jié),
12、單字、雙字、四字及十字節(jié)類型變量。別用來定義字節(jié),單字、雙字、四字及十字節(jié)類型變量。它們的基本應用格式如下:它們的基本應用格式如下:變量名變量名 DB DBDWDWDDDDDQDQDT DT 表達式表達式 其中,變量名是可選的,其中,變量名是可選的, 表示其中的偽操作命令表示其中的偽操作命令必須選用一種,表達式有如下幾種應用形式:必須選用一種,表達式有如下幾種應用形式: 1.1.數(shù)值表達式數(shù)值表達式 這種形式定義的變量具有表達式給定的數(shù)值初值。這種形式定義的變量具有表達式給定的數(shù)值初值。例如:例如:ABC DB 4*10H;變量;變量ABC為字節(jié)類型,初值為為字節(jié)類型,初值為64 BET DW
13、 1234H;變量;變量BET為字類型,低位地址為字類型,低位地址存放存放 34H, ,高位地址存放高位地址存放12H第13頁/共74頁2.ASCII2.ASCII字符串字符串 字符串必須用單引號括起來。字符串必須用單引號括起來。DBDB偽指令為串中每一偽指令為串中每一個字符分配一個字節(jié)單元,且自左至右按地址遞增的順個字符分配一個字節(jié)單元,且自左至右按地址遞增的順序依次存放,字符個數(shù)不得超過序依次存放,字符個數(shù)不得超過255255個。例如個。例如 MSG1 DB msgtest 對于對于DWDW偽指令,可以給兩個字符組成的字符串分配偽指令,可以給兩個字符組成的字符串分配兩個兩個字節(jié)存儲單元,而
14、且這兩個字符的存儲順序是前一個字符字節(jié)存儲單元,而且這兩個字符的存儲順序是前一個字符在在高字節(jié),后一個字符在低字節(jié)只取前兩個字符。每一個數(shù)高字節(jié),后一個字符在低字節(jié)只取前兩個字符。每一個數(shù)據(jù)據(jù)項不能多于兩個字符,若超過項不能多于兩個字符,若超過2 2個字符,只取前兩個字符。個字符,只取前兩個字符。例例如:如: MSG2 DW AB,123,ef第14頁/共74頁3.3.地址表達式地址表達式 地址表達式的運算結(jié)果是一個地址,因此只能用地址表達式的運算結(jié)果是一個地址,因此只能用DW或或DD來定義。如果用來定義。如果用DW定義,則將原變量或標號的偏移定義,則將原變量或標號的偏移地址定義為新變量;如果
15、用地址定義為新變量;如果用DD來定義,則將原變量或標來定義,則將原變量或標號的偏移地址和段地址分別置入新變量的低位和高位字中。號的偏移地址和段地址分別置入新變量的低位和高位字中。例如:例如: AD1 DD BETA1;變量的初值為BETA1的段地址和偏移地址 AD2 DW BETA2;變量的初值為BETA2的偏移地址4.4.? 問號表示所定義的變量未指定初值。例如:問號表示所定義的變量未指定初值。例如: BUF DW ?;定義一個字變量;定義一個字變量BUFBUF,初值為一隨機數(shù),初值為一隨機數(shù)第15頁/共74頁5. DUP 5. DUP 這種情況用于定義重復變量,這種情況用于定義重復變量,D
16、UPDUP(DuplicationDuplication)是是重復數(shù)據(jù)操作符,重復數(shù)據(jù)操作符,n n表示重復次數(shù),圓括號內(nèi)的表達式表表示重復次數(shù),圓括號內(nèi)的表達式表示要重復的內(nèi)容。例如:示要重復的內(nèi)容。例如: TAB DB 100 DUP(0););從變量從變量TABTAB開始有開始有100100個個 初值為零的字節(jié)元初值為零的字節(jié)元素素 DUPDUP操作符可以嵌套使用,即圓括號中的表達式又是操作符可以嵌套使用,即圓括號中的表達式又是一個帶一個帶DUPDUP的表達式。例如:的表達式。例如: TAB DW 2 DUP(5 DUP(4),),7) 表示變量表示變量TABTAB開始有開始有1212個
17、字元素,這個字元素,這1212個元素的初值個元素的初值構(gòu)成的數(shù)據(jù)序列為:構(gòu)成的數(shù)據(jù)序列為: 4 4,4 4,4 4,4 4,4 4,7 7,4 4,4 4,4 4,4 4,4 4,7 7 共占共占2424個字節(jié)單元。個字節(jié)單元。第16頁/共74頁5.2.2 符號定義偽指令符號定義偽指令 符號定義偽指令有符號定義偽指令有EQUEQU、LABELLABEL幾種。幾種。1. 1. 等價偽指令等價偽指令EQUEQU 名字名字 EQU EQU 表達式表達式 EQU偽指令的功能是將數(shù)值或字符序列與一個指定的名字等價。如此能增加匯編程序可讀性。給程序的設(shè)計與維護帶來方便。 下面的例子列舉了EQU偽指令的常見
18、用法: THREE EQU 3THREE EQU 3;名字;名字THREETHREE與數(shù)值與數(shù)值3 3等價等價 SIXTH EQU THREESIXTH EQU THREE* *(17+THREE)(17+THREE);SIXTHSIXTH等價于等價于3 3* *(17+3)(17+3) P EQU ES:BX P EQU ES:BX ;P P與與ES:BXES:BX等價等價 Y EQU PSIY EQU PSI;Y Y與與ES:BXSIES:BXSI等價等價 第17頁/共74頁2. 2. 等號偽指令等號偽指令“” “”偽指令與偽指令與EQUEQU偽指令具有相同的功能,偽指令具有相同的功能,區(qū)
19、別僅在于區(qū)別僅在于“”偽指令定義的符號允許重新定偽指令定義的符號允許重新定義,使用更靈活方便。如:義,使用更靈活方便。如:EMPEMP6060 ;定義;定義EMPEMP等于常數(shù)等于常數(shù)6060 EMPEMP7979 ;重定義;重定義EMPEMP等于常數(shù)等于常數(shù)7979 EMPEMPEMPEMP1 1 ;又定義;又定義EMPEMP等于常數(shù)等于常數(shù)80803. 3. 定義偽指令定義偽指令LABLELABLE 用來在某一變量或標號的基礎(chǔ)上定義一用來在某一變量或標號的基礎(chǔ)上定義一個新的類型不同的變量或標號。變量的類型有個新的類型不同的變量或標號。變量的類型有BYTEBYTE、WORDWORD和和DWO
20、RDDWORD;標號的類型有;標號的類型有NEARNEAR和和FARFAR。例如:例如: VAR1 LABEL WORD VAR1 LABEL WORD VAR2 DB 20DUP(1) VAR2 DB 20DUP(1) 變量變量VAR1VAR1與與VAR2VAR2具有相同的段基址和偏移量,具有相同的段基址和偏移量,但但VAR2VAR2是字節(jié)型。是字節(jié)型。第18頁/共74頁5.2.3 段定義偽指令段定義偽指令1. SEGMENT1. SEGMENT和和ENDSENDS偽指令偽指令 1 1)語句格式)語句格式 利用利用SEGMENTSEGMENT和和ENDSENDS可把源程序模塊劃分成若干個源程
21、可把源程序模塊劃分成若干個源程序段,它的格式為:序段,它的格式為: 段名段名 SEGMENT SEGMENT 定位方式定位方式 組合方式組合方式 分分類名類名 ;段內(nèi)所有語句;段內(nèi)所有語句 段名段名 ENDS ENDS 其中,段名是為該段起的名字;定位方式、組合方式和其中,段名是為該段起的名字;定位方式、組合方式和分類名是可選的,選兩個以上時,書寫順序必須與格式中的分類名是可選的,選兩個以上時,書寫順序必須與格式中的順序一致。這三個可選操作數(shù)都是通過匯編給鏈接程序提供順序一致。這三個可選操作數(shù)都是通過匯編給鏈接程序提供控制信息的。鏈接時,先處理組合方式,再處理定位方式,控制信息的。鏈接時,先處
22、理組合方式,再處理定位方式,最后處理分類名。最后處理分類名。第19頁/共74頁2 2)組合方式)組合方式 源程序可以分成若干個模塊單獨編制與匯編,每個模源程序可以分成若干個模塊單獨編制與匯編,每個模塊又可劃分若干段,如果這些段都不太大卻又分別定義了塊又可劃分若干段,如果這些段都不太大卻又分別定義了不同的段名,則當這些模塊鏈接起來并裝入機器運行時,不同的段名,則當這些模塊鏈接起來并裝入機器運行時,由于程序段數(shù)可能大大超過當前立即可用的由段寄存器確由于程序段數(shù)可能大大超過當前立即可用的由段寄存器確定的邏輯段數(shù)(僅四個),使程序運行極為不便。為此,定的邏輯段數(shù)(僅四個),使程序運行極為不便。為此,如
23、果將不同模塊中相同性質(zhì)的段使用同樣的段名,則連接如果將不同模塊中相同性質(zhì)的段使用同樣的段名,則連接這些模塊時就可以把同名的段按照指定的這些模塊時就可以把同名的段按照指定的方式組合起來,方式組合起來,既便于程序運行,又可以達到有效使用存儲空間之目的。既便于程序運行,又可以達到有效使用存儲空間之目的。 可供選擇的組合方式有可供選擇的組合方式有PUBLIC、STACK、AT 、COMMON、MEMORY以及以及NONE共六種共六種。 PUBLIC PUBLIC 表示在滿足定位類型的前提下與其它模塊表示在滿足定位類型的前提下與其它模塊的同名段鄰接起來形成一個源程序段,共用一個段基址,的同名段鄰接起來形
24、成一個源程序段,共用一個段基址,運行時裝入同一個邏輯段。運行時裝入同一個邏輯段。第20頁/共74頁 STACKSTACK 與與PUBLICPUBLIC類型同樣處理,只是組合后的這個類型同樣處理,只是組合后的這個段專門用作堆棧段,并自動初始化段專門用作堆棧段,并自動初始化SSSS和和SPSP。注意,被。注意,被鏈接的所有模塊中至少應該有一個鏈接的所有模塊中至少應該有一個STACKSTACK段,否則段,否則LINKLINK時會提示出錯。時會提示出錯。 COMMONCOMMON 表示該段與其他模塊中被說明成表示該段與其他模塊中被說明成COMMONCOMMON的同的同名段共享相同的存儲區(qū)。名段共享相同
25、的存儲區(qū)。 ATAT數(shù)值表達式數(shù)值表達式 表示該段應按絕對地址定位,段地表示該段應按絕對地址定位,段地址為數(shù)值表達式的值,偏移地址為址為數(shù)值表達式的值,偏移地址為0 0。 MEMORYMEMORY 表示該段定位在所有其他段之上,即地址較表示該段定位在所有其他段之上,即地址較大區(qū)域。大區(qū)域。 NONE NONE 即不指定方式,表示該段與其它模塊中的段,即不指定方式,表示該段與其它模塊中的段,不管段名是否相同,都不發(fā)生任何組合關(guān)系,鏈接時不管段名是否相同,都不發(fā)生任何組合關(guān)系,鏈接時它將是一個獨立的段。它將是一個獨立的段。(缺?。ㄈ笔。┑?1頁/共74頁3 3)定位方式)定位方式 定位方式通過匯
26、編告知定位方式通過匯編告知LINKLINK程序如何將經(jīng)組合后的程序如何將經(jīng)組合后的新段定位到存儲器中。定位方式有四種,即新段定位到存儲器中。定位方式有四種,即PARAPARA、BYTEBYTE、WORDWORD和和PAGEPAGE方式。方式。 PARAPARA方式:規(guī)定段從方式:規(guī)定段從1616的整數(shù)倍地址(指物理地址)的整數(shù)倍地址(指物理地址)開始,它使得段間可能留有開始,它使得段間可能留有1 1到到1515個字節(jié)的間隙。這也是個字節(jié)的間隙。這也是一種一種缺省缺省方式。方式。 BYTEBYTE方式:規(guī)定段可以從任何地址開始,它使本段與方式:規(guī)定段可以從任何地址開始,它使本段與前面段間不留任何
27、間隙。前面段間不留任何間隙。 WORDWORD方式:規(guī)定段只能從偶地址開始,它使得段間可方式:規(guī)定段只能從偶地址開始,它使得段間可能留一個字節(jié)的間隙。能留一個字節(jié)的間隙。 PAGEPAGE方式:規(guī)定段從方式:規(guī)定段從256256的整數(shù)倍地址開始,它使得的整數(shù)倍地址開始,它使得段間可能留有段間可能留有1 1到到255255個字節(jié)的間隙。個字節(jié)的間隙。第22頁/共74頁4 4)分類名)分類名 若若SEGMENTSEGMENT語句書寫了語句書寫了“分類名分類名”,則進行鏈接裝配,則進行鏈接裝配時,時,LINKLINK程序把分類名相同的所有段程序把分類名相同的所有段( (段名未必相同段名未必相同) )
28、放放在連續(xù)的存儲區(qū)域內(nèi),但仍然是不同的段。分類名相同的在連續(xù)的存儲區(qū)域內(nèi),但仍然是不同的段。分類名相同的各個段在鏈接時,先出現(xiàn)的在前,后出現(xiàn)的在后。各個段在鏈接時,先出現(xiàn)的在前,后出現(xiàn)的在后。2.ASSUME 2.ASSUME 偽指令偽指令 80868086利用利用CSCS寄存器為代碼段尋址,寄存器為代碼段尋址,DSDS寄存器為數(shù)據(jù)寄存器為數(shù)據(jù)段尋址,段尋址,SSSS寄存器為堆棧段尋址寄存器為堆棧段尋址 。然而。然而SEGMENTSEGMENT和和ENDSENDS兩個偽指令并未告訴匯編程序,其所定義的段是哪一兩個偽指令并未告訴匯編程序,其所定義的段是哪一種段,而種段,而ASSUMEASSUME
29、偽指令可達到此種功能,它告訴匯編一偽指令可達到此種功能,它告訴匯編一種匹配假設(shè),即哪個段寄存器將為哪個段名尋址。種匹配假設(shè),即哪個段寄存器將為哪個段名尋址。ASSUME ASSUME : , ,: 其中段名是程序中定義過的任何段名或組名。其中段名是程序中定義過的任何段名或組名。第23頁/共74頁3. ORG3. ORG偽指令偽指令 該指令可用來設(shè)置段內(nèi)偏移地址。匯編程序開始對源該指令可用來設(shè)置段內(nèi)偏移地址。匯編程序開始對源程序的某段進行匯編時,其地址計數(shù)器的初值相對于段地程序的某段進行匯編時,其地址計數(shù)器的初值相對于段地址總是零。接著依次累計段內(nèi)語句匯編后生成目的代碼的址總是零。接著依次累計段
30、內(nèi)語句匯編后生成目的代碼的字節(jié)數(shù)。字節(jié)數(shù)。ORGORG偽指令可修改計數(shù)器的內(nèi)容。偽指令可修改計數(shù)器的內(nèi)容。格式為:格式為:ORG ORG 表達式表達式 它告知匯編,該指令后生成的目的代碼,從表達式提它告知匯編,該指令后生成的目的代碼,從表達式提供的偏移地址開始存放。該指令的實際工作是把當前段的供的偏移地址開始存放。該指令的實際工作是把當前段的匯編程序地址計數(shù)器置成表達式所確定的值。下面是使用匯編程序地址計數(shù)器置成表達式所確定的值。下面是使用ORGORG偽指令的例子:偽指令的例子:第24頁/共74頁 DATA SEGMENT DATA SEGMENT ORG 100 ORG 100 XX DW
31、10 DUP XX DW 10 DUP(?)(?) ORG ORG 5 5 ORG OFFSET XX ORG OFFSET XX256256 ARRAYB DB 100 DUP(1, -1) ARRAYB DB 100 DUP(1, -1) 它表示該段的目的代碼從偏移地址它表示該段的目的代碼從偏移地址100100的位置開始產(chǎn)的位置開始產(chǎn)生,這是第一個生,這是第一個ORGORG的功能。第二個的功能。第二個ORGORG是為變量是為變量XXXX產(chǎn)生產(chǎn)生十個未初始化的字后,又跳過五個字節(jié),再繼續(xù)生成目十個未初始化的字后,又跳過五個字節(jié),再繼續(xù)生成目的代碼。第三個的代碼。第三個ORGORG告知匯編字節(jié)
32、變量告知匯編字節(jié)變量ARRAYBARRAYB從偏移地址從偏移地址356356的位置開始存放。的位置開始存放。第25頁/共74頁5.2.4 過程定義偽指令過程定義偽指令 在程序設(shè)計中,常把具有一定功能的程序設(shè)計成一個在程序設(shè)計中,常把具有一定功能的程序設(shè)計成一個子程序,子程序的使用不僅減少了目標代碼的生成數(shù)量。子程序,子程序的使用不僅減少了目標代碼的生成數(shù)量。而且便于實現(xiàn)程序的模塊化。匯編語言中,子程序通常以而且便于實現(xiàn)程序的模塊化。匯編語言中,子程序通常以過程的形式編寫,通過使用過程定義偽指令過程的形式編寫,通過使用過程定義偽指令PROC和和ENDP來定義一個過程,然后再通過來定義一個過程,然
33、后再通過CALL指令實現(xiàn)調(diào)用。指令實現(xiàn)調(diào)用。過程定義偽指令的格式如下:過程定義偽指令的格式如下:過程名過程名 PROC 類型類型 RET過程名過程名 ENDP 過程名是為該過程起的名字,具有與語句標號相同的過程名是為該過程起的名字,具有與語句標號相同的屬性,即具有段地址、偏移地址和類型(屬性,即具有段地址、偏移地址和類型(NEAR和FAR)三個屬性。三個屬性。第26頁/共74頁5.2.5 程序模塊的開始與結(jié)束偽指令程序模塊的開始與結(jié)束偽指令NAMENAME和和ENDEND偽指令偽指令 定義一個模塊需使用定義一個模塊需使用NAME和和END兩條偽指令。兩條偽指令。指令格式如下:指令格式如下: N
34、AME END 標號標號 其中,模塊名是為該模塊起的名字,其中,模塊名是為該模塊起的名字,NAME語句語句行可缺省,缺省時該模塊的源程序文件名就是模塊名。行可缺省,缺省時該模塊的源程序文件名就是模塊名。 匯編時,一個模塊就是一個匯編單位。匯編處理只匯編時,一個模塊就是一個匯編單位。匯編處理只進行到模塊結(jié)束語句進行到模塊結(jié)束語句END為止。如果該模塊是主模塊,為止。如果該模塊是主模塊,END語句可以指出一個標號,它表示該程序的啟動地址。語句可以指出一個標號,它表示該程序的啟動地址。一次被連接的各模塊中只能有一個是主模塊,即程序只一次被連接的各模塊中只能有一個是主模塊,即程序只能有一個啟動地址。能
35、有一個啟動地址。第27頁/共74頁5.3 5.3 宏指令語句 宏指令是指程序員事先自定義的宏指令是指程序員事先自定義的“指令指令”,這種指令,這種指令是一組匯編語言語句序列的縮寫。此后在宏指令出現(xiàn)的地是一組匯編語言語句序列的縮寫。此后在宏指令出現(xiàn)的地方,匯編程序自動把它們替換成相應的語句序列。事實上,方,匯編程序自動把它們替換成相應的語句序列。事實上,宏指令是宏指令是“常用語句序列常用語句序列”的簡單代號。的簡單代號。 宏指令的使用過程是宏定義、宏調(diào)用、宏擴展。宏指令的使用過程是宏定義、宏調(diào)用、宏擴展。1. 1. 宏定義宏定義 宏指令定義簡稱宏定義,它由四部分構(gòu)成:名字、開宏指令定義簡稱宏定義
36、,它由四部分構(gòu)成:名字、開頭、宏體和結(jié)尾。其格式為:頭、宏體和結(jié)尾。其格式為: 宏指令名指令名 MACRO MACRO 形參形參 ,形參,形參 ENDM ENDM第28頁/共74頁 其中宏指令名是為該宏定義起的名字,可以象指令其中宏指令名是為該宏定義起的名字,可以象指令助記符一樣出現(xiàn)在源程序中。助記符一樣出現(xiàn)在源程序中。 形參:僅用于宏定義內(nèi)部。形參間用逗號、也可用形參:僅用于宏定義內(nèi)部。形參間用逗號、也可用空格隔開。形參如同函數(shù)中的變量,在宏指令被調(diào)用時,空格隔開。形參如同函數(shù)中的變量,在宏指令被調(diào)用時,其內(nèi)部形參位置將被相應的實參所取代。形參為可選項,其內(nèi)部形參位置將被相應的實參所取代。形
37、參為可選項,形參的使用使宏指令更加靈活。形參的使用使宏指令更加靈活。 宏定義必須由偽指令宏定義必須由偽指令MACRO開始,開始,ENDM結(jié)束,結(jié)束,MACRO和和ENDM間的程序段稱為宏體。間的程序段稱為宏體。2. 2. 宏調(diào)用宏調(diào)用 經(jīng)過宏定義,在源程序中任意位置可以直接引用宏經(jīng)過宏定義,在源程序中任意位置可以直接引用宏指令名,構(gòu)成宏指令語句。宏指令名的引用就是宏調(diào)用,指令名,構(gòu)成宏指令語句。宏指令名的引用就是宏調(diào)用,它要求匯編程序把定義的宏體目標代碼拷貝到調(diào)用點。它要求匯編程序把定義的宏體目標代碼拷貝到調(diào)用點。如果定義是帶參數(shù)的,就用宏調(diào)用時的實際參數(shù)替代形如果定義是帶參數(shù)的,就用宏調(diào)用時
38、的實際參數(shù)替代形式參數(shù),其位置一一對應。式參數(shù),其位置一一對應。第29頁/共74頁宏調(diào)用格式如下:宏調(diào)用格式如下: 宏指令名宏指令名 實參實參 ,實參,實參 格式中的實參可以是數(shù)字、字符串、符號名。兩格式中的實參可以是數(shù)字、字符串、符號名。兩個以上的實參用逗號或空格隔開,它們在順序、屬性和個以上的實參用逗號或空格隔開,它們在順序、屬性和類型上要同形參保持一致,否則將出現(xiàn)意想不到的錯誤。類型上要同形參保持一致,否則將出現(xiàn)意想不到的錯誤。另外,也允許實參是帶間隔符的字符串,為不引起混淆,另外,也允許實參是帶間隔符的字符串,為不引起混淆,可帶上尖括號,匯編會將尖括號的內(nèi)容視為一個實參??蓭霞饫ㄌ?,
39、匯編會將尖括號的內(nèi)容視為一個實參。實參的數(shù)目可以和形參的數(shù)目不一致。當實參多于形參實參的數(shù)目可以和形參的數(shù)目不一致。當實參多于形參時,忽略多余的參數(shù);而當實參少于形參時,剩余的形時,忽略多余的參數(shù);而當實參少于形參時,剩余的形參處理為空白。參處理為空白。3. 3. 宏擴展宏擴展 當匯編程序掃描到源程序中的宏調(diào)用時,就把對應當匯編程序掃描到源程序中的宏調(diào)用時,就把對應宏定義的宏體指令序列插入到宏調(diào)用所在處,用實參替宏定義的宏體指令序列插入到宏調(diào)用所在處,用實參替代形參,并在插入的每條指令前面加上一個代形參,并在插入的每條指令前面加上一個“”號,號,這一過程就稱為宏擴展。這一過程就稱為宏擴展。第3
40、0頁/共74頁例:設(shè)三個參數(shù),將移位方向,被移位的對象及移位例:設(shè)三個參數(shù),將移位方向,被移位的對象及移位次數(shù)次數(shù)均設(shè)為參數(shù)。均設(shè)為參數(shù)。宏定義:宏定義: SHIFT MACRO CN,R,SD MOV CL,CN S&SD R,CL ENDM 當參數(shù)為助記符的一部分時,用當參數(shù)為助記符的一部分時,用& &將參數(shù)標注出將參數(shù)標注出來,來,以便替換。以便替換。宏調(diào)用:宏調(diào)用: SHIFT 4,AX,HL宏展開:宏展開: + MOV CL, 4 + SHL AX, CL ; ;將將AXAX左移左移4 4次次第31頁/共74頁宏指令與子程序比較宏指令與子程序比較 相同點:相同
41、點:1)都是具有獨立功能的一段程序。)都是具有獨立功能的一段程序。 2)都是可以被程序多次調(diào)用的程序段,并)都是可以被程序多次調(diào)用的程序段,并且調(diào)且調(diào) 用前必須由設(shè)計者按一定格式設(shè)計。用前必須由設(shè)計者按一定格式設(shè)計。 不同點:不同點:1)子程序由)子程序由CALL調(diào)用、調(diào)用、RET返回,匯編后子返回,匯編后子 程序只占有一個程序段,較為節(jié)省內(nèi)存;程序只占有一個程序段,較為節(jié)省內(nèi)存; 宏指令每一次宏展開時宏體都占一個程宏指令每一次宏展開時宏體都占一個程序序 段,調(diào)用次數(shù)越多,占用內(nèi)存越多,從內(nèi)存段,調(diào)用次數(shù)越多,占用內(nèi)存越多,從內(nèi)存 空間開銷來說,子程序優(yōu)于宏指令??臻g開銷來說,子程序優(yōu)于宏指令
42、。 2)宏調(diào)用時不需要保護和恢復斷點、現(xiàn))宏調(diào)用時不需要保護和恢復斷點、現(xiàn)場,場, 執(zhí)行時間較短。執(zhí)行時間較短。 訪問的程序較長、訪問次數(shù)不是太多時訪問的程序較長、訪問次數(shù)不是太多時 子程序子程序 訪問的程序較短、訪問次數(shù)較多時訪問的程序較短、訪問次數(shù)較多時 宏指宏指令令 第32頁/共74頁BIOSBIOS中斷調(diào)用:中斷調(diào)用:在存儲器系統(tǒng)中,內(nèi)存高端在存儲器系統(tǒng)中,內(nèi)存高端8KB8KB的的ROMROM中存放有基本輸入中存放有基本輸入/ /輸出系統(tǒng)輸出系統(tǒng)(Basic Input/Output (Basic Input/Output SystemSystem,BIOS)BIOS)例行程序。主要提
43、供系統(tǒng)自檢及初始例行程序。主要提供系統(tǒng)自檢及初始化、系統(tǒng)服務(wù)和硬件中斷處理等功能模塊??梢酝ㄟ^化、系統(tǒng)服務(wù)和硬件中斷處理等功能模塊。可以通過軟中斷指令軟中斷指令 INT nINT n訪問訪問(10H(10H1AH1AH、40H)40H)。DOSDOS系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用: :是微機的磁盤操作系統(tǒng)是微機的磁盤操作系統(tǒng)DOS(Disk DOS(Disk Operating System)Operating System)為用戶提供的一組例行子程序,為用戶提供的一組例行子程序,它與它與BIOSBIOS中斷執(zhí)行同樣的功能,而且操作更簡易,對中斷執(zhí)行同樣的功能,而且操作更簡易,對硬件的依賴更少一些,
44、使用軟中斷指令硬件的依賴更少一些,使用軟中斷指令 INT 21HINT 21H完成完成各項功能的調(diào)用。各項功能的調(diào)用。5.4 DOS5.4 DOS系統(tǒng)功能調(diào)用和BIOSBIOS中斷調(diào)用第33頁/共74頁主要功能:主要功能:1)磁盤的讀)磁盤的讀/寫以及控制管理寫以及控制管理 2)內(nèi)存管理)內(nèi)存管理 3)基本的輸入輸出管理(鍵盤、顯)基本的輸入輸出管理(鍵盤、顯示器、示器、 打印機等)另外還有時間、日期管理打印機等)另外還有時間、日期管理調(diào)用方法調(diào)用方法:1) ) 系統(tǒng)功能號送到系統(tǒng)功能號送到AH寄存器中寄存器中 2) ) 入口參數(shù)送到指定寄存器中入口參數(shù)送到指定寄存器中 3) ) 用用INT
45、21H指令執(zhí)行功能調(diào)用指令執(zhí)行功能調(diào)用 有些系統(tǒng)功能調(diào)用比較簡單,不需要設(shè)置入口有些系統(tǒng)功能調(diào)用比較簡單,不需要設(shè)置入口參數(shù)參數(shù)或者沒有出口參數(shù),則只需安排后兩個語句,調(diào)用返或者沒有出口參數(shù),則只需安排后兩個語句,調(diào)用返回回完成時,系統(tǒng)將出口參數(shù)送到指定的寄存器中,或送完成時,系統(tǒng)將出口參數(shù)送到指定的寄存器中,或送屏屏幕顯示出來。幕顯示出來。 第34頁/共74頁一、鍵盤功能調(diào)用一、鍵盤功能調(diào)用例:交互程序需用戶對一個提示做應答時,需單字符輸例:交互程序需用戶對一個提示做應答時,需單字符輸入。入。 GET_KEY: MOV AH, 1 CMP AL, N INT 21H JE NO CMP AL
46、, Y JNE GET_KEY JE YES AH 功能功能 返回參數(shù)返回參數(shù) 01H 從鍵盤輸入一個字符并回顯在屏幕上從鍵盤輸入一個字符并回顯在屏幕上 AL=字符字符 07H 從鍵盤輸入一個字符不回顯從鍵盤輸入一個字符不回顯 AL=字符字符 0AH 輸入字符到緩沖區(qū)輸入字符到緩沖區(qū) DS:DX=緩沖區(qū)首地址緩沖區(qū)首地址第35頁/共74頁 從鍵盤輸入字符串。這是從鍵盤輸入字符串。這是0AH0AH號系統(tǒng)功能調(diào)用,要號系統(tǒng)功能調(diào)用,要求求預先定義一個輸入緩沖區(qū),將預先定義一個輸入緩沖區(qū),將DS:DXDS:DX指向緩沖區(qū),該指向緩沖區(qū),該區(qū)的區(qū)的第一個字節(jié)指出能容納的最大字符個數(shù);第二個字節(jié)第一個字
47、節(jié)指出能容納的最大字符個數(shù);第二個字節(jié)存存放實際輸入的字符個數(shù),由系統(tǒng)最后填入;從第三個放實際輸入的字符個數(shù),由系統(tǒng)最后填入;從第三個字字節(jié)開始存放從鍵盤接受的字符,直到節(jié)開始存放從鍵盤接受的字符,直到ENTERENTER鍵結(jié)束。鍵結(jié)束。定義緩沖區(qū)定義緩沖區(qū): : BUFF DB 100; ; 存放存放100100字節(jié)的緩沖區(qū)字節(jié)的緩沖區(qū) DB ? ; ; 系統(tǒng)輸入實際輸入字節(jié)數(shù)系統(tǒng)輸入實際輸入字節(jié)數(shù) DB 100 DUP(?) ; ;存放輸入字符存放輸入字符系統(tǒng)功能調(diào)用:系統(tǒng)功能調(diào)用: MOV DX, OFFSET BUFF MOV AH, 0AH INT 21H第36頁/共74頁二、顯示功
48、能調(diào)用二、顯示功能調(diào)用 AH 功能功能 調(diào)用參數(shù)調(diào)用參數(shù) 02H 顯示一個字符顯示一個字符 DL=字符字符 09H 顯示字符串顯示字符串 DS:DX=字符串首地址字符串首地址 例:顯示一個單字符例:顯示一個單字符 MOV DL, AL MOV AH, 2 INT 21H 字符串輸出。字符串輸出。9 9號功能調(diào)用,將指定的內(nèi)存緩沖區(qū)號功能調(diào)用,將指定的內(nèi)存緩沖區(qū)中的中的字符串從屏幕顯示輸出。要求字符串從屏幕顯示輸出。要求DS:DXDS:DX指向串地址首址,指向串地址首址,并且并且字符串必須以字符串必須以$ $字符為結(jié)束符。字符為結(jié)束符。第37頁/共74頁例:在屏幕上顯示例:在屏幕上顯示HOW D
49、O YOU DOHOW DO YOU DO?字符串,且光字符串,且光標換標換 行。行。 DATA SEGMENT CREQU ODH LFEQU 0AH MESDBHOW DO YOU DO?,CR,LF,$ DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA MAIN: MOV AX, DATA MOV DS, AX MOV DX, OFFSET MES ;DS;DS:DXDX指向字符串指向字符串MESMES MOV AH, 9 ;9;9號功能調(diào)用號功能調(diào)用 INT21H MOV AH,4CH ; ;返返DOSDOS INT21H CODE ENDS
50、 END MAIN第38頁/共74頁三、打印功能三、打印功能例:打印一個字符串例:打印一個字符串 TEXT DB HELLO! MOV CX, 6 MOV BX, 0 NEXT: MOV AH, 5 MOV DL, TEXTBX INT 21H INC BX LOOP NEXT AH 功能功能 調(diào)用參數(shù)調(diào)用參數(shù) 05H 打印一個字符打印一個字符 DL=字符字符 第39頁/共74頁5.5 匯編語言程序設(shè)計舉例匯編語言程序設(shè)計的基本步驟如下:匯編語言程序設(shè)計的基本步驟如下: 分析問題,抽象出描述問題的數(shù)學模型,確定分析問題,抽象出描述問題的數(shù)學模型,確定解決問題的合適算法;解決問題的合適算法;繪制
51、抽象流程圖或?qū)懗龀橄蟛襟E,可以從粗到繪制抽象流程圖或?qū)懗龀橄蟛襟E,可以從粗到細把算法逐步地具體化;細把算法逐步地具體化;分配存儲空間及工作單元,根據(jù)框圖編寫程序;分配存儲空間及工作單元,根據(jù)框圖編寫程序;靜態(tài)檢查源程序;靜態(tài)檢查源程序;上機調(diào)試程序,按設(shè)計要求對程序運行正確性上機調(diào)試程序,按設(shè)計要求對程序運行正確性作全面測試。作全面測試。第40頁/共74頁5.5.1 順序程序設(shè)計順序程序設(shè)計 順序程序,又叫直線運行程序。這種程序的形式順序程序,又叫直線運行程序。這種程序的形式最簡單,計算機執(zhí)行程序的方式是指令逐條依次被執(zhí)最簡單,計算機執(zhí)行程序的方式是指令逐條依次被執(zhí)行,不進行判斷和跳轉(zhuǎn),直到程
52、序結(jié)束。行,不進行判斷和跳轉(zhuǎn),直到程序結(jié)束?!纠?.15.1】DATA SEGMENT X DB 5FH Y DB 57H ZDB ?DATA ENDSSTAC SEGMENT STACK STACK DW 20H DUP(?) TOP LABEL WORDSTAC ENDS CODESEGMENTMAIN PROC FAR ASSUME CS:CODE,DS:DATA,SS:STAC第41頁/共74頁START: PUSH DS MOV AX, 0 PUSH AX MOV AX, DATA MOV DS, AX MOV AX, STAC MOV SS, AX MOV SP, OFFSET
53、TOP MOV AL, X ADD AL, Y MOV AH, 0 ADC AH, AH SHR AX, 1 MOV Z, AL RETMAIN ENDPCODE ENDS END START第42頁/共74頁【例例5.25.2】 :假設(shè)多項式:假設(shè)多項式:編制一個程序,計算自變量編制一個程序,計算自變量X=6X=6時,函數(shù)時,函數(shù)f(x)f(x)的值。的值。21)3)45()(xxxxf算法:算法:如采用代用法,直接計算多項式的值,則至少要做如采用代用法,直接計算多項式的值,則至少要做6 6次乘法和次乘法和3 3次加減法,并且要使用較多的寄存器暫存中間結(jié)次加減法,并且要使用較多的寄存器暫存中
54、間結(jié)果,所以可采用秦九韶算法,把果,所以可采用秦九韶算法,把 f(x)f(x)變形為變形為21345)(23xxxxf 秦九韶算法適用多項式 的求值問題,把n次多項式的求值問題轉(zhuǎn)化成求n個一次多項式的值的問題 。0111)(axaxaxaxfnnnn第43頁/共74頁SSEG SEGMENT STACK DB 1024 DUP (0)SSEG ENDSDATA SEGMENT X DW 6 RES DW ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA, SS:SSEGSTART: MOV AX, DATA MOV DS, AX MOV AX, 5 M
55、UL X ADD AX, 4 MUL X SUB AX, 3 MUL X ADD AX , 21 MOV RES, AX MOV AX , 4C00H INT 21H CODE ENDS END START第44頁/共74頁 順序程序的設(shè)計和運行都是比較簡單的,但是實際應用中往往需要根據(jù)不同的情況和條件作出不同的處理,順序程序是無法實現(xiàn)的,因此可以采用分支程序來完成。 分支程序就是根據(jù)不同的情況或條件執(zhí)行不同功能的程序,它具有判斷和轉(zhuǎn)移功能,在程序中利用條件轉(zhuǎn)移指令對運算結(jié)果的狀態(tài)標志進行判斷,以實現(xiàn)轉(zhuǎn)移功能。 分支程序常用的結(jié)構(gòu)形式有兩種:一種是簡單分支結(jié)構(gòu),另一種是多分支結(jié)構(gòu)。5.5.2
56、分支程序設(shè)計分支程序設(shè)計第45頁/共74頁1、簡單分支程序設(shè)計兩個分支兩個分支條件?YN條件1?條件2?三個分支三個分支YYNN第46頁/共74頁【例5.3】已知已知VAR單元內(nèi)有一自變量單元內(nèi)有一自變量X,請按如下條,請按如下條件編出求函數(shù)值件編出求函數(shù)值Y Y并將它存入并將它存入FUNC單元的程序。單元的程序。 Y=1X00 X=0-1 X0算法算法: 這是一個三分支歸一的條件轉(zhuǎn)移問題。由題意可知,這是一個三分支歸一的條件轉(zhuǎn)移問題。由題意可知,自變量自變量X是個帶符號數(shù),故可采用與零比較和條件轉(zhuǎn)移是個帶符號數(shù),故可采用與零比較和條件轉(zhuǎn)移指令來做。指令來做。第47頁/共74頁DATA SEG
57、MENT VAR DB -25 FUNC DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE , DS:DATASTART: MOV AX , DATA MOV DS , AX MOV AL , VAR CMP AL , 0 JGE LOOP1 MOV AL ,0FFH JMP EXITLOOP1:JE LOOP2 MOV AL , 01H JMP EXIT LOOP2: MOV AL , 00HEXIT : MOV FUNC , AL MOV AH ,4CH INT 21HCODE ENDS END START AL XAL0?AL=0?AL -1AL 1AL
58、0 FUNC ALYYNN 開始 結(jié)束第48頁/共74頁【例5.4】已知在內(nèi)存中,有一個字節(jié)單元已知在內(nèi)存中,有一個字節(jié)單元NUMNUM存存有帶符號數(shù)據(jù),計算出它的絕對值后并放入有帶符號數(shù)據(jù),計算出它的絕對值后并放入RESULTRESULT單元中。單元中。分析:根據(jù)數(shù)學中絕對值的概念分析:根據(jù)數(shù)學中絕對值的概念可知,一個正數(shù)的絕對值是它本可知,一個正數(shù)的絕對值是它本身,而一個負數(shù)的絕對值是它的身,而一個負數(shù)的絕對值是它的相反數(shù)。如要計算一個數(shù)的相反相反數(shù)。如要計算一個數(shù)的相反數(shù),就要完成減法運算,即用零數(shù),就要完成減法運算,即用零減去這個數(shù)。而減去這個數(shù)。而80868086系統(tǒng)有專用系統(tǒng)有專用
59、的求反指令的求反指令NEGNEG。 X AL AL0?YN 開始 結(jié)束將AL中的內(nèi)容求補AL RESULT第49頁/共74頁 DATA SEGMENT X DB 25 RESULT DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX, DATA MOV DS, AX ;初始化 MOV AL, X ;X取到AL中 TEST AL, 80H ;測試AL正負 JZ NEXT ;為正轉(zhuǎn)NEXT NEG AL ;否則AL求補 NEXT: MOV RESULT,AL ;送結(jié)果 MOV AH, 4CH INT 21H ;返回DOS
60、 CODE ENDS END START ;匯編結(jié)束 第50頁/共74頁 條件?N=0N=nN=2N=1 這種方法常用于多路分支的情況,每路分支起始地址可定這種方法常用于多路分支的情況,每路分支起始地址可定義為義為SUB0、SUB1。并把這些起始地址組成一個表,稱為跳。并把這些起始地址組成一個表,稱為跳轉(zhuǎn)表,表內(nèi)每兩個字節(jié)存放一個入口地址的偏移量,然后根據(jù)轉(zhuǎn)表,表內(nèi)每兩個字節(jié)存放一個入口地址的偏移量,然后根據(jù)有規(guī)律的索引值,采用寄存器間接尋址方式,執(zhí)行無條件轉(zhuǎn)移有規(guī)律的索引值,采用寄存器間接尋址方式,執(zhí)行無條件轉(zhuǎn)移指令,即可轉(zhuǎn)向不同的分支進行處理,最后匯合到出口處。指令,即可轉(zhuǎn)向不同的分支進行處理,最后匯合到出口
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 欄桿承包合同協(xié)議書
- 地鐵工程施工方案
- 上海室內(nèi)消防工程合同
- 奢侈品質(zhì)押擔保合同
- 花箱花卉施工方案
- 2025年人力資源制度:趣味運動會活動策劃方案
- 旱地改水田施工方案
- 森林防火通道施工方案
- 茂名水幕電影施工方案
- 廣西河池市宜州區(qū)2024-2025學年七年級上學期期末生物試題(原卷版+解析版)
- GB/T 44536-2024CVD陶瓷涂層熱膨脹系數(shù)和殘余應力試驗方法
- 現(xiàn)代家政導論-課件 6.1.1認識道德與職業(yè)道德
- 北京市東城區(qū)2022-2023學年高三上學期期末考試地理試卷 含答案
- 深圳益電通變頻器說明書TD90
- 人教版初中八年級物理上冊課件-第1章-機械運動
- 《中小型無人駕駛航空器垂直起降場技術(shù)要求》編制說明
- 國有企業(yè)內(nèi)部控制的問題與改進措施
- 企業(yè)員工健康管理與關(guān)懷計劃實施方案
- 爭做“四有好老師”-當好“四個引路人”
- 護理美學-第五章 護士的服飾美
- DLT 572-2021 電力變壓器運行規(guī)程
評論
0/150
提交評論