錢(qián)曉捷-匯編語(yǔ)言程序設(shè)計(jì)課后習(xí)題(作業(yè)新)_第1頁(yè)
錢(qián)曉捷-匯編語(yǔ)言程序設(shè)計(jì)課后習(xí)題(作業(yè)新)_第2頁(yè)
錢(qián)曉捷-匯編語(yǔ)言程序設(shè)計(jì)課后習(xí)題(作業(yè)新)_第3頁(yè)
錢(qián)曉捷-匯編語(yǔ)言程序設(shè)計(jì)課后習(xí)題(作業(yè)新)_第4頁(yè)
錢(qián)曉捷-匯編語(yǔ)言程序設(shè)計(jì)課后習(xí)題(作業(yè)新)_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

目錄

習(xí)題1....................................................................................................1

習(xí)題2...................................................................................................4

習(xí)題3....................................................................................................10

習(xí)題4....................................................................................................13

習(xí)題5....................................................................................................15

習(xí)題6....................................................................................................18

習(xí)題7...................................................................................................21

習(xí)題8...................................................................................................24

習(xí)題9...................................................................................................27

習(xí)題1

1.1簡(jiǎn)述計(jì)算機(jī)系統(tǒng)的硬件組成及各部分作用。

1.2明確下列概念或符號(hào):

主存和輔存,RAM和ROM,存儲(chǔ)器地址和I/O端口,KB,MB,GBTB0

1.3什么是匯編語(yǔ)言源程序、匯編程序、目標(biāo)程序?

1.4匯編語(yǔ)言與高級(jí)語(yǔ)言相比有什么優(yōu)缺點(diǎn)?

1.5將下列十六進(jìn)制轉(zhuǎn)化為二進(jìn)制和十進(jìn)制表示。

(l)FFH(2)0H(3)5EH(4)EFH

(5)2EH(6)10H(7)1FH(8)ABH

1.6將下列十進(jìn)制數(shù)轉(zhuǎn)換為BCD碼表示。

(1)12(2)24(3)68(4)127

(5)128(6)255(7)1234(8)2458

解答:

十進(jìn)制數(shù)BCD碼

1200010010

2400100100

6801101000

127000100100111

128000100101000

255001001010101

12340001001000110100

24580010010001011000

L7將下列BCD碼轉(zhuǎn)換為十進(jìn)制數(shù)。

(1)10010001(2)10001001(3)00110110(4)10010000

(5)00001000(6)10010111(7)10000001(8)00000010

解答:

BCD碼十進(jìn)制數(shù)

1001000191

1000100189

0011011036

1001000090

0000100008

1001011197

1000000181

0000001002

1.8將下列十進(jìn)制數(shù)分別用八位二進(jìn)制數(shù)的原碼、反碼和補(bǔ)碼表示。

(1)0(2)-127(3)127(4)-57(5)126(6)-126(7)-128

(8)68

1.9完成下列二進(jìn)制數(shù)的計(jì)算。

(1)1011+1001(2)1011-1001(3)1011X1001(4)10111000/1001

(5)1011A1001(6)1011V1001(7)~1011(8)1011?1001

1.10數(shù)碼0?9,大寫(xiě)字母A?Z,小寫(xiě)字母a?z,對(duì)應(yīng)的ASCH碼分別是多

少?ASCH碼為OdH,OaH對(duì)應(yīng)的是什么字符?

解答:

大寫(xiě)字母A?Z,對(duì)應(yīng)的ASCH碼分別是41H-5AH

小寫(xiě)字母a?z,對(duì)應(yīng)的ASCH碼分別是61H?7AH

ASCH碼為OdH,OaH分別對(duì)應(yīng)“回車(chē)”、“換行”

1.11計(jì)算機(jī)中有一個(gè)“01100001”編碼,如果把它認(rèn)為是無(wú)符號(hào)數(shù),它是十進(jìn)

制什么數(shù)?如果你認(rèn)為它是BCD碼,則表示什么數(shù)?如果它是某個(gè)ASCH碼,則

代表哪個(gè)字符?

1.12簡(jiǎn)述Intel80x86系列微處理器在指令集方面的發(fā)展。

1.13什么是DOS和ROM-BIOS?

1.14簡(jiǎn)述PC最低1MB貯存空間的使用情況。

1.15羅列8086CPU的8個(gè)8位和16位通用寄存器,并說(shuō)明各自的作用。

1.16什么是標(biāo)志?它有什么用途?狀態(tài)標(biāo)志和控制標(biāo)志有什么區(qū)別?畫(huà)出標(biāo)志

寄存器FLAGS,說(shuō)明各個(gè)標(biāo)志的位置和含義。

1.17舉例說(shuō)明CF和OF標(biāo)志的差異。

解答:溢出標(biāo)志OF和進(jìn)位標(biāo)志CF是兩個(gè)意義不同的標(biāo)志

進(jìn)位標(biāo)志表示無(wú)符號(hào)數(shù)運(yùn)算結(jié)果是否超出范圍,運(yùn)算結(jié)果仍然正確;溢出標(biāo)志

表示有符號(hào)數(shù)運(yùn)算結(jié)果是否超出范圍,運(yùn)算結(jié)果已經(jīng)不正確

例1:3AH+7CH=B6H

無(wú)符號(hào)數(shù)運(yùn)算:58+124=182,范圍內(nèi),無(wú)進(jìn)位

有符號(hào)數(shù)運(yùn)算:58+124=182,范圍外,有溢出

例2:AAH+7cH=(1)26H

無(wú)符號(hào)數(shù)運(yùn)算:170+124=294,范圍外,有進(jìn)位

有符號(hào)數(shù)運(yùn)算:—86+124=28,范圍內(nèi),無(wú)溢出

1.18字和雙字在存儲(chǔ)器中如何存放,什么是“小端方式”?對(duì)字和雙字存儲(chǔ)單

元,什么是它們的對(duì)齊地址?為什么要對(duì)齊地址?

1.19什么是8086中的邏輯地址和物理地址?邏輯地址如何轉(zhuǎn)換為物理地址?

請(qǐng)將如下邏輯地址用物理地址表示(表達(dá)地址默認(rèn)采用十六進(jìn)制):

(1)FFFF:0(2)40:17(3)2000:4500(4)B821:4567

解答:對(duì)應(yīng)每個(gè)物理存儲(chǔ)單元都有一個(gè)唯一的20位編號(hào),就是物理地址,從

OOOOOH-FFFFFH

在8086內(nèi)部和用戶編程時(shí),采用的段基地址:段內(nèi)偏移地址形式稱(chēng)為邏輯地

將邏輯地址中的段地址左移4位,加上偏移地址就得到20位物理地址

請(qǐng)將如下邏輯地址用物理地址表達(dá):

(1)FFFFh:O=FFFFOH

(2)40h:17h=00417H

(3)2000h:4500h=24500H

(4)B821h:4567h=BC777H

1.208086有哪4種邏輯段?各種邏輯段分別是什么用途?

解答:代碼段(CodeSegment)用來(lái)存放程序的指令序列。處理器利用CS:IP

取得下一條要執(zhí)行的指令

堆棧段(StackSegment)確定堆棧所在的主存區(qū)域。處理器利用SS:SP操作

堆棧中的數(shù)據(jù)

數(shù)據(jù)段(DataSegment)存放當(dāng)前運(yùn)行程序所用的數(shù)據(jù)。處理器利用DS:EA

存取數(shù)據(jù)段中的數(shù)據(jù)

附加段(ExtraSegment)是附加的數(shù)據(jù)段,也用于數(shù)據(jù)的保存。處理器利用ES:

EA存取數(shù)據(jù)段中的數(shù)據(jù)

1.21數(shù)據(jù)的默認(rèn)段是哪個(gè)?是否允許其他段存放數(shù)據(jù)?如果允許,如何實(shí)現(xiàn)?

有什么要求?

1.22什么是操作碼、操作數(shù)和尋址方式?有哪三種給出操作數(shù)的方法?

1.23什么是有效地址EA?8086的操作數(shù)如果在主存中,有哪些尋址方式可以存

取它?

1.24說(shuō)明下列指令中源操作數(shù)的尋址方式?如果BX=2000H,DI=40H,給出DX

的值或有效地址EA的值。

(l)Movdx,[1234h]

(2)Movdx,1234h

(3)Movdx,bx

(4)Movdx,[bx]

(5)Movdx,[bx+1234h]

(6)Movdx,Ebx+di]

(7)Movdx,[bx+di+1234h]

解答:(1)movdx,[1234h];直接尋址,EA=1234h

(2)movdx,1234h;立即數(shù)尋址,DX=1234h

(3)movdx,bx;寄存器尋址,DX=2000h

(4)movdx,[bx];間接尋址,EA=2000h

(5)movdx,[bx+1234h];相對(duì)尋址,EA=3234h

(6)movdx,[bx+di]

;基址變址尋址,EA=2040h

(7)movdx,[bx+di+1234h]

;相對(duì)基址變址尋址,EA=3274h

習(xí)題2

2.1已知DS=2000H,BX=0100H,SI=0002H,存儲(chǔ)單元[20100田”[20103]依次存放

12345678H,[21200H]?[21203H]依次存放2A4CB765H,說(shuō)明下列每條指令

執(zhí)行后AX寄存器的內(nèi)容。

(l)Movax,1200h

(2)Movax,bx

(3)Movax,[1200h]

(4)Movax,[bx]

(5)Movax,[bx+llOOh]

(6)Movax,[bx+si]

(7)Movax,[bx][si+llOOh]

解答:(1)movax,1200h;AX=1200h

(2)movax,bx;AX=OlOOh

(3)movax,[1200h];AX=4C2Ah

(4)movax,[bx];AX=3412h

(5)movax,[bx+HOOh];AX=4C2Ah

(6)movax,[bx+si];AX=7856h

(7)movax,[bx][si+llOOh];AX=65B7h

2.2指出下列指令的錯(cuò)誤

(l)movex,dl(2)movip,ax

(3)moves,1234h(4)moves,ds

(5)moval,300(6)mov[sp],ax

(7)movax,bx+di(8)mov20h,ah

2.3已知數(shù)字0?9對(duì)應(yīng)的格雷碼依次為:

18H,34H,05H,06H,09H,OAH,OCH,11H,12H,14H,它存在于以table為首地址(設(shè)

為200H)的連續(xù)區(qū)域中。為如下程序段的每條指令加上注釋?zhuān)f(shuō)明每條指令的

功能和執(zhí)行結(jié)果。

Leabx,table

Moval,8

Xlat

2.4什么是堆棧?他的工作原則是什么?它的基本操作有哪兩個(gè)?對(duì)應(yīng)哪兩種

指令?

2.5已知SS=2200H,SP二OOBOH,畫(huà)圖說(shuō)明執(zhí)行下列指令序列時(shí),堆棧區(qū)和SP的

內(nèi)容如何變化?

Movax,8057h

Pushax

Movax,0f79h

Pushax

Popbx

Pop[bx]

解答:movax,8057h

pushax

movax,0f79h

pushax

popbx;bx=0f79h

pop[bx]

;DS:[0f79h]=8057h

2.6給出下列各條指令執(zhí)行后AL的值,以及CF,ZF,SF,OF,PF的狀態(tài):

Moval,89h

Addal,al

Addal,9dh

Cmpal,Obch

Subal,al

Decal

Incal

解答:

moval,89h;AL=89hCFZFSFOFPF

addal,al;AL=12h10011

addal,9dh;AL=0afh00101

cmpal,Obch;AL=0afh10101

subal,al;AL=OOh01001

decal;AL=Offh00101

incal;AL=OOh01001

2.7設(shè)X,Y,Z均為雙字?jǐn)?shù)據(jù),分別存放在地址為X,X+2;Y,Y+2;Z,Z+2的存儲(chǔ)單元

中,它們的運(yùn)算結(jié)果存入W單元。閱讀以下程序段,給出運(yùn)算公式。

Movax,X

Movdx,X+2

Addax,Y

Adcdx,Y+2

Addax,24

Adcdx,0

Subax,Z

Sbbdx,Z+2

MovW,ax

movW+2,dx

解答:W=X+Y+24-Z

2.8請(qǐng)分別用一條匯編語(yǔ)言指令完成如下功能:

(1)把BX寄存器和DX寄存器的內(nèi)容相加,結(jié)果存入DX寄存器。

ADDDX,BX

(2)用寄存器BX和SI的基址變址尋址方式把存儲(chǔ)器的1字節(jié)與AL寄存器的

內(nèi)容相加,并把結(jié)果送到AL中。

ADDAL,[BX+SI]

(3)用BX和位移量0B2H的寄存器相對(duì)尋址方式把存儲(chǔ)器中的一個(gè)字和CX寄

存器的內(nèi)容相加,并把結(jié)果送回存儲(chǔ)器中。

ADD[BX+0B2H],CX

(4)用位移量為0520H的直接尋址方式把存儲(chǔ)器中的一個(gè)字與數(shù)3412H相加,

并把結(jié)果送回該存儲(chǔ)單元中。

ADDWORDPTR[0520H],3412H

(5)把數(shù)OAOH與AL寄存器的內(nèi)容相加,并把結(jié)果送回AL中。

ADDAL,OAOH

2.9設(shè)X,Y,Z,V均為十六位帶符號(hào)數(shù),分別裝在X,Y,Z,V存儲(chǔ)單元中,閱讀以下

程序段,得出它的運(yùn)算公式,并說(shuō)明運(yùn)算結(jié)果存于何處。

Movax,X

ImulY

Movex,ax

Movbx,dx

Movax,Z

Cwd

Addex,ax

Adebx,dx

Subex,540

Sbbbx,0

Movax,v

Cwd

Subax,ex

Sbbdx,bx

IdivX

2.10指出下列指令的錯(cuò)誤

(l)xchg[si]30h

(2)Popcs

(3)Sub[si],[di]

(4)Pushah

(5)Adcax,ds

(6)Add[si],80h

(7)Inal,3fch

(8)Outdx,ah

解答:(1)xchg[si],30h:xchg的操作數(shù)不能是立即數(shù)

(2)popCS;不能對(duì)CS直接賦值

(3)sub[si],[di];兩個(gè)操作數(shù)不能都是存儲(chǔ)單元

(4)pushah;堆棧的操作數(shù)不能是字節(jié)量

(5)adcax,ds;adc的操作數(shù)不能是段寄存器

(6)add[si],80h;沒(méi)有確定是字節(jié)還是字操作

(7)inal,3fch;in不支持超過(guò)FFH的直接尋址

(8)outdx,ah;out只能以AL/AX為源操作數(shù)

2.11給出下列各條指令執(zhí)行后的結(jié)果,以及狀態(tài)標(biāo)志CF,OF,SF,ZF,PF的狀態(tài)。

Movax,1470h

Andax,ax

Orax,ax

Xorax,ax

Notax

Testax,OfOfOh

2.12假設(shè)例題2.34中的程序段中,AX=08h,BX=1OH,請(qǐng)說(shuō)明每條指令執(zhí)行后的

結(jié)果和各個(gè)標(biāo)志位的狀態(tài)

2.13編寫(xiě)程序段完成如下要求

(1)用位操作指令實(shí)現(xiàn)AL(無(wú)符號(hào)數(shù))乘以10o

答;不考慮進(jìn)位:考慮進(jìn)位

movbl,alxorah,ah

movcl,3movbx,ax

shlal,clmovcl,3

addal,bl;shlbl,1shlax,cl

addal,bladdax,bx;shlbx,l

addax,bx

(2)用邏輯運(yùn)算指令實(shí)現(xiàn)數(shù)字0到9的ASCII碼與非壓縮BCD碼的互相轉(zhuǎn)換。

答:數(shù)字0?9的ASCII碼是:30h-39h

非壓縮BCD碼的0?9是:00h?09h

方法一:

andal,Ofh;實(shí)現(xiàn)ASCII到非壓縮BCD碼的轉(zhuǎn)換

oral,30h;實(shí)現(xiàn)非壓縮BCD碼到ASCII的轉(zhuǎn)換

(一)testal,30h

jnzASCII

oral,30h;非壓縮BCD碼到ASCII的轉(zhuǎn)換

jmpdone

ASCII:andal,Ofh;ASCII到非壓縮BCD碼的轉(zhuǎn)換

done:…

方法二:

xoral,30h;求反D5D4位,其他不變

;即高4位為3,則變?yōu)?;高4位為0,則變?yōu)?

(3)把DX,AX中的雙字右移4位。

答:movcl,4

again:shrdx,1;實(shí)現(xiàn)邏輯右移

;采用“sardx,r,則實(shí)現(xiàn)算術(shù)右移

rcrax,1

deccl

jnzagain

2.14已知AL=F7H(表示有符號(hào)數(shù)-9),分別編寫(xiě)用SAR和IDIV指令實(shí)現(xiàn)的除以

2的程序段,并說(shuō)明各自執(zhí)行后,所得的商是什么?

2.15已知數(shù)據(jù)段500H到600H處存放了一個(gè)字符串,說(shuō)明下列程序段執(zhí)行后的

結(jié)果:

Movsi,600h

Movdi,601h

Movdx,ds

Moves,ax

Movex,256

Std

Repmovsb

2.16說(shuō)明下列程序段的功能

Cid

Movax,Ofefh

Movex,5

Movbx,3000h

Moves,bx

Movdi,2000h

Repstosw

2.17指令指針I(yè)P是通用寄存器還是專(zhuān)用寄存器?有指令能夠直接賦值么?哪類(lèi)

指令的執(zhí)行會(huì)改變它的值?

2.18控制轉(zhuǎn)移指令中有哪三種尋址方式?

2.19什么是短轉(zhuǎn)移shortjump、近轉(zhuǎn)移nearjump和遠(yuǎn)轉(zhuǎn)移farjump?什么是

段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移?8086有哪些指令可以實(shí)現(xiàn)段間轉(zhuǎn)移?

2.208086的條件轉(zhuǎn)移指令的轉(zhuǎn)移范圍有多大?實(shí)際編程時(shí),你如何處理超出范

圍的條件轉(zhuǎn)移?

2.21假設(shè)DS=2000H,BX=1256H,SI=528FH,位移量TABLE=2OA1H,

[232F7H]=3280H,[264E5H]=2450H,試問(wèn)執(zhí)行下列段間接尋址的轉(zhuǎn)移指令后,轉(zhuǎn)移

的目的地址是什么?

(l)JMPBX

(2)JMPTABLE[BX]

(3)JMP[BX],[SI]

2.22判斷下列程序段跳轉(zhuǎn)的條件

(l)xorax,leleh

Jeequal

(2)testal,10000001b

Jnzthere

(3)empex,64h

Jbthere

答:(1)xorax,leleh

jeequal

;AX=leleh(異或后為0)

(2)testal,10000001b

jnzthere

;AL的DO或D7至少有一位為1

(3)empex,64h

jbthere

;CX(無(wú)符號(hào)數(shù))V64h

2.23設(shè)置CX=0,則LOOP指令將循環(huán)多少次?例如:

movex,0

Delay:loopdelay

2.24假設(shè)AX和SI存放的是有符號(hào)數(shù),DX和DI存放的是無(wú)符號(hào)數(shù),請(qǐng)用比較

指令和條件轉(zhuǎn)移指令實(shí)現(xiàn)以下判斷:

(1)若DX>DI,轉(zhuǎn)到above執(zhí)行

(2)若AX>SI,轉(zhuǎn)到greater執(zhí)行;

(3)若CX=0,轉(zhuǎn)到zero執(zhí)行;

(4)若AX-SI產(chǎn)生溢出,轉(zhuǎn)到overflow執(zhí)行;

(5)若SI<=AX,轉(zhuǎn)到less_eq執(zhí)行;

(6)若DI<=DX,轉(zhuǎn)到below_eq執(zhí)行;

答:(1)若DX>DI,轉(zhuǎn)到above執(zhí)行

empdx,di

jaabove;=jnbeabove

(2)若AX>SI,轉(zhuǎn)到greater執(zhí)行

empax,si

jggreater;=jnlegreater

(3)若CX=0,轉(zhuǎn)到zero執(zhí)行

empex,0jexzzero

jzzero

(4)若AX—SI產(chǎn)生溢出,轉(zhuǎn)到overflow執(zhí)行;

empax,di

jooverflow

(5)若SI<AX,轉(zhuǎn)到less_eq執(zhí)行;

empsi,axempax,si

jleless_eqjgeless_eq

(6)若DKDX,轉(zhuǎn)到below_eq執(zhí)行。

empdi,dxempdx,di

jbebelow_eqjaebelow_eq

2.25有一個(gè)首地址為array的20個(gè)字的數(shù)組,說(shuō)明下列程序段的功能。

movex,20

Movax,0

Movsi,ax

Sum_loop:addax,array[si]

Addsi,2

Loopsum_loop

Movtotal,ax

2.26按照下列要求,編寫(xiě)相應(yīng)的程序段:

(1)其實(shí)地址為string的主存單元中存放有一個(gè)字符串(長(zhǎng)度大于6),把該

字符串的第一個(gè)和第六個(gè)字符(字節(jié)量)傳送給DX寄存器。

(2)從主存buffer開(kāi)始的4字節(jié)中保存了4個(gè)非壓縮BCD碼,現(xiàn)按低(高)地

址對(duì)低(高)位的原則,將他們合并到DX中。

(3)編寫(xiě)一個(gè)程序段,在DX高4位全為0時(shí),使用AX=0;否則AX=-1。

答:testdx,OfOOOh;testdh,OfOh

jznext;jnznext

movax,-1;movax,0

jmpagain

next:movax,0;movax,Offffh

again:???

⑷有兩個(gè)64位數(shù)值,按“小端方式”存放在兩個(gè)緩沖區(qū)bufferl和buffer2,

編寫(xiě)程序段完成bufferl-buffer2功能。

⑸假設(shè)從B800h:0開(kāi)始存放有100個(gè)16位無(wú)符號(hào)數(shù),編程求他們的和,并把

32位的和保存在DX.AX中。

(6)已知字符串string包含有32KB內(nèi)容,將其中的飛,符號(hào)替換成空格。

答1:;不使用串操作指令,更好

movsi,offsetstring

movex,8000h

again:empbyteptr[si],=24h

jnznext

movbyteptr[si],'';,,=20h

next:incsi

loopagain;decex

;jnzagain

答2:;使用串操作指令

movdi,offsetstring

moval,'$'

movex,8000h

cld

again:scasb

jnznext

movbyteptres:[di-l],i'

next:loopagain

(7)有一個(gè)100字節(jié)元素的數(shù)組,其首地址為array,將每個(gè)元素減1(不考慮

溢出)存于原處。

答1:movsi,offsetarray

movex,100

again:decbyteptr[si]

incsi

loopagain

答2:movsi,offsetarray

movdi,si

movax,ds

moves,ax

movex,100

cld

again:lodsb

decal

stosb

loopagain

(8)統(tǒng)計(jì)以'$'結(jié)尾的字符串srting的字符個(gè)數(shù)。

2.27對(duì)以下要求,分別給出3種方法,每種方法只用一條指令。

⑴使CF=0

⑵使AX=0

(3)使AX=0和CF=0

2.28參照本習(xí)題的示意圖,分析調(diào)用序列,畫(huà)出每次調(diào)用及返回時(shí)的堆棧狀態(tài)

其中CALL前是該指令所在的邏輯地址;另外,段內(nèi)直接調(diào)用指令的機(jī)器代

碼的字節(jié)數(shù)為3,段間直接調(diào)用指令則為5字節(jié)。

2.29已知AX,BX存放的是4位壓縮BCD表示的十進(jìn)制數(shù),請(qǐng)說(shuō)明如下子程序

的功能和出口參數(shù)。

Addal,bl

Daa

Xchgal,ah

Adcal,bh

Daa

Xchgal,ah

Ret

答:壓縮BCD碼加法:

AX-AX+BX

出口參數(shù):

AX=BCD碼和

2.30ADD指令是用于除法指令之前,進(jìn)行壓縮BCD碼調(diào)整的。實(shí)際上,處理器

的調(diào)整過(guò)程是:AL<-AHX10+AL,AH<-0o如果指令系統(tǒng)沒(méi)有ADD指令,請(qǐng)用一個(gè)

子程序完成這個(gè)調(diào)整工作。

2.31解釋如下有關(guān)中斷的概念:

(1)內(nèi)部中斷和外部中斷

(2)單步中斷和斷點(diǎn)中斷

(3)除法錯(cuò)中斷和溢出中斷

(4)中斷向量號(hào)和中斷向量表

2.32試比較INTn和段間CALL指令,IRET和段間RET指令的功能。

2.33什么是系統(tǒng)功能調(diào)用?匯編語(yǔ)言中,它的般格式是怎樣的?

2.34補(bǔ)充例2.40,當(dāng)有溢出時(shí)顯示"Error!Overflow!",無(wú)溢出顯示"OK"。

補(bǔ)充例2.42,顯示的個(gè)數(shù),注意首先將個(gè)數(shù)轉(zhuǎn)換為ASCH碼。

okmsgdb'OK','$'

errmsgdb*Error!Overflow!','$'

movax,X

subax,Y

jooverflow

movdx,offsetokmsg

jmpnext

overflow:movdx,errmsg

next:movah,9

int21h

2.36先提示輸入數(shù)字“InputNumber:0to9”,然后在下一行顯示輸入的數(shù)字,

結(jié)束;如果不是鍵入了0到9數(shù)字,就提示錯(cuò)誤"Error",繼續(xù)等待輸入數(shù)

字。

2.37從鍵盤(pán)輸入一個(gè)字符串(不超過(guò)255)個(gè),將其中的小寫(xiě)字母轉(zhuǎn)換成大寫(xiě)

字母,然后按原來(lái)的順序在屏幕上顯示。

2.38指令對(duì)狀態(tài)標(biāo)志的作用可以分成多中情況,例如無(wú)影響、無(wú)定義、按結(jié)果

影響、特別說(shuō)明的影響等,你能區(qū)別這些情況么?分別用具體的指令來(lái)說(shuō)

明。

2.398086指令系統(tǒng)分成哪6個(gè)功能組?各組主要包含什么指令?舉例說(shuō)明。

2.40總結(jié)8086指令系統(tǒng)所采用的各種尋址方式,包括一般的數(shù)據(jù)尋址、外設(shè)數(shù)

據(jù)尋址、堆棧數(shù)據(jù)尋址、串操作數(shù)據(jù)尋址、轉(zhuǎn)移指令目的地址的尋址等,

并舉例說(shuō)明。

習(xí)題3

3.1偽指令語(yǔ)句與硬件指令語(yǔ)句的本質(zhì)區(qū)別是什么?偽指令有什么主要作用?

3.2什么是標(biāo)識(shí)符?匯編程序中標(biāo)識(shí)符怎樣組成?

3.3什么是保留字?匯編語(yǔ)言的保留字有哪些類(lèi)型?并舉例說(shuō)明。

3.4匯編語(yǔ)句有哪兩種?每個(gè)語(yǔ)句由哪四部分組成?

3.5匯編語(yǔ)言程序的開(kāi)發(fā)有哪4個(gè)步驟?分別利用什么程序完成、產(chǎn)生什么輸

出文件?

答:1.編輯文本編輯程序匯編語(yǔ)言源程序asm

2.匯編匯編程序目標(biāo)模塊文件.obj

3.連接連接程序可執(zhí)行文件.exe或.com

4.調(diào)試調(diào)試程序應(yīng)用程序

3.6將第2章習(xí)題2.36采用簡(jiǎn)化段定義格式編寫(xiě)成一個(gè)完整的源程序。

3.7將第2章習(xí)題2.37采用完整段定義格式編寫(xiě)成一個(gè)完整的源程序。

3.8區(qū)分下列概念:

(1)變量和標(biāo)號(hào)(2)數(shù)值表達(dá)式和地址表達(dá)式(3)符號(hào)常量和字符串常量

3.9假設(shè)myword是一^1^字變量,mybytel和mybyte2是2字節(jié)變量,指出下列

語(yǔ)句中的錯(cuò)誤原因

答:(1)movbyteptr[bx],1000

;1000超出了一個(gè)字節(jié)范圍

(2)movbx,offsetmyword[si]

;寄存器的值只有程序執(zhí)行時(shí)才能確定,

;而offset是匯編過(guò)程計(jì)算偏移地址,故無(wú)法確定

;可以改為leabx,myword[si]

(3)cmpmybytel,mybyte2

;兩個(gè)都是存儲(chǔ)單元,指令不允許

(4)moval,mybytel+mybyte2

;變量值只有執(zhí)行時(shí)才確定,匯編過(guò)程不能計(jì)算

(5)subal,myword

;字節(jié)量AL與字量myword,類(lèi)型不匹配

(6)jnzmyword

;Jcc指令只有相對(duì)尋址方式,不支持間接尋址方式

3.100PR1是一個(gè)常量,問(wèn)下列語(yǔ)句中兩個(gè)AND操作有什么區(qū)別?

ANDAL,OPRIANDOfeh

3.11給出下列語(yǔ)句中,指令立即數(shù)(數(shù)值表達(dá)式)的值:

(l)moval,23hAND45hor67h

(2)Movax,1234h/16+10h

(3)Movax,NOT(65535XOR1234h)

(4)Moval,LOW1234hORHIGH5678h

(5)Movax,23hSHL4

(6)Movax,1234hSHR6

(7)Moval,'a'AND(NOTCa-A*))

(8)Moval,*H*OROOlOOOOOb

(9)Movax,(76543LT32768)XOR7654h

3.12為第2章立體2.54定義變量count、block、dplus和dminus。

3.13為第2章例題2.55定義相應(yīng)的變量,并形成一個(gè)完整的匯編語(yǔ)言程序。

3.14畫(huà)圖說(shuō)明下列語(yǔ)句分配的存儲(chǔ)空間及初始化的數(shù)據(jù)值:

(l)byte_varDB'ABC*,10,lOh,'EF',3DUP(-1,?,3DUP(4))

(2)Word_varDWlOh,-5,'EF',3DUP(?)

答:(1)byte_varDB'ABC',10,lOh,'EF',3DUP(-1,?,3DUP(4))

'A''B''C'10lOh'E'T'-1-444

41h42h43hOahlOh45h46hffli-04h04h04h

3個(gè)

(2)word_varDWlOh,-5,'EF',3DUP(?)

lOh0FBhFFh46h47h

lOh-5'EF'???

3.15請(qǐng)?jiān)O(shè)置一個(gè)數(shù)據(jù)mydataseg,按照如下定義變量:

(l)mylb為字符串變量:PersonalConputer

(2)my2b為用十進(jìn)制數(shù)表示的字節(jié)變量:20

(3)My3b為用十六進(jìn)制數(shù)表示的字節(jié)變量:20

(4)My4b為用二進(jìn)制數(shù)表示的字節(jié)變量:20

⑸My5w為20個(gè)未賦值的字節(jié)變量

(6)My6c為100的常量

(7)My7c表示字符串:PersonalComputer

答:mydatasegsegment

mylbdb'PersonalComputer'

my2bdb20

my3bdb14h;20h

my4bdb00010100b

my5wdw20dup(?)

my6cequ100;my6c=100

my7cequ<PersonalComputer>

mydatasegends

3.16分析例題3.2的數(shù)據(jù)段,并上機(jī)觀察數(shù)據(jù)的儲(chǔ)存形式。

3.17修改例題3.3,現(xiàn)在用字定義偽指令dw,字符串傳送指令movsw和字符串

顯示9號(hào)功能調(diào)用實(shí)現(xiàn)

3.18變量和標(biāo)號(hào)有什么屬性?

3.19設(shè)在某個(gè)程序中有如下片段,請(qǐng)寫(xiě)出每條傳送指令執(zhí)行后寄存器AX的內(nèi)

容:

Mydatasegment

ORG100H

VARWDW1234H,5678H

VARBDB3,4

ALIGN4

VARDDD12345678H

EVEN

BUFFDB1ODUP(?)

MESSDB'HELLO'

BEGIN:MOVAX,OFFSETMESS

MOVAX,TYPEBUFF+TYPEMESS+TYPEVARD

MOVAX,SIZEOFVARW+SIZEOFBUFF+SIZEOFMESS

MOVAX,LENGTHOFVARW+LENGTHOFVARD

MOVAX,LENGTHOFBUFF+SIZEOFVARW

MOVAX,TYPEBEGIN

MOVAX,OFFSETBEGIN

3.20利用簡(jiǎn)化段定義格式,必須具有.MODEL語(yǔ)句。MASM定義了哪7種儲(chǔ)存模式?

TINY和SMALL模式創(chuàng)建什么類(lèi)型(EXE或COM)程序?設(shè)計(jì)32位程序應(yīng)該采用

什么模式?

3.21源程序中如何指明執(zhí)行的起始點(diǎn)?源程序應(yīng)該采用哪個(gè)DOS功能調(diào)用,實(shí)

現(xiàn)程序返回DOS?

3.22在SMALL儲(chǔ)存模式下,簡(jiǎn)化段定義格式的代碼段,數(shù)據(jù)段和堆棧段的默認(rèn)

段名,定位,組合以及類(lèi)別屬性分別是什么?

3.23如何用指令代碼代替.startup和.exit指令,使得例題3.la能夠在MASM

5.x下匯編通過(guò)?

3.24創(chuàng)建一個(gè)COM程序完成例題3.1的功能。

3.25按下面的要求寫(xiě)一個(gè)簡(jiǎn)化段定義格式的源程序

(1)定義常量num,其值為5;數(shù)據(jù)段中定義字?jǐn)?shù)組變量datalist,它的頭5

個(gè)字單元中依次存放-1,0,2,5和4,最后一個(gè)單元初值不變;

(2)代碼段中的程序?qū)atalist中頭num個(gè)數(shù)的累加和存入datalist的最后

一個(gè)字單元中。

3.26按下面的要求寫(xiě)一個(gè)完整段定義格式的源程序

(1)數(shù)據(jù)段從雙字邊界開(kāi)始,其中定義一個(gè)100字節(jié)的數(shù)組,同時(shí)該段還作為

附加段;

(2)堆棧段從節(jié)邊界開(kāi)始,組合類(lèi)型為stack;

(3)代碼段的類(lèi)型是‘code'指定段寄存器對(duì)應(yīng)的邏輯段;主程指定從100H開(kāi)

始,給有關(guān)段寄存器付初始值;將數(shù)組元素全部設(shè)置為64H

3.28編制程序完成12H,45H,0F3H,6AH,20H,OFEH,90H,0C8H,57H和34H等10字

節(jié)數(shù)據(jù)之和,并將結(jié)果存入字節(jié)變量SUM中(不考慮溢出)。

3.29結(jié)構(gòu)數(shù)據(jù)類(lèi)型如何說(shuō)明?結(jié)構(gòu)變量如何定義?結(jié)構(gòu)字段如何引用?

3.30記錄數(shù)據(jù)類(lèi)型如何說(shuō)明?記錄變量如何定義?Width和mask操作符起什么

作用?

習(xí)題4

4.1例題4.2如果要求算術(shù)右移8位,如何修改程序?

4.2例題4.2如果要求算術(shù)左移7位,如何用移位指令實(shí)現(xiàn)?

4.3制作一個(gè)程序,將AX寄存器中的16位數(shù)連續(xù)4位分成一組,共4組,然后

把這4組數(shù)分別放在AL,BL,CL和DL寄存器。

答:

DATASENGMENT

AX1DW?

AL1DB0

BL1DB0

CL1DB0

DL1DB0

DATAENDS

CODESENGMENT

ASSUMECS:CODEDS:DATA

START:MOVAX,DATA

MOVDS,AX

MOVAX,AX1

ANDAL,OFH

MOVDL,AL

ANDAH,OFH

MOVDH,AH

MOVAX,AX1

MOVCL,4

SHRAL,CL

MOVBL,AL

MOVCL,4

SHRAH,CL

MOVAL,AH

MOVCL,DH

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

4.4編寫(xiě)一個(gè)程序,把鍵盤(pán)輸入的一個(gè)小寫(xiě)字母用大寫(xiě)字母顯示出來(lái)。

答:

DATASENGMENT

BUFDB0

DATAENDS

CODESENGMENT

ASSUMECS:CODEDS;DATA

START:MOVAX,DATA

MOVDS,AX

MOVAH,1

INT21H

CMPAL,'a'

JBN

CMPAL,'z'

JAN

SUBAL,20H

N:MOVDL,AL

MOVAH,2

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

4.5已知用于LED數(shù)碼管顯示的代碼表為

LEDtableDBOcOh,0f9h,0a4h,ObOh,99h,92h,82h,0f8h

DB80h,90h,88h,83h,0c6h,Oclh,86h,8eh

它依次表示0到9,A到F這16個(gè)數(shù)碼的顯示代碼。現(xiàn)編寫(xiě)一個(gè)程序現(xiàn)實(shí)將

lednum中的一個(gè)數(shù)字轉(zhuǎn)換成對(duì)應(yīng)的LED顯示代碼。

4.6請(qǐng)問(wèn)第2章例題2.41/2.43/2,45/2.48的分支是單分支、雙分支或多分支

結(jié)構(gòu)?

4.7分析第2章例題2.42的分支結(jié)構(gòu),畫(huà)出流程圖。

4.8如果在例題4.4的table中依次填入msgl到msg8,程序應(yīng)該怎樣修改?

4.9編制一個(gè)程序,把變量bufX和bufY中較大者存入bufZ;若兩者相等,則

把其中之一存入bufZ中。假設(shè)變量存放的是8位無(wú)符號(hào)數(shù)。

答:

.modelsmall

?stack

.data

Moval,bufz

Movbl,bufx

Movcl,bufy

Cmpbl,cl

JneL

Movbufz,bl

Jmpexit

L:jgLI

Movbufz,cl

Jmpexit

LI:movbufz,bl

Exit:

4.10設(shè)變量bufX為有符號(hào)16位數(shù),請(qǐng)將它的符號(hào)狀態(tài)保存在signX,即:如

果X大于等于0,保存0;如果X小于0,保存一l(ffh)。編寫(xiě)該程序。

答:

.modelsmall

,stack

,data

bufxdw?

signxdb0

Start::movax,data

movds,ax

moval,bufx

cmpal,0

jge1

movsignx,-1

jmpexit

1:movsignx,0

exit:movah,4ch

int21h

end

4.11bufX,bufY和bufZ是3個(gè)有符號(hào)十六進(jìn)制數(shù),編寫(xiě)一個(gè)比較相等關(guān)系的程

序:

(1)如果這3個(gè)數(shù)都不相等,則顯示0;

(2)如果這3個(gè)數(shù)中有兩個(gè)數(shù)相等,則顯示1;

(3)如果這3個(gè)數(shù)都相等,則顯示2;

答:

.modelsmall

.stack

.data

Movax,bufx

Movbx,bufy

Movex,bufz

Cmpax,ex

JeL2

Cmpbx,ex

JeL2

Movdl,'O'

Movah,2

Int21h

Jmpexit

L:cmpbx,ex

JeLI

L2:movdl,1

Movah,2

Int21h

Jmpexit

LI:movdl,,2,

Movah,2

Int21h

exit

4.12分析第2章例題2.42,2.52,.2.53的結(jié)構(gòu),分別畫(huà)出他們的流程圖。

4.13例題4.8內(nèi)外循環(huán)次數(shù)共是多少?如果要求按從大到小排序,程序如何修

改?

4.14串操作指令常要利用循環(huán)結(jié)構(gòu),現(xiàn)在不用串結(jié)構(gòu)指令如何實(shí)現(xiàn)字符串

String1內(nèi)容傳送到字符串Sring2,字符串長(zhǎng)度為count.

答:

DSEGSEGMENTLEASI,string1

StringlDB'abcdefg'LEASI,string2

count=$-stringmovCX,count

string?DBcountDUP(O)L:MOVALJSI]

DSESESEGMENTMOV[DI],AL

SSEGSEGMENTSTACK/NCSI

STKDBcountDUP(O)/NCDI

SSEGENDSLOOPL

CSEGSEGMENTMOVAH,4CH

ASSUMEDS:DSEG,INT21H

ES:ESEGSSrSSEG,CSEGENDS

CS:CSEGENDSTART

START:MOVAS,DSEG

MOVDS,AX

MOVAX,ESEG

MOVES,AX

MOVAS,SSEG

MOVSS,AX

MOVSP,LENGTHSTK

4.15不用串操作指令求主存0040H:0開(kāi)始的一個(gè)64KB物理段中共有多少個(gè)空

格?

4.16編程實(shí)現(xiàn)把鍵入的一個(gè)字符,用二進(jìn)制形式(0/1)顯示出它的ASCII代碼

答:

MOVAH,1

INT21H

MOVBL,AL

MOVAH,2

MOVDL,(_9

INT21H

MOVCX,8

AGAIN:SHLBL,1

MOVDL,0

ADCDL,30H

MOVAH,2

INT21H

LOOPAGAIN

4.17編寫(xiě)程序,要求從鍵盤(pán)接收一個(gè)數(shù)beHN(0到9),然后鈴聲bellN次

4.18編程寫(xiě)程序,將一個(gè)包含有20個(gè)有符號(hào)數(shù)據(jù)的數(shù)組arrayM分成兩個(gè)數(shù)組:

正數(shù)組arrayP和負(fù)數(shù)組arrayN,并分別把這兩個(gè)數(shù)組的數(shù)據(jù)個(gè)數(shù)顯示出來(lái)。

答:

DATASEGMENT

arrayMDW1,2,3,-2.-4....,8

arrayMDW20DUP(?)

arrayNDW20DUP(?)

countPDW?

countNDW?

DATAENDS

Codesegment

assumeCS:code,DS:DATA

START:MOVAX,DATA

MOVDS,AX

LEABX,arrayM

MOVSI,0

MOVDI,0

MOVCX,20

MOVcountP,0

MOVcountN,0

NEXT:MOVAX,[BX]

CMPAX,0

JLNN

MOVarrayp[SI],AX

ADDSI,2

INCcountP

JMPPP

NN:MOVaiTayNfDI],AX

ADDDI,2

INCcountN

PP:ADDBX,2

LOOPNEXT

MOVAH,40H

INT21H

CODEENDS

ENDSTART

4.19編寫(xiě)計(jì)算100個(gè)正數(shù)之和的程序,如果和不超過(guò)16位字的范圍(65535),

則保存其和到wordsum,如果超過(guò)則顯示**overflow

答:

.modelsmall

.stack

.data

DIDWdl,d2......dlOO

N=$-Dl

wordsumdw?

.code

.Startup

xorax,ax

LEASI,D1

movcx,N

agaim:addax,[SI]

JCoverflow

ADDSI,2

movwordsum,ax

JMPEXIT

overflow:movdx,offsetstring

movah,09h

int21H

EXIT:........

.EXIT

4.20變成判斷主存0070h:0開(kāi)始的1KB中有無(wú)字符串‘DEBUG'這是一個(gè)字符串包

含的問(wèn)題,可以采用逐個(gè)向后比較的簡(jiǎn)單算法。

4.21編程把一個(gè)16位無(wú)符號(hào)二進(jìn)制數(shù)轉(zhuǎn)換成用8421BCD碼表示的5位十進(jìn)制數(shù)。

轉(zhuǎn)換算法可以是:用二進(jìn)制數(shù)除以10000,商為“萬(wàn)位”,再用余數(shù)除以1000,

得到“千位”;依次用余數(shù)除以100,10和1,得到“百位”、“十位”和“個(gè)位”。

4.22過(guò)程定義的一般格式是怎樣的?子程序入口為什么常有PUSH指令,出口為

什么有POP指令?下面的程序段有什么不妥么?若有,請(qǐng)改正:

CrazyPROC

Pushax

Xorax,ax

Xordx,dx

Again:addax,[bx]

Adcdx,0

Incbx

Incbx

Loopagain

Ret

ENDPcrazy

答:

crazyPROC;crazyPROC字量求和子程序

pushax;

xorax,ax;xorax,ax入口參數(shù):

11*=數(shù)據(jù)首址

CX=數(shù)據(jù)個(gè)數(shù)

出口參數(shù):

人*=和的低字

xordx,dx;xordx,dx

again:addax,[bx];again:addax,[bx]

adcdx,0;adcdx,0

incbx;incbx

incbx;incbx

loopagain;loopagain

ret;ret

ENDPcrazy;crazyENDP

4.23子程序的參數(shù)傳遞有哪些方法?比較

答:

(1)寄存器傳遞參數(shù),優(yōu)點(diǎn):速度快,缺點(diǎn):寄存器有限,適合少量數(shù)據(jù)。

(2)變量傳遞參數(shù),優(yōu)點(diǎn):變量可定義,適應(yīng)較多數(shù)據(jù),缺點(diǎn):速度慢。

(3)堆棧傳遞參數(shù),優(yōu)點(diǎn):適合特殊數(shù)據(jù)的處理,缺點(diǎn):繁瑣易出錯(cuò)。

(4)地址表傳遞參數(shù),優(yōu)點(diǎn):適合大量數(shù)據(jù),缺點(diǎn):較繁瑣。

4.24采用堆棧傳遞參數(shù)的一般方法是什么?為什么應(yīng)該特別注意堆棧平衡問(wèn)

題?

4.25什么是之程序的嵌套,遞歸和重入?

4.26將例題4.7的大寫(xiě)之母轉(zhuǎn)換為小寫(xiě)字母寫(xiě)成過(guò)程,利用AL作為入口參數(shù)、

出口參數(shù)完成。

4.27請(qǐng)按如下子程序說(shuō)明編寫(xiě)過(guò)程:

;子程序功能:把用ASCH碼表示的2位十進(jìn)制數(shù)轉(zhuǎn)換為對(duì)應(yīng)的二進(jìn)制數(shù)

;入口參數(shù):D+十位數(shù)的ASCH碼,DL=j位數(shù)的ASCH碼

;出口參數(shù):AL/寸應(yīng)的二進(jìn)制數(shù)

4.28寫(xiě)一個(gè)子程序根據(jù)入口參數(shù)AL=0/l/2,分別實(shí)現(xiàn)大寫(xiě)字母轉(zhuǎn)換成小寫(xiě),小

寫(xiě)轉(zhuǎn)換成大寫(xiě)或大小寫(xiě)字母互換,欲轉(zhuǎn)換的字符串在String中,用0表示

結(jié)束。

答:

.modelsmall

.stack

.data

Stringdb.Hello,everYDAY;0

.code

.startup

movbx,offsetString

MOVAH,1

1/NT21H

CMPAL/O'

JNELI

CALLSUBO

L1:CMPAL,T

JNEL2

CALLSUB1

L2:CMPAL,’2’

JNEL3

CALL

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論