4@-第4章-匯編語言程序格式 匯編語言(清華)_第1頁
4@-第4章-匯編語言程序格式 匯編語言(清華)_第2頁
4@-第4章-匯編語言程序格式 匯編語言(清華)_第3頁
4@-第4章-匯編語言程序格式 匯編語言(清華)_第4頁
4@-第4章-匯編語言程序格式 匯編語言(清華)_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第四章匯編語言程序格式匯編語言

匯編程序功能偽操作

匯編語言程序格式匯編語言程序的上機過程主要內(nèi)容:匯編語言匯編程序編輯程序連接程序

program.asm

program.objprogram.exe1.匯編程序功能匯編程序的主要功能:檢查源程序,給出出錯信息產(chǎn)生目標文件(.obj)和列表文件(.lst)

展開宏指令匯編語言2.偽操作(偽指令)是匯編程序?qū)υ闯绦蜻M行匯編時處理的操作,完成處理器選擇、存儲模式定義、數(shù)據(jù)定義、存儲器分配、指示程序開始結(jié)束等功能。處理器選擇偽操作段定義偽操作程序開始和結(jié)束偽操作數(shù)據(jù)定義及存儲器分配偽操作表達式賦值偽操作地址計數(shù)器與對準偽操作基數(shù)控制偽操作匯編語言.8086選擇8086指令系統(tǒng)默認.286選擇80286指令系統(tǒng).286P選擇保護模式下的80286指令系統(tǒng).386選擇80386指令系統(tǒng).386P選擇保護模式下的80386指令系統(tǒng).486選擇80486指令系統(tǒng).486P選擇保護模式下的80486指令系統(tǒng).586選擇Pentium指令系統(tǒng).586P選擇保護模式下的Pentium指令系統(tǒng)處理器選擇偽操作:匯編語言段定義偽操作:完整的段定義偽操作datasegment

;定義數(shù)據(jù)段

…dataendsextrasegment

;定義附加段

…extraendscodesegment

;定義代碼段

assume

cs:code,ds:data,es:extrastart:

movax,data

mov

ds,ax;段地址段寄存器

…codeends

endstartPSPDSESSSCSEXE程序的內(nèi)存映象圖裝入模塊文件頭匯編語言……codesegmentmainprocfarassume……start:

pushds

movax,0pushax……retmainendpcodeendsendstart……codesegmentmainprocfarassume……start:…………

movax,4c00h

int21hmainendpcodeendsendstart匯編源程序的其它形式:匯編語言datasegment……dataendsstacksegment

dw100dup(?)

toslabelwordstackendscodesegmentmainprocfarassumecs:code,ds:data,ss:stackstart:

movax,stack

mov

ss,ax

movsp,offsettospushdssubax,axpushax

movax,data

mov

ds,ax……retmainendpcodeendsendstartPSPDSESSSCS帶堆棧段的匯編源程序:匯編語言

tos

100字00C8Hsp……stacksegment

dw100dup(?)

toslabelwordstackends……

movax,stack

mov

ss,ax

movsp,offsettospushdssubax,axpushax……堆棧段的情況:匯編語言PSPDSESSSCSdatasegment……dataendsstacksegmentstack

dw100dup(?)

toslabelwordstackendscodesegment……start:pushdssubax,axpushax

movax,data

mov

ds,ax……

ret……codeendsendstart匯編語言0012FF74

00012FF78

10012FF7C

2ar00012FF68

10012FF6C

20012FF70

3ar10012FF5C

20012FF60

30012FF64

4ar20012FF50

0012FF740012FF54

0012FF680012FF58

0012FF5Cpintmain(){intar0[]={0,1,2};intar1[]={1,2,3};intar2[]={2,3,4};

int*p[]={ar0,ar1,ar2};……}匯編語言段名SEGMENT

[定位類型][組合類型][使用類型][‘類別’]

…………;語句序列段名ENDS定位類型align_type

PARABYTEWORDDWORDPAGE組合類型combine_type

PRIVATEPUBLICCOMMONSTACKATexp使用類型use_type

USE16USE32(4)類別‘class’完整段定義的格式:匯編語言例:;proadd1.asmextrn

proadd:fardatasegmentcommon

ary

dw1,2,3,4,5,6,7,8,9,10countdw10sumdw?dataendscode1segmentmainprocfarassumecs:code1,ds:datastart:pushdssubax,axpushax

movax,data

mov

ds,ax

callfarptr

proadd

retmainendpcode1endsendstart匯編語言;proadd2.asmpublicproadddatasegmentcommon

ary

dw1,2,3,4,5,6,7,8,9,10countdw10sumdw?dataends

code2segmentproaddprocfarassumecs:code2,ds:data

movax,data

mov

ds,ax

……proadd

endpcode2endsend匯編語言存儲模式與簡化段定義偽操作.modelsmall.stack100H.data…….code.startup…….exit

0end(1)MODEL偽操作

.MODEL存儲模式

[,語言類型][,操作系統(tǒng)類型][,堆棧選項]

存儲模式:tinysmallmediumcompactlargehugeflat簡化的段定義偽操作.code[name].data.data?.fardata[name].fardata?[name].const.stack[size]匯編語言.modelsmall.data…….code.startup…….exit0end

.modelsmall.data…….codestart:

movax,@data

mov

ds,ax……

movax,4c00h

int21hend

start

.modelsmall.const…….data…….codestart:

movax,DGROUP

mov

ds,ax……

movax,4c00h

int21hend

start匯編語言.modelsmall.data…….code.startup…….exit0end匯編語言段組定義偽操作dseg1segmentwordpublic‘data’……dseg1endsdseg2segmentwordpublic‘data’……dseg2ends

datagroup

groupdseg1,dseg2csegsegmentparapublic‘code’

assumecs:cseg,ds:datagroupstart:

movax,datagroup

mov

ds,ax……

movax,4c00h

int21hcsegendsendstart匯編語言data1segmentword

const1dw100data1ends

data2segmentword

var1dw?data2endsdatagroupgroupdata1,data2codesegmentassumecs:code,ds:datagroupstart:

movax,datagroup

mov

ds,ax

movax,const1

movvar1,ax

mov

bx,offsetvar1

mov

bx,offsetdata1

mov

bx,offsetdata2

assumeds:data2

movax,data2

mov

ds,ax

movax,var1

mov

bx,offsetvar1

movax,4c00h

int21hcodeendsendstart;(bx)=2;(bx)=2;(bx)=4;(bx)=2匯編語言data1segmentconst1dw100data1ends

data2segmentvar1dw?data2endsdatagroupgroupdata1,data2codesegmentassumecs:code,ds:datagroupstart:

movax,datagroup

mov

ds,ax

movax,const1

movvar1,ax

mov

bx,offsetvar1

mov

bx,offsetdata1

mov

bx,offsetdata2

assumeds:data2

movax,data2

mov

ds,ax

movax,var1

mov

bx,offsetvar1

movax,4c00h

int21hcodeendsendstart;(bx)=0;(bx)=2;(bx)=2;(bx)=0匯編語言TITLEtextNAMEmodule_nameEND[label].STARTUP.EXIT[return_value]程序開始和結(jié)束偽操作:匯編語言數(shù)據(jù)定義及存儲器分配偽操作:[變量]助記符操作數(shù)[,操作數(shù),…][;注釋]

助記符:DBDWDDDFDQDTDATA_BYTEDB10,4,10H,?DATA_WORDDW100,100H,-5,?

-0AH04H10H-

64H

00H

00H

01H

FBH

FFH

-DATA_BYTEDATA_WORD匯編語言ARRAYDB‘HELLO’

DB‘AB’

DW‘AB’48H45H4CH4CH4FH

41H

42H

42H

41H

ARRAY

PAR1DW100,200

PAR2DW300,400ADDR_TABLEDWPAR1,PAR2VARDB100DUP(?)DB2DUP

(0,2DUP(1,2),3)匯編語言O(shè)PER1DB?,?OPER2DW?,?……MOVOPER1,0;字節(jié)指令

MOVOPER2,0;字指令OPER1DB1,2OPER2DW1234H,5678H……MOVAX,OPER1+1×MOVAL,OPER2×類型不匹配

MOVAX,WORDPTROPER1+1MOVAL,BYTEPTROPER2(AX)=3402H(AL)=34H01H02H34H12H78H

56H

OPER1

OPER2

匯編語言BYTE_ARRAYLABELBYTEWORD_ARRAYDW50DUP(?)

tosLABELWORDLABEL偽操作:nameLABELtype

BYTE_ARRAYWORD_ARRAYtos

50字0064H匯編語言表達式賦值偽操作:表達式名EQU

表達式BEQU[BP+8]ALPHAEQU9BETAEQUALPHA+18“=”偽操作(允許重復(fù)定義)……EMP=7……EMP=EMP+1……匯編語言地址計數(shù)器與對準偽操作:地址計數(shù)器$

:保存當前正在匯編的指令的地址ORG$+8;跳過8個字節(jié)的存儲區(qū)JNE$+6;轉(zhuǎn)向地址是JNE的首址+6$

用在偽操作的參數(shù)字段:表示地址計數(shù)器的當前值

ARRAYDW1,2,$+4,3,4,$+4

00H01H00H02H00H

7CH

00H03H00H04H00H

82HARRAY007E00780074匯編語言O(shè)RG偽操作:SEG1SEGMENT

ORG10VAR1DW1234H

ORG20VAR2DW5678H

ORG$+8

VAR3DW1357HSEG1ENDSORG100HSTART:……BUFFERLABELBYTEORG$+8BUFFERDB8DUP(?)匯編語言EVEN;使下一地址從偶地址開始ADB‘morning’

EVENBDW2DUP(?)

ALIGNboundaryALIGN4ALIGN2;EVEN匯編語言基數(shù)控制偽操作:.RADIX表達式

;規(guī)定無標記數(shù)的基數(shù)MOVBX,0FFHMOVBX,178.RADIX16MOVBX,0FFMOVBX,178D匯編語言3.匯編語言程序格式標號

指令寄存器說明程序或語句的功能變量偽指令標號宏指令變量常數(shù)

表達式源程序的每條語句可表示為:

[名字]操作操作數(shù)[;注釋]標號/變量:段值、偏移量、類型三種屬性

表達式:數(shù)字表達式地址表達式匯編語言表達式操作符:(1)算術(shù)操作符:

、、、、modMOVDX,BLOCK+(6-1)*2ARRAYDW1,2,3,4,5,6,7ARYENDDW?MOVCX,(ARYEND-ARRAY)/2ADDAX,BLOCK+2;符號地址常數(shù)

有意義

;

時意義不明確MOVAX,BX+1;

匯編語言O(shè)PR1EQU25OPR2EQU7

ANDAX,OPR1ANDOPR2(2)邏輯和移位操作符:

AND、OR、XOR、NOT、SHL、SHR;ANDAX,1INAL,PORT_VALOUTPORT_VALAND0FEH,ALMOVAX,0FFFFHSHL2;MOVAX,0FFFCH匯編語言(3)關(guān)系操作符:

EQ、NE、LT、LE、GT、GE計算結(jié)果為邏輯值:真

0FFFFH

0000HX:…………Y:……若128(真)匯編結(jié)果:MOVFID,-1若128(假)匯編結(jié)果:MOVFID,0MOVFID,

(OFFSETY-OFFSETX)

LE

128匯編語言(4)數(shù)值回送操作符:

OFFSET、SEG、TYPE、LENGTH、SIZESIZE

變量功能:LENGTH*TYPEOFFSET/SEG

變量/標號功能:回送變量或標號的偏址/段址TYPE

變量

/標號

/常數(shù)

DBDWDDDFDQDTNEARFAR常數(shù)

1246810-1-20LENGTH

變量功能:回送由DUP定義的變量的單元數(shù),其它情況回送1匯編語言ARRAYDW100DUP(?)TABLEDB‘ABCD’

ADDSI,TYPEARRAY

;ADDSI,2ADDSI,TYPETABLE

;ADDSI,1MOVCX,LENGTHARRAY

;MOVCX,100MOVCX,LENGTHTABLE

;MOVCX,1MOVCX,SIZEARRAY

;MOVCX,200MOVCX,SIZETABLE

;MOVCX,1匯編語言(5)屬性操作符:

PTR、段操作符、SHORT、THIS、HIGH、LOW、

HIGHWORD、LOWWORDCONSEQU1234HMOVAH,HIGHCONSMOVAL,LOWCONS類型PTR表達式MOVWORDPTR[BX],5段操作符MOVES:[BX],ALSHORT標號

JMPSHORTNEXTTHIS類型

TAEQUTHISBYTENEXTEQUTHISFAR匯編語言用MASM6.11和CodeView匯編和調(diào)試匯編語言程序

在MASM6.11中,Microsoft公司提供了程序員工作平臺PWB(programmer’sworkbench),這是一個集成化開發(fā)環(huán)境,程序員可以方便地完成匯編語言源程序的編輯、匯編、連接調(diào)試和執(zhí)行等工作。

MASM6提供的調(diào)試工具是CodeView,CodeView是一個源碼級調(diào)試工具,能支持16位和32位指令的調(diào)試。其用戶界面是多窗口全屏幕的,用戶可方便地使用菜單和鼠標來調(diào)試程序。4.匯編語言程序的上機過程匯編語言上機步驟:1設(shè)置環(huán)境變量

在MASM611\BINR的目錄下,執(zhí)行new-vars.bat即可建立環(huán)境參數(shù)和搜索路徑,然后執(zhí)行pwb.exe

即可進入PWB的主窗口。用其文件File菜單中的Exit命令可退出PWB。匯編語言2用File菜單下的有關(guān)命令建立asm

文件3用Project和Options菜單下的某些命令建立匯編語言程序運行環(huán)境

建立工程文件,設(shè)置所建立的可執(zhí)行文件類型的BuildOptions,設(shè)置編譯器選項的LanguageOptions,設(shè)置連接器選項的LinkOptions,設(shè)置調(diào)試器選項的CodeViewOptions等。由于用戶使用時大部分選項都可采用PWB提供的默認值,因而不必作任何修改。但對于匯編語言程序,還有必要對MASM

的選項作出某些選擇。4用Project菜單下的有關(guān)命令對源文件進行匯編和連接

CompileFile編譯(匯編)當前的源文件,生成目標文件

Build連接目標文件,生成可執(zhí)行文件

BuildAll匯編當前源文件,連接工程中的所有目標文件,生成可執(zhí)行文件5用Run菜單下的有關(guān)命令執(zhí)行程序6用CodeView調(diào)試程序匯編語言匯編語言datasegmentstring1db'thamksyou'string2db'thanksyou'mass1db'match.',13,10,'$'mass2db'nomatch!',13,10,'$'dataendscodesegmentmainprocfarassumecs:code,ds:data,es:datastart:pushdssubax,axpushax

movax,data

mov

ds,ax

mov

es,axleasi,string1leadi,string2

cld

mov

cx,10

repz

cmpsb

jzmatchleadx,mass2

jmpshortdispmatch:leadx,mass1disp:movah,09

int21hretmainendpcodeendsendstartmatch.asm匯編語言匯編語言匯編語言匯編語言match.lst

(1)匯編語言match.lst

(2)匯編語言match.lst

(3)匯編語言datasegmentstring1db'thamksyou'mass1db'match.',13,10,'$'mass2db'nomatch!',13,10,'$'dataendsextrasegmentstring2db'thanksyou'extraendscodesegmentmainprocfarassumecs:code,ds:data,es:extrastart:……

movax,data

mov

ds,ax

movax,extra

mov

es,ax……codeendsendstartmatch1.asm匯編語言匯編語言.modelsmall.datastring1db'thamksyou‘

string2db'thanksyou'mass1db'match.',13,10,'$'mass2db'nomatch!',13,10,'$'

.codemainprocfarstart:

movax,@data

mov

ds,ax

mov

es,ax……mainendpendstartmatch2.asm匯編語言匯編語言

.modeltiny.code

org100hbegin:jmp

main;************************num1dw1199Hnum2dw1166Hsumdw?;************************mainprocnear

movax,num1addax,num2

movsum,ax

movax,4c00h

int21hmainendpendbegin例:匯編語言codesegment'code'

assumecs:code

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論