汇编语言课后答案_第1页
汇编语言课后答案_第2页
汇编语言课后答案_第3页
汇编语言课后答案_第4页
汇编语言课后答案_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一或

11(如果十六进制效的最高位是字母(妣XB).剜应在箕前制加0(零).如本墨(3))

(1)569D-101110001B-171H

(2)1000CD-1001110001000CB-2"10H

(3)4O95D-111111111111B-CFFFH

(4)52767D-1111111Hll1111B-TTFH

12

(1)101101B-Z)H-45D

(2)100000CXB-9CH-E8D

(3)11111111nil1111B-CHTFHM65535D

(4>11111111B-0FFH-255D

13

(1)CF.AH-11111O1CB-25OD

(2)31^1011011B-91D

(3)CFFFEH-111111111111m(E=65539

(4)12MH-1001000110100B-466CD

14

(D3AHYB计0F1H

(2)1234H-0.4FH-12E3H

(3)OABCEH-CFET^OAACFH

(5)7ABX6FH-35325H

15

(1)(-85D-:6I>10101011B-010011(XB-11110111B-CF-H

(2)85D-(-%DA01010101B-10110100B-00001001B-09H

(3)85D-761Aoi010101B-1011OMMB-OOOO1001B»09H

(4)85D-(--6D>01010101B-0100110CB-10100001B-0A1H

(5)(-85D)-^6D-1010101CB-10110100B«01011111B-5FH

(6)-85I>-(^6D>«10101011B-01001100B=llll011IB-0FTI

16

(1)CD8H

之果E校萼作臂三号政,则它表示一401>之其它衩舂任天号号数.Mt216D.

(2)CFFH

之果E被詈住普与号致.别它表示一1D:力果它衩着作无左号数.则它255D.

1.7

(1)-ffH.皿O'

(2)2BH,43D,

(3)硝115D,

(4)59H89D,'f

1.8

(1)For«a«ple,

46H6FH^H2CH65H^SH61H6DH'CH6cH65H2cH

(2)Ihuaaitrbir3692.

54H68H69H73H20H69H73H2cH61H20H6EH_5H6EH62H65H二H20H33H36H

39H32H2EH

第二B

2.1

256个

22

E5HOOOBOH

1EH000B1H

OOOB2H

3cHOOOB3H

2AH000B4H

3CO22H旬30024H字节单元的内容分制为

C30022H?=CABH

C30024H?=CEFH

3OQ21H和30022H字单元的力容分制为

C30021H)=CAB34H

30022H?=0CD.4BH

逻辑拄址为3017:0O0A的存惚单元的打理地址为3017AH.

逻行运址为3015002A的¥惚单元的把建基址为3017AH.

逻篁叁址为30】。如1A的考情军元的物理姓址为3017AH.

0AAA4CH

2.6

10EWH::*BU叁:

10F40H

2OE40H:“KklC〉

20F40H

21F00H(54K3)

31F00H

31FF0H(*K代三)

41FF0H

OF=0:SF=O:ZF=O:CF=C

AX,BX,CX,DX,SLDI

CX

(3)^BXCXDXSLDI

(4)CS:DS:SS:ES

(5)FLAGS

(6)cs;n>

(7)SS:SPBP

2.S

指示寿堵赛地址的寄存葵之下所示

S-;假参

CSIP

SSSRBP

DSBXDLSI

ESDI

2.9

1<M)2(C)3.(D)4.®)5(A)64L)?<K)84J)

9XF)10(H)11(G)12®13.(D1440)15.(N)

IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社)(沈美

明,温冬蝉著)

第3章答案

IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社)(沈美

明,温冬蝉著)第三章答案1-

lo

・立•

1)即址

没有

(2)直接寻址

7237H

(3)使用BX的寄存器寻址没

(4)使用BX的间接寻址

637DH

(5)使用BX的寄存器相对寻址

0D5F0H

(6)基址变址寻址

8E18H

(7)相对基址变址

004FH

2O根据下列要求,写出相应的汇编指令。

(1)ADDDX,BX

(2)ADDAL,fBX][SI]

(3)ADDrBX][0B2H],CX

(4)MOVAX,2A59HADD[0524H],AX

(5)ADDAL,0B5H

3o

(1)寄存器间接寻址

MOVBX,OFFSET[BLOCK][OAH]

MOVDX,[BX]

(2)寄存器相对寻址

MOVSI,OAH

MOVDX,[BLOCK][SI]

⑶基址变址寻址

MOVBX,BLOCK

MOVSI,OAH

MOVDX,[BX][SI]

没人来看,还是要写〜〜

4。现有(DS)

=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)

=78H,(21200)=2AH,(20201)=4CH,(21202)=B7H,(21203)=65H,试说明下歹U各条指

令执行完后,AX寄存器的内容。

(1)MOVAXJ200H

1200H

(2)MOVAX,BX

01OOH

(3)MOVAX,[1200]

4C2AH注意,是字单元!!

(4)MOVAXJBX]

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

注意有符号数的符号位一

8o(1)MOVAX,0ABH立即数寻址

无物理地址

(2)MOVAX,BX寄存器寻址

同上

(3)MOVAXJ100]直接寻址

201OOH

(4)MOVAX,VAL直接寻址

20050H

(5)MOVAX,[BX]寄存器间接寻址

201OOH

(6)MOVAX,ES:[BX]直接寻址

21100H

(7)MOVAX,[BP]寄存器间接寻址

2001OH

(8)MOVAX,[SI]同上

200A0H

(9)MOVAX,[BX+10]寄存器相对寻址

20110H

(10)MOVAX,VAL[BX]同上

20150H

(11)MOVAX,[BX][SI]基址变址寻址

201A0H

(12)MOVAX,VAL[BX][SI]相对基相变址寻址

201F0H

9o

(1)的指令:MOVAX,[BX][0CH]MOV

ZREO,AX

(2)的指令:MOVAX,ARRAY[BX]MOV

ZREO,AX

10oMOVAX,TABLE是把符号地址TABLE里的内容送到AX里,指

令执行完后,(AX)=1234H

LEAAX,TABLE是把符号地址TABLE的有效地址(这里是

偏移量)送到指定寄存器AX里,指

令执行完后,(AX)=0032H

llo执行完指令后,(AX)=1EOOH

12oLEAAX,CSTRING

MOVDL,AX

MOVDH,[AX+6]

13。这个,,图,很麻烦了,所以就不画了一大家可以看一下课本上P51-P53,

很清楚,看完了这道匙也会了〜〜〜

140LESBXJ2000]

MOVAX,ES:[BX]

注意:一开始我写的是:MOVAX,ES:[8000H],后来看到题目里要求写两

条指令,所以一条就不行了,就要画蛇添足〜〜〜

15运算结果

SF,ZF,CF,OF各位的值(从左至右依次往下〜)

(1)74D4H

0000

(2)A5C1H

1001

(3)4240H

0010

(4)0000H

0110

16o接上表〜

(1)5D14

0000

⑵A870

1001

(3)D870

1000

(4)34E4

0010

17o

(l).MOVAX,Z;把Z送到AX

SUBAX,X;Z-X

ADDAX,W;W+(Z-X)

MOVZ,AX;结果保存在z中

(2).MOVAX,R;R送到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),连续减去两个数,相当于减去这两

个数的和〜〜

MOVZ,BX;最终结果送到Z中

(3)

MOVAX,W;把W送到AX

IMULX;W*X注意:低十六位保

存在AX里,高十六位保存在DX里

MOVBX,Y;把丫送到BX里

ADDBX,6;Y+6

IDIVBX;(W*X)/(Y+6)注意:商保存

在AX里,余数保存在DX里

MOVZ,AX;把商送到Z中,

MOVR,DX;把余数送到R中

(4)

MOVAX,W;把W送到AX中

SUBAX,X;w-x

CWD;把AX中的十六位带符号数扩展成为32

位,低十六位保存在AX中,高十六位保

;在口*中

MOVBX,5;把5送到BX中

IDIVBX;(W-X)/5被除数为32位,除

数为16位商为16位

IMULY;上一步结果再乖以Y,积为32位

MOVBX,2;把2送到BX中

IMULBX;上•步乘法所得的积再乘以2,各

为64位

MOVZ,EAX;把结果中低32位放入Z双字单元中

MOV[Z+4],EDX;把结果中高32位放入Z+4双字单元中

18o

指令本条指令执行完后AX的内容

执行完后CF,SF,ZF的值

MOVAX,1234H1234H

000

MOVCL,41234H

000

ROLAX,CL2341H

100

DECAX2340H

100

MOVCX,42340H

100

MULex8918H

000

INT20H

程序结束后,(AX)=8918H(DX)=OOOOH

19o

指令执行完后AX的内容

执行完后CF,SF,ZF和OF的值

MOVAX,00

0010

DECAXFFFFH

0100

ADDAX,7FFFH7FFEH

0000

ADDAX,28000H

0101

NOTAX7FFFH

0101

SUBAX,0FFFFH8000H

1101

ADDAX,8000H0000H

1011

SUBAX,1FFFFH

1101

ANDAX,58D1H58D1H

0000

SALAX,1B1A2H

0101

SARAX,1D8D1H

0100

NEGAX272FH

1000

RORAX,19397H

1001

20o

(1)MOVAX,DATAX

ADDDATAY,AX

(2)MOVAX,DATAX

ADDDATAY,AX

MOVAX,[DATAX+2]

ADD[DATAY+2],AX

(3)本书且指令的作用是:BX<一一[DATAX]+[DATAY]+[1](CF的值)

位加法〜

(4)MOVAX,DATAX

MULDATAY;结果的高十六位保存在DX裹,低

十六位保存在AX«

(5)MOVAX,DATAX

MOVDX,[DATAX+2]

MULDWORDDATAY;结果的高三十二位保存在EDX裹,

低三十二位保存在EAX«

;造凄所用的

DWORD•^一属性操作符,在第四章曾■阜到〜〜

(6)MOVAX,DATAX

DIV17H;结果商保存在AL中,

余数在AH中

(7)MOVAX,DATAX

CDW

DIVDATAY

21oNEGDX

NEGAX

SBBDX,0

22o

MOVAX,A;把曼字房数的低字放到AX中

MOVDX,[A+2];把曼字•良数的高字放到DX中

TESTDX,8000H;冽信式曼字房数的符号虎

JZRIGHT;如果是非负一,即直接保存

NEGDX;如果是负矍攵,即求衲

NEGAX

SBBDX,0

RIGHT:MOVB,AX

MOV[B+2],DX

23o每脩指令罩褐轨行完彳爰的结果依次卷:

(1)9AH(2)61H(3)0FBH(4)1CH(5)0(6)0E3H

24o轨行指令序列彳爰,BX的内容卷:0DAH

25o

(1)把53D乘以2的程序:

MOVAX,35H;53D=35H

SHLAX,1

(2)把53除以2的程序:

MOVAX,35H

SHRAX,1

其他的同理一

26o道段程序完成的功能是:把DX:AX中的曼字数獴左移4位(相常於乘以

16D)

27o各修指令覃褐轨行彳爰,DX的值依次卷:

(1)5CH(2)17H(3)05C8H(4)72H(5)2017H(6)0CDH(7)

0172H(8)05CCH

(9)0DCH

28o言亥程序段孰行完彳爰,BX寄存器的内容是:C02DH

29o(1)从左到右把CONMAE中的字符串伟送到PRLINE的程序实现:

LEASLCONAME;把CONAME中第一个字节的偏移地址送到SI中

LEADLPRLINE;把PRLINE中第一个字节的偏移地址送到DI

MOVCX,20;把重复次数放到ex里

CLD;让SIDI从低地址指向高地址(即从左到

右传送)

REPMOVSB;传送

(2)从右到左把CONMAE中的字符串传送到PRLINE中的程序实现:

LEASI,CONAME

LEADLPRLINE

MOVCX,20

STD;和上面唯一不同的就是这次是从右到

左,所以要从高地址批向低地址

REPMOVSB

(3)把CONAME中的第三和第四他|字WT装入AX的程序^说:

LEASI,[CONAME+3]

LODSW

(4)把AX寄存器的内容存入彳他PRLINE+5I鼎始的字前中的程序

LEADI,[PRLINE+5]

STOSW

(5)检查CONAME字符串中有趣空格字符,如有把它俾送幺合BH寄存器的程

序土拈

LEAD!,CONAME;把CONAME中第一•他字符偏移地

址放入DI中

MOVCX,20;把重^次数放到CX中

MOVAL,20H;把空格符的ASCII值放入AL

CLD;彳走低到高

REPNESCASB;比敕

MOVBH,[DI-1]R;把检查到的空格符送到BH中

30o

MOVCX,12H;把重禊次矍攵放到CX中。it裹

用十六诞制表示

MOVSL0;初始化SI

MOVAX,26H;把&字符的ASCII值放入AX

CHECK:CMPAX,STRINGfSI];依次查找

INCSI

LOOPNECHECK;找到了就退出

MOVAX,20H;把空格符的ASCH值勤放

入AX中

MOVSTRING[SI-1],AX;用空格符代替&

31o(1)用空格符清除PRINTLINE域的程序实现:

MOVAL,20H

LEADI,PRINT_LINE

MOVCX,132

CLD

REPSTOSB

(2)在STUDENT_ADDR中查找第一个‘_'的程序实现:

MOVAX,2DH;把“一”的

ASCII值放入AX

MOVSL0;初始化

SI

MOVCX,9;把重禊次

数放入ex中

;依次检查STUDENT-ADDR中的字符是否卷找到第一个停下来

CHECK:CMPAX,STUDENT_ADDR[SI];

INCSI

LOOPNZCHECK

(3)在STUDENT_ADDR中查找最后一个”—“的程序实现:

;和第二题不同的就是道次是彳他右到左查前,所以SI的初始化卷9

MOVAX,2DH

MOVSI,9

MOVCX,9

CHECK:CMPAX,STUDENT_ADDR[SI]

DECSI

LOOPNZCHECK

(4)程序

MOVAL,20H;把空格符的ASCII值放入AL

LEADI,STUDENT_NAME;把STUDENT_NAME中第一个字符偏

移地址放到DI中

MOVCX,30;把重复次数放到CX中

CLD:让DI从低位移到高位

REPZSCASB;如果有不是空格符的,就退出

JZSTORE:如果全是空格符,就转到

STORE中

;用*代替空格

STORE:MOVAL2AH

MOVCX,30

STD;注意,这里是把前面从低到高移动

的DI再从高到低移上去~~

REPSTOSB

⑸程序实现:

;把STUDENT_NAME移到PRINTJJNE的前30个字节中

LEASLSTUDENT_NAME

LEADLPRINT_LINE

MOVCX,30

CLD

REPMOVSB

;把STUDENT_ADDR移至PRINT_LINE的后9个字节中

LEASI,[STUDENT.ADDR+9]

LEADL[PRINT_LINE+132]

MOVCX,9

STD

REPMOVSB

32o程序实现:

ooo

LEASLOLDS

LEADLNEWS

MOVCX,5

REPZCMPSB

JNZNEW_LESS

ooo

33o

(1)CMPDX,CX

JAEXCEED

(2)CMPBX,AX

JGEXCEED

(3)CMPCX,0

JZZERO

(4)CMPBX,AX

JOOVERFLOW

(5)CMPBX,AX

JLEEQ_SMA

(6)CMPDX,CX

JBEEQ_CX

34o(1)跳转到:LI

(2)跳转到LI

(3)跳转到L2

(4)跳转到L5

(5)跳转到L5

35o

(1)可以引起转移到LI的指令有:NB,BE,NL,LE

(2)可以引起转移到L1的指令有:同上

(3)可以引起转移到L1的指令有:B,BE,L,LE

(4)可以引起转移到L1的指令有:NB,NBE,NL,NLE

(5)可以引起转移到L1的指令有:同上

(6)可以引起转移到L1的指令有:同(3)

(7)可以引起转移到L1的指令有:同上

36o

370程序流程图就不画了,呵呵,程序如下~~

MOVAL,STAUS[SI];把要测试的字节放到AL中

ANDAL,2AH;把第一,三,五位为一其他位为0

的数-2AH,与这个字节比较,结果

;放到AL中

JZROUTINE_4;如果结果为0,则三位都为0

XORAL,2AH;前面相与的结果再与2AH异或

JZROUTINE_1;如果结果为0,则三位都为1

BSFBL,AL

BSRBL,AL

CMPBL,CL

;如果向前和向后测试后,第一个1的位置相同,说明只有…个1,则异或运算

前有AL中有两个1

JEROUTINE2

ROUTINE.1

注:本题还有其他解法,请大家自己试试〜〜

38o(1)当括号内是:LOOP时,循环四次,程序结束后

(AX)=05(BX)=16(CX)=0(DX)=0

(2)当括号内是:LOOPE时,不循环,程序结束后

(AX)=02(BX)=04(CX)=03(DX)=02

(3)当括号内是:LOOPNE时:循环三次,程序结束后

(AX)=04(BX)=11(CX)=01(DX)=0

类别:ibm-pc汇编语言程序设计(第二版)课后习题答案I评论(7)I浏览(5855)

IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社)(沈美

明,温冬蝉著)第三章答案39—522006-11-0223:02

39o图,就不画了,呵呵〜〜自己看一下课本,P101—

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

41o(1)目的地址:2004H内容依次为:56HF4H23H98H

(2)目的地址:384CH内容依次为:91H34HF2H01H

(3)目的地址:寄存器,无物理地址〜内容依次为:92H6DH

A2H4CH

42o(1)PUSHAX

(SP)<——(SP)-2

(SP+1)<-一一(AH)(SP)<——(AL)

(2)POPESI

(ESI)<------((ESP)+3,(ESP)+2,(ESP)+1,(ESP))

(ESP)<------(ESP)+4

(3)PUSH[BX]

(SP)<——(SP)-2

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

(4)PUSHAD

(ESP)<------(EAX)

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

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

(ESP-12)<-------(EBX)

(ESP-16)<——(ESP);这里指的是指令执行前的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+1)<-——0

(SP)<——4

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

(3)9090804H(4)6F13ADH

44o(1)OFFFFFFFCH(2)OFFFFFFF8H

(3)00000007H(4)00000099H

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

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

47oADDECX,EDX

ADDECX,ESI

MOVEDI,ECX

48oIMULBX,DX,100H执行的操作是:

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

49o程序实现:

MOVAL,BL

CBW

IDIVCL

IMUL2

MOVDX,AX

50o

JMPDI是直接跳转,执行的操作是:(IP)<--(IP)+(DI)

JMP[DI]是间接跳转,执行的操作是:(IP)<——(IP)+([DI])跳转到DI中所

指向的内存单元中的指令地址〜

51o假设数组名为NUMBERS,程序如下〜

MOVBX,0;后面用到〜

MOVCX,100H;把循环次数放入CX

MOVAL,42H

MOVSL0;初始化SI

;CHECK用来实现查找功能〜

CHECK:CMPAL,NUMBERS[SI]

INCSI

JBSTORE1;大于42H的数的个数存入UP

JASTORE2;小于42H的的数的个数存入DOWN中〜

LOOPCHECK;相等继续循环〜

STORE1INCBL;找到一个大于42的数,BL值增加1〜

MOVUP,BL

LOOPCHECK

STORE2INCBH

MOVDOWN,BH

LOOPCHECK

52o图,也不用画了一呵呵〜好了,本章结束

第4章答案

IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社)(沈美

明,温冬蝉著)第四章答案2006-11-0421:591。指令下列指令的错误

(1)MOVAH,BX源操作数与目的操作数长度不相同〜

(2)MOV[BX],[SI]这是两个内存单元在传递数据,而这在汇编语言中

是不允许的---

⑶MOVAX,fSI][DI]不能用两个变址连用,其中一个应为基址〜

(4)MOVMYDAT[BX][SI],ES:AX同(2)

(5)MOVBYTEPTR[BX],1000必须有一个为寄存器

(6)MOVBX,OFFSETMYDAT[SI]OFFSET不能与复杂操作数相连〜

(7)MOVCS,AX不能对CS赋值〜

(8)MOVECX,AX操作数类型不同〜

2o(1)合法(2)非法(3)非法(4)非法

3。(1)非法,操作数类型不同

(2)合法

(3)非法,不允许两个内存单元直接传递数据,你把人家CPU放哪了?

|lnj

(4)合法〜

(5)合法〜

(6)合法

(7)非法〜,必须有一个寄存器一把CPU放哪了?〜〜

(8)非法,两个内存单元地址相加没有意义〜

(9)合法

(10)非法,同(3)

4。(1)两内存单元传递数据

(2)操作数类型不同

(3)跳转指令只能跳转到符号地址

(4)转移指令后不能为变量,只能为标号

(5)格式不对,应为NEARPTR…

5o图,就不画了〜〜

6O(1)DW5150H

(2)MOVAX,5150H

MOVADDRESS,AX

等,写出几个就可以〜〜

7ODATASGSEGMENT

FLD1BDB'personalcomputer'

FLD2BDB10DUP(32)

FLD3BDB20H

FLD4BDB01011001B

FLD5BDB,32654,

FLD6BDB10DUP(0)

FLD7BDBPART1',DUP20(?),'PART2',DUP50(?);PART3',DUP14⑺

FLD1WDWOFFFOH

FLD2WDW01011001B

FLD3WDWFLD7B

FLD4WDW5,6,7,8,9

FLD5WDW5DUP(0)

FLD6WDW(FLD6W-FLD1W)-(FLD7B-FLD1B)

8OPLENTH的值为22,GE表示该数据段的长度〜

9oL的值为7

10o(1)MOVAX,OFFSETLNAME

(2)MOVSI,WORDPTRCODE_LIST

(3)CODE_LENGHTEQU$-CODE_LIST

Ho代码如下:

DATA_SEGSEGMENT

DB5

DATA_LISTDW0FFFFH,0,2,5,4,5DUP(?)

DATA_SEGENDS

CODE_SEGSEGMENT

ASSUMECS:CODE_SEG,DS:DATA_SEG

MOVAX,5

MOVMAX,AX

MOVAX,0FFFFH

MOVMIN,AX

CODE_SEGENDS

12o(1)10025

(2)19

(3)2548

(4)3

(5)103

(6)OFFFFH

(7)1

(8)3

13o分别汇编成为:

MOVAX,OAH

MOVBL,OAH

MOVCL,1

14o(1)(AX)=1(2)(AX)=2(3)(CX)=14H(4)(DX)=32H

(5)(CX)=1]

15o(1)操作符错误改为:DATA_SEGSEGMENT

⑵缺少段名在前面加个段名

(3)引用应该从;开始把那个“/”改成“;”

(4)结构混乱改为:

MAIN_PROCPROCFAR

MAIN_PROCENDP

END

16o程序框架如下:

DATA_SEGSEGMENT;定羲数撼段

ORG0E000H;ai下一字

fi地址卷0E000H

FIRST_TYPEEQUTHISWORD;建立一他舆下一存储罩元有相同

段地址和偏移地址的操作数

DATA_GROUPDB100DUP(?);品合DATA_GROUP分配100

他I字箭的空^

DATA_SEGENDS;数獴段结束

STACK_SEGSEGMENT;定羲堆梭段

ALIGN16;下

一字^彳俭小段首地址^始

STACKDB100DUP(?);卷堆慢分配空IW

STACK_SEGENDS

CODE_SEGSEGMENT

ASSUMECS:CODE_SEG,DS:DATA_SEG,SS:STACK__SEG

ORG1000H;下

僚指令的第一他1字筋淡1000H1荆始

START:MOVAX,DATA_SEG

MOVDS,AX

MOVAX,STACK_SEG

MOVSS,AX

CODE_SEGENDS

ENDSTART;幺吉束〜

17o程序如下:

D_SEGSEGMENT;数据段定义

AUGENDDD99251

D_SEGENDS

E_SEGSEGMENT;附加段定义

ADDENDDD-15926

E_SEGENDS

C_SEGSEGMENT;代码段定义

ASSUMECS:C_SEG,DS:D_SEG,ES:E_SEG

START:MOVAX,D_SEG

MOVDS,AX

MOVAX,E_SEG

MOVES,AX

MOVEAX,DS:AUGEND

ADDEAX,ES:ADDEND

MOVDS:SUM,EAX

C_SEGENDS

ENDSTART;结束

18o

19o需要加上PTR伪操作的有:(2)(3)(4)

第5章答案

IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社)(沈美

明,温冬蝉著)第五章答案

这当然不是标准答案,希望对大家有用处。

5.1试编写•个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来

.modelsmall

.stack100H

.code

mainprocfar

Start:

pushdx

movax,0

pushax

movah,01H

int21H

cmpal,61H

jllopl

cmpal,7BH

jgelopl

subal,20H

movdl,al

lopl:movah,2

int21H

ret

Endstart

5.2编写一个程序,从键盘接受一个小写字母,然后找出它的前导字符和后续字

符,再按顺序显示这三个字符.

.modelsmall

.386

.code

MAINPROCFAR

start:

pushds

subax,ax

pushax

input:

movah,7H

int21H

cmpe:

cmpal,20H

JEexit

cmpal,61H

JLinput

cmpal,7AH

JGinput

print:

subal,01H

movdl,al

movah,02H

int21H

addal,01H

movdl,al

movah,02H

int21H

addal,01H

movdl,al

movah,02H

int21H

;输出换行回车

movdl,OAH

movah,02H

int21H

jmpinput

exit:

ret

MAINENDP

ENDstart

5.3将AX寄存器中的16位数分成4组,每组4位,然后把这四组数分别放在

AL、BL、CL、DL中。

.modelsmall

.data

xDB4dup(?)

.stack100H

.code

MAINPROCFAR

start:

pushds

andax,OOH

pushax

movax,1234H

movcx,04H

movsi,OOH

lop:

pushex

movcl,04H

rolax,cl

pushax

andal,0FH

movBYTEPTRx[si],al

popax

popex

addsi,2

Looplop

moval,[X]

movblJX+21

movcl,[X+4]

movdl,[X+6]

print:

movah,02H

int21H

movdl,al

movah,02H

int21H

movdl,bl

movah,02H

int21H

movdl,cl

movah,02H

int21H

exit:

ret

MAINENDP

ENDstart

5.4编写一个程序,要求比较两个字符串STRING1和STRING2所含字符是否相

同,若相同则显示"MATCH",若不同在显示:"NOMATCH"。

.modelsmall

.data

STRING1DB'Imuststudyhard'

STRING2DB'Imuststudyhard'

XDB'MATCH.$'

YDBNOMATCH.$'

.stack100H

.code

mainprocfar

Start:

pushdx

movax,0

pushax

movax,@data

movds,ax

moves,ax

leasi,STRING1

leadi,STRING2

cld

movcx,(string2-stringl)/typeSTRING2

ret

Endstart

5.5编写••个程序,要求能从键盘接收一个个位数N,然后响铃N次,(响铃的

ASCII为07)。

这题比较有意思,呵呵。

modelsmall

.code

mainprocfar

start:

pushds

subax,ax

pushax

input:

movah,01H

int21H

cmpal,20H

jeexit

cmpal,30H

jleinput

cmpal,3AH

jgeinput

subal,30H

movex,ax

andcx,OFFH

lop:

movdl,07H

movah,2H

int21H

looplop

jmpinput

exit:

ret

mainendp

endstart

5.6编写程序,将一个包含有20个数据的数组M分成两个数组:正数数组和负

数数组N,并分别把这两个数组中的数据个数显示出来。

.modelsmall

.386

.data

MDB1,2,3,4,5,6,7,8,9,10,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10

PDB20dup(?)

NDB20dup(?)

.code

MAINPROCFAR

start:

PUSHds

ANDax,0

PUSHax

MOVax,@data

movds,ax

MOVbx,0

MOVsi,0

MOVdi,0

MOVcx,20D

cmpe:

CMPM[bx],0

JLifLow

hight:

MOVal,byteptrM[bx]

MOVbyteptrP[si],al

incsi

JMPcommonContrl

ifLow:

MOVal,byteptrM[bx]

MOVbyteptrN[di],al

INCdi

commonContrl:

INCbx

loopcmpe

movax,si

callshowNumber

callprintCR

movax,di

callshowNumber

exit:ret

MAINENDP

;;;;;;;;;;;;;;;;;注意,ShowNumber这个子过程有问题,请自行修改

showNumberPROCNEAR

covernum:

DAA

MOVdx,ax

MOVcl,2H

show:

ROLdl,4H

pushdx

ANDdl,OfH

ADDdl,30H

MOVah,02H

int21H

popdx

loopshow

ret

showNumberENDP

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

printCRPROCNEAR

movdl,0aH

movah,02H

int21H

movdl,0dH

movah,02H

int21H

ret

printCRENDP

endstart

5.7编制一个汇编语言程序,求出首地址为DATA的100D字数组中的最小偶数,

并把它放在AX中。

此题根据题意要求应该使用完整汇编格式,因为精简格式也使用DATA....

dataaresegment

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论