匯編語言程序設計課后答案_第1頁
匯編語言程序設計課后答案_第2頁
匯編語言程序設計課后答案_第3頁
匯編語言程序設計課后答案_第4頁
匯編語言程序設計課后答案_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

匯編語言程序設計課后答案

第二章(更新完畢

1。在80X86微機的輸入輸出指令中,I/O端口號通常是由DX寄存器提供的,

但是有時也可以在指令中直接指定00——FFH的端口號。試問,可直接由指令指

定的I/O端口數(shù)~

解答:有256個~~書上有原話~~可以找到~~

2。有兩個16位字節(jié)1EE5H和2A3cH分別存放在80X86微機的存儲器的000B0H

和000B3H單元中,請用圖表示出它們在存儲器里的存放情況。

解答:如下圖.第一個絡子為000B0H字單元,注意,是字單元~~第五個格子為

000B3H字單元~

E5

TE

3c

2A-

唉,慚愧,學計算機的,竟然連個表格也做不好!

3.圖在書上,我就不畫了,太麻煩一直接答吧~

解答:30022H字節(jié)單元內(nèi)容:ABH30024H字節(jié)單元內(nèi)容:EFH

30021H字單元內(nèi)容:AB34H30022H字單元內(nèi)容:CDABH

4.對了,看這個的人.,肯定都有那本書,所以,以后我就不抄題目哈~一

解答:這三個物理地址都是3017AH,正好說明了不同的段地址和偏移地址對

應同一物理地址~~

5.解答:CS+IP第一個字的物理地址為:OAAA40H

6.解答:圖,實在不知道怎么畫,待我想辦法一條件標志OF,SF,ZF,CF,的值依次

為:0,0,0,0

7o下列操作可使用那些寄存器?

(1)加法和減法AX,BX,CX,DX,當然,還有這幾個通用寄存器的高低

位了,如AH,AL,.等~~

(2)循環(huán)計數(shù)CX

(3)乘法和除法DX,AX,AH,AL

(4)保存段地址CS,DS,ES,SS

(5)表示運算結果為OFLAGS

(6)將要執(zhí)行的指令地址IP

(7)將要從堆棧取出數(shù)據(jù)的地址BP,SP,SS

8o可以用來指示存儲器地址的寄存器有:BX,SP,BP,DI,CS,DS,SI,ES,SS,IP

9?一一對應:

5-A4-B2-C3-D12-E9-F11-G10-H13-18-J7-K6—L1-M15-N14-0

第三章

lo

(1)即尋

沒有

(2)直接尋

7237H

3)使用BX的寄存器尋

沒有

4)使用BX的間接尋

637DH

(5)使用BX的寄存器相對尋

0D5F0H

(6)基址變址尋

8E18H

(7)相對基址變

004FH

2。根據(jù)下列要求,寫出相應的匯編指令。

(1)ADDDX,BX

⑵ADDAL,[BX][SI]

⑶ADD[BX][0B2H],CX

MOVAX,2A59HADD[0524H],AX

(5)ADDAL,0B5H

3o

(1)寄存器間接尋址

MOVBX,OFFSET[BLOCK][OAH]

MOVDX,[BX]

(2)寄存器相對尋址

MOVSI,OAH

MOVDX,[BLOCK][SI]

(3)基址變址尋址

MOVBX,BLOCK

MOVSI,OAH

MOVDX,[BX][SI]

沒人來看,還是要寫~~

4現(xiàn)有(DS)

=2000H,(BX)=O1OOH,(SI)=0002H,(20100)=12H,(20101)=34H,(20102)=56H,(201

03)=78H,(21200)=2AH,(20201)=4CH,(21202)=B7H,(21203)=65H,試說明下列各

條指令執(zhí)行完后,AX寄存器的內(nèi)容。

(1)

MOVAX,1200H

1200H

(2)MOVAX,BX

01OOH

(3)MOVAX,[1200]

4C2AH

注意,是字單元??!

4)

MOVAX,[BX]

3412H

同上

5)

MOV1100[BX]

4C2AH

(6)MOVAX,[BX][SI]

7856H

(7)MOVAX,1100[BX][SI]

65B7H

5o

(1)7CD9H(2)1200H(3)6319H

6oMOVBX,2000H

LESDI,[BX]

MOVAX,ES:DI

7o轉向地址OBJ的值分別為:(1)

064DH(2)0691H(3)05E0H注意

有符號數(shù)的符號位~~

8o(1)

MOVAX,OABH

立即數(shù)尋

無物理地址

(2)

MOVAX,BX

寄存器尋

同上

(3)

MOVAX,[100]

直接尋

20100H

(4)MOV

AX,VAL

直接尋

20050H

(5)MOV

AX,[BX]

寄存器間接尋

20100H

(6)MOVAX,ES:

[BX]直接尋

21100H

(7)MOV

AX,[BP]寄存器

間接尋

20010H

(8)MOV

AX,[SI]

200A0H

(9)MOV

AX,[BX+10]寄存器相對

20110H

(10)MOV

AX,VAL[BX]同

20150H

(11)MOV

AX,[BX][SI]基址變址

201A0H

(12)MOV

AX,VAL[BX][SI]相對基相變址尋

址20

1F0H

9。

(1)的指令MOVAX,

[BX][OCH]MOV

ZREO,AX

(2)的指

令:MOVAX,ARRAY[BX]

MOVZREO,AX

10。MOVAX,TABLE是把符號地址TABLE里的內(nèi)容送到AX

里,指令執(zhí)行完后,(AX)=1234H

LEAAX,TABLE是把符號地址TABLE的

有效地址(這里是偏移量)送到指定寄存器AX里,指

令執(zhí)行完后,(AX)=0032H

llo執(zhí)行完指令后,(AX)=1EOOH

120LEAAX,CSTRING

MOVDL,AX

MOVDH,[AX+6]

13o這個,,圖,很麻煩了,所以就不畫了“大家可以看一下課本上P51—P53,

很清楚,看完了這道髭也會了~~~

140LESBX,[2000]

MOVAX,ES:[BX]

注意:一開始我寫的是:MOVAX,ES:[8000H],后來看到題目里要

求寫兩條指令,所以一條就不行了,就要畫蛇添足~~~

15運算結

SF,ZF,CF,OF各位的值(從左

至右依次往下~)

(1)74D4H

0000

(2)A5C1H

1001

(3)4240

H

00

10

(4)0000

H

011

0

16o接上表~

(1)5D14

0000

(2)A870

1001

(3)D870

1000

(4)34E4

0010

17。

(l).MOVAX,Z;把Z送至ijAX

SUBAX,X;z-x

ADDAX,W;w+(z-x)

MOVZ,AX;結果保存在Z中

(2).MOVAX,R;R送至i」AX中

ADDAX,9;R+9

MOVBX,X;X送到BX中

ADDBX,6;X+6

ADDAX,BX;(R+9)+(X+6),結果保存在AX中

MOVBX,W;W送至BX中

SUBBX,AX;W-(R+9)-(X+6),連續(xù)減去兩個數(shù),相當

于減去這兩個數(shù)的和~~

MOVZ,BX;最終結果送到Z中

MOVAX,W;把W送到AX

IMUL

X

W*X注意:低十六位保存在AX里,高十六位保存在DX里

MOVBX,Y;把Y送到BX里

ADDBX,6;Y+6

IDIVBXf

(W*X)/(Y+6)注意:商保存在AX里,余數(shù)保存在DX里

MOVZ,AX;把商送到z

中,

MOVR,DX;把余數(shù)送到

R中

(4)

MOVAX,W;把W送到AX中

SUBAX,X;w-x

CWD;把AX

中的十六位帶符號數(shù)擴展成為32位,低十六位保存在AX中,高十六位保

;在DX中

MOVBX,5;把5送到BX中

IDIVBX;(W-X)

/5被除數(shù)為32位,除數(shù)為16位商為16位

IMULY;上一

步結果再乖以Y,積為32位

MOVBX,2;把2送到BX

IMULBX;上

一步乘法所得的積再乘以2,各為64位

MOVZ,EAX;把結果中低32

位放入Z雙字單元中

MOV[Z+4],EDX;把結果中高32位放入Z+4雙字單元中

2006-12-0711:47

39o圖,就不畫了,呵呵~~自己看一下課本,P10「~

40.?(1)00003100H(2)5100H(3)7100H

41o(1)目的地址:2004H內(nèi)容依次為:56HF4H23H98H

(2)目的地址:384cH內(nèi)容依次為:

91H34HF2H01H

(3)目的地址:寄存器,無物理地址~內(nèi)容依次

為:92H6DHA2H4CH

42。(1)PUSHAX

(SP)<------(SP)-2

(SP+1X-----(AH)(SP)<------(AL)

(2)POPESI

(ESIX-------((ESP)+3,(ESP)+2,(ESP)+1,(ESP))

(ESP)<(ESP)+4

(3)PUSH[BX]

(SP)<-------(SP)-2

(SP+IX-—([BX+1])(SP)<------([BX])

(4)PUSHAD

(ESP)<————(EAX)

(ESP-4)<------(ECX)

(ESP-8)<------(EDX)

(ESP-12X-------(EBX)

(ESP-16)<-------(ESP);這里指的是指令執(zhí)行前的ESP

(ESP-20)<--------(EBP)

(ESP-24)<-------(ESI)

(ESP-28)<--------(EDI)

(ESP)<-------(ESP)-32

(5)POPDS

(DS)<------((SP)+1,(SP))

(SP)<------(SP)+2

(6)PUSH4

(SP)<-------(SP)-2

(SP+1X-----0

(SP)<------4

43o(1)2CEFF93H(2)24B76A0H

(3)9090804H(4)6F13ADH

44o(1)OFFFFFFFCH(2)OFFFFFFF8H

(3)00000007H(4)

00000099H

45o(EAX)=0(EBX)=25d

46。(AX)=3d(DX)=7d

47OADDECX,EDX

ADDECX,ESI

MOVEDI,ECX

48oIMULBX,DX,100H執(zhí)行的操作是:

(BX)<------(DX)*100H

49o程序實現(xiàn):

MOVAL,BL

CBW

IDIVCL

IMUL2

MOVDX,AX

50o

JMPDI是直接跳轉,執(zhí)行的操作是:(IP)<----(IP)+(DI)

JMP[DI]是間接跳轉,執(zhí)行的操作是:(IP)<——(IP)+([DI])跳轉到DI

中所指向的內(nèi)存單元中的指令地址~

51。假設數(shù)組名為NUMBERS,程序如下~

MOVBX,0;后面用到~

MOVCX,100H;把循環(huán)次數(shù)放入ex

MOVAL,42H

MOVSL0;初始化SI

;CHECK用來實現(xiàn)查找功能~

CHECK:CMPAL,NUMBERS[SI]

INCSI

JBSTORE1;大于42H的數(shù)的個數(shù)存入UP

JAST0RE2;小于42H的的數(shù)的個數(shù)存入DOWN中~

LOOPCHECK;相等繼續(xù)循環(huán)~

STORE1INCBL;找到一個大于42的數(shù),BL值增加

MOVUP,BL

LOOPCHECK

ST0RE2INCBH

MOVDOWN,BH

LOOPCHECK

第五章答案

本章程序在MASMV5.0及其以上版本編譯通過,如果因為版本過低無法編譯,可以

在www.movsd.com(國外權威的匯編

語言英文網(wǎng)站)找到下載最新版本的MASM編譯器地址,目前的最新版本為MASM

V9.0,也可以去www.aogosoft.com

(AOGO匯編論壇)下載MASMPLUSVI.2版本,以上兩種方法選其一即可.

1.從屏幕上輸入小寫字母,轉化為大寫字母輸出

(解法1)

DATASEGMENT

MESSAGEDB"ENTERASTRING:",OAH,ODH,'$'

MAXLENGTHDB50,?,50DUP(?);每次最多可以輸入49個字符

DATAENDS

CODESEGMENT

ASSUMEDS:DATA,CS:CODE

START:

MOVAX,DATA

MOVDS,AX

LEADX,MESSAGE;輸出ENTERASTRING

MOVAH,09H

INT21H

LEADX,MAXLENGTH;輸入字符串

MOVAH,OAH;鍵盤輸入到緩沖區(qū),DS:DX=緩沖區(qū)首址

INT21H;(DS:DX)=緩沖區(qū)最大字符數(shù),(DS:DX+1)=實際輸入的字符

數(shù)

MOVAH,02H;輸出回車換行

MOVDL,OAH

INT21H

MOVAH,02H

MOVDL,ODH

INT21H

MOVCL,MAXLENGTH+1;把字符的實際長度放入寄存器CL

MOVCH,0

MOVBH,02H

LEASI,MAXLENGTH+2;取字符串的基地址放入SI

XUN:

MOVAL,[SI]

CMPAL,'Z'

JBESI;小于等于‘2'轉移

JMPS3

SI:CMPAL,'A'

JAEDA;大于等于'A'轉移

JMPOUTPUT

DA:ADDAL,20H

JMPOUTPUT

S3:CMPAL,'z';小于等于小Z轉移

JBES4

S4:CMPAL,'a';大于等于小a轉移

JAEXIAO

JMPOUTPUT

XIAO:

SUBAL,32

JMPOUTPUT

OUTPUT:

MOVDL,AL

MOVAH,02H;顯示輸出

INT21H

INCSI

LOOPXUN

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

(解法2)

;將輸入的小寫字母轉化為大寫字母輸出,輸入回車結束

CODESEGMENT

ASSUMECS:CODE

BEGIN:

MOVAH,01H

INT21H

CMPAL,ODH;ASCIIOFCARRIAGERETURN

JEEXIT

CMPAL,61H;ASCIIOF,a'

JBSTOP

CMPAL,7AH;ASCIIOF'z'

JASTOP

SUBAL,20H

STOP:

MOVDL,AL

MOVAH,2

INT21H

JMPBEGIN

EXIT:

MOVAH,4CH

INT21H

RET

CODEENDS

ENDBEGIN

2.輸入一個字符,找出它的前導字符和后續(xù)字符,并按順序顯示這三個字符.

(解法1)

CODESEGMENT

MAINPROCFAR

ASSUMECS:CODE

START:

PUSHDS

XORAX,AX

PUSHAX

MOVAH,01H

INT21H

CMPAL,61H

JBEXIT

CMPAL,7AH

JAEXIT

MOVCL,AL

DECAL

MOVDL,AL

MOVAH,O2H

INT21H

MOVDL,CL

MOVAH,02H

INT21H

ANDAL,O1H

INCCL

MOVDL,CL

MOVAH,O2H

INT21H

EXIT:

MOVAX,4C00H

INT21H

RET

MAINENDP

CODEENDS

ENDSTART

(解法2)

.MODELSMALL

.STACK200H

.DATA

imsgdb'Input輸入提示信息

omsgdbODh,OAh,'Output:$';輸出提示信息

stringdb3dup(0),'$';存放三個字符

.CODE

START:

movax,?data

movds,ax

leadx,imsg

movah,9

int21h

movah,1

int21h

leadi,string

decal

movex,3

s:

mov[di],al

incdi

incal

loops

leadx,omsg

movah,9

int21h

leadx,string

movah,9

int21h

MOVAH,07H

INT21H

MOVAX,4C00H

INT21H

ENDSTART

3.將AX寄存器中的16位數(shù)分成4組,每組4位,然后把這四組數(shù)分別放在

AL,BL,CL,DL中

.MODELSMALL,C

.CODE

.STARTUP

MOVAX,3456H

MOVBX,AX

MOVCL,4

ROLAX,CL

MOVBX,AX

ANDAL,OFH;AL中是15,14,13,12

ROLBX,CL

MOVDX,BX

ANDBL,OFH;BL中是11,10,9,8

ANDAH,OFH

MOVCH,AH;CH中是7,6,5,4

MOVCL,CH

ANDDH,OFH;DH中是3,2,1,0

MOVDL,DH

.EXIT0

END

4.試編寫一程序,要求比較兩個字符串STRING1和STRING2所含字符是否相同,

若相同則顯示'MATCH',若不相同則顯

示'NOTMATCH).

.MODELSMALL

.DATA

STRING1DB"LDSKFJSLDKF”

LENG1EQU$-STRINGl

STRING2DB"LDSKFJSLDKP”

LENG2EQU$-STRING2

MSG1DB"MATCH”,24H

MSG2DB"NOTMATCH”,24H

.CODE

MOVAX,@DATA

MOVDS,AX

MOVES,AX

MOVBX,LENG1

MOVCX,LENG2

CMPBX,CX

JNZNOT_MATCH

LEASI.STRINGl

LEADI,STRING2

CLD

REPZCMPSB

JZ_MATCH

NOT?MATCH:

LEADX,MSG2

MOVAH,09H

INT21H

JMP_EXIT

_MATCH:

LEADX,MSG1

MOVAH,09H

INT21H

_EXIT:

MOVAH,07H

INT21H

MOVAX,4C00H

INT21H

END

5.要求能從鍵盤接收一個個位數(shù),然后響鈴N次(響鈴的ASCII碼為07)

.MODELSMALL

.DATA

MSGDB"YOURINPUTISNOT1-9!”,24H

.CODE

.STARTUP

MOVAH,0

INT16H;接收一個鍵盤輸入

CMPAL,31H

JBERROR

CMPAL,39H

JAERROR

MOVCL,AL

SUBCL,30H

CYCLE:

MOVDL,7

MOVAH,09H

INT21H

MOVAH,07H;按一下鍵就響一下鈴聲

INT21H

LOOPCYCLE

JMP_EXIT

ERROR:

LEADX,MSG

MOVAH,09H

INT21H

MOVAH,07H

INT21H

_EXIT:

.EXIT0

END

6.編寫程序,將一個包含有20個數(shù)據(jù)的數(shù)組M分成兩個數(shù)組,正數(shù)數(shù)組P和負數(shù)

數(shù)組N,并分別把這兩個數(shù)組中數(shù)據(jù)的

個數(shù)顯示出來.

.MODELSMALL,C

.DATA

INDEXDB12,-20,4,05H,11H,2AH,T1,2,3,09H

DB-3,0,-9,44H,32H,33H,34H,-5,40H,22H

PDB0,20DUP(O);存放正數(shù)

NDB0,20DUP(O);存放負數(shù)

.CODE

DISPLAYPROCNEARUSESAX

ANDAH,OFH

.IFAH>=OAH&&AH<=OFH

ADDAH,07H

.ENDIF

ADDAH,30H

MOVDL,AH

MOVAH,02H

INT21H

MOVAH,07H

INT21H

RET

DISPLAYENDP

.STARTUP

LEADI,P+1

LEASI,N+1

LEABX,INDEX

MOVCX,14H

CYCLE:

CMPBYTEPTR[BX],0

JGNOSIGN

INCAL;AL中存放負數(shù)

MOVDL,BYTEPTR[BX]

MOVBYTEPTRDS:[DI],DL

INCDI

INCBX

LOOPCYCLE

NOSIGN:

INCAH;AH中存放正數(shù)

MOVDL,BYTEPTR[BX]

MOVBYTEPTRDS:[SI],DL

INCSI

INCBX

LOOPCYCLE

MOVP,AH

MOVN,AL

CALLDISPLAY

MOVAH,AL

CALLDISPLAY

.EXIT0

END

7.試編制一個匯編語言程序,求出首地址為DATA的100D字數(shù)組中的最小偶數(shù),

并把它存放在AX中.

datareasegment

datadw10,2,4,8,7,7,69,65,55,89,95

dw25,39,77,88,25,1,47,88,8,8,77,88,22

count=($-data)/2

numdwOffeeh

datareaends

codesegment

mainprocfar

assumecs:code,ds:datarea

pushds

movax,0

pushax

begin:

movax,datarea

movds,ax

movbl,2

movex,count

leasi,data

A:

movax,[si]

movdx,ax

divbl

empah,0

jnecircle

empdx,num

jbB

circle:

addsi,2

lopa:

loopA

exit:

movax,num

ret

B:

movnum,dx

jmplopa

mainendp

codeends

end

8.把AX中存放的16位二進制數(shù)K看作是8個二進制的“四分之一字節(jié)試編寫

一程序,要求數(shù)一下值為3(即11B)的四

分之一字節(jié)數(shù),并將該數(shù)在終端上顯示出來.

MOVCX,8

MOVDL,0

NEXT3:RORAX,1

JNCNEXT1

RORAX,1

JNCNEXT2

INCDL

NEXT2:LOOPNEXT3

ADDDL,30H

MOVAH,2

INT21H

MOVAH,4CH

INT21H

NEXT1:RORAX,1

JMPNEXT2

9.試編寫一匯編語言程序,求出首地址為DATA的100D字數(shù)組中的最小偶數(shù),并把

它存放在AX中.

.MODELSMALL,C

.DATA

_DATADW100DUP(?)

.CODE

.STARTUP

LEASI,_DATA

MOVAX,fsi]

MOVCX,100

CYCLE:

ADDSI,2

.IFAX<[SI]

MOVAX,[SI]

.ENDIF

LOOPCYCLE

.EXIT0

10.設有一段英文,其字符變量名為ENG,并以$字符結束,試編寫一程序,查對單

詞SUN在該文中的出現(xiàn)次數(shù),并以格式

“SUN****"顯示出次數(shù).

.MODELSMALL

.386

.DATA

ENGDB'SUN','SUNJAVA),24H

MESSAGEDB'SUN:','$'

.STACK100H

.CODE

MAINPROCFAR

START:

PUSHDS

ANDAX,0

PUSHAX

MOVAX,@DATA

MOVDS,AX

MOVAX,OH

MOVSI,1H

SUBSI1:

SUBSI,1H

SUBS12:

SUBSI,1H

COMPARES:

ADDSI,1H

MOVDL,ENG[SI]

CMPDL,24H

JEPRINT

CMPDL,53H

JNECOMPARES

COMPAREU:

ADDSI,1H

MOVDL,ENG[SI]

CMPDL,55H

JNESUBSI2

COMPAREN:

ADDSI,1H

MOVDL,ENG[SI]

CMPDL,4EH

JNESUBSII

INCAX

JMPCOMPARES

PRINT:

LEADX,MESSAGE

PUSHAX

MOVAH,09H

INT21H

POPAX

CALLSHOWNUMBER

EXIT:

RET

MAINENDP

SHOWNUMBERPROCNEAR

COVERNUM:

DAA

MOVDX,AX

MOVCL,4H

SHOW:

ROLDX,4H

PUSHDX

ANDDX,OFH

ADDDX,30H

MOVAH,O2H

INT21H

POPDX

LOOPSHOW

RET

SHOWNUMBERENDP

ENDSTART

11.從鍵盤輸入一系列以$為結束符的字符串,然后對其中的非數(shù)字字符計數(shù),并

顯示出計數(shù)結果.

.MODELSMALL

.386

.CODE

MAINPROCFAR

START:

PUSHDS

MOVAX,0

PUSHAX

MOVCX,0

INPUT:

MOVAH,1H

INT21H

COMPARE:

CMPAL,24H

JEPRINT

CMPAL,30H

JLADDCOUNT

CMPAL,39H

JGADDCOUNT

ADDCOUNT:

ADDAX,1H

JMPINPUT

PRINT:

CALLSHOWNUMBER

EXIT:RET

MAINENDP

SHOWNUMBERPROCNEAR

COVERNUM:

DAA

MOVDX,AX

MOVCL,2H

SHOW:

ROLDL,4H

PUSHDX

ANDDL,OFH

ADDDL,30H

MOVAH,02H

INT21H

POPDX

LOOPSHOW

RET

SHOWNUMBERENDP

ENDSTART

12.有一個首地址為MEM的100D字數(shù)組,試編制程序刪除數(shù)組中所有為零的項,

并將后續(xù)項向前壓縮,最后將數(shù)組的剩

余部分補上零.

.modelsmall

.386

.stack100H

.data

memdw

12,0,0,0,0,0,1,2,3,6,4,7,8,2,1,0,0,54,5,0,2,4,7,8,0,5,6,2,1,4,8,5,1,4

5,7,5,1,2,0,2,4,0,2,54,0,12,0,

0,0,0,0,1,2,3,6,4,7,8,2,1,0,0,54,5,0,2,4,7,8,0,5,6,2,1,4,8,5,1,45,7,5

,1,2,0,2,4,0,2,54,0,45,7,5,1,2

,0,2,4,0,2

.code

MAINPROCFAR

start:

pushds

andax,0

pushax

movax,@data

movds,ax

movax,OH

movbx,64H

movex,64H

movsi,OFFFEH

repeat:

ADDsi,2H

cmpMEMLsi],OH

JEcalls

looprepeat

calls:

INCax

callsort

cmpax,1H

JElastValue

DECex

jmprepeat

exit:

ret

lastValue:

movmem[bx],OH

DECex

jmprepeat

MAINENDP

sortPROCNEAR

pushex

pushsi

subsi,2H

s:

addsi,2H

movdx,mem[si]

movmem[si+2],dx

loops

return:

popsi

popex

ret

sortENDP

ENDstart

13.在STRING到STRING+99單元中存放著一個字符串,試編制一程序測試該字符

串中是否存在數(shù)字.如有,則把CL的第

5位置1,否則將該位置0.

DSEGSEGMENT

ADW?

BDW?

DSEGENDS

CSEGSEGMENT

MAINPROCFAR

ASSUMECS:CSEG,DS:DSEG

START:PUSHDS

SUBAX,AX

PUSHAX

MOVAX,DSEG

MOVDS,AX

BEGIN:

MOVAX,A

MOVAX,B

XORAX,BX

TESTAX,0001

JZEXIT

XCHGBX,A

MOVB,BX

JMPEXIT

CLASS:

TESTBX,0001

JZEXIT

INCB

INCA

EXIT:RET

MAINENDP

CSEGENDS

ENDSTART

14.在首地址為TABLE的數(shù)組中按遞增次序存放著100H個16位補碼數(shù),試編寫一

個程序把出現(xiàn)次數(shù)最多的數(shù)及其出現(xiàn)

次數(shù)分別存放在AX和CX中.

DATASEGMENT

TABLEDW100HDUP(?)

MDATADW?;存放出現(xiàn)次數(shù)最多的數(shù)

COUNTDW0;存放出現(xiàn)次數(shù)

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START:

MOVAX,DATA

MOVDS,AX

MOVBX,100H

MOVDI,0;DI為數(shù)組TABLE的指針

NEXT:

MOVDX,0

MOVSI,0

MOVAX,TABLE[DI]

MOVCX,1OOH

COMP:

CMPTABLE[SI],AX

JNE_ADDR

INCDX

_ADDR:

ADDSI,2

LOOPCOMP

CMPDX,COUNT

JLECHANG

MOVCOUNT,DX

MOVMDATA,AX

CHANG:

ADDDI,2

DECBX

JNZNEXT

MOVCX,COUNT

MOVAX,MDATA

MOVAX,4C00H

INT21H

CODEENDS

ENDSTART

15.數(shù)據(jù)段中已定義了一個有n個字數(shù)據(jù)的數(shù)組M,試編寫一程序求出M中絕對值

最大的數(shù),把它放在數(shù)據(jù)段的M+2n單

元中,并將該數(shù)的偏移地址存放在M+2(n+l)單元中.

DSEGSEGMENT

XDW-4

FXDW?

DSEGENDS

CSEGSEGMENT

MAINPROCFAR

ASSUMECS:CSEG,DS:DSEG

START:

PUSHDS

SUBAX,AX

PUSHAX

MOVAX,DSEG

MOVDS,AX

BEGIN:

CMPX,5

JGAO

CMPX,-5

JLAO

MOVBX,1

SUBBX,X

MOVFX,BX

RET

AO:

MOVFX,0

RET

MAINENDP

CSEGENDS

ENDSTART

16.在首地址為DATA的字數(shù)組中,存放了100H個16位補碼數(shù),試編寫一程序,求

出它們的平均值放在AX寄存器中;并求

出數(shù)組中有多少個數(shù)小于此平均值,將結果放在BX寄存器中.

.MODELSMALL

.STACK200H

.DATA

DA_TADW100HDUP(?)

.CODE

.STARTUP

XORAX,AX

XORBX,BX

XORDX,DX

MOVCX,100H

LEASI,DA_TA

CYCLE:

ADDAX,[SI]

ADCDX,0

INCSI

INCSI

DECCX

CMPCX,0

JNZCYCLE

MOVCX,100H

DIVCX;計算平均值,存放在AX中.

LEASI,DA_TA

COMPARE:

CMPAX,[SI]

JANEXT;計算小于AX的值,其個數(shù)存放在BX中

INCBX

NEXT:

INCSI

INCSI

DECCX

CMPCX,0

JNZCOMPARE

.EXIT0

END

17.試編制一個程序,把AX中的16進制數(shù)轉化為ASCII碼,并將對應的ASCII碼

依次存放到MEM數(shù)組中的四個字節(jié)中.例

如:當(AX)=2A49H時,程序執(zhí)行完后,MEM中的4個字節(jié)內(nèi)容為39H,34H,41H,32H.

;MODE=DOS

DATASEGMENT

SOURCEDW2A49H

MEMDB4DUP(?)

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START:

MOVAX,DATA

MOVDS,AX

MOVDX,SOURCE

LEABX,MEM

MOVCX,4

LB:MOVAX,DX

ANDAX,OOOFH

CMPAL,10

JCAD

ADDAL,7

AD:ADDAL,30H

MOV[BX],AL

INCBX

SHRDX,1

SHRDX,1

SHRDX,1

SHRDX,1

LOOPLB

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

18.把0-100D之間的30個數(shù)存入以GRADE為首地址的30個字數(shù)組中,GRADE+i

表示學號為i+1的學生成績.另一個數(shù)組

RANK為30個學生的名次表,其中RANK+i的內(nèi)容是學號為i+1的學生的名次.編

寫一程序,根據(jù)GRADE中的學生成績,將

學生名次填入RANK數(shù)組中.(提示:一個學生的名次等于成績高于這個學生的人

數(shù)加1)

DSEGSEGMENT

GRADEDW30DUP(?)

RANKDW30DUP(O)

DSEGENDS

CSEGSEGMENT

MAINPROCFAR

ASSUMECS:CSEG,DS:DSEG

START:PUSHDS

SUBAX,AX

PUSHAX

MOVAX,DSEG

MOVDS,AX

BEGIN:MOVDI,0

MOVCX,30

L00P1:PUSHCX

MOVCX,30

MOVSI,0

MOVAX,GRADE[DI]

MOVDX,0

L00P2:CMPGRAD[SI],AX

JBEGOON

INCDX

GOON:ADDSL2

LOOPL00P2

POPCX

INCDX

MOVRANK[DI],DX

ADDDI,2

LOOPL00P1

RET

MAINENDP

CSEGENDS

ENDSTART

19.已知數(shù)組A包含15個互不相等的整數(shù),數(shù)組B包含20個互不相等的整數(shù).試

編制一程序,把既在A中又在B中出現(xiàn)的

整數(shù)存放于數(shù)組C中。

;#Mode=DOS

.MODELSMALL,C

.DATA

ADB15DUP(?)

BDB20DUP(?)

_CDB15DUP(?)

.CODE

.STARTUP

LEASI,A

LEABX,B

LEADI,_C

MOVCX,OFH;控制外層循環(huán)

MOVDX,14H;控制內(nèi)層循環(huán)

CYCLE1:

MOVAX,[SI]

CYCLE2:

CMPAX,DS:[BX]

JNENEXT

MOVDS:[DI],AX

INCDI

NEXT:

INCBX

DECDX

JNZCYCLE2

MOVDX,14H

INCSI

DECCX

LOOPCYCLE1

.EXIT0

END

20.設在A,B,C單元中分別存放著三個數(shù).若三個數(shù)都不是0,則求出三數(shù)之和并

存放在D單元中;若其中有一個數(shù)為0,

則把其它兩個單元也清零.試編寫此程序.

;#Mode=DOS

.MODELSMALL,C

.DATA

ADB?

BDB?

_CDB?

DDW?

.CODE

.STARTUP

MOVAL,A

MOVBL,B

MOVCL,_C

MOVAH,0

.IFAL!=O&&BL!=O&&CL!=0

ADDAL,BL

ADCAH,0

ADDAL,CL

ADCAH,0

MOVD,AX

.ELSEIFAL==0|BL==O||CL==0

XORAL,AL

MOVA,AL

MOVB,AL

MOV_C,AL

.ENDIF

.EXIT0

END

21.試編寫一程序,要求比較數(shù)組ARRAY中的三個16位補碼數(shù),并根據(jù)比較結果在

終端上顯示如下信息:

(1)如果三個數(shù)都不相等則顯示0;

(2)如果三個數(shù)有兩個相等則顯示1;

(3)如果三個數(shù)都相等則顯示2.

;#Mode=DOS

.MODELSMALL,C

.DATA

;只要修改此處ARRAY,就可以看到三種不同的運行結果了。

ARRAYDW0,1,2

_ZERODB'0$'

_ONEDB'1$'

_TWODB'2$'

.CODE

.STARTUP

LEASI,ARRAY

MOVAX,[SI]

MOVBX,[SI+2]

MOVCX,[SI+4]

.IFAX!=BX&&AX!=CX&&BX!=CX

LEADX,_ZERO

.ELSEIFAX==BX&&AX==CX&&BX==CX

LEADX,_TW0

.ELSE

LEADX,_ONE

.ENDIF

MOVAH,09H

INT21H

MOVAH,07H

INT21H

.EXIT0

END

22.從鍵盤輸入一系列字符(以回車鍵結束),并按字母,數(shù)字及其它字符分類計數(shù),

最后顯示出這三類的計數(shù)結果.

23.已定義了兩個整數(shù)變量A和B,試編寫程序完成下列功能:

(1)若兩個數(shù)中有一個是奇數(shù),則將奇數(shù)存入A中,偶數(shù)存入B中;

⑵若兩個數(shù)均為奇數(shù),則將兩數(shù)均加1后存回原變量;

(3)若兩個數(shù)均為偶數(shù),則兩個變量均不改變.

;#Mode=DOS

.MODELSMALL,C

.DATA

ADB23H

BDB48H

.CODE

.ST

溫馨提示

  • 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

提交評論