匯編語言程序設計課件8_第1頁
匯編語言程序設計課件8_第2頁
匯編語言程序設計課件8_第3頁
匯編語言程序設計課件8_第4頁
匯編語言程序設計課件8_第5頁
已閱讀5頁,還剩71頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1

匯編語言程序設計

2§4.1匯編語言源程序了解:計算機的三種語言源程序的結構匯編語言語句格式3一、計算機設計語言機器語言匯編語言高級語言面向機器的語言機器語言匯編語言高級語言4匯編程序匯編語言源程序用助記符編寫源程序的編譯程序匯編程序匯編語言源程序機器語言目標程序5匯編語言程序設計與執(zhí)行過程輸入?yún)R編語言源程序源文件.ASM匯編(編譯)目標文件.OBJ鏈接可執(zhí)行文件.EXE調(diào)試最終程序6二、匯編語言源程序結構數(shù)據(jù)段名SEGMENT…數(shù)據(jù)段名ENDS附加段名SEGMENT…附加段名ENDS堆棧段名SEGMENT

…堆棧段名ENDS代碼段名SEGMENT

…代碼段名ENDS7三、匯編語言語句類型指令性語句指示性語句CPU執(zhí)行的語句,能夠生成目標代碼CPU不執(zhí)行,而由匯編程序執(zhí)行的語句,不生成目標代碼8四、匯編語言語句格式指令性語句:[標號:][前綴]助記符[操作數(shù)],[操作數(shù)][;注釋]指令的符號地址,標號后要有冒號操作碼注釋前加分號9中斷DOS子功能調(diào)用1號子功能:從鍵盤輸入一個字符,把它的ASCII

碼放到AL中D1.asm例:從鍵盤輸入字符‘A’codesegmentAssumecs:codeStart:movah,01hint21hCodeendsEndstart10指示性語句格式[名字]偽指令助記符操作數(shù)[,操作數(shù),…][;注釋]變量的符號地址,其后不加冒號指示性語句中至少有一個操作數(shù)11例:顯示輸入字符1—9和A、BAssumecs:code,ds:dataDatasegmentAdb‘123456789’,‘A’,‘B’,‘$’DataendsCodesegmentStart:movax,data

mov

ds,ax

movdx,0

movah,9int21hmovah,4chint21hCodeendsEndstart實例d9.asm等價于LEAdx,[A]12標號、名字標號后有冒號,在指令性語句前;名字后不加冒號,在指示性語句前。英文字母、數(shù)字及專用字符組成,最大長度不能超過31個,且不能由數(shù)字打頭,不能用保留字(如寄存器名,指令助記符,偽指令)。 13操作碼指令碼命令CPU要完成的操作偽指令助記符指示匯編程序要完成的操作。用來定義變量,分配存儲單元,指示程序開始和結束等14注釋用分號作為注釋的開始;用于說明程序或語句的功能,以便于閱讀和理解15操作數(shù)寄存器存儲器單元常量變量或標號表達式16常量數(shù)字常量字符串常量:用引號引起的字符或字符串例:‘A’,’ABCD’匯編時被譯成對應的ASCII碼41H,42H,43H,44H17變量代表內(nèi)存中的數(shù)據(jù)區(qū),程序中視為存儲器操作數(shù)18例:顯示輸入字符1—9和A、BAssumecs:code,ds:dataDatasegmentAdb‘123456789’,‘A’,‘B’,‘$’DataendsCodesegmentStart:movax,data

mov

ds,ax

movdx,0

movah,9int21hmovah,4chint21hCodeendsEndstart實例d9.asm等價于LEAdx,[A]19五、表達式算術運算邏輯運算關系運算取值運算和屬性運算其它運算20算術運算和邏輯運算符算術運算符+,-,*,/,MOD邏輯運算符AND,OR,NOT,XOR例:MOVAL,8AND4MOVAL,8+4-121關系運算符參與關系運算的必須是兩個數(shù)值關系不成立,結果為0;關系成立,結果為FFFFH。EQNELTGTLEGEMOVAX,3EQ4

等價于MOV

AX,022取值運算符取值運算符

用于分析存儲器操作數(shù)的屬性23取值運算符OFFSET取得其后變量或標號的偏移地址SEG取得其后變量或標號的段地址TYPE取變量的類型LENGTH取所定義存儲區(qū)的長度SIZE取所定義存儲區(qū)的字節(jié)數(shù)24取值運算符例

MOVAX,SEGDATAMOVDS,AX

MOVBX,OFFSETDATA

LEABX,DATA等價于25取值運算符例若BUFFER存儲區(qū)是用如下偽指令定義:

BUFFERDW200DUP(0)

則:

TYPE BUFFER 等于2

LENGTHBUFFER 等于200

SIZEBUFFER 等于400

例:MOVCX,LENGTHBUFFER

d8.asm

26屬性運算符屬性運算符PTR

用于指定其后存儲器操作數(shù)的類型例:

MOVBYTRPTR[BX],12H27其它運算符方括號:[]方括號中內(nèi)容為操作數(shù)的偏移地址段重設符段寄存器名:[]用于修改默認的段基地址28§4.2偽指令掌握:偽指令的格式及實現(xiàn)的操作偽指令的應用29偽指令由匯編程序執(zhí)行的“指令系統(tǒng)”用于定義變量、分配存儲區(qū)、定義邏輯段、指示程序開始和結束等30常用偽指令數(shù)據(jù)定義偽指令符號定義偽指令段定義偽指令過程定義偽指令結束偽指令31一、數(shù)據(jù)定義偽指令用于定義數(shù)據(jù)區(qū)中變量的類型格式:變量名偽指令助記符操作數(shù),…;注釋某些情況下可省略可選32例:顯示輸入字符1—9和A、BAssumecs:code,ds:dataDatasegmentAdb‘123456789’,‘A’,‘B’,‘$’DataendsCodesegmentStart:movax,data

mov

ds,ax

movdx,0

movah,9int21hmovah,4chint21hCodeendsEndstart實例d9.asm等價于LEAdx,[A]33數(shù)據(jù)定義偽指令偽指令助記符DB定義的變量為字節(jié)型DW定義的變量為字類型(雙字節(jié))DD定義的變量為雙字型(4字節(jié))DQ定義的變量為4字型(8字節(jié))DT定義的變量為10字節(jié)型34數(shù)據(jù)定義偽指令例DATA1DB11H,22H,33H,44HDATA2DW11H,22H,3344HDATA3DD11H*2,22H,33445566H以上變量在內(nèi)存中的存放形式35數(shù)據(jù)定義偽指令偽指令的性質決定所定義變量的屬性;定義字符串必須用DB偽指令例:

DATA1DB‘ABCD’,66H‘A’‘B’‘C’‘D’41H42H43H44H66H36重復操作符為一個數(shù)據(jù)區(qū)的各單元設置相同的初值格式:[變量名]偽指令助記符nDUP(初值,…)例:

DW20DUP(0)DB3DUP(22H,11H,?)隨機數(shù)37用?預留存儲空間MEM1DB34H,’A’,?,?,?MEM2DW20DUP(?)預留40個字節(jié)單元38重復操作符可以嵌套使用BufferDB2,2DUP(1,2DUP(2,3))020202020201010303030339二、符號定義偽指令格式:符號名EQU 表達式操作:用符號名取代后邊的表達式,不可重新定義例:

CONSTANT EQU 100

VAREQU30H+99HEQU說明的表達式不占用內(nèi)存空間40三、段定義偽指令說段的起始和結束;說明不同程序模塊中同類邏輯段之間的聯(lián)系形態(tài)41段定義偽指令段名SEGMENT[定位類型][組合類型][’類別’]

┇段名ENDS說明邏輯段的起點說明不同模塊中同名段的組和連接方式42段定義偽指令例DATASEGMENTPUBLIC‘CODE’MEM1DB11H,22HDATAENDS43四、設定段寄存器偽指令說明所定義邏輯段的性質格式

ASSUME段寄存器名:段名[,段寄存器名:段名,…]44五、結束偽指令表示源程序結束格式:

END[標號]45一個完整源程序結構例DSEGSEGMENTDATA1DB1,2,DATA2DW1234HDSEGENDSESEGSEGMENTDB20DUP(?)ESEGENDSSSEGSEGMENTSTACK‘STACK’DB200DUP(?)SSEGENDS46一個完整源程序結構例

CSEGSEGMENTASSUMECS:CSEG,DS:DSEG,ES:ESEG,SS:SSEG

START:MOVAX,DSEGMOVDS,AXMOVAX,ESEGMOVES,AXMOVAX,SSEGMOVSS,AX┇

CSEGENDS

ENDSTART源程序代碼47六、過程定義偽指令用于定義一個過程體格式:過程名PROC[NEAR/FAR]

RET

過程名ENDPJ4.ASMP166例48七、宏命令偽指令宏命令--------源程序中由匯編程序識別的具有獨立功能的一段程序代碼格式:宏命令名MACRO<形式參數(shù)>

┇ENDM宏體P167例49宏指令舉例宏定義PIMACROX1,X2,X3MOVAX,X1ADDAX,X2MOVX3,AXENDM宏調(diào)用PI20H,35H,44H50宏指令和子程序的區(qū)別****子程序****加載宏定義加載宏定義加載宏定義加載宏定義51八、其它偽指令ORG-------設定段內(nèi)程序代碼或變量的起始偏移地址格式:

ORG表達式

EVEN-------設定段內(nèi)程序代碼或變量的起始偏移地址為偶數(shù)地址計算值為非負常數(shù)52格式:org偏移地址

even

ex:DATASEGMENTORG100HDB‘program’EVENDW10,20,30,40,50DATAENDS53其它偽指令NAME-------為目標程序設定一個名字格式:

NAME模塊名TITLE-------為程序指定打印標題格式:

TITLE標題名可以缺省P169例54§4.3功能調(diào)用DOS功能調(diào)用高級調(diào)用,操作系統(tǒng)提供BIOS功能調(diào)用低級調(diào)用55DOS

功能調(diào)用包含多個子功能的功能包,用軟中斷指令調(diào)用,中斷類型碼固定為21H;各子功能采用功能號來區(qū)分。附錄C56DOS

功能調(diào)用設備管理目錄管理文件管理其它57DOS

功能調(diào)用調(diào)用格式:

MOVAH,功能號<置相應參數(shù)>

INT21H581.從鍵盤輸入單字符并顯示調(diào)用方法:

MOVAH,01INT21H輸入的字符在AL中59單字符輸入例GET_KEY:MOV AH,1

INT 21H

CMP AL,’Y’ JZ YES CMP AL,’N’ JZ NO JNZ GET_KEY

YES:┇ NO: ┇交互式應答程序602.單字符顯示輸出AH功能號O2HDL待輸出字符INT21H61單字符顯示輸出例MOV AH,02MOV DL,41HINT 21H 執(zhí)行結果:屏幕顯示A623.字符串輸出顯示AH功能號O9HDS:DX待輸出字符串的偏移地址INT21H63字符串輸出顯示被顯示的字符串必須以‘$’結束,且所顯示的內(nèi)容不應出現(xiàn)非可見的ASCII碼64字符串輸出顯示例DATASEGMENTMESS1DB‘InputString:’0DH,0AH,’$’DATAENDSCODESEGMENT

┇MOV AH,09MOVax,dataMOVds,axMOV DX,OFFSETMESS1INT 21H

┇654.從鍵盤輸入字符串AH功能號OAHDS:DX字符串在內(nèi)存中的存放地址INT21H66定義字符緩沖區(qū)用戶自定義緩沖區(qū)格式:0DHN1N2整個緩沖區(qū)緩沖區(qū)長度(最大鍵入字符數(shù))實際鍵入字符數(shù)67輸入字符串程序段DAT1DB20,?,18DUP(?)

LEADX,DAT1MOVAH,0AHINT21H在數(shù)據(jù)段中定義68例:從鍵盤輸入1—9存于緩沖區(qū)Assumecs:code,ds:dataDatasegment

Bufdb11,?,9dup(?)DataendsCodesegmentstart:movax,data

mov

ds,axleadx,buf

movah,10

Int21H

Movah,4c

溫馨提示

  • 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

提交評論