微机原理习题答案1234章 下载本文

ADD DEC MOV MOV DEC INC LOOP LEA MOV MOV LEA MOV CMP JZ INC LOOP

SI,CX SI AL,[SI] [DI],AL SI DI L1 SI,STR1 DX,[SI+6] CX,17 SI,STR1 AL,20H [SI], AL L2 SI L1

L1:

(3)

(4)

L1:

L2:

31. 设在数据段中定义了:

STRING DB ‘Today is Sunday & July 16, 2000’

编写程序实现将STRING中的’&’用’/’代替。 解:STRING中保存了30个字符。

MOV LEA MOV CMP JNZ MOV INC LOOP

CX,30 SI,STRING AL,’&’ [SI],AL L2

BYTE PTR [SI],’/’ SI L1

- 40 -

L1:

L2:

32. 分析下列程序段完成的功能:

MOV CX,100 LEA SI,FIRST LEA DI,SECOND REP MOVSB

解:将缓冲区FIRST中100个字节传送到SECOND中。 33. 分析下列程序段:

LEA DI,STRING MOV CX,200 CLD

MOV AL,20H REPZ SCASB JNZ FOUND JMP NOT_FOUND

问:转移到FOUND的条件。

解:在缓冲区STRING中搜索非空格字符,如果有非空格则转到FOUND,如果200个单元中都是空格,则转到NOT_FOUND。

34. 设在数据段的变量OLDS和NEWS中保存有5个字节的字符串,如果OLDS字符串不同于NEWS字符串,则执行NEW_LESS,否则顺序执行程序。 解:设DS和ES均指向字符串OLDS和NEWS所在的段。

CLD MOV

35. 编程实现将STRING字符串中的小写字母变换成大写字母。 解:设STRING中的字符个数为N。

- 41 -

CX,5 SI,OLDS DI,NEWS CMPSB NEW_LESS

LEA LEA REPZ JNZ

MOV LEA MOV AND INC

CX,N SI,STRING AL,5FH [SI],AL SI

L1:

LOOP L1

36. 设在数据段中定义了:

STUDENT_NAME DB 30 DUP(?) STUDENT_ADDR DB 9 DUP(?) STUDENT_PRINT DB 50 DUP(?) 编写程序实现:

用空格符清除缓冲区STUDENT_PRINT; 在STUDENT_ADDR中查找第一个’_’字符; 在STUDENT_ADDR中查找最后一个’_’字符;

如果STUDENT_NAME中全为空格符,则STUDENT_PRINT全存入’*’;

将STUDENT_NAME传送到STUDENT_PRINT的前30个字节中,将STUDENT_ADDR传送到STUDENT_PRINT的后9个字节中。

37. (上机题)编写程序实现,将缓冲区BUFFER中的100个字按递增排序,并按下列格式顺序显示:

数据1 <原序号> 数据2 <原序号> ??

38. (上机题)按同余法产生一组随机数N(1

Total <总人数> A: <人数1> B: <人数2> C: <人数3>

- 42 -

D: <人数4> E: <人数5> F: <人数6>

39.(上机题)编写程序实现下列5项功能,通过从键盘输入1~5进行菜单式选择:

(1)按数字键“1”,完成将字符串中的小写字母变换成大写字母。用户输入由英文大小写字母或数字0~9组成的字符串(以回车结束),变换后按下列格式在屏幕上显示:

<原字符串>例如:abcdgyt0092 <新字符串> ABCDGYT0092

按任一键重做;按Esc键返回主菜单。

(2)按数字键“2”,完成在字符串中找最大值。用户输入由英文大小写字母或数字

0~9组成的字符串(以回车结束),找出最大值后按下列格式在屏幕上显示:

<原字符串> The maximum is <最大值>.

按任一键重做;按Esc键返回主菜单。

(3)按数字键“3”,完成输入数据组的排序。用户输入一组十进制数值(小于255), 然后变换成十六进制数,并按递增方式进行排序,按下列格式在屏幕上显示:

<原数值串> <新数值串>

按任一键重做;按Esc键返回主菜单。

(4)按数字键“4”,完成时间的显示。首先提示用户对时,即改变系统的定时器 HH:MM:SS(以冒号间隔,回车结束),然后在屏幕的右上角实时显示出时 间:HH:MM:SS。

按任一键重新对时;按Esc键返回主菜单。

(5)按数字键“5”,结束程序的运行,返回操作系统。 解:

※主程序的编程思路: 此程序共5个功能,可采用跳转表法来实现多路分支结构程序设计。现将这5个程序段,各程序段的首地址分别标号为G1,G2,G3,G4,G5。将5个程序段的入口地址做成表TABLE放入数据段,程序根据给定的参数计算出欲转入的程序段的首地址在TABLE中的位置后,取出该地址,跳转至该程序段。

首先,通过调用子程序MENU,设置显示器,并输出提示文档。接着,读取‘1’-‘5’之间的ASCII表示数。然后,通过跳转表TABLE实现由输入参数转入相应的程序段。由于表中

- 43 -