第八次課-匯編語言程序設計基礎(1)_第1頁
第八次課-匯編語言程序設計基礎(1)_第2頁
第八次課-匯編語言程序設計基礎(1)_第3頁
第八次課-匯編語言程序設計基礎(1)_第4頁
第八次課-匯編語言程序設計基礎(1)_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、第四章 匯編語言程序設計基礎4.1 概述在前面的課程中以匯編指令的形式介紹了8080/88 的指令系統(tǒng),這次課對匯編語言程序設計的基本方法進行介紹。所謂程序實際上就是指令的有序排列,而組成程序的指令在微機中是以機器碼(二進制)的形式存在的,我們用匯編語言編寫的程序需要經(jīng)過匯編后才能成為CPU 可以識別的目標程序。實現(xiàn)匯編的方法:手工匯編、機器匯編,機器匯編是利用微機生產(chǎn)廠家提供的匯編程序對用匯編寫的匯編語言源程序進行翻譯的過程。為了利用匯編程序對自己編寫的匯編語言程序源程序進行匯編,要求匯編語言源程序必須符合一定的(規(guī)范) 語法規(guī)則。 比如 段的定義、標號的書寫等。1、匯編語句的格式在匯編程序

2、中,與高級語言程序一樣是由一條一條的語句組成的,而在匯編語言程序中,語句分為兩種:指令性語句:是指令系統(tǒng)中指令,在程序執(zhí)行過程中產(chǎn)生操作的指令。指示性語句:是為了使匯編程序能夠對匯編語言源程序進行正確匯編,對匯編源程序中的符號地址、變量、段等進行定義、說明的語句,這些語句在最終的目標程序中不產(chǎn)生代碼。指令性語句的格式:標號字段:操作碼字段操作數(shù)字段;注釋字段其中:標號字段:(1) 不能以數(shù)字開頭(2) 最大長度 31個字符(3) 不允許使用保留字(指令助記符、偽指令名、存儲器名等)(4) 以冒號結束操作碼字段:指令系統(tǒng)中的操作碼操作數(shù)字段:兩個操作數(shù)間用逗號分隔指令中的常數(shù)可以用各種數(shù)制給出:

3、11110000B10D1111H 當用十六進制數(shù)時,如果最高位為字母,前面需加零注釋字段:對語句進行注解,方便閱讀,不產(chǎn)生機器碼,用分號開始指示性語句格式與指令性指令在格式上基本相同包括:標號段(變量名段)操作碼段操作數(shù)段; 注釋段標號段 以空格結束,命令段是偽指令其它與指令性指令相同2、匯編語句中常數(shù)、變量、標號、表達式在匯編語句中操作數(shù)可以是存儲器的地址、立即數(shù)(常數(shù))、寄存器名甚至還可以用一個表達式予以表示。1)常數(shù)(數(shù)值常數(shù)、字符常數(shù))指令中的常數(shù)可以用各種數(shù)制給出:11110000B10D1111H AB =4142H2)變量與標號(內(nèi)存單元的符號地址)變量:一般指一個內(nèi)存單元,分

4、為:字節(jié)型變量、字形變量、雙字型變量、4、 8、10 字節(jié)類型等一旦你在你的程序中定義了一個變量,這個變量就可以出現(xiàn)在你的程序的指令中,這個變量有以下屬性:段屬性:該數(shù)據(jù)塊的首地址在內(nèi)存單元所在段的段值偏移屬性:該地址在段中的偏移地址(有效地址)類型屬性:其中存放數(shù)據(jù)的數(shù)據(jù)類型:字節(jié)、字型、雙字型長度屬性:以該標號為起始地址存放數(shù)據(jù)塊的數(shù)據(jù)個數(shù)尺寸屬性:該數(shù)據(jù)塊所包括的字節(jié)數(shù)例DAT1DB20H, 30H,40HDAT2DW2000H,3000H標號 :放在一條指令前表示,表示該指令在內(nèi)存中的存放地址,程序中的每個標號有如下屬性:段屬性:該指令所在的短偏移屬性:該指令在段中的偏移地址類型屬性:

5、段內(nèi)使用(NEAR ) 段間使用(FAR)3)表達式無論指示性指令或指令性指令均可以用一個表達式來表示操作數(shù),所謂表達式由運算符號和運算對象組成,運算符號可分五類:算術運算符、邏輯運算符、關系運算符、分析運算符、合成運算符表達式一般是由運算符和操作數(shù)組成,其中運算符主要包括:算數(shù)運算符、邏輯運算符、關系運算符、分析運算符、綜合運算符五種,以下分別進行介紹:1) 算術運算符常用的算術運算符包括:+、 -、 *、 / 、 MOD (取余運算符)例: MOV AL , 8+5 A MOD B2) 邏輯運算符常用的邏輯運算符包括:AND 、 OR、 NOT、 XOR例 MOV DX, ABC AND

6、0F0H3) 關系運算符常用的關系運算符包括:QE( =) 、 NE( ) 、 LT( ) 、 GT()、LE( )、 GE( )用關系運算符組成的表達式的結果只有兩種取值:0000H 或 0FFFFH 00H 或 FFH例: MOV AX, DAT QE 1000H當表達式成立時:DAT QE 1000H=0FFFFH當表達式部成立時:DAT QE 1000H=0000H4) 分析運算符常用的分析運算符包括:OFFSET、 SEG、 TYPE 、 SIZE、 LENGTH格式運算符變量名在匯編程序中一個標號一般用于表示一個數(shù)據(jù)塊的起始地址或一條指令在內(nèi)存單元的存放地址,當用標號表示一個數(shù)據(jù)塊

7、的起始地址時,該標號具有一些屬性:例: NEXT: MOV AL, 80HKKK DW 2000H,3000H,4000H段屬性:該數(shù)據(jù)塊的首地址在內(nèi)存單元所在段的段值偏移屬性:該地址在段中的偏移地址(有效地址)類型屬性:其中存放數(shù)據(jù)的數(shù)據(jù)類型:字節(jié)、字型、雙字型長度屬性:以該標號為起始地址存放數(shù)據(jù)塊的數(shù)據(jù)個數(shù)尺寸屬性:該數(shù)據(jù)塊所包括的字節(jié)數(shù)分析運算符主要用于獲取標號的這些屬性,MOV AX, SEG KKKMOV SI, OFFSET KKKMOV AL , TYPE KKK (字節(jié)型:1 字型: 2 雙字型4)MOVCX, LENGTH KKKMOVBX, SIZE KKK5) 綜合運算符

8、綜合運算符主要用于對規(guī)定或修改存儲單元的數(shù)據(jù)類型:格式 類型 PTR 變量名/標號名/地址功能: 用于變量數(shù)據(jù)類型的定義/或修改,或標號類型的定義或修改KKK : DW 2000HMOV WORD PTR KKK , 10JMP NEAR/FAR PTR L14 2 偽指令在 ASM-86 偽指令系統(tǒng)中有20 多條偽指令,主要介紹其中的16 條:1) 標號 / 常數(shù) / 變量 賦值偽指令1 格式:標號EQU 表達式功能: 將表達式的值賦給標號該偽指令可以出現(xiàn)在匯編程序的任何地方例: ABC EQU 2200XY EQU AB WPT EQU WORD PRTMOV AX, ABCMOV WPT

9、 SI , 10MOV AX, XY某一標號一旦被賦值在程序中出現(xiàn)該標號的地方就像其表達式的值一樣,不能對同一個標 號用 EQU 進行二次賦值。2 * 等號偽指令各式:<符號名> <表達式>“ ”偽操作命令與EQU 具有相同的功能,但它定義的符號允許重新定義。3 * LABELLABEL 偽操作命令為當前存儲單元定義一個指定類型的變量或標號。語句格式如下:<變量名或標號> LABEL < 類型2、 定義存儲單元偽指令(變量定義為指令)格式:標號偽指令 表達式功能:對以標號開始的內(nèi)存單元的數(shù)據(jù)類型進行定義和賦值其中的偽指令可以是DB 、 DW、 DD、

10、DQ( 4 字) 、 DT( 10 字)例:ABC DB 80H, 30H, 20HDAT1 DW 2000H, 3000H, 4000HADC DW AB , C,D TABLE DW 10 DUP( 10H)DAT2 DB 10 DUP (?)DUP(Duplication) 是重復數(shù)據(jù)定義操作符。<n> DUP <( 表達式 )>其中圓括號內(nèi)的表達式是重復的內(nèi)容,n 是重復次數(shù)。例如:TAB1 DB 10H DUP (?)3、存儲單元類型定義偽指令BYTE WORD DWORD一般與 PTR 連用指定存儲單元的數(shù)據(jù)類型MOV WORD PTRSI , 10H4、段

11、定義偽指令由于 8086 對于內(nèi)存的管理采用的是分段管理的原則,在匯編程序中要對不同的段進行定義,主要是向匯編程序說明在所編寫的匯編程序源程序的不同段。用于進行段定義的偽指令有4條SEGMENT ENDS ASSUME ORG其中 前兩條 用于進行段定義段名 SEGMENT段名 ENDS關于段的定義:( 1) 對于數(shù)據(jù)段和擴展段的定義1 將被處理的數(shù)據(jù)存放到內(nèi)存單元中,并給這些數(shù)據(jù)一個符號地址(標號)2 * 給處理結果預留一些內(nèi)存單元(注意數(shù)據(jù)類型)例 DAT DB 30H, 40H。 。 。 。 。RESULT DB 10DUP (?)當匯編程序對該段匯編時一方面給標號分配一個具體的地址,同

12、時按照指令對內(nèi)存單元進行初始化( 2) 關于堆棧段的定義* 在內(nèi)存單元中開辟一個內(nèi)存快作為堆棧區(qū),并指明堆棧塊的棧頂( 3) 關于代碼段的定義對所定義的段進行說明原段寄存器內(nèi)容的保護()主要是為了使系統(tǒng)從用戶程序返回時,恢復原來的段地址,如果不需要可以不寫,尤其對于一些簡單程序。PUSH DSMOV AX , 0000HPUSH AX對給除代碼段外的其它段寄存器的內(nèi)容進行指定和堆棧指針進行賦值程序功能的實現(xiàn)RETXXX END例: DAT1 SEGMEMNTABCDW 30H, 40HTABLEDB ?、?、?ENDS DATDAT2 SEGMENTTABLE1 DB 20H , 40HTAB

13、LE2 DW 3000H , 4000H, 5000HDAT2 ENDSDAT3 SEGMENTST DB 100 DUP (?)TOP EQU LENGTH STDAT3 ENDSCOD SEGMENTMAIN PROCfarASSUMECS:COD, DS: DAT1 , ES:START: PUSHDSMOVAX,0000HPUSHAXMOVAX,SEG DAT1MOVDS,AXPUSHESMOVAX,0000HPUSHAXMOVAX,SEG DAT2MOVES,AXPUSHSSMOVAX,0000HPUSHAXDAT2, SS: DAT3MOV AX, SEG DAT3MOV SS,

14、AXRETCOD NEDSCODSEG ENDSMAIN END注意:以上程序結構形式不是唯一的,但是一種標準的,還有其它形式。ASSUMEMT 偽指令規(guī)定必須在代碼段中緊跟在 SEGMEMT 后,功能:向匯編程序說明各定義的段分別為什么段。注意:在進行段定義時各段的除代碼段外各段的定義是可選的,即除非程序中涉及到該段的操作,否則可以不定義,例如對于擴展段。對于堆棧段的定義尤其是如此,在程序中即使用到對于堆棧段的操作,堆棧段也可以不定義,這時匯編程序可能會提示出錯信息,但可以不理會,因為如果用戶程序缺省堆棧段德定義時,操作系統(tǒng)會給自動將堆棧段與數(shù)據(jù)段分在同一地址范圍,且使IP=FFFFH 。O

15、RG 偽指令格式: ORG nn功能: 用于向匯編程序說明下根的匯編指令在程序段中的偏移地址例 ORG 2000HSTAR: MOV AX , 2000H5、過程定義偽指令所謂過程實際上就是一個子程序,在匯編程序中對于子程序的定義有專門的偽指令PROC ENDP NEAR FAR過程定義:過程名PROC ( NEAR/FAR )。RET過程名 ENDP其中 NEAR/FAR 用于確定該子程序為段內(nèi)調(diào)用自程序還是段間調(diào)用子程序,如果定義為NEAR 說明該子程序只能被喻該子程序同段的主程序可以調(diào)用,如果定義為FAR 則調(diào)用該子程序的主程序可以不在同一段中。6 程序結束偽指令END (標號)可省其中

16、標號可省,一般為代碼段第一條指令性指令的標號功能:通知匯編程序匯編源程序結束。例: 編寫一個匯編語言源程序將DAT1 和 DAT2 兩個單元內(nèi)容求和結果存放在標號為TABLE開始的單元中在編寫這個程序時DATSEG SEGMENTDAT1 DB 30HDAT2 DB 60HTABLE DW 0000HDATSEG ENDSSTASEG SEGMENGST DB 100 DUP (?)TOP EQU LENGTH STSTASEG ENDSCODSEG SEGMENTMAIN PROC farASSUME CS : CODSEG, DS: DATSEGMAIN :PUSH DSMOVAX , 0

17、000HPUSHAXMOVAX , SEG DAT1MOVDS, AXPUSH SSSUB AX , AXPUSH AXMOV AX , STASEGMOV SS, AXMOV AX , TOPMOV IP , AX ;系統(tǒng)初始化完成MOV SI, OFFSET DAT1MOV AL , OFFSET DATADD AL , SIMOV AH , 00HADC AH , 00HMOV OFFSET RESULT , AXRET;返回操作系統(tǒng)CODSEG ENDSMAIN END例:編寫一個程序,將十個8 位二進制數(shù)不帶符號數(shù)變成組合BCD 碼,結果存放內(nèi)存中。1、 分析算法( 1 )二進制數(shù)到

18、BCD碼的轉換算法:N/100 商百位余數(shù)/10-商十位余數(shù) 個位( 2)程序結構在匯編語言程序中與高級語言相同,有以下幾種常用的程序結構:順序結構,循環(huán)結構、分支結構、主-子程序結構當然在一個完整的程序中通常是這幾種典型結構的混合。2、 畫流程圖子程序功能:將內(nèi)存DS: SI 所指單元的8 位二進制數(shù)變成組合BCD 碼,存到內(nèi)存由DS: DI 所指定的開始單元。入口參數(shù):SI 二進制數(shù)地址11出口參數(shù):DI=DI+2主程序:3、 編程DATSEG SEGMENTDATDB 10H , 0ABH , 4FH, 。 。 。 。 。RESULTDW 10 DUP ( 0)DATSEG ENDSCODSEG SEGMENTMAIN PROC farASSUME CS:CODSEG, DS:DA TSEGSTART: PUSH DSSUBAX, AXPUSHAXMOVAX, DA TSEGMOVDS,AXMOVMOVSI, OFFSET DATDI,OFFSET RESULTMOVCX, 10NEXT: CALLSONPROCINC SIDEC CXJNZ NEXTRETSONPROC PROC NEAR保護現(xiàn)場 PUSH CXM

溫馨提示

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

評論

0/150

提交評論