版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
爐凹圖叵JLU回
第3章匯編語言程序設(shè)計彩.
—
3.1概述今
?指令:計算機完成某種操作的命令
?程序:完成某種功能的指令序列
?軟件:各種程序總稱
?機器代碼,匯編語言程序,匯編程序
?匯編語言程序建立步驟:
?(1)用編輯程序建立.ASM源文件
?(2)用LINK程序把.ASM文件轉(zhuǎn)換為OBJ文件
?(3)用LINK程序把.OBJ文件轉(zhuǎn)換為.EXE文件,
或用EXE2BIN程庫把.EXE文件轉(zhuǎn)換為.COM文件
?(4)在DOS下直接鍵入.EXE文件或.COM文件的
文件名就可運行該程序—」
3.2語句格式
■語句格式:[名字]操作在操作數(shù)1,操作數(shù)2;
1.名字
?一種符號地址
?組成:A~Z,a-z,0-9,專用符號?、.、M、-、$
?限制:①第一個字符不能為數(shù)字
②必須為第一個字符
③前31個字符有效
④不能為關(guān)鍵字
,類型:r標(biāo)號:指令符號地址
I變量:數(shù)據(jù)符號地址
2.操作符
?組成:CPU指令,偽指令,宏指令
3.操作效
?指定參與操作的數(shù)據(jù)、或數(shù)據(jù)所在單元地址
4.注釋
?說明程序、指令功能、增加程序可讀性
3.3偽指令
?功能:指示匯編程序完成規(guī)定的操作,如選擇處
理器,定義數(shù)據(jù),分配存儲器等。
廠iLI11m
一、程序開始與結(jié)束%
1.程序開始:可以用nnine.title給程序起名。七
?格式:NAMEmoduleimine
?匯編程序以模塊名作為模塊的名字,若未使用NAME,則可用
TITLE給程序指定標(biāo)題
?格式:TITLEtext
-文本在每一頁上打印出來,若沒有NAME,則text的前6個字符為
模塊名,text最多為60個字符.
?若未使用NAME、TITLE,則源文件名為模塊名。
2.程序結(jié)束:表示原程序結(jié)束,不可缺,源程序的最后一條語句。
?格式:ENI)[Libel]
-標(biāo)號指示程序開始執(zhí)行的起始地址,多個模塊連接,主程序用標(biāo)
號,其他程序不用,主程序缺省值為代碼段第一條指令。
3.MASRI6.0定義的入口點、出口點
?入口點:.STARUP;產(chǎn)生設(shè)置DS、SS、SP代碼,此時,END不
用標(biāo)號。
?出口點:.EXIT;返回操作系統(tǒng),常用值為0。
?例:.STARLTS
.EXIT0
END/L”一〃,,?,C”“,J
二、處理器選擇感
?功能:選擇對應(yīng)的指令集、也即對應(yīng)的匯編執(zhí)行語句集
-放在程序最前面
?缺省值為.8086
?此類指令主要有:
?.8086選擇8086指令系統(tǒng)
?.286選擇80286指令系統(tǒng)
-.286P選擇保護方式下80286指令系統(tǒng)
-.386選擇80386指令系統(tǒng)
-.386P選擇保護方式下80386指令系統(tǒng)
V.486選擇80486指令系統(tǒng)
?.486P選擇保護方式下80486指令系統(tǒng)
,.586選擇Pentium指令系統(tǒng)
-.586P選擇保護方式下Pentium指令系統(tǒng)
三、段定義
4
?段定義:確定代碼組織與數(shù)據(jù)存儲的方式
?2種:完整的段定義和簡化的段定義
(MASM5.0以上)
?完整的段定義包括:
(1)segment和end段定義
(2)ASSUME段分配
(3)GROUP段組定義
segment和end段定義(1)
_______-A
?格式:/
[段名isfegment/(.定位類型][組合類均
1°[字長類型]£1亞I方
任殳名ends,—、
?友趙極、
?一般情無下,選項可以不用,用默認(rèn)值,但若需
連接本程序和其他程序,就要使用這些說明。
?段名是段的標(biāo)識符,指明段的基址,由程序員指
定。
㈡凹附叫
segment和end段定義(2)<
①定位類型
?一定位類型:指定段起始邊界,5種
?BYTE:任意位置
?WORD:偶地址,地址低1位為0
?DWORD:4的倍數(shù)地址,地址低2位為0
?PARA:16的倍數(shù)地址,地址低4位為0
?PAGE:256的倍數(shù)地址,地址低8位為0,一頁的
起點,默認(rèn)值。/
segment和end段定義
②組合類型
?組合類型:表示本段與其它段之間,具有超山段名的各段的組合
關(guān)系,為連接程序提供信息,屬于連接類型,6種,
?PUBLIC:本段連接時將與有相同段名.public類型的其它段連接在
一起,連接次序由連接命令指定(共用一個段),即同名段連接
在一起,有共同段地址。
?STACK:用于說明堆棧段.把不同程序段中的具有SARCK類型的同
名段組合而形成一個堆棧段.其長度為各原有段的總和,LINK自
動將新段的段地址送SS,長度送SP,若未定義SARCK類型.需在
程序中用指令設(shè)置SS、SP,
?COMMON:本段連接時.使具有COMMON類型的同名段具有同一個起
始地址,所以會產(chǎn)生覆蓋,新段的長度是最長COMMON段的長度,
新段的內(nèi)容取決于依次覆蓋的最后內(nèi)容。
?MEMORY:表示該段應(yīng)定位在所有段的最下面(即地址最大的區(qū)
域),如果模塊中不止一個MEMORY段,以第一個遇到的作為
MEMORY段.其它段作為COMMON段處理,而LIM程序在處理MEMORY
時與PUBLIC同樣對游
?PRIVATE:獨立段,與其它段邏輯上沒有關(guān)系,不與同名較合并.
默認(rèn)值.
AT表達式:指定本段起始地址為“表達式「偏移量為0.不能用
于代碼段。
segment和end段定義(J)總
——
③字長類型
?字長類型:386以后,說明使用16位尋址方式,
還是32位尋址方式。
?.USE16:16位尋址方式,段長464KB,16位段地
址,16位偏移量,默認(rèn)值。
?.USE32:32位尋址方式,段長《4GB,16位段地
址,32位偏移量。
④類別
?類別:引號括起的字符串,連接時,,類別,相同
的分段(他們可能不同名)均放在連續(xù)的存儲空間
中,但他們?nèi)匀皇遣煌姆侄危ㄟB續(xù)空間)。
/冽兇因的國k
ASSUME段分配短,
?格式:ASSUME談室住器"……
?功能:指定分段寄存器,說明哪個段使用哪個段
寄存器。
?說明:
?①程序段必須用CS,堆棧段必須用SS
?②該語句一般放在代碼段的最前面
?③說明性語句,除CS外(初始化賦值),各段寄
存器在程序中賦值。
?④取消語句:ASSUMENOTHING
一般匯編格式舉例族〃
DATA1SEGMENT①ATA,
???
DATA1ENDS」
DATA2SEGMENT'EXTRA'~
???
DATA2ENDS
DATA3SEGMENT'DATA'
???
DATA3ENDS
CODESEGMENTCODE,
ASSUMECS:CODE,DS:DATA!,ES:DATA3,SS:DATA?
START:MOVAX,DATA1
MOVDS,AX:數(shù)據(jù)段地址就給DS
MOVAX,DATA2
MOVSS.AX:堆棧段地址就給SS
MOVAX,DATA3
MOVES,AX;附加段地址賦給ES
???
MOVAH,4CH
1NT21H;返回DOS
CODEENDS
“EWUSLW;CM」———」:,
GROUP段組定義
?格式:二1組2/2上莖名[.段名一1
?功能:將指定而君莪芬瓦在同一個物理存儲器內(nèi).使用
使用同一個DS內(nèi)容
?用戶自行指定段組中的段.段組不影響各段次序,對定義在不同段中的
變量.可以用同一個DS訪問,但各段仍為獨立段,通常將具有相同性質(zhì)
CODESEGMENT?CODE,
ASSUME4CODEDS:AA5
START:MOVAX,AA5
MOVDS,AX;數(shù)據(jù)段地址賦給DS
???
MOVAH,4CH
INT21H:返回DOS
CODEENDS
E\DSTARTiGr,
£1回四回I國叱
簡化的段定義
?MASM5.0以上支持的段定義,不像SEGMENT定義
得那么完善,但易用。
?簡化段有利于匯編語言程序模塊與高級語言程序
模塊的連接,但.COM程序不能用簡化段定義。
.,」“,、]gJ]
四、地址計數(shù)器偽指令畛
1.地址計數(shù)器sP
?功能:指出匯編地址,是偏移量,記載下一個變量或指令在當(dāng)前
段中的偏移量。
?每個段開始時,s=o.隨著匯編過程的進行而增值,每處理一條
指令,S增加一個值,此值為該指令所需的字節(jié)數(shù)一
?允許直接引用S.如:JNES+6;轉(zhuǎn)向JNE指令的首地址加上6.
?S用于指令時,表示本條指令的第一個字節(jié)地址,S用于其他情況.
表示3的當(dāng)前值,
2.ORG起始地址定義
?格式:ORG表達式
?功旄:定義指令或數(shù)據(jù)的起始地址,把表達式的值送給3(地址
計數(shù)器)
3.EVEN偶數(shù)地址定義
?功能:使下一個變量或指令從偶數(shù)地址開始,便于字存儲對準(zhǔn)
(EVEN在代碼段中可能多出1個NOP語句)。
4.ALIGN邊界定義1
?格式:ALIGNn;n為2的幕次
-功能:使下一個變量或指令從n的接續(xù)整數(shù)倍地址開始.保證雙
字、四倍字對準(zhǔn)。
五、數(shù)據(jù)定義
格式:/變位2攥作符接隹數(shù)[;;i#]
功能:.為操作數(shù)分配存儲單元,用變量與詞單元聯(lián)系。
為變量分品存儲單元,并預(yù)置初值7—
操作苻:
DB:一個操作數(shù)占有1個字節(jié)單元(8位),定義的變量為
字節(jié)變量。
DW:一個操作數(shù)占有1個字單元(16位),定義的變量為字
變量二
DD:一個操作數(shù)占有1個雙字單元(32位),定義的變量為
雙字變量。
DF:一個操作數(shù)占有1個三字單元(48位)、定義的變量為
三字變量。
DQ:一個操作數(shù)占有1個四字單元(64位),定義的變量為
四字變量。
DT:一個操作數(shù)占有1個五字單元(80位),定義的變量為
五字變量.
?操作數(shù):常數(shù)、表達式、字符串、?3
數(shù)據(jù)定義舉例(1)
例1內(nèi)存分況
偏移量存儲單元內(nèi)容
設(shè)置
加一
DATAy"T^~f^?S6.DATAr00HJ2H
201H口犯-
EVEN\r-^02H_能
(即保留原值)]
;偶地址,使$指向偶地址203H.
DATA2r<5ZZ)
DATA2兇7空少
)—205H^78H_
206H(即保留原值)i
(即保留原值),
;4倍地址,使S指向4倍地址、207H
DATA3:口208HJ^L-
DATA3DD12345678Hz--*
---2。9H
DATA4DW$,6699H20AH-3^i_
;詼匚藕指4A16位,設(shè)20BH
當(dāng)前S(原$)的內(nèi)容DATA^QocB>
20DHxjg怨J/
20EH^aaH/
20FH
/咽、
21OH
數(shù)據(jù)定義舉例(2)
例2內(nèi)存分配情況
變量名偏移量存儲單元內(nèi)容
ORG100H—
■3AE^*100H61H
DATA1詬~藐丁丁
101H62H
;字符串必須用單引號102H63H
DATA2DB,AB'103H64H
DATA3DW認(rèn)B‘DAEA2104H41H
105H42H
;按字處理,個數(shù)只能為
DATA3106H42H
107H41H
IDB12H/3M
數(shù)據(jù)定義舉例(3)
例3內(nèi)存分配情況
變量名偏移量單元內(nèi)數(shù)
DAIA1400H01H
401H02H
ORG400H1一年402H(即保留原值)
DATA1DB1,2,?,4403H04H
;按字節(jié)定義DATA2404H05H
DATA2DW5,?,6405H00H
406H(即保留原值)
:按字定義
407H(即保留原值)
DATA3DF?408H06H
:按三字定義409H00H
DATA4DB8DATA340AH(即保留原值)
40BH(即保留原值)
40CH(即保留原值)
40DH(即保留原值)
40EH(即保留原值)
40FH(即保留原值)
DAEA4410H08H
V」
數(shù)據(jù)定義舉例(4<
ORG300H-與
DATA1DB2DUP(12H,34H,56H)
例4內(nèi)存分配情況
羋名儂量存儲單元內(nèi)容
DATl^P300H12H
301H34H
302H56H
303H12H
304H34H
3O5H56H
MU
數(shù)據(jù)定義舉例(5)豫
%
ORG100H
DATA1DB12H,34H,2DUP(56H,3DUP(9AH),78H)
例5內(nèi)存分配情況
變量名偏移量存儲單元幅
57Ax哆…初<DAIA1100H12H
101H34H
DB102H56H
103H9AH
2”飛104H9AH
105H9AH
106H78H
107H56H
108H9AH
109H9AH
10AH9AH
10BH78H
六、PROC.ENDP過程定義畛
?功能:用于定義子程序結(jié)構(gòu),過程名是CALL的操
作數(shù)。
?格式:
過程名PROC[屬性]
???
過程名ENDP
?屬性:FAR,NEAR(默認(rèn)值)
㈣囪國111H
七、模塊連接偽指令、然
?用于定義各模塊之間的共享信息
1.PUBLIC
?格式:PUBLIC符號1[.符號2,…]
?功能:公共引用.說明本模塊定義,而其它模塊引用的共享信息.
2.EXTRN
?格式:EXTRA符號1:類型[,符號2:類型,…]
?功能:外部引用.說明其他模塊定義,而本模塊引用的共享信息.
?類型:
對于變量.可以是字節(jié)(BYTE).字(WORD),雙字
(DWORD),三字(FWORD),四字(QWORD),五字(TWORD)0
對于標(biāo)號、過程名,可以是段內(nèi)引用型(FAR),段間引用
型(NEAR).
?共享信息是全局變量,包括常量、變量、標(biāo)號.過程名等一
?EXT心說明的信息應(yīng)是在PUBLIC中已經(jīng)定義的,否則出錯:
?例:
PUBLICVARI,VAR2
EXTRNVARI:WORD,VAR2:BYTE
L“I-71jIU1I山
、常數(shù)(1)
?包括:數(shù)值常數(shù)、字符串常數(shù)、符號常數(shù)
1.數(shù)值常數(shù)
?數(shù)值常數(shù)可以是二進制數(shù)、八進制數(shù)、十進制數(shù)、十六進
制效。
?基數(shù)控制偽指令:改變基數(shù)默認(rèn)值(原默認(rèn)值為十進制)。
?格式:.RADIX數(shù)值表達式
?功能:把默認(rèn)的基數(shù)改變?yōu)?~16范圍內(nèi)的任何基數(shù):
?例:
MOVBX,0FFH等價于.RADIX16
MOVBX,178MOVBX,OFFH
MOVBX,178D
2.字符串常數(shù)
?字符串常數(shù):包括在單引號中的若干字符。
-字符串在存儲器中儲存的是相應(yīng)字符的ASCII碼。
P'licmnii^ir
常數(shù)(2)
3.符號常數(shù)
,包括:EQU和=
(1)EQU弒值偽指令
?格式:符號常數(shù)名EQU表達式
?功能:將表達式的值獻給符號常數(shù),
?說明:表達式可以是有效的操作數(shù)格式,也可以是任何可求出教
值常數(shù)的表達式,還可以是任何有效的符號(如操作符、寄存器
名、變量名等)。
?EQU定義的一個符號常數(shù)名在程序中只能定義一次,
?例:DATA1EQU88
NEW.CXEQUCX
DATA2EQUDATA1+12
(2)=偽指令
?格式:符號常數(shù)名表達式
?功能:將表達式的值弒給符號常數(shù),
?=定義的一個符號常數(shù)名在程序中可以重復(fù)定義多次-
?例:...
DATA1=88
…X]
DATA1,'出桿抬■協(xié)CMIca.f^Ll'jyy"1>C\\[URI.iUX
W國回盟團in
二、表達式(1)■紜
?表達式:常數(shù)、寄存器、標(biāo)號、變量與一些運算
符相組合的序列。
?包括:數(shù)值表達式,地址表達式。
1.運算符
?六種運算:算術(shù)運算、邏輯運算、移位運算、關(guān)
系運算、返回值運算、屬性運算。
(1)算術(shù)運算符
?算術(shù)運算符:有5個,加(+)、減(-)、乘
(*)、除(/)和取余(MOD)o
(2)邏輯運算符
?邏輯運算符:4個,與(AND)、或(OR)、非
(NOT)和異或(XOR)。
MHJHltLJLtJ
二、表達式(2)
(3)移位運算符
?移位運算符:2個,左移(SHL)和右移(SHR).
,例:
MOVAL,0
MOVBL,11011000B
MOVAL,BLSHR3;(AL)=0001101IB
MOVCL,BLSHL^6;(CL)=110000008
(4)關(guān)系運算苻
?關(guān)系運算符:6個,等于(EQ)、不等(NE)、小于
(LT)、大于(CT)、小于等于(LE)、大于等于(GT)。
?功能:關(guān)系運算苻的兩個操作數(shù)的計算結(jié)果應(yīng)為邏輯值,
結(jié)果為真(關(guān)系成立),表示為0FFFFH,結(jié)果為假(關(guān)系
不成立),表示為0.
?例:
MOVAX,2LT7;(AX)=0FFFFHX|Z
上!兇回回國乜
袤
二、表達式(3)
(5)返回值運算符
?返回值運算符:5個,返回變量或標(biāo)號的薦地址(SEG)、返回變
量或標(biāo)號的偏移地址(OFFSET)、返回變量或標(biāo)號的類型值
(TYPE)、返回變量的單元數(shù)(LENGTH)、返回變量的字節(jié)數(shù)
(SIZE).
①SEG返回變量或標(biāo)號的段地址運算符
?格式:操作級SEG變量/標(biāo)號
?功能:將變量/標(biāo)號所在段的段息址值獻給操作數(shù),
②OFFSET返回變量或標(biāo)號的偏移她址運算符
?格式:操作教OFFSET變量/標(biāo)號
?功能:將變量/標(biāo)號所在段中的偏移值賦給操作數(shù),
③TYPE返回變量或標(biāo)號的類型值運算符
?格式:操作數(shù)TYPE變量/標(biāo)號
?功能:將代表變量/標(biāo)號類型的值獻給操作數(shù)C
?說明:如果是變量,則匯編程序?qū)⒏鶕?jù)變量對應(yīng)的數(shù)據(jù)定義偽指
令回送類型值(即變量類型代表的字節(jié)數(shù)):DB為1,DR為2.DD
為4,DF為6,DQ為8,DT為10返回以字節(jié)數(shù)表示的類型.常數(shù)
返回0如果是標(biāo)號.則匯絹程序?qū)⒒厮痛碓摌?biāo)號類型的數(shù)值:
NEAR為-1,FAR為一2。3」
LIL-IUJIIUII▼]]
二、表達式(4)畛,
④LENGTH返回變量的單元數(shù)運算符
?格式:操作數(shù)LENGTH變量
?功能:將代表變量的單元數(shù)賦給操作數(shù)二
?說明:<1>返回一次數(shù)據(jù)定義的第一不元素的長度,DUP時
返回重復(fù)次數(shù),其他情況返回1.
?<2>對于變量中使用DUP的情況,匯編程序?qū)⒒厮头?/p>
配給該變量的單元數(shù)(按類型TYPE算),而對于其他情況,
則均送1。只對DUP定義的變量有意義,返回分配給該變量
的元素的個數(shù)。只返回第一個DUP前的元素個數(shù),與DUP括
號內(nèi)的數(shù)據(jù)無關(guān)、認(rèn)為只是一組數(shù)據(jù)而已,若與DUP并列
地定義了其它數(shù)據(jù),就只能返回1。
⑤SIZE返回變量的字節(jié)數(shù)運算符
?格式:操作數(shù)SIZE變量
?功能:將代表變量的字節(jié)數(shù)弒給操作效:
?說明:<1>就是返回LENGTHxTYPE的結(jié)果。
?<2》匯編程序?qū)⒒厮头峙浣o該變量的字節(jié)數(shù):只對
DUP定義的變量有意義。
二、表達式(5)
例:
DATASEGMENTAT1000H
ORG3000H
AA1DW100DUP(O)
BB1DW1.2
CC1DB*ABCD'
DDlDW1000DITP(23)
EEIDB50DUP(5.6)
FF1DW1.2.100DIT(?)
GG1DI)5DUP(6DIT(?))
DATAENDS
CODESEGMENT
ASSUMECS:CODE.DS:DATA
HH1:MOVAX.DATA:AX=1000H
MOVDS.AX
MOVAX.SEGAA1:AX=1000H,AT定義
MOVBX.OFFSETAA1:BX=3000H
MOVCL,TYPEAA1:CL=2,字類型
MOVCHTYPECC1:CH=L字節(jié)類型
MOVAL.TYPEGG1:ALT,雙字類型
二、表達式(6)豫"
MOVDX,LENGTHAA1;DX=100,元素個數(shù)
MOVAX,SIZEAA1;AX=200,元素個數(shù)X類型
MOVDX,LENGTHBB1
:DX=1,LENGTH只對DUP定義的變量有意義
MOVAX,SIZEBB1;AX=2
MOVDX.LENGTHCC1:DX=1
MOVAX.SIZECC1:AX=1
MOVDX,LENGTHDD1:DX=1000
MOVAX.TYPEDD1;AX=2000
MOVDX.LENGTHEEI:DX=50
MOVAX.SIZEEEI:AX=50
MOVDX.LENGTHFF1:DX=1
MOVAX,TYPEFF1;AX=2
MOVDX,LENGTHGG1;DX=5
MOVAX.TYPEGG1;AX=20
MOVAH.4CH
INT21H
CODEENDS
FNT)仁心乜門理二c位/*叱4
、表達式(7)
(6)屬性運算符
?屬性運算符:3個,臨時改變類型屬性運算符PTR、指定類
型屬性運算符THIS、定義類型屬性運算符LABEL
①PTR臨時改變類型屬性運算符
?格式:類型PTR變量/標(biāo)號
?功能:將PTR前面的類型臨時減給變量/標(biāo)號、而原有段屬
性和偏移屬性保持不變,其本身并不分配存儲單元。
?說明:對于變量,可以指定類型BYTE、WORD.DNOR、
DFWORD、QWORD.TWORD,對于標(biāo)號,可以指定類型
NEARFAR
?例:
DATADB66H,77H
MOVAX,WORDPRTDATA
、表達式(8)、然
②THIS指定類型屬性運算符
?格式:變量/標(biāo)號EQLITHIS類型
?功能:’將變量/標(biāo)表義成指前類型。
?說明:THIS指定的變量或標(biāo)號本身并不分配存儲
單元,它與緊跟其后的變量或標(biāo)號只藁空丕回,
而段地址和偏移量均相同。THIS指至短■寫PTR
相同。
?例:
DATA1EQUTHISBYTE
DATA2DW1234H;DATA1和DATA2具
有相同的段地址和偏移量,但類型值分別為1和2。
MOVAX,DATA2;AX=1234H
MOVBL,DATA1;BL=34H
、表達式(9)第
③LABEL定義類型屬性運算符
?格式:變量/標(biāo)號LABEL類型
?功能:將變量或標(biāo)號定義成指定的類型。
?說明:LABEL指定的變量或標(biāo)號本身并不分配存儲單元,
它與緊跟其后的變量或標(biāo)號只有類型不同,而段地址和偏
移量均相同。THIS指定類型與PTR相同.
,例:
AA11ABELF竺;AA1為段間轉(zhuǎn)移入口
AA2:...;AA2為段內(nèi)轉(zhuǎn)移入口
???
AA3LABELBYTE
AA4DW1234H
MOVAX,AA4
MOVBH,AA3+1
與㈣固國也任
二、表達式(10)
2.數(shù)字表達式
-數(shù)字表達式:有常數(shù)、變量、標(biāo)號與一些運算符相組合的
序列.運算符可以是算術(shù)運算符、邏輯運算符、移位運算
符、關(guān)系運算符、返回值運算符,但結(jié)果必須是常數(shù)C
3.標(biāo)號
-標(biāo)號:指令所在單元的符號地址。
-標(biāo)號的三種屬性:段地址、偏移量、類型(NEAR、FAR),
4.變量
-變量:數(shù)據(jù)所在單元的符號地址。
-變量的五種屬性:段地址(SEG返回值)、偏移量
(OFFSET返回值)、類型(TYPE返回值)、單元數(shù)
(LENGTH返回值)、字節(jié)數(shù)(SIZE返回值)
5.地址表達式
?地址表達式:存儲器地址,即EA的計算;是常數(shù)、變量、
標(biāo)號與一些運算符相組合的序列。
3.5匯編語言程序設(shè)計及舉例
(一)編寫匯編語言程序的步裂
?1.從實際問題抽象出就學(xué)根主.
?2.碉定解決此數(shù)學(xué)模型的算主.解決同一個問遇可以有不同的算法.它們
的效率可能有很大的差別.例如要做X*10,可以用乘法指令:也可以用
X*8+X*2,而卜2或卜8也可以自身相加.或X左移來實現(xiàn):這些方法的程序復(fù)
雜程度和執(zhí)行時間差別是很大的.又例如查表.是用線,法查找還是用對?分
查找區(qū)別也很大.所以.確定合適的算法是很重要的.
?3.畫出程序三玨圖把根據(jù)算法解決問題的思路和方法.用圖影表示出耒.
?4.分上內(nèi)弓工作單元和寄存器.
?5.根據(jù)流程圖箋制程序.
?當(dāng)然.到這兒只是設(shè)計出了息本程序.此程序是否正確.可靠.還必須上
機調(diào)試.排錯和進行不妥的檢測,
(二)判斷程序質(zhì)量的標(biāo)準(zhǔn)
?為解決同一個問題所編制的程序,往往是多種多樣的,如何衡量程序的質(zhì)
量呢?通常有三個標(biāo)準(zhǔn):
I.程序的執(zhí)行時間
2.程序所占用的內(nèi)存字節(jié)數(shù)
3.程序的語句行數(shù)
?前兩個標(biāo)準(zhǔn)是主要的.由于半導(dǎo)像存儲器容量越來越大,成本急朝降低.
3.5匯編語言程序設(shè)計及舉例
程序流程圖
?在確定問題的算法以后,先不要急于寫一條條指令,而要
用程序流程圖把編制程序的方法和思路勾畫出來,確定程
序的結(jié)構(gòu)和相互之間的關(guān)系。本書中的流程圖,采用以下
一'些慣用的畫法。
i.用方框表示工作框、方框中用簡明的語言標(biāo)明所完
成的特定功能。它有一個入口一個出口,用箭頭表示。
2.用菱形表示判斷框,菱形內(nèi)標(biāo)明比較,判斷和條件,
它有一個入口和幾個出口,各用箭頭表示。在各個出口處
標(biāo)明出口條件,條件成立則寫“是(用Y表示),條件不
成立用“否(用N表示):____
3.程序中要調(diào)用的子程序或過程,用DZZO框表示,
在框中標(biāo)明子程序或過程的名字(包括入口地址、入口條
件、參數(shù)、出口參數(shù))。它有一個入口一個出口,各用箭
頭表示。
?帶箭頭的直線;程序的各框之間用箭頭的直線連接起來,
表示程序的走向,
回回固網(wǎng)后
3
算術(shù)運算程序設(shè)計(宜線運行,
?最簡單的程序是沒有分
支,沒有循環(huán)的直線運1
行程序。
?在8088/8086中,數(shù)據(jù)xIcIDI
是16位的,它只有16位—
的運算指令,若是兩個
32位的數(shù)相乘就無法直段郝
接用指令實現(xiàn)(在80386
中有32位數(shù)相乘的指
令),但可以用16位乘法
指令做4次乘法,然后
把部分積相加來實現(xiàn)。
其原理如圖所示。
算術(shù)運算程序設(shè)計
,例1:兩個32位無
符號數(shù)乘法程序
?若數(shù)據(jù)區(qū)中己有一
個緩沖區(qū)存放了32
位的被乘數(shù)和乘數(shù),
保留了64位的空間
以存放乘積,能實
現(xiàn)上述運算的程序
流程圖如圖所示
▼
引川冽,
算術(shù)運算程序設(shè)計(整
相應(yīng)的程序為:
name32bilmutiply
datasegment
mu1numdw0000.Offffh,0000,Offffh,4dup(?)
dataends
stacksegmentparaslack-stack'
db100dup(?)
stackends
codesegment
assumecs:code,ds:data,ss:stack,es,data
startprocfar
begin:pushds:DS中包含的是程序段前綴的起始地址
movax,0
pushax:設(shè)置返回至DOS的段值和IP值
movax,data
movds,ax
moves,ax;置段寄存器初值
leabx,mu1num
mu1u32:movax,[bx];B->AX
算術(shù)運算程序設(shè)計(3)、修少
、)*
movsi,[bx+4]__二D>SI
movdi,[bx+6];CDI
mulsi_■:BXD
mov[bx+8],ax;保存部分積I
mov[bx+Oah],dx
movax,[bx+2]:A->AX
millsi;AXD
addax,[bx+0;ih]
adcdx,0:部分積2的一部分與部分積1的相應(yīng)部分相加
mov[bx+O;ih],ax
mov[bx+Och],dx;保存
movax.[bx]:B>AX
inuldi;BXC
addax,[bx+0;ih]:與部分積3的相應(yīng)部分相加
adcdx,[bx+Och]
算術(shù)運算程序設(shè)計
mov[bx+0ah],ax
mov[bx+0cli].dx
pushf:保存后一次相加的進位位
movax.[bx+2]:A->AX
mid<li;AXC
popf
:i(lc;ix.[bx+0ch]:與部分積4的相加部分相加
n<k(lx.0
mov[bx+0ch],ax
mov[bx+Oeh],(tx
let
starteiuip
codeends
endbegin
算術(shù)運算程序設(shè)計(5)
?例2:32位符號數(shù)乘法
-在32位無符號數(shù)乘法程
序的基礎(chǔ)上很容易實現(xiàn)
32位帶符號數(shù)的乘法。
?首先設(shè)一個乘積的符號
標(biāo)志初值為0;檢查被乘
數(shù),若為負(fù),一方面對
被乘數(shù)取補,另一方面
對符號標(biāo)志取反;
?再檢查乘數(shù),若是負(fù)數(shù)
也對乘數(shù)取補和符號標(biāo)
志取反;然而調(diào)用32位
無符號數(shù)乘法程序。
?最后檢查乘積符號標(biāo)志,
若為負(fù)(即兩個異號數(shù)
相乘),則對64為乘積
取補。
?程序流程圖如圖所示。
算術(shù)運算程序設(shè)計
相應(yīng)的程序為
nnmesigned32bitinulpty
datasegment
sigil(lb?
inulnmn(lwOil.XXYl,4<lup(?)
dataends
stacksegmentpai,iistack'stack'
<lb100(lup(?)
stackends
codesegment
nssiune€s:€o(le.ds:<latn.ss:stuck
:以下是主過程
startprocfar
begin:push<1$
movax.0
push心:為返回DOS設(shè)置返回地址
V圖闡
算術(shù)運算程序設(shè)計(嘎少
movax,data
mov<k.ax;設(shè)置段寄存器初值
inovsign.0:置符號為初值
leabx,inuluuin
movax,[bx]:B->AX
inov<lx.[bx+2]:A-DX
movsi.[bx+4]:D->SI
movsi.[l)x+6];C->DI
cmp<lx.0:檢驗正或負(fù)
jusother:為正時轉(zhuǎn)至QTHRE
not:ix
not<lx
addax、1,
n<k<lx.0:負(fù)則取補
uotsign:改變符號位
mov[bx],ax
mov[bx+2].<lx:暫存
算術(shù)運算程序設(shè)計(8)電,
;檢查乘數(shù)符號勺
other:一<K.
goimil;為正時轉(zhuǎn)至GOMUL,
not
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版白酒銷售顧問銷售數(shù)據(jù)分析合同3篇
- 2025年度個人自用房產(chǎn)交易合同范本4篇
- 二零二五版建筑公司員工勞動合同范本3篇
- 一個簡短的自我介紹四篇
- 2024年中級經(jīng)濟師考試題庫含答案(b卷)
- 擋墻及護坡施工方案
- 訓(xùn)練音樂節(jié)奏課程設(shè)計
- 2025年度退休員工專業(yè)培訓(xùn)與指導(dǎo)合同3篇
- 輸電線路防雷施工方案
- 二零二五版合伙購買二手房裝修及改造協(xié)議3篇
- 中小銀行上云趨勢研究分析報告
- 機電安裝工程安全培訓(xùn)
- 洗浴部前臺收銀員崗位職責(zé)
- 2024年輔警考試公基常識300題(附解析)
- GB/T 43650-2024野生動物及其制品DNA物種鑒定技術(shù)規(guī)程
- 暴發(fā)性心肌炎查房
- 工程質(zhì)保金返還審批單
- 【可行性報告】2023年電動自行車項目可行性研究分析報告
- 五月天歌詞全集
- 商品退換貨申請表模板
- 實習(xí)單位鑒定表(模板)
評論
0/150
提交評論