微機(jī)原理 CH4(1) 匯編語言程序設(shè)計(jì)_第1頁
微機(jī)原理 CH4(1) 匯編語言程序設(shè)計(jì)_第2頁
微機(jī)原理 CH4(1) 匯編語言程序設(shè)計(jì)_第3頁
微機(jī)原理 CH4(1) 匯編語言程序設(shè)計(jì)_第4頁
微機(jī)原理 CH4(1) 匯編語言程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1第四章匯編語言程序設(shè)計(jì)第四章4.0 概述4.1 匯編語言程序格式4.2 偽指令語句4.3 程序設(shè)計(jì)方法4.4 DOS系統(tǒng)功能調(diào)用2第四章4.0 概述 從使用者的角度看,一般可分成以下三種:1、機(jī)器語言(Machine Language)u用0、1數(shù)字代碼來表示機(jī)器操作;u如:MOV AX,BX1000101111000011u特點(diǎn):計(jì)算機(jī)能直接識別,執(zhí)行速度快; 不方便記憶和編程一、計(jì)算機(jī)程序設(shè)計(jì)語言3第四章2、匯編語言(Assembly Language)u用助記符來表示指令,如:MOV、ADD、INu特點(diǎn):機(jī)器不能識別,需翻譯 面向硬件,執(zhí)行速度較快 用于編寫實(shí)時(shí)控制程序3、高級語言(H

2、igh-level Language)u用數(shù)學(xué)語言和自然語言編程;u如:加法:;輸出:coutu特點(diǎn):編程簡單、不需了解機(jī)器硬件、速度較慢 機(jī)器不能直接識別,需龐大的翻譯系統(tǒng) 4第四章一般應(yīng)用:混合語言u匯編語言+高級語言等混合編程 各取所長,相互調(diào)用u匯編語言實(shí)現(xiàn):硬件操作u高級語言實(shí)現(xiàn):復(fù)雜算法5第四章1、幾個(gè)名詞u匯編語言:用助記符來表示指令的語言。u匯編語言源程序:用匯編語言編寫的程序。u匯編:將源程序翻譯成機(jī)器代碼的過程。u匯編程序:將源程序翻譯成機(jī)器代碼的程序。二、匯編語言源程序執(zhí)行過程6第四章2、匯編語言源程序執(zhí)行過程8086系統(tǒng)中常用的匯編程序:MASM6.X 宏匯編ASM 小

3、匯編編輯.asm匯編.obj連接.exe執(zhí)行7第四章三、完整匯編源程序?qū)嵗鼶ATA SEGMENT DA1 DB 12H DA2 DB 34H DA3 DB 00HDATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA(下接右邊)START: MOV AX,DATA MOV DS,AX MOV BL,DA1 ADD BL,DA2 MOV DA3,BL MOV AH,4CH INT 21HCODE ENDS END START分析程序的結(jié)構(gòu)、功能、組成8第四章 匯編源程序特點(diǎn)u分段的結(jié)構(gòu) 4個(gè)段,至少有代碼段,其他視需要而定;u有部分固定的程序框架(程序結(jié)構(gòu))

4、 段定義、段分配、設(shè)置段地址、返回DOS、程序結(jié)束u基本組成-語句 有些是前面學(xué)過的指令語句,其他是MASM中規(guī)定的格式、語法語句。9第四章段名1 SEGMENT ;段開始 段名1 ENDS ;段結(jié)束段名2 SEGMENT ASSUME CS:段名2, DS:段名1 ;段分配START:MOV AX,DATA MOV DS,AX ;送段基址 MOV AH,4CH ;返回DOS方法一 INT 21H段名2 ENDS END START ;源程序結(jié)束一般程序框架MAIN PROC FAR PUSH DS MOV AX,0 PUSH AX RETMAIN ENDP 返回DOS方法二 寫在堆棧段的設(shè)置

5、后面10第四章4.1 匯編語言程序格式MASM中的語句分為兩類:u指令性語句:有對應(yīng)的機(jī)器指令。u偽指令語句:無對應(yīng)的機(jī)器指令,匯編時(shí)對偽指令進(jìn)行處理,可完成數(shù)據(jù)定義、存儲區(qū)分配、段定義、段分配、過程定義、指示程序開始和結(jié)束等功能。u差別:格式及功能不同(形式); 匯編時(shí)能否形成對應(yīng)的機(jī)器碼(本質(zhì))。一、匯編源程序的語句11第四章1、指令性語句格式:標(biāo)號:指令助記符 操作數(shù),操作數(shù);注釋u標(biāo)號符號地址;必須加“: :”;命名規(guī)則;可省u指令助記符指令名稱,不可省u操作數(shù)操作對象;多個(gè)時(shí)用“,”隔開u注釋以“;”開頭;說明性語句,可省例: NEXT:MOV AH,0FH ;將0FH送入AH中12

6、第四章2、偽指令語句(也稱匯編命令語句)格式:名字 偽指令指示符 操作數(shù),操作數(shù);注釋功能:變量定義、段定義、段分配、程序開始、結(jié)束等u名字符號地址,不加“: :”,變量名或段名等,可省u偽指令指示符MASM中規(guī)定的符號;如DB、DW和END等u操作數(shù)操作對象,多個(gè)時(shí)用“,”隔開u注釋以“;”開頭;說明性語句,可省例:DA1 DB 10H,20H,30H ;定義變量DA1,并賦初值13第四章 MASM中使用的數(shù)據(jù)項(xiàng):常數(shù)、變量、標(biāo)號、寄存器、存儲器或表達(dá)式。1、常數(shù)u是固定值,沒有屬性,是確定的數(shù)據(jù)。u二進(jìn)制:字母“B”結(jié)尾,如:00110100B;u十進(jìn)制:字母“D”結(jié)尾或省略,如:1234

7、D、5678;u十六進(jìn)制:字母“H”結(jié)尾,“AF”開頭時(shí),前面加0;u字符串:用單引號 括起來單個(gè)字符或字符序列,如:A,123H。注:字符串以ASCII碼形式存放, 如:MOV AH,A ;AH=41H二、數(shù)據(jù)項(xiàng)14第四章2、變量u數(shù)據(jù)的符號地址;u變量名表示后面數(shù)據(jù)項(xiàng)第一字節(jié)的地址;例:DA1 DB 10H,20H,30H, ;定義變量DA1,初值為,DA1表示10H的地址u相當(dāng)于高級語言中的數(shù)組;u在程序中一般作為存儲器操作數(shù)來使用。 例:MOV AH,DA115第四章u變量的三種屬性: 段值:變量所在段的段基址。 段內(nèi)偏移地址:指變量所在地址與所在段首地址之間的地址偏移字節(jié)數(shù)。 類型:

8、長度屬性,指變量中每個(gè)元素所包含的字節(jié)數(shù),類型有DB、DW、DD等。16第四章3、標(biāo)號u指令性語句的符號地址;u名稱代表后面指令性語句的開始地址;u可作為轉(zhuǎn)移指令的目的操作數(shù)。例: JMP NEXT NEXT:MOV AH,0FH17第四章u標(biāo)號的三種屬性: 段值:標(biāo)號所在段的段基址,總在CS中。 段內(nèi)偏移地址 類型:指標(biāo)號可轉(zhuǎn)移的距離,也稱距離屬性。 NEAR:近標(biāo)號,實(shí)現(xiàn)段內(nèi)轉(zhuǎn)移或調(diào)用; FAR: 遠(yuǎn)標(biāo)號,實(shí)現(xiàn)段間轉(zhuǎn)移或調(diào)用。 默認(rèn)為NEAR。18第四章三、 MASM中的表達(dá)式u表達(dá)式:運(yùn)算對象與運(yùn)算符組成。u運(yùn)算對象:常數(shù)、變量、標(biāo)號。u運(yùn)算符:MASM中有六類,包括: 算術(shù)運(yùn)算符、邏輯

9、運(yùn)算符、關(guān)系運(yùn)算符 數(shù)值返回運(yùn)算符、修改屬性運(yùn)算符、其它u運(yùn)算結(jié)果:常數(shù)或存儲器地址注意:所有表達(dá)式由MASM處理(即:在匯編時(shí)進(jìn)行運(yùn)算)掌握:常用運(yùn)算符及表達(dá)式的結(jié)果19第四章1、算術(shù)運(yùn)算符包括:+,-,*,/ /(取商),MOD(取余),SHL,SHR特點(diǎn):運(yùn)算對象及結(jié)果均為整數(shù),MOD為正整數(shù)。 地址只能加減例: DA1 DB 1,2,3,4 DA2 DB 20 MOV AX,30*5 MOV AL,31MOD5 MOV AL,31/5 MOV AL,DA2-DA1匯編時(shí)MOV AX,150MOV AL,1MOV AL,6MOV AL,420第四章2、邏輯運(yùn)算符包括:AND,OR,NOT

10、,XOR特點(diǎn):位運(yùn)算; 運(yùn)算對象、結(jié)果為常數(shù)。 運(yùn)算結(jié)果長度由另一操作數(shù)決定。例:MOV BL,8CH AND 73H MOV BL,AL AND OFFH MOV BX,NOT 0FFH注意:AND AX,8CH AND 73H (兩AND不同)區(qū)別:前為指令助記符,后為運(yùn)算符,且位置不同; 處理時(shí)間不同;前影響Flags,后不影響匯編時(shí)MOV BL,00H()MOV BX,0FF00H21第四章3、關(guān)系運(yùn)算符包括:EQ,NE,LT,GT,LE,GE特點(diǎn):運(yùn)算對象:數(shù)據(jù)或同一段內(nèi)的地址; 運(yùn)算結(jié)果:關(guān)系為真,結(jié)果全1;假,全0例:MOV AX,10H GE 16 MOV AL,10H GE

11、16MOV AX,0FFFFHMOV AL,0FFH關(guān)系運(yùn)算符常與邏輯運(yùn)算符組合起來使用例:MOV CX,(PORT LT 5)AND 100)OR(PORT GE 5)AND 200)若PORT5,MOV CX,100若PORT5,MOV CX,20022第四章4、數(shù)值返回運(yùn)算符(分析運(yùn)算符)包括:OFFSET,SEG,TYPE,LENGTH,SIZE格式:運(yùn)算符 變量或標(biāo)號功能:uOFFSET:取偏移地址值;uSEG:取段基址;uTYPE:返回長度(變量)或距離(標(biāo)號)屬性值; 變量類型返回值DBDWDD124標(biāo)號類型返回值NEARFAR-1 FFH-2 FEH23第四章uLENGTH:對

12、于一般變量,返回1;對于DUP定義的變量,返回單元數(shù)(直接返回第一個(gè)DUP前的N值);說明:DUP為復(fù)制操作符,格式:N DUP(表達(dá)式); N表示復(fù)制次數(shù),表達(dá)式為復(fù)制內(nèi)容 例:2 DUP(1,2) 等價(jià)于 1,2,1,2uSIZE:SIZE=LENGTH*TYPE數(shù)值返回運(yùn)算符(續(xù))24第四章例:設(shè)DS=0200H,從偏移量為0000H定義以下變量: DA1 DW 1234H,5678H DA2 DD 5 DUP(1,2) . MOV AX,OFFSET DA1 MOV AX,OFFSET DA2 MOV AX,SEG DA1L1:MOV AX,TYPE DA2 MOV AX,TYPE L

13、1 MOV AX,LENGTH DA1 MOV AX,SIZE DA2MOV AX,4MOV AX,0FFFFHMOV AX,1MOV AX,20匯編時(shí)MOV AX,0000HMOV AX,0004HMOV AX,0200H匯編時(shí)數(shù)值返回運(yùn)算符(續(xù))25第四章5、修改屬性運(yùn)算符u段操作符 ES:,DS:,SS:,CS: 修改段基址的來源 例: MOV AX,BX ;默認(rèn)段基址在DS中 MOV AX,ES:BX ;段基址在ES中uPTR格式:類型/距離 PTR 變量或標(biāo)號功能:臨時(shí)改變或指明變量或標(biāo)號的類型屬性, 常與BYTE、WORD、NEAR、FAR等連用。26第四章例:DA1 DB 15H

14、,36H DA2 DW 1122H,3344H MOV AX,DA1 MOV AL,DA2 MOV BX,10H改:MOV AX,WORD PTR DA1 MOV AL,BYTE PTR DA2 ;臨時(shí)改變變量類型 MOV WORD PTR BX,10H ;臨時(shí)指明操作類型思考:這三條指令執(zhí)行后的結(jié)果分別是多少? AX=3615H,AL=22H,(DS:BX)=0010H() ;長度不一致() ;長度不一致() ;類型不明27第四章6、其他運(yùn)算符u():改變優(yōu)先級; :內(nèi)存單元地址u 補(bǔ)充 $:地址計(jì)數(shù)器的當(dāng)前值(即當(dāng)前偏移地址)例:DA1 DW 1,2,$+4,0AH 若DA1偏移地址為10

15、00H,則上述變量定義等效為: DA1 DW 1,2,1008H,0AH28第四章例:若 DA1 DB 01H,02H,03H DA2 DW 5566H COUNT EQU $-DA1則:COUNT的值為5 COUNT表示:DA1,DA2占的字節(jié)總數(shù)(長度之和)7、優(yōu)先級(P134 表4.3) 29第四章4.2 偽指令語句u在匯編時(shí)進(jìn)行處理,主要完成變量定義,段定義,段分配,指示程序開始和結(jié)束等功能。u常用:數(shù)據(jù)定義(變量定義)語句:DB,DW,DD符號定義語句:EQU,=段定義語句:SEGMENTENDS段分配語句:ASSUME過程定義語句:PROCENDP程序開始、結(jié)束語句:ORG,END

16、30第四章 一、數(shù)據(jù)定義(變量定義)語句(DB,DW,DD)u格式1:變量名 助記符 opr,opr;注釋u格式2:變量名 助記符 N DUP(opr,opr);注釋 助記符: DB:定義字節(jié)變量,表示每個(gè)opr占一個(gè)字節(jié) DW:定義字變量,表示每個(gè)opr占2個(gè)字節(jié) DD:定義雙字變量,表示每個(gè)opr占4個(gè)字節(jié) N:重復(fù)次數(shù),正整數(shù)掌握:變量占的總字節(jié)數(shù);在內(nèi)存中的存放格式31第四章例1:opr是常數(shù)或表達(dá)式若數(shù)據(jù)定義語句如下: DA1 DB 10,5,10H DA2 DW 100H,100,-4 DA3 DD 2*30,0FFFBH則各變量所占字節(jié)數(shù): DA1 3B; DA2 6B; DA3

17、 8B;.0A51000016400FCFF3C000000.100HDA1DA2DA3100-460匯編后存放格式如下圖:32第四章例2: opr是字符串 DA1 DB HELLO DA2 DB OK DA3 DW OK字節(jié)數(shù):DA1 5B DA2 2B DA3 2B思考:DA4 DW ABC怎么存儲?注:DW定義字符串時(shí),最多包含2個(gè)字符。484845454C4C4C4C4F4F4F4F4B4B4B4B4F4FDA1DA1DA2DA2DA3DA3H HE EL LL LO OO OK KK KO O字節(jié)字節(jié)OKOK字字OKOK匯編后存放格式如下圖:()33第四章例3:opr用?來保留存儲空

18、間,但不存入數(shù)據(jù)。 DA1 DB0,1,?,?,? DA2 DW?,54,? 字節(jié)數(shù): DA1 5B DA2 6B區(qū)分: DB ?與 DB ? 00013600DA1DA201?5434第四章例4:opr用DUP縮寫 DA1 DB 2 DUP(0,1,2) DA2 DW 2 DUP(0,1,2) DA3 DB 2 DUP(1,2 DUP(1,2)等價(jià)語句: DA1 DB 0,1,2,0,1,2 DA2 DW 0,1,2,0,1,2 DA1 DB 2 DUP(1,1,2,1,2)字節(jié)數(shù): DA1 6B DA2 12B DA3 10B 35第四章例5:opr為變量或標(biāo)號 已知有變量DA1,標(biāo)號L1

19、,L2,若有: VAR1 DW DA1 VAR2 DW L1 VAR3 DD L2 則,VAR1、VAR2、VAR3表示什么含義?;DA1的EAVAR1;L1的EAVAR2;L2的EA和段基址VAR3 低字存放EA,高字存放段基址注意:opr為變量或標(biāo)號時(shí),類型只能為DW或DD36第四章 二、符號定義語句(EQU)u格式:符號名 EQU 表達(dá)式u功能:程序中用表達(dá)式值替代符號名例:COUNT EQU 100 C1 EQU ADD MOV CX,COUNT C1 AL,BL注意:uEQU語句不占內(nèi)存uEQU左邊的符號不能重復(fù)定義uEQU右若為標(biāo)號或變量,必須先定義u可用PURGE語句取消某一符號

20、的定義,如PURGE C1MOV CX,100ADD AL,BL37第四章例:若從數(shù)據(jù)段偏移地址為0000H開始定義如下語句: X1 DB 12H,34H X2 EQU 20 X3 DB 56H,78H則:MOV AX,OFFSET X1; MOV AX,X2; MOV AX,OFFSET X3; MOV AX,OFFSET X2;問:AX的值分別是多少? AX = 0000H AX = 14H AX = 0002H()38第四章三、段定義語句(SEGMENT ENDS)u8086CPU采用分段技術(shù)來管理存儲器u程序體現(xiàn)為:分段結(jié)構(gòu),由段定義語句完成u格式:段名 SEGMENT 參數(shù) 段內(nèi)容

21、段名 ENDS注意:uSEGMENT,ENDS必須成對出現(xiàn),前面的段名要一致;u段名:標(biāo)識符,程序中表示邏輯段的段基址,常量。 u代碼段是必須的,其他段視需要而定;uDS段、SS段、ES段中只能出現(xiàn)偽指令語句。39第四章四、段分配語句(ASSUME)u格式: ASSUME CS:段名1,DS:段名2,ES:段名3,SS:段名4u功能: 指明所定義的段與段寄存器之間的關(guān)系 即告訴匯編程序你定義了哪些段,分別是什么段!注意:u段名已定義uASSUME語句放在代碼段開始,不可省略;u一組寫不下,分兩組寫u可用ASSUME NOTHING取消前面指定的段寄存器 格式:ASSUME DS:NOTHING

22、40第四章u只是說明性語句,并未將段基址裝入相應(yīng)段寄存器u代碼段的段基址自動裝入CS;其他段必須編程裝入例: DATA SEGMENT DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA ;段分配語句START:MOV AX,DATA MOV DS,AX ;裝入段基址值 注:代碼段段基址自動裝入CS41第四章五、過程定義語句(PROCENDP)u格式:過程名 PROC (NEAR)/FAR RET 過程名 ENDP注意:過程內(nèi)部至少有一條RET指令。u調(diào)用一個(gè)過程的格式為:CALL 過程名42第四章u過程名三種屬性: 段屬性:該過程所在段的段基址,總在CS中。 偏移地址屬性:指該過程所在地址與所在段首地址之間偏移字節(jié)數(shù)。 距離屬性:指過程可轉(zhuǎn)移的距離。 NEAR:實(shí)現(xiàn)段內(nèi)調(diào)用,默認(rèn)為NEAR。 FAR: 實(shí)現(xiàn)段間調(diào)用。 43第四章六、程序開始和結(jié)束語句(ORG,END)uORG格式:ORG 表達(dá)式功能:給匯編程序設(shè)置位置指針,指定下

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論