匯編語言程序結(jié)構(gòu)_第1頁
匯編語言程序結(jié)構(gòu)_第2頁
匯編語言程序結(jié)構(gòu)_第3頁
匯編語言程序結(jié)構(gòu)_第4頁
匯編語言程序結(jié)構(gòu)_第5頁
已閱讀5頁,還剩45頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、匯編語言程序設計劉輝 王勇 徐建平 編著清華大學出版社清華大學出版社參考資料參考資料1.IBM-PC 1.IBM-PC 匯編語言程序設計匯編語言程序設計 ( (第第2 2版)版)沈美明沈美明 溫冬嬋溫冬嬋 清華大學出版社清華大學出版社2.2.匯編語言匯編語言 王爽王爽 編著編著 清華大學出版社清華大學出版社計算機語言的發(fā)展計算機語言的發(fā)展 機器語言機器語言FORTRANFORTRANBASICBASICCOBOLCOBOLPASCALPASCALC/C+C/C+JAVAJAVA.匯編語言匯編語言高級語言高級語言計算機語言的發(fā)展經(jīng)歷了機器語言、匯編語言到高級語言的發(fā)展過程。機器語言使用0,1書寫

2、的二進制代碼,難于書寫和糾錯;匯編語言使用接近于人類的語言對計算機的硬件直接發(fā)號施令,讓內(nèi)部的各個部件直接進行各種運算;而高級語言程序的書寫更簡單,但是各個函數(shù)之間的參數(shù)傳遞比較復雜,邏輯結(jié)構(gòu)性強。匯編語言的特點匯編語言的特點 面向機器的低級語言,通常是為特定的計算面向機器的低級語言,通常是為特定的計算 機或計算機系列機或計算機系列專門設計的。專門設計的。 保持了機器語言的優(yōu)點,具有直接和簡捷保持了機器語言的優(yōu)點,具有直接和簡捷 的特點。的特點。 可有效地訪問、控制計算機的各種硬件設備可有效地訪問、控制計算機的各種硬件設備, , 如磁盤、存儲器、如磁盤、存儲器、CPUCPU、I/OI/O端口等

3、。端口等。 目標代碼簡短,占用內(nèi)存少,執(zhí)行速度快,目標代碼簡短,占用內(nèi)存少,執(zhí)行速度快, 是高效的程序設計語言。是高效的程序設計語言。 經(jīng)常與高級語言配合使用,應用十分廣泛經(jīng)常與高級語言配合使用,應用十分廣泛。1.1 匯編語言程序的結(jié)構(gòu)形式匯編語言程序的結(jié)構(gòu)形式1.2 匯編語言的各種偽指令匯編語言的各種偽指令1.3 masm的上機操作步驟的上機操作步驟第第1章章 匯編語言程序基本知識匯編語言程序基本知識1.1 匯編語言程序的結(jié)構(gòu)形式匯編語言程序的結(jié)構(gòu)形式#include stdafx.h #include stdio.h int main(int argc, char* argv) /程序從程

4、序從 主函數(shù)開始主函數(shù)開始 int a,b,c; /定義變量定義變量 a=1; b=2; /直接給變量賦值直接給變量賦值 c=a+b; /計算累加結(jié)果計算累加結(jié)果 printf(“c=%dn”,c); /輸出結(jié)果輸出結(jié)果 return 0; 編譯后的目標文編譯后的目標文件達到件達到3.59KBdata data segment segment ; ;定義數(shù)據(jù)段定義數(shù)據(jù)段 a a db db ? ;? ;定義變量定義變量 b b db ?db ? c c db ?db ? string string db c=$db c=$data endsdata endscode segment code

5、segment ;定義代碼段main main proc proc far far ;主程序從此開始 assume assume cs:codecs:code, , ds:datads:data, , es:dataes:datastartstart: : push push dsds sub sub ax,axax,ax匯編后的目匯編后的目標文件只有標文件只有208208字節(jié)字節(jié) push ax push ax movmov ax,dataax,data movmov ds,axds,ax ; ;數(shù)據(jù)段的地址裝入專用寄存器數(shù)據(jù)段的地址裝入專用寄存器 movmov es,axes,ax mov

6、mov a,1 ; a,1 ;給變量賦值給變量賦值 movmov b,2 b,2 movmov al,aal,a add add al,bal,b ;a+ba+b movmov c,alc,al ; ;運算結(jié)果存入運算結(jié)果存入c c變量中變量中 lea lea dx,stringdx,string movmov ah,09 ah,09 intint 21h ; 21h ;輸出字符串輸出字符串a(chǎn)dd c,30h add c,30h ; ;整數(shù)轉(zhuǎn)化為字符,因為匯編輸出都是字符整數(shù)轉(zhuǎn)化為字符,因為匯編輸出都是字符movmov dl,cdl,cmovmov ah,2 ah,2intint 21h 21

7、h ; ;輸出輸出dldl中字符中字符 , ,這是這是2121號中斷的功能調(diào)用號中斷的功能調(diào)用movmov dl,0ah dl,0ahintint 21h ; 21h ;換行換行movmov dl,0dh dl,0dhintint 21h 21h ;回車;回車retretmain main endpendpcode endscode ends end start end start匯編語言與高級語言的比較 高級語言書寫簡單,不需知道硬件的詳細操作過程,易于掌握 匯編語言需要程序員定義變量的存放位置,直接對硬件進行編程,需要對硬件進行詳細的設計,所以有一定的難度。匯編語言的應用匯編語言的應用系統(tǒng)

8、程序、效率代碼、系統(tǒng)程序、效率代碼、I/OI/O驅(qū)動程序驅(qū)動程序70%70%以上的系統(tǒng)軟件是用匯編語言編寫的。以上的系統(tǒng)軟件是用匯編語言編寫的。 某些快速處理、位處理、訪問硬件設備等某些快速處理、位處理、訪問硬件設備等 高效程序是用匯編語言編寫的。高效程序是用匯編語言編寫的。 高級繪圖程序、視頻游戲程序一般是用匯高級繪圖程序、視頻游戲程序一般是用匯 編語言編寫的。編語言編寫的。例例2. 2. 在屏幕上顯示字符串在屏幕上顯示字符串”This is an ”This is an assembly language program!”assembly language program!”題目分析:a

9、. 字符串應存放在一個存儲單元中,也即一個變量中,這要在數(shù)據(jù)區(qū)中加以定義b. 在代碼段中,首先把程序中用到的各個段與相應的寄存器名對應起來,這要用到assume偽操作c. 調(diào)用dos中斷顯示字符串,中斷執(zhí)行前先做顯示的準備操作:數(shù)據(jù)段的地址存入ds寄存器;從數(shù)據(jù)區(qū)的存儲單元中取出要顯示的字符串的存放地址存入dx寄存器;執(zhí)行中斷操作,顯示DS:DX中的內(nèi)容匯編程序如下:;ex102.asm display a string data segment data segment ;定義數(shù)據(jù)段 strstr db This is an assembly db This is an assembly l

10、anguage program!,$,13,10 language program!,$,13,10 ;在str存儲單元中的字符串內(nèi)容data endsdata endscode segment code segment ;定義代碼段main proc far main proc far ;主程序從此開始 assume assume cs:code,ds:datacs:code,ds:data ;指派程序中實際定義的各個段與對應的寄存器的聯(lián)系start: start: ; ;語句標號語句標號 push push dsds ;保護原有的數(shù)據(jù)段內(nèi)容到堆棧段中 sub sub ax,axax,ax

11、;存儲一個0值,表示新程序的數(shù)據(jù)開始存放 push ax push ax movmov ax,dataax,data ;先把數(shù)據(jù)段的地址臨時存入ax寄存器中 movmov ds,axds,ax ;再把地址存入數(shù)據(jù)段寄存器中 lea lea dx,strdx,str ;取出要顯示的字符串的偏移地址存入dx寄存器 movmov ah,09h ah,09h intint 21h 21h ;調(diào)用dos中斷,顯示DS:DX中的內(nèi)容exit: ;exit: ;主要功能執(zhí)行完畢,返回主要功能執(zhí)行完畢,返回dosdos界面界面 movmov ax,4c00h ax,4c00h intint 21h 21hma

12、in main endpendp ;主程序到此結(jié)束 code ends code ends ;代碼段到此結(jié)束 end start end start ;匯編程序到此結(jié)束,與前面的start相對應例例3. 求兩個數(shù)中的最大值求兩個數(shù)中的最大值題目分析:題目分析:a. 現(xiàn)在數(shù)據(jù)區(qū)中定義兩個變量并賦值現(xiàn)在數(shù)據(jù)區(qū)中定義兩個變量并賦值b.在程序中比較這兩個變量的大小,在程序中比較這兩個變量的大小,把較大的值存放在存儲單元把較大的值存放在存儲單元max中中程序如下:程序如下:; ;簡短模式書寫的程序簡短模式書寫的程序.MODEL TINY .MODEL TINY ;定義程序模型.DATA .DATA ;定

13、義數(shù)據(jù)段 X DB -8 X DB -8 ;定義變量名稱及具體數(shù)值 Y DB 10 Y DB 10 MAX DB ? MAX DB ? ;只分配存儲空間,沒有值.CODE.CODESTARTUP:STARTUP: MOV AX,DATA MOV AX,DATA ;預定義符data可以取出數(shù)據(jù)段的段名 MOV DS,AX MOV DS,AX MOV AL,X MOV AL,X ;把X的值預存入AX寄存器的低8位AL中 MOV CL,Y MOV CL,Y ;把Y的值預存入CX寄存器的低8位CL中 CMP AL,CL CMP AL,CL ;比較AL和CL寄存器的數(shù)值大小 JGE BIG JGE BI

14、G ;如果AL=CL,則跳轉(zhuǎn)到BIG標號處;否則,即ALCL,順序執(zhí)行下述語句 MOV MAX,CL MOV MAX,CL ;把較大值CL存入MAX單元中 JMP EXIT JMP EXIT BIG: BIG: MOV MAX,AL MOV MAX,AL ;把較大值AL存入MAX單元中 EXIT: EXIT: MOV AX,4C00H MOV AX,4C00H ;返回dos界面 INT 21H INT 21HEND STARTUPEND STARTUP通過上述一些例子,可以大致了解匯通過上述一些例子,可以大致了解匯編語言程序的構(gòu)成,了解程序的書寫編語言程序的構(gòu)成,了解程序的書寫形式,及常用的幾

15、個語句,后面分章形式,及常用的幾個語句,后面分章節(jié)詳細介紹匯編程序的結(jié)構(gòu)構(gòu)成及各節(jié)詳細介紹匯編程序的結(jié)構(gòu)構(gòu)成及各種指令格式種指令格式1.2 匯編語言的各種偽指令匯編語言的各種偽指令 1.2.1 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令 數(shù)據(jù)定義偽指令的用途是定義一個變量的類型,給變量賦初值,或僅僅給變量分配存儲單元 數(shù)據(jù)定義偽指令有DB、DW、DD、DF、DQ、DT 例1.4 數(shù)據(jù)定義偽操作的使用 DATA DB 1,2H EXPR DW 1,2 STR DB WELCOM! S1 DW AB S2 DD AB OFFAB DW S1存儲單元名稱存儲單元名稱內(nèi)存中的數(shù)據(jù)內(nèi)存中的數(shù)據(jù)內(nèi)存的地址內(nèi)存的地址DA

16、TA010100H020101HEXPR010102H000103H020104H000105HSTR57 W0106H45 E0107H4c L0108H43 C0109H4F O010AH4D M010BH21 !010CHS1S142 42 B B010DH010DH41 A010EHS242 B010FH41 A0110H0 0111H00112HOFFAB0D0113H010114HFILLERFILLERDB ?DB ?給字節(jié)變量給字節(jié)變量FILLER分配存儲單元,但不分配存儲單元,但不賦予特定的值賦予特定的值BUFFERDB 10 DUP(?)給變量BUFFER分配10個字節(jié)的存

17、儲空間,但不賦任何初值ZERODW 30 DUP(0)給變量ZERO分配一個數(shù)據(jù)區(qū),共30個字(即60字節(jié)),每個字的內(nèi)容均為零MASKDB 5 DUP(OK!)定義一個數(shù)據(jù)區(qū),其中有5個重復的字符串OK!ARRAYDB 100 DUP(3 DUP(8),6)將變量ARRAY定義為一個數(shù)據(jù)區(qū),其中包含重復100次的內(nèi)容:8,8,8,6,共占400個字節(jié)1.2.2 符號定義偽指令符號定義偽指令 常用的符號定義偽指令有EQU、(等號)和LABLE。 EQU偽指令將表達式的值賦予一個名字,以后可用這個名字來代替上述表達式CRCR EQU EQU 0DH 0DH ;常數(shù);常數(shù)A EQU ASCII_T

18、ABLE ;變量STR EQU 64*1024 ;數(shù)值表達式ADR EQU ES:BP+DI+5 ;地址表達式CBD EQU AAM;指令助記符1.2.3 段定義偽指令段定義偽指令 段定義偽指令的用途是在匯編語言源程序中定義邏輯段。常用的段定義偽指令有SEGMENT/ENDS和ASSUME等 。 1SEGMENT/ENDS 格式: 段名 SEGMENT 定位類型 組合類型 類別 段名 ENDS 2. ASSUME 格式:ASSUME 段寄存器名:段名,段寄存器名:段名, 例1.6 代碼段的定義舉例。 CODE SEGMENTASSUME CS:CODE,DS:DATA1,SS:STACKMOV

19、 AX,DATA1MOV DS,AX ;給DS賦值MOV AX,STACKMOV SS,AX ;給SS賦值 CODE ENDS 1.2.4 地址計數(shù)器與對準偽操作地址計數(shù)器與對準偽操作 1. 地址計數(shù)器地址計數(shù)器$ arr dw 1,2,$+4,3,4,$+6 則匯編后的存儲單元如下圖1.1所示:arrarr0101007400740000750200760000777c007800007903007a00007b04007c00007d82007e00007f2. ORG 偽操作偽操作 ORG 偽操作用來設置當前地址計數(shù)器的值,例如下述數(shù)據(jù)段的定義: 例1.7 ORG偽操作的使用舉例。 DA

20、TA SEGMENT ORG 100H VAL DW 345BH ;存儲單元VAL在DATA段中的偏移地址從100H開始 DATA ENDS3. EVEN偽操作偽操作 EVEN偽操作使下一個變量或指令開始于偶數(shù)地址。 例1.8 EVEN偽操作的使用舉例。 DATA SEGMENT EVEN VAL DW 345BH ;存儲單元VAL在DATA段中的偏移地址從偶數(shù)地址開始 DATA ENDS1.2.5 操作數(shù)偽操作操作數(shù)偽操作 1. 算術操作符算術操作符 算數(shù)操作符有+ 、-、 *、 / 和 MOD。MOD是指整除運算后取余數(shù) 例如:MOV dx,block +( 6 - 1)*2 2. 邏輯與

21、移位操作符邏輯與移位操作符 邏輯操作符有AND、OR、XOR、NOT,移位操作符有SHL和 SHR,詳見第3章。 3. 關系操作符關系操作符 關系操作符EQ(相等),NE(不等),LT(小于),GT(大于),LE(小于或等于),GE(大于或等于)。運算結(jié)果是邏輯值真或假。真用0FFFFH表示,假用0表示。 4. 數(shù)值回送操作符數(shù)值回送操作符 這些操作符把一些特征值或存儲器地址的一部分作為結(jié)果回送。 1)TYPE:返回變量的字節(jié)數(shù),如果變量為DB格式定義的,則返回1;若以DW定義,則返回2;DD為4,DQ為8,DT為10。 2)LENGTH :對于數(shù)據(jù)段中定義變量時使用DUP的情況,匯編程序回送

22、分配給該變量的單元數(shù),對于其它情況則回送1。 例1.9 定義 s1 dw 100 dup(?) 指令mov cx,length s1, 匯編后成為mov cx,100 3)SIZE : 回送分配給變量的字節(jié)數(shù),它等于LENGTH和TYPE 的乘積 例1.10 定義s1 dw 100 dup(?) 指令 mov cx,size s1 ,則匯編后成為mov cx, 200 4)OFFSET:回送變量或標號的偏移地址 例1.11 指令 mov bx,offset s1,匯編程序?qū)⒆兞縮1在數(shù)據(jù)段中的偏移地址回送給指令,該指令將這個偏移地址裝入BX寄存器。這條指令與指令LEA BX, s1 是等價的。

23、 5)SEG :回送變量或標號的段地址 例1.12 指令 MOV BX , SEG DATA ,把名字為DATA的段地址裝入BX寄存器5. 屬性操作符屬性操作符 1)PTR 格式為 type PTR expre ,用于建立一個符號地址,給已分配的存儲地址賦予另一個屬性,是該地址具有另一種屬性 例1.13 在數(shù)據(jù)段中定義 a db 1 在代碼段中有如下指令 MOV AX, WORD PTR a 則匯編程序把變量a 中的數(shù)據(jù)以word的形式裝入AX寄存器。 2)段跨越前綴:)段跨越前綴: 段跨越前綴用來指定段名稱,在計算地址時使用指定的段地址和偏移地址而不是使用默認的段地址。 例如指令“MOV AX,ES: BX + SI ”,把附加段中偏移地址為BX + SI 的存儲單

溫馨提示

  • 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

提交評論