




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
計(jì)算機(jī)原理計(jì)算機(jī)原理*24.1概述4.2匯編語(yǔ)言源程序的格式4.3偽指令操作4.4DOS功能調(diào)用4.5匯編語(yǔ)言程序設(shè)計(jì)
第四章匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*3機(jī)器語(yǔ)言(MachineLanguage):二進(jìn)制表示的指令和數(shù)據(jù)。匯編語(yǔ)言(AssemblyLanguage):
助記符來(lái)編寫指令,地址和數(shù)據(jù)也可用符號(hào)表示。用匯編語(yǔ)言編寫的程序必須翻譯成機(jī)器語(yǔ)言目標(biāo)程序(或目標(biāo)代碼)才能執(zhí)行,這種翻譯過(guò)程稱為匯編。高級(jí)語(yǔ)言:不針對(duì)某個(gè)具體的計(jì)算機(jī),通用性強(qiáng)。但高級(jí)語(yǔ)言編寫的源程序同樣必須“翻譯”成機(jī)器語(yǔ)言,計(jì)算機(jī)才能執(zhí)行,所用的系統(tǒng)軟件稱為編譯程序或解釋程序。第四章匯編語(yǔ)言程序設(shè)計(jì)4.1概述第四章匯編語(yǔ)言程序設(shè)計(jì)4.1概述第四章匯編語(yǔ)言程序設(shè)計(jì)4.1概述計(jì)算機(jī)原理*4用匯編語(yǔ)言編寫源程序,經(jīng)過(guò)匯編程序和連接程序生成目標(biāo)程序和執(zhí)行程序。
文件名.ASM
文件名.OBJ
文件名.EXE匯編語(yǔ)言源程序
匯編目標(biāo)程序連接執(zhí)行程序編輯程序EDIT.EXE匯編程序MASM.EXE連接程序LINK.EXE第四章匯編語(yǔ)言程序設(shè)計(jì)4.1概述計(jì)算機(jī)原理*5用文本編輯程序編寫匯編語(yǔ)言源程序,產(chǎn)生擴(kuò)展名為.ASM的源文件;用匯編語(yǔ)言編寫的源程序經(jīng)過(guò)匯編程序MASM.EXE自動(dòng)翻譯成目標(biāo)程序,產(chǎn)生擴(kuò)展名為.OBJ的目標(biāo)文件;用鏈接程序LINK.EXE將目標(biāo)程序鏈接產(chǎn)生擴(kuò)展名為.EXE的可執(zhí)行程序。用Debug.EXE進(jìn)行調(diào)試。編譯器可采用MicrosoftMASM或者BorlandTASM第四章匯編語(yǔ)言程序設(shè)計(jì)4.1概述計(jì)算機(jī)原理*6匯編程序(MASM.EXE)的主要功能是:將匯編語(yǔ)言源程序翻譯成機(jī)器語(yǔ)言;按程序員指定,分配存儲(chǔ)區(qū)域(包括程序區(qū),數(shù)據(jù)區(qū),堆棧區(qū)等);將各種進(jìn)位制數(shù)據(jù)轉(zhuǎn)換成二進(jìn)制數(shù);把字符轉(zhuǎn)換成ASCII碼;計(jì)算出數(shù)值表達(dá)式的值;對(duì)源程序進(jìn)行檢查,如果有指令錯(cuò)或程序格式錯(cuò)則給出相應(yīng)提示。第四章匯編語(yǔ)言程序設(shè)計(jì)4.1概述計(jì)算機(jī)原理*7在8086/8088匯編語(yǔ)言中,有兩類匯編語(yǔ)言指令,一類是執(zhí)行性指令,另一類是說(shuō)明性指令。對(duì)執(zhí)行性指令,匯編程序都為之產(chǎn)生機(jī)器指令代碼;而說(shuō)明性指令的作用僅僅是告訴匯編程序?qū)υ闯绦蛑械膱?zhí)行性指令應(yīng)該如何產(chǎn)生代碼,或分配存儲(chǔ)區(qū)。1、執(zhí)行性指令“執(zhí)行性指令”又稱“指令語(yǔ)句”。這類語(yǔ)句經(jīng)匯編后總有目標(biāo)程序與之對(duì)應(yīng),按其與匯編后目標(biāo)程序?qū)?yīng)情況又可分為兩種類型:一般性執(zhí)行性指令和宏指令。執(zhí)行性指令的功能主要由其對(duì)應(yīng)的目標(biāo)程序在運(yùn)行時(shí)來(lái)實(shí)現(xiàn)。
第四章匯編語(yǔ)言程序設(shè)計(jì)4.1概述計(jì)算機(jī)原理*8(1)一般性執(zhí)行指令:這種指令是一條指令對(duì)應(yīng)一條8086/8088的機(jī)器指令,即指令系統(tǒng)中包括的指令。(2)宏指令:這種指令是由偽操作定義的。宏指令是一般性指令的擴(kuò)展。(3)執(zhí)行性指令的格式
[標(biāo)號(hào):][前綴]指令助記符[操作數(shù)表][;注釋]其中[]表示根據(jù)不同的指令或不同情況可以任選的部分。操作數(shù)表是由逗號(hào)分隔開的多個(gè)操作數(shù)。標(biāo)號(hào)代表“:”后指令的存儲(chǔ)地址,供JMP,CALL和LOOP等指令操作使用。除此之外,它還具備一些其他“屬性”。第四章匯編語(yǔ)言程序設(shè)計(jì)4.1概述計(jì)算機(jī)原理*9前綴
是8086/8088中一些特殊指令,它們同其他指令配合使用,如“串操作指令”的重復(fù)指令REP。指令助記符包括8086/8088指令助記符以及用宏定義語(yǔ)句定義過(guò)的宏指令名。操作數(shù)對(duì)8086/8088的一般性執(zhí)行指令來(lái)說(shuō),可以是一個(gè)或二個(gè)操作數(shù),這時(shí)我們稱左邊的操作數(shù)為目標(biāo)操作數(shù),右邊的操作數(shù)為源操作數(shù),對(duì)宏指令來(lái)說(shuō),可能有多個(gè)操作數(shù),操作數(shù)之間有逗號(hào)隔開。注釋以“;”開始,用來(lái)簡(jiǎn)要說(shuō)明該指令在程序中的作用,以提高程序的可讀性。第四章匯編語(yǔ)言程序設(shè)計(jì)4.1概述計(jì)算機(jī)原理*102、說(shuō)明性指令(偽指令)“說(shuō)明性指令”又稱“指示性語(yǔ)句”。由偽操作符定義,用于程序以源程序方式同“匯編程序”通信。程序采用說(shuō)明性指令表示源程序的起始終止信息、分段情況、內(nèi)存結(jié)構(gòu)和變量說(shuō)明等信息。說(shuō)明性指令的功能由匯編程序來(lái)完成。說(shuō)明性指令在匯編時(shí)不產(chǎn)生任何代碼。說(shuō)明性指令的格式如下:
[名字]偽操作指令[操作數(shù)表][;注釋]
其中“名字”可以是標(biāo)識(shí)符定義的常量名、變量名、過(guò)程名、段名以及結(jié)構(gòu)名*或記錄名*等。所謂標(biāo)識(shí)符是由字母、數(shù)字、特殊字符(如?或下劃線)等組成的字符串。第四章匯編語(yǔ)言程序設(shè)計(jì)4.1概述計(jì)算機(jī)原理*11匯編語(yǔ)言源程序的例子
DATASEGMENT;定義數(shù)據(jù)段
DATA1DB0F8H,60H,0ACH,74H,3BH;被加數(shù)
DATA2DB0C1H,36H,9EH,0D5H,20H;加數(shù)
DATAENDS;數(shù)據(jù)段結(jié)束
CODESEGMENT;定義代碼段
ASSUMECS:CODE,DS:DATA;告訴匯編程序段范圍
START:MOVAX,DATAMOVDS,AX;初始化DSMOVCX,5;循環(huán)次數(shù)送CXMOVSI,0;置SI初值為零第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*12CLC;清CF標(biāo)志LOOPER:MOVAL,DATA2[SI];取一個(gè)字節(jié)加數(shù)
ADCDATA1[SI],AL;與被加數(shù)相加
INCSI;SI加1指向下一字節(jié)
DECCX ;計(jì)數(shù)器CX減1JNZLOOPER ;不等于零,轉(zhuǎn)LOOPERMOVAH,4CH;系統(tǒng)功能調(diào)用,AH=4CINT21H;退出并返回DOSCODEENDS;代碼段結(jié)束
ENDSTART;源程序結(jié)束,指定起始地址標(biāo)號(hào)第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*13常用的匯編語(yǔ)言源程序框架:
DATASEGMENT ;定義數(shù)據(jù)段
VAL1DB12H,8EH;定義變量
……DATAENDS ;數(shù)據(jù)段結(jié)束
STACKSEGMENTSTACK……STACKENDSEXTRASEGMENT……EXTRAENDS
堆棧段數(shù)據(jù)段擴(kuò)展段第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*14CODESEGMENT ;定義代碼段
ASSUMECS:CODE,DS:DATA,ES:EXTRA,SS:STACK;段屬性說(shuō)明START:MOVAX,DATA;初始化DSMOVDS,AXMOVAX,EXTRA;初始化ESMOVES,AXMOVAX,STACK;初始化SSMOVSS,AX ……MOVAX,4C00H ;返回DOSINT21HCODEENDS;代碼段結(jié)束
ENDSTART ;源程序結(jié)束第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*15匯編語(yǔ)言的語(yǔ)句執(zhí)行/指令性語(yǔ)句:可以產(chǎn)生相應(yīng)的機(jī)器碼,與機(jī)器指令相對(duì)應(yīng)。
LOOPER:MOVAL,DATA[SI]指示性語(yǔ)句(偽操作指令):不產(chǎn)生機(jī)器碼,僅為匯編程序提供匯編時(shí)所需要的信息。如:datalDW12abH該語(yǔ)句將告訴匯編程序data1定義為一個(gè)字12abH,匯編程序?qū)樗峙湟粋€(gè)存儲(chǔ)器地址,而且把該存儲(chǔ)單元與下一個(gè)存儲(chǔ)單元初始化為abH和12H。第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*16宏指令語(yǔ)句
為了書寫方便,把一個(gè)匯編語(yǔ)句序列用一條指令代替,這種指令稱為宏指令。由宏指令組成的語(yǔ)句稱為宏指令語(yǔ)句。在匯編時(shí),凡是有宏指令的地方將用相應(yīng)的匯編語(yǔ)句序列取代,所以宏指令可以產(chǎn)生目標(biāo)代碼。例如:funmacrox;x是形式參數(shù)
mov
ah,x
int21h
endm則fun為宏指令,使用時(shí)直接寫成:fun2;其中2是宏參數(shù),匯編時(shí)產(chǎn)生:
movah,2
int21h
兩條語(yǔ)句,并將它們匯編成目標(biāo)代碼。第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*17匯編語(yǔ)言語(yǔ)句的格式⑴指令語(yǔ)句格式
標(biāo)號(hào):助記符操作數(shù),‥,操作數(shù);注釋
⑵偽指令語(yǔ)句格式
名字助記符參數(shù),‥,參數(shù);注釋
⑶宏指令語(yǔ)句格式
宏指令名實(shí)參數(shù),‥,實(shí)參數(shù);注釋第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*181、標(biāo)識(shí)符標(biāo)識(shí)符即標(biāo)號(hào)和名字,標(biāo)號(hào)和名字的區(qū)別是標(biāo)號(hào)后面必須跟冒號(hào),而名字后面沒(méi)有冒號(hào)。一個(gè)標(biāo)號(hào)與一條指令的地址的符號(hào)名相聯(lián)系,即標(biāo)號(hào)是符號(hào)地址。例如上面的示例程序中Start是標(biāo)號(hào)。名字可以是變量名、段名、過(guò)程名等,例如上面的示例程序中DATA、CODE是段名,Data1、Data2是變量名。匯編語(yǔ)言中的幾個(gè)基本概念第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*19
2、保留字保留字是一個(gè)匯編語(yǔ)言中預(yù)先保留下來(lái)的具有特殊含義的符號(hào),這些符號(hào)不能濫用。
如:SEGMENTENDSOFFSETSIZEDBDWDDMOVPUSHADDSUBMULDIVINCDECLOOPPROCENDPCALLRETEND
第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*203、數(shù)的表示⑴常數(shù):
二進(jìn)(B)、八進(jìn)(O)、十進(jìn)(D)和十六進(jìn)(H)制數(shù),注意十六進(jìn)制數(shù)若以字母開頭,前面要加數(shù)字0。缺省情況下是十進(jìn)制數(shù),但可用偽指令RADIXn來(lái)改變?nèi)笔〉幕鶖?shù)。⑵字符串常數(shù):用單引號(hào)括起來(lái)的一個(gè)或多個(gè)字符組成一個(gè)字符串常數(shù),例如:‘Therezultis:’在內(nèi)存中。以字符的ASCII碼值存放,注意一個(gè)空格也是一個(gè)字符。如‘The’,在內(nèi)存中是54H、68H、65H和20H。第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*214、變量
變量是代表存放在某些存儲(chǔ)單元的數(shù)據(jù)。這些數(shù)據(jù)在程序運(yùn)行期間隨時(shí)可以修改。變量有三個(gè)屬性:段屬性、偏移屬性和類型屬性。⑴變量的定義與預(yù)置①定義變量就是給變量分配存儲(chǔ)單元,且對(duì)該存儲(chǔ)單元賦于一個(gè)符號(hào)名—變量名,同時(shí)預(yù)置初值。定義變量用數(shù)據(jù)定義偽指令DB、DW、DD、DQ、DT等。例:VAR_DATASEGMENTdata1DB12Hdata2DW5678HVAR_DATAENDS第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*22②變量的屬性
ⅰ段屬性(SEG):表示變量存放在那一個(gè)邏輯段中,例如上面定義的變量名data1和data2存放在VAR_DATA邏輯段中。對(duì)它們進(jìn)行存取時(shí)要先將它們所在段的段基值放在DS中,即執(zhí)行下面語(yǔ)句:
mov
ax,VAR_DATA
mov
ds,ax
ⅱ段的偏移屬性(offset):表示變量在邏輯段中離段起點(diǎn)的字節(jié)數(shù)。如上面的data1的偏移量為0,data2的偏移量為1。
變量的段屬性和偏移屬性構(gòu)成了變量的邏輯地址。
ⅲ類型屬性(type):表示變量占用存儲(chǔ)單元的字節(jié)數(shù)
DB1字節(jié),DW2字節(jié),DD4字節(jié),
DQ8字節(jié),DT10字節(jié)第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*23⑵
數(shù)據(jù)定義偽指令
格式:變量名偽指令名表達(dá)式1,表達(dá)式2,‥‥
這里表達(dá)式有以下幾種情況:
①數(shù)值表達(dá)式例:DA_BYTEDB50H,50,0caHDA_WORDDW0a3f1H,498dH
②?表達(dá)式,不帶引號(hào)的?表示可預(yù)置任何內(nèi)容例:DA_BDB?,?;要求分配兩個(gè)字節(jié)單元
DA_WDW?,?;要求分配兩個(gè)字單元
③字符串表達(dá)式數(shù)據(jù)項(xiàng)可以寫成字符串形式,但只能用DB、DW、DD定義,而且DW、DD語(yǔ)句定義的串只允許包含兩個(gè)字符。參看下面的例子。第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*24注意:定義多于兩個(gè)以上字符的字符串時(shí),只能使用DB偽指令,不能使用DW和DD等偽指令。例:S1 DB‘ABCDEF’S2 DW‘AB’,‘CD’,‘EF’S3 DD‘AB’,‘CD’
這幾個(gè)變量在存儲(chǔ)器中存放情況如下:S141HS242HS342H42H41H41H
43H44H00H44H43H00H45H46H44H46H45H43H00H00H第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*25
可以用DW語(yǔ)句把變量或標(biāo)號(hào)的偏移地址存入存儲(chǔ)器;也可用DD語(yǔ)句把變量或標(biāo)號(hào)的段地址和偏移地址都存入存儲(chǔ)器,此時(shí)低位字存偏移地址,高位字存段地址,例如:VAR DW 1234HLABEL:MOVAL,04H… PRVDDVAR PRLDWLABELPRRDDLABEL
…PRVPRLPRRVAR的偏移地址VAR的段地址LABEL的偏移地址LABEL的偏移地址LABEL的段地址第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*26④
帶DUP表達(dá)式,DUP是定義重復(fù)數(shù)據(jù)操作符格式:
變量名數(shù)據(jù)定義偽指令表達(dá)式1DUP(表達(dá)式2)其中表達(dá)式1是重復(fù)次數(shù),表達(dá)式2是重復(fù)內(nèi)容。例:D_B1DB20HDUP(?);保留20H個(gè)字節(jié)
D_B2DB10HDUP(‘ABCD’);字符串‘ABCD’
;重復(fù)10H次
D_W1DW10HDUP(4);字4重復(fù)10H次
ARRAYDB100DUP(0,2DUP(1,2),0,3)
;定義ARRAY700個(gè)字節(jié)⑤‘$’符號(hào),表示地址計(jì)數(shù)器的當(dāng)前值
第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*27例:ARRAYDW1,2,$+4,3,4,$+4
如果在匯編時(shí),ARRAY的偏移地址是0074H,則在ARRAY數(shù)組中,兩個(gè)$+4得到的結(jié)果是不同的,這是由于$的值是在不斷變化的。此定義在存儲(chǔ)器中的表示如下圖所示。
$用在偽操作的參數(shù)字段時(shí),和用在指令中的情況是不同的,用在偽操作中它表示的是地址計(jì)數(shù)器的當(dāng)前值。用在指令中它只表示該指令的首地址,而與$本身所在的字節(jié)無(wú)關(guān)。例如指令JNE$+6表示滿足條件時(shí)轉(zhuǎn)移到該指令的首地址加6以后所在的單元。
1000:2543JNE$+6則轉(zhuǎn)移地址是2549H.第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*2801H00H03H00H04H00H82H00HARRAY00H02H00H7CH01HARRAY00H01HARRAY02H00H01HARRAY00H02H00H01HARRAY7CH00H02H00H01HARRAY00H7CH00H02H00H01HARRAY03H00H7CH00H02H00H01HARRAY00H03H00H7CH00H02H00H01HARRAY04H00H03H00H7CH00H02H00H01HARRAY00H04H00H03H00H7CH00H02H00H01HARRAY82H00H04H00H03H00H7CH00H02H00H01HARRAY00H82H00H04H00H03H00H7CH00H02H00H01HARRAY第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*29例4-1:下面的數(shù)據(jù)段定義,COUNT表示什么?
DATASEGMENTBUFDB‘0123456789ABCD’ COUNTEQU$-BUFDATAENDS這里,COUNT的值就是數(shù)據(jù)區(qū)的長(zhǎng)度,所以COUNT=145、標(biāo)號(hào)
標(biāo)號(hào)是一條指令的目標(biāo)代碼的符號(hào)地址,它常用作轉(zhuǎn)移指令(或子程序調(diào)用指令)的操作數(shù)。標(biāo)號(hào)有三個(gè)屬性:段屬性、偏移屬性和類型屬性。段屬性是該標(biāo)號(hào)的段地址,偏移屬性是該標(biāo)號(hào)的偏移地址,類型屬性是表示該標(biāo)號(hào)的范圍是本段(NEAR)或段間(FAR),或稱為近或遠(yuǎn)屬性。第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*306、表達(dá)式和運(yùn)算符表達(dá)式由常數(shù)、操作數(shù)、操作符和運(yùn)算符組成。有六種運(yùn)算符,即算術(shù)運(yùn)算符、邏輯運(yùn)算符和關(guān)系運(yùn)算符、分析運(yùn)算符、綜合運(yùn)算符和分離運(yùn)算符。1、算術(shù)運(yùn)算符+、-、*、/、MOD(取余)、SHL(左移)、SHR(右移)例:32MOD5;結(jié)果為2MOVDX,BLOCK+(6-1)*22、邏輯運(yùn)算符(按位操作)
AND(與) OR(或) XOR(異或) NOT(非)
例:INAL,Port_VALOUTPort_VALANDOFEH,AL 第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*313、關(guān)系運(yùn)算符關(guān)系運(yùn)算是邏輯判定,當(dāng)為真時(shí)結(jié)果為全1(0FFFFH),為假時(shí)結(jié)果為全0。
EQ(等于);若PP=25,則25EQPP=0FFFFHNE(不等于);25NEPP=0LT(小于);25LT26=0FFFFHLE(小于等于);25LEPP=0FFFFHGT(大于);26GTPP=0FFFFHGE(大于等于);24GEPP=0關(guān)系運(yùn)算符一般不單獨(dú)使用,常與其它運(yùn)算符結(jié)合使用。例如:ADDAX,((portGT60)AND50)OR((portLE60)AND70)當(dāng)port的值>60時(shí),上述指令匯編為ADDAX,50當(dāng)port的值≤60時(shí),上述指令匯編為ADDAX,70第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*324、分析運(yùn)算符把存儲(chǔ)器地址操作數(shù)分解成它的組成部分。
SEG(求段地址),格式:SEG﹤符號(hào)名﹥
OFFSET(求偏移地址),格式:OFFSET﹤符號(hào)名﹥
TYPE(求符號(hào)名類型值),格式:TYPE﹤符號(hào)名﹥
SIZE求為符號(hào)名分配的字節(jié)數(shù)格式:SIZE﹤符號(hào)名﹥
回送分配給該符號(hào)名的字節(jié)數(shù),但此值是LENGTH的值和TYPE的值的乘積。類型byteworddwordqwordtbyteNEARFAR類型值124810-1(FFH)-2(FEH)第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*33LENGTH,求為符號(hào)名分配的項(xiàng)數(shù)。格式:LENGTH﹤符號(hào)名﹥
這里為符號(hào)名定義的數(shù)據(jù)項(xiàng)必須是用重復(fù)格式DUP()定義的。而對(duì)于其他情況則回送1。例
:K2DW10DUP(?)
則LENGTHK2=10 TYPEK2=2 SIZEK2=20
例:AARRDW2,4,6
則LENGTHAARR=1,TYPEAARR=2SIZEAARR=2可以看出:
SIZE<符號(hào)名>=(LENGTH<符號(hào)名>)*(TYPE﹤符號(hào)名﹥)第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*345、綜合運(yùn)算符
⑴定義符號(hào)名為新類型/類型屬性操作符格式:﹤類型﹥PTR﹤符號(hào)名﹥
PTR的功能歸納如下:
①保證運(yùn)算時(shí)操作數(shù)類型的匹配
例:F1 DB16H,38H F2DW 1234H,26ABH MOVAX,WORDPTRF1 ;AX=3816H MOVBL,BYTEPTRF2 ;BL=34H第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*35②通過(guò)PTR指明是字單元還是字節(jié)單元例:MOVBYTEPTR[BX],10H;[BX]為字節(jié)單元
MOVWORDPTR[SI],20H;[SI]為字單元③用PTR來(lái)改變距離屬性例:JMPFARPTRLLOOP CALLDWORDPTR[BX] ⑵指定新類型
格式:﹤符號(hào)名﹥EQUTHIS﹤類型﹥
例:LABCEQUTHISBYTE;LABC是字節(jié)類型
LABDDW4321H,2255H;LABD是字類型
MOVAL,LABC;AL=21HMOVAX,LABD;AX=4321H第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*366、分離運(yùn)算符
⑴取低字節(jié)格式:LOW﹤符號(hào)名﹥
⑵
取高字節(jié)格式:HIGH﹤符號(hào)名﹥
例:設(shè)SSY=2050H
moval,LOW3080H;al=80H
movah,HIGHSSY;ah=20H
mov
cl,LOW3a4bH;cl=4bH7、專用運(yùn)算符8、其它運(yùn)算符如果需要,請(qǐng)參考相關(guān)的參考書。9、匯編運(yùn)算符的優(yōu)先級(jí)第四章匯編語(yǔ)言程序設(shè)計(jì)4.2匯編語(yǔ)言源程序的格式計(jì)算機(jī)原理*374.3偽指令操作
偽指令沒(méi)有對(duì)應(yīng)的機(jī)器指令,不是由CPU執(zhí)行,而是由匯編程序識(shí)別,并完成相應(yīng)的功能。偽指令越多,應(yīng)用越方便,MASM86的偽指令可分為14類。
1、符號(hào)定義偽指令
﹤符號(hào)名﹥EQU﹤表達(dá)式﹥﹤符號(hào)名﹥
=﹤表達(dá)式﹥
例:port1EQU78port2EQUport1+2counterEQUcx
;定義為寄存器
cbdEQUDAA;定義為助記符
A=6 A=A+2
第四章匯編語(yǔ)言程序設(shè)計(jì)4.3偽指令操作第四章匯編語(yǔ)言程序設(shè)計(jì)4.3偽指令操作計(jì)算機(jī)原理*38=和EQU的區(qū)別是用=定義的符號(hào)名在同一程序中可以重復(fù)定義,而用EQU定義的符號(hào)名在同一程序中不允許重復(fù)定義。
EQU與特殊運(yùn)算符PTR或THIS連用,可以給變量或標(biāo)號(hào)定義新的類型屬性并重新命名,但其段屬性和偏移屬性不變。例:某一程序段中有以下幾條偽指令語(yǔ)句,試分析個(gè)變量的屬性。
DATA SEGMENTDDBUFEQUTHISDWORD BUF DB100DUP(?)
DWBUFEQUWORDPTRBUFDATA ENDS…FIRSTEQUTHISFAR;定義遠(yuǎn)標(biāo)號(hào),其段屬性和偏移
LEASI,BUF;屬性與緊跟其后指令的存儲(chǔ)地址相同
…DDBUF,BUF,DWBUF分別是雙字類型、字節(jié)類型和字類型,它們?yōu)橥粩?shù)據(jù)區(qū)的首址。第四章匯編語(yǔ)言程序設(shè)計(jì)4.3偽指令操作計(jì)算機(jī)原理*392、內(nèi)存數(shù)據(jù)定義偽指令
DB定義字節(jié)(前面已講過(guò)定義方法)
DW定義字(2字節(jié))
DD定義雙字(4字節(jié))
DQ定義8字節(jié)
DT定義10字節(jié)3、段定義偽指令
﹤段名﹥SEGMENT[定位方式][連接方式][‘類別名’]…
﹤段名﹥ENDS
⑴定位方式
PAGE指定起始地址的低8位是0PARA指定起始地址的低4位是0(隱含)
WORD指定起始地址的最低位是0BYTE指定起始地址是任意值第四章匯編語(yǔ)言程序設(shè)計(jì)4.3偽指令操作計(jì)算機(jī)原理*40⑵連接方式(組合類型)組合類型告訴連接程序本段與其它段的關(guān)系。有NONE,PUBLIC,COMMON,STACK,MEMORY和AT6種。缺省下是NONE,表示本段與其他段邏輯上不發(fā)生關(guān)系。STACK則指定該段在運(yùn)行時(shí)為堆棧段的一部分。(參看相關(guān)參考書)。⑶‘類別名’類別名是用單引號(hào)括起來(lái)的字符串,連接程序只使同類別的段發(fā)生關(guān)聯(lián)。
4、段寄存器說(shuō)明偽指令
ASSUME段寄存器:段定義名1[,段寄存器:段定義名2,…]
例:ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK第四章匯編語(yǔ)言程序設(shè)計(jì)4.3偽指令操作計(jì)算機(jī)原理*415、過(guò)程(子程序)定義偽指令
﹤過(guò)程名﹥PROC[NEAR或FAR];
NEAR可省略
…
﹤過(guò)程名﹥ENDP調(diào)用過(guò)程的格式為:
CALL﹤過(guò)程名﹥過(guò)程返回
RET ;段內(nèi)返回
RETF ;段間返回第四章匯編語(yǔ)言程序設(shè)計(jì)4.3偽指令操作計(jì)算機(jī)原理*426、定位偽指令格式:ORG﹤表達(dá)式﹥這里表達(dá)式是一個(gè)無(wú)符號(hào)數(shù),表示以下的程序或數(shù)據(jù)的開始地址。例4-2:下面程序段,指出變量BUF和NUM的偏移地址為多少?DATA SEGMENT ORG10 BUFDB ‘ABCD’ ORG$+5 NUMDW 50DATA ENDS
變量BUF的偏移地址為10;變量NUM的偏移地址為19第四章匯編語(yǔ)言程序設(shè)計(jì)4.3偽指令操作計(jì)算機(jī)原理*437、對(duì)準(zhǔn)偽操作
格式:EVEN
;使下一個(gè)字節(jié)地址成為偶數(shù)。8、基數(shù)控制偽操作指令
格式:RADIX表達(dá)式該表達(dá)式表示進(jìn)制的基數(shù)值(2-16),注意用十進(jìn)制表示
其它類型的偽指令及宏指令,請(qǐng)參看相關(guān)的參考書。第四章匯編語(yǔ)言程序設(shè)計(jì)4.3偽指令操作計(jì)算機(jī)原理*44
通常把DOS提供的INT21H中斷服務(wù)程序稱為DOS功能調(diào)用,調(diào)用時(shí)根據(jù)AH的值來(lái)選擇子功能。AH=1鍵盤鍵入并回顯,輸入字符的ASCII碼在AL中返回例:MOVAH,1INT21HAH=2顯示輸出字符,輸出字符的ASCII碼放入DL中例:MOVAH,2 MOVDL,‘A’INT21HAH=7鍵盤輸入無(wú)回顯,輸入字符的ASCII碼在AL中返回例:MOVAH,7INT21H第四章匯編語(yǔ)言程序設(shè)計(jì)4.4DOS功能調(diào)用第四章匯編語(yǔ)言程序設(shè)計(jì)4.4DOS功能調(diào)用計(jì)算機(jī)原理*45AH=9顯示字符串,字符串以‘$’結(jié)束,開始位置用DS:DX指示例:MOVAX,MY_DATAMOVDS,AXLEADX,StringMOVAH,9INT21HAH=4C程序運(yùn)行結(jié)束,返回操作系統(tǒng),返回碼由AL給出例:MOVAX,4C00HINT21H第四章匯編語(yǔ)言程序設(shè)計(jì)4.4DOS功能調(diào)用計(jì)算機(jī)原理*461、程序編制及調(diào)試匯編語(yǔ)言源程序的編制
編輯環(huán)境:EDIT、ULTRAEDIT、NOTEPAD等。存盤形式:ASCII形式注意:編輯好的源程序必須以擴(kuò)展名.ASM來(lái)命名。匯編源程序的編譯將匯編源程序轉(zhuǎn)換成目標(biāo)(OBJ)文件編譯器:MICROSOFTMASM5.0+、BROLANDTASM2.0+存盤形式:Binary形式注意:編譯完成后生成擴(kuò)展名為.OBJ的目標(biāo)文件。如果源程序有語(yǔ)法錯(cuò)誤,則給出相應(yīng)的錯(cuò)誤提示及錯(cuò)誤代碼。連接將一個(gè)目標(biāo)文件或者多個(gè)目標(biāo)文件連接(再定位)生成可執(zhí)行文件。第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*47連接器:MICROSOFTLINK5.0+、BROLANDTLINK2.0+存盤形式:Binary形式.COM文件與.EXE文件的區(qū)別1、.COM文件是內(nèi)存映像文件,執(zhí)行時(shí)直接裝入內(nèi)存即可執(zhí)行。其中代碼段、數(shù)據(jù)段、堆棧段等的段地址完全相同。一般程序長(zhǎng)度小于64KB。裝入執(zhí)行速度相對(duì)較快。2、.EXE文件不是內(nèi)存映像文件,執(zhí)行時(shí)需要把代碼段、數(shù)據(jù)段、堆棧段等重新定位,然后才能夠執(zhí)行。程序長(zhǎng)度可以大于64KB。裝入執(zhí)行速度相對(duì)較慢。3、不論是.COM文件還是.EXE文件裝入內(nèi)存時(shí)都產(chǎn)生一個(gè)PSP(程序前綴段),里面是程序運(yùn)行的一些基本信息,存放在程序的開始位置0-FFH,PSP的長(zhǎng)度是256Byte。調(diào)試
調(diào)試工具:DEBUG、TDEBUG。
第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*48常用的匯編語(yǔ)言程序框架:
DATA SEGMENT ;定義數(shù)據(jù)段
VAL1DB12H,8EH ;定義變量
……DATA ENDS ;數(shù)據(jù)段結(jié)束STACKSEGMENTSTACK……STACKENDSEXTRASEGMENT……EXTRAENDSCODESEGMENT ;定義代碼段ASSUMECS:CODE,DS:DATA,ES:EXTRA,SS:STACK;段屬性說(shuō)明START:MOVAX,DATA ;初始化DSMOVDS,AXMOVAX,EXTRA;初始化ESMOVES,AXMOVAX,STACK;初始化SSMOVSS,AX……
第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*49MOVAX,4C00H ;返回DOSINT21HCODEENDS ;代碼段結(jié)束ENDSTART ;源程序結(jié)束第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*502、開發(fā)調(diào)試?yán)汤?-2編寫一個(gè).EXE文件,顯示’Hello!’并響鈴
(Test1.asm)
Datasegment;定義數(shù)據(jù)段
stringdb‘Hello!’,7,’$’ Dataends Stacksegmentstack ;定義堆棧段
db256dup(0) Stackends Codesegment;代碼段開始
assumecs:Code,ds:Data,ss:Stack
Start:movax,data
mov
ds,ax leadx,string;取String的有效地址
movah,09h
int21h;調(diào)用dos的09號(hào)功能
movah,4c
int21h;退出
codeendsendstart第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*51將程序存盤為Test1.asmd:\>masmTest1 ;編譯程序,不需加.asm
擴(kuò)展名d:\>linkTest1 ;連接程序,不需加.obj
擴(kuò)展名編譯時(shí),當(dāng)執(zhí)行d:\>masmTest1時(shí),屏幕會(huì)出現(xiàn)
Objectfilename[Test1.OBJ]: Sourcelisting[NUL.LST]: Cross-reference[NUL.CRF]:如果有語(yǔ)法錯(cuò)誤,則還會(huì)出現(xiàn)類似的錯(cuò)誤提示:Test1.ASM(18):errorA2056:Immediatemodeillegal編譯輸入為.ASM文件,輸出有三個(gè)文件:.OBJ,二進(jìn)制目標(biāo)文件.LST,列表文件,該文件列出源程序和機(jī)器碼清單,并給出符號(hào)表,以便調(diào)試。該文件可有可無(wú)。.CRF,用于產(chǎn)生交叉引用表,給出用戶定義的所有符號(hào)及所在行號(hào)。該文件可有可無(wú)。第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*52例2編寫一個(gè).COM文件
codesegmentassumecs:code,ds:code,ss:code,es:code org100h ;偽指令,表示下面代碼的偏移地
mainprocfar ;址從100h處開始
leadx,string
movah,09h
int21h
movax,4c00h
int21h mainendp stringdb‘Hello!’,7,’$’ ;數(shù)據(jù)定義
codeends endmain第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*53DEBUG調(diào)試命令介紹
DEBUG軟件是DOS系統(tǒng)下的匯編語(yǔ)言調(diào)試分析工具,在DOS下執(zhí)行DEBUG.EXE出現(xiàn)提示符‘-’,進(jìn)入到DEBUG調(diào)試環(huán)境。默認(rèn)條件為:
默認(rèn)使用十六進(jìn)制數(shù)據(jù),并且不用加后綴H;地址一般由段地址和偏移量組成,若在命令中不指明段地址,默認(rèn)使用DS中的段地址。進(jìn)入DEBUG后,可按Q鍵退出,或按?查看幫助。第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*54命令介紹匯編命令A(yù)(Assemble)一般用法:-A;從當(dāng)前地址輸入?yún)R編源程序
-A地址;從指定位置輸入?yún)R編程序反匯編命令U(Unassemble)一般用法:-U;從當(dāng)前位置將機(jī)器碼反匯編成源程序
-U地址;從指定位置將機(jī)器碼反匯編成源程序
-U地址1地址2;按照指定位置將機(jī)器碼反匯編;成源程序,地址1為開始位置,;地址2為結(jié)束位置第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*55Debug環(huán)境下執(zhí)行匯編命令A(yù)所見(jiàn)畫面Debug環(huán)境下執(zhí)行反匯編命令U所見(jiàn)畫面第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*56顯示內(nèi)存命令D(Display)
-D ;從當(dāng)前位置開始顯示128個(gè)字節(jié)的內(nèi)容
-D地址;從指定位置開始顯示128個(gè)字節(jié)的內(nèi)容
-D地址1地址2;功能同上,地址1為起始地址,;地址2為結(jié)束地址修改內(nèi)存單元命令E(Editor)
-E地址 ;顯示指定內(nèi)存單元的內(nèi)容,并修改
-E地址數(shù)據(jù);修改指定地址的內(nèi)存單元的內(nèi)容,
;多個(gè)數(shù)據(jù)可以用空格隔開,用回車;完成修改例:-e100‘Hello’7‘$’;單引號(hào)表示輸入ASCII碼第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*57Debug環(huán)境下執(zhí)行顯示內(nèi)存命令d后所見(jiàn)畫面Debug環(huán)境下執(zhí)行顯示寄存器命令r后所見(jiàn)畫面第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*58顯示和修改寄存器命令R(Register)
-R ;顯示所有寄存器的內(nèi)容
-R寄存器名;顯示并修改指定寄存器的內(nèi)容在DEBUG環(huán)境中用一些符號(hào)表示標(biāo)志位,說(shuō)明如下:
標(biāo)志邏輯真邏輯假標(biāo)志邏輯真邏輯假
OFOVNVAFACNADFDNUPPFPEPOIFEIDICFCYNCSFNGPL沒(méi)有TF:跟蹤單步標(biāo)志
ZFZRNZ第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*59執(zhí)行命令G(Go)-G;從當(dāng)前IP指示的地址開始執(zhí)行程序
-G=起始地址;從指定的地址開始執(zhí)行程序
-G=起始地址斷點(diǎn)地址;從指定的地址開始執(zhí)行程序,并;執(zhí)行到斷點(diǎn)處暫停單步執(zhí)行指令T和PT:跟蹤進(jìn)入子程序
P:不跟蹤進(jìn)入子程序一般用法:-T;執(zhí)行一條指令
-Tn;執(zhí)行n條指令其他指令:N(定義名字)W(寫磁盤)L(從磁盤裝入)退出命令:Q;退出DEBUG,返回DOS第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*60在debug環(huán)境下編制匯編程序?qū)憛R編程序
MOVDX,10CMOVAH,9;顯示字符串,DS:DX=串地址;‘$’=結(jié)束符
INT21;DOS功能調(diào)用
MOVAH,4C ;帶返回碼結(jié)束,AL=返回碼
INT21寫數(shù)據(jù)-E10C‘Hello!’7‘$’運(yùn)行程序-G=100取程序名字-NT;默認(rèn)存放在當(dāng)前目錄設(shè)置程序長(zhǎng)度
-RBX ;設(shè)置程序長(zhǎng)度
:0 ;64K的倍數(shù)
-RCX ;設(shè)置程序長(zhǎng)度
:20 ;字節(jié)數(shù)第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*61寫入磁盤:-W
;存盤,若未指定地址則從CS:0100H開始,
;要寫入的文件字節(jié)數(shù)應(yīng)先放入BX和CX中 執(zhí)行:-G=100或退出DEBUG后,在DOS下執(zhí)行T裝入程序:-NT-L;把文件裝入存儲(chǔ)器,若未指定地址,則數(shù)據(jù)從CS:0100H開始第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*621、順序結(jié)構(gòu)程序設(shè)計(jì)第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*63例4.3從鍵盤輸入一個(gè)小寫字母,轉(zhuǎn)換成大寫字母輸出。分析:AH=1,int21h從鍵盤輸入一個(gè)字符并回顯AH=2,int21h輸出一個(gè)字符,輸出字符的ASCII碼放在DL中字符ASCII碼
a-z 61h–7AhA–Z 41h–5Ah;4_3.asmDataSegmentstring1db‘Pleaseinput(a–z):$’string2db0dh,0ah,‘Theresultis:$’DataEndsStacksegmentstackdb256dup(?)StackEndsCodeSegmentassumecs:code,ss:stack,ds:datamainprocfarstart:mov
ax,data
第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*64
mov
ds,ax leadx,string1
movah,9 ;顯示提示符1
int21h
movah,1 ;輸入小寫字符
int21hsubal,20hpushaxleadx,string2
movah,9;顯示提示符2
int21hpopax
movah,2;輸出大寫字符
movdl,al
int21h
movax,4c00h
int21h ;返回DOSmainendpcodeendsendstart第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*65例4.4在數(shù)據(jù)段中存放兩個(gè)32位二進(jìn)制無(wú)符號(hào)數(shù)DATA1和DATA2,編制一程序計(jì)算兩數(shù)之和,結(jié)果存于RESULT單元中。分析:;4_4.asmdatasegmentdata1dd1565764587data2dd1293773646resultdd?dataendsstacksegmentstack
dw128dup(0)stackendsdata1data2result+高16位低16位CF第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*66codesegmentassumecs:code,ds:data,ss:stackmainprocfarstart: pushds
movax,0 pushax
movax,data
mov
ds,ax
movax,wordptrdata1 ;低16位相加
addax,wordptrdata2
movwordptrresult,ax
movax,wordptrdata1+2
adcax,wordptrdata2+2;高16位相加
movwordptrresult+2,ax
retfMainendpCodeendsEndstart第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*67例4.5以16進(jìn)制形式顯示存儲(chǔ)器中一個(gè)字節(jié)的無(wú)符號(hào)數(shù)VAR。例如:11010101顯示D5分析:將一個(gè)字節(jié)分為高4位,低4位兩部分先顯示高4位,后顯示低4位,顯示時(shí)若用int21h中的2號(hào)子功能,需要字符的ASCII碼數(shù)值字符ASCII碼
0000~10010~930h~39h 1010~1111A~F41h~46h;4_5.asmdatasegment
var db100dataendsstacksegmentstackdb 256dup(?)Stackends第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*68Codesegmentassumecs:code,ds:data,ss:stackmainprocfar
movax,data
mov
ds,ax
moval,var
mov
dh,al
movcl,4
shral,clcallubasccallpchar
moval,dhcallubasc
callpchar
movax,4c00h
int21hmainendp;顯示一個(gè)字符pcharproc
movah,02h
movdl,al
int21h
ret
pchar
endp;將AL的低4位轉(zhuǎn)換為ASCII碼ubascprocandal,0fh
addal,30h
cmpal,‘9’
jnaubasc1
addal,07h
ubasc1:retubasc
endpcodeendsendstart;ubascproc;andal,0fh;addal,90h;daa;adcal,40h;daa;ret;ubasc
endp;將AL的低4位轉(zhuǎn)換為ASCII的另一種方法第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*692、分支結(jié)構(gòu)程序設(shè)計(jì)第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*70二分支結(jié)構(gòu)例4.6在數(shù)據(jù)段中有兩個(gè)16位二進(jìn)制無(wú)符號(hào)數(shù)DATA1和DATA2,找出其中較小數(shù),并存于MIN中。;4_6.asmdatasegmentdata1dw2000hdata2dw3f80hmindw?dataendsstacksegmentstackdb256dup(?)stackendscodesegmentassumecs:code,ds:data,ss:stackmainprocfarpushds
movax,0pushax
movax,data
mov
ds,ax
movax,data1
cmpax,data2
jnaenext
movax,data2next:
movmin,axretmainendpcodeendsendmain第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*71三分支結(jié)構(gòu)例4.7判斷變量var中的值,若為正數(shù),在result中存入0001H;為負(fù)數(shù),在result中存入FFFFH;為零,在result中存入0000H。;4_7.asmdatasegment
var
dw2000hresultdw0dataendsstacksegmentstack
dw100dup(0)stackendscodesegmentassumecs:code,ds:data,ss:stackmainprocfar pushds
movax,0pushax
movax,data
mov
ds,ax
movax,var
cmpax,0
jlless
jggreat
movax,0
jmpshortnextless:
movax,0ffffh
jmpshortnextgreat:
movax,0001hnext:
movresult,axretmainendpcodeendsendmain
第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*72多分支機(jī)構(gòu)例4.8根據(jù)內(nèi)存字節(jié)變量control被置位的情況控制程序轉(zhuǎn)移到8個(gè)子程序中的一個(gè)。;4_8.asmdatasegment
brn_tab
dwsubr1,subr2,subr3
dwsubr4,subr5,subr6
dwsubr7,subr8controldb40hdataendsstacksegmentstackdb100dup(0)stackendscodesegmentassumecs:code,ds:data,ss:stackmainprocfarStart:pushds
xor
ax,ax變量control轉(zhuǎn)入子程序00000001subr100000010subr200000100subr300001000subr400010000subr500100000subr601000000subr710000000subr8第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*73pushax
movax,data
mov
ds,axleabx,brn_tab
moval,controlgtbit:
rcral,1
jc
getagaddbx,2
jmpshortgtbitgetag:call[bx]retmainendpsubr1proc……retsubr1endp...subr8proc……retsubr8endpcodeendsendmain第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*743、循環(huán)程序設(shè)計(jì)第四章匯編語(yǔ)言程序設(shè)計(jì)4.5匯編語(yǔ)言程序設(shè)計(jì)計(jì)算機(jī)原理*75單重循環(huán)例4.9在數(shù)據(jù)段中以buffer單元開始存放10個(gè)16位二進(jìn)制有符號(hào)數(shù),把其中最大數(shù)找出來(lái)存于MAX單元中,試編程。;4_9.asmdatasegmentbufferdw-100,300
dw5281,222
dw4262,9232
dw2238,-3632
dw-3144,6322countequ($-buffer)/2maxdw?dataendsstacksegmentstackdb256dup(?)stackends
codesegment assumecs:code,ds:data,ss:stackmainprocfarstart:pushds
movax,0pushaxmovax,datamov
ds,axleabx,buffermov
cx,count-1movax,[bx]circle:incbxin
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 商業(yè)秘密保護(hù)與企業(yè)競(jìng)爭(zhēng)力提升
- 2025年放射性物質(zhì)運(yùn)輸與儲(chǔ)存安全協(xié)議
- 如何防范數(shù)據(jù)安全漏洞
- 人防工程施工中的勞動(dòng)保障與工人健康管理
- 人防工程施工中的環(huán)境影響評(píng)估與控制
- 文化藝術(shù)與社會(huì)發(fā)展的互動(dòng)關(guān)系
- 2025年秋季學(xué)期江蘇省南京市七年級(jí)下學(xué)期期末數(shù)學(xué)試卷(含邏輯推理2025年應(yīng)用題)
- T-WHCIA 1003-2023 全過(guò)程工程咨詢服務(wù)管理標(biāo)準(zhǔn)
- 師風(fēng)師德演講培訓(xùn)81
- 牦牛產(chǎn)業(yè)鏈中冷鏈物流的創(chuàng)新模式
- 中醫(yī)內(nèi)科學(xué)研究進(jìn)展知到章節(jié)答案智慧樹2023年浙江中醫(yī)藥大學(xué)
- 名人簡(jiǎn)介英文版(帶中文的)-周恩來(lái)(1) 2
- 45#(S45C)鋼的MSDS資料(英文版)
- 中國(guó)各省市地圖模塊化可編輯
- T-HIS 005-2021 基于窄帶物聯(lián)網(wǎng)(NB-IoT)技術(shù)的水表抄表系統(tǒng)
- YC/T 207-2014煙用紙張中溶劑殘留的測(cè)定頂空-氣相色譜/質(zhì)譜聯(lián)用法
- 關(guān)于印發(fā)《民醫(yī)院卒中篩查制度》的通知
- 工會(huì)基礎(chǔ)工作操作實(shí)務(wù)(培訓(xùn))課件
- 防治水培訓(xùn)課件
- 光譜CT臨床應(yīng)用
- 山東省水利水電工程施工企業(yè)安全生產(chǎn)管理三類人員考試題庫(kù)-上(單選、多選題)
評(píng)論
0/150
提交評(píng)論