删除或更新信息,请邮件至freekaoyan#163.com(#换成@)

暨南大学微机原理与接口技术习题包含答案(3)

暨南大学 /2011-11-24

ROL BX,1

ROR BX,CL

26.    下列程序段执行后,求BX寄存器的内容:

MOV CL,5

MOV BX,7D5CH

SHR BX,CL

27.    设数组ARRAY的第1个字节存放数组的长度(<256),从第2个字节开始存放无符号8位数,求数组元素之和(结果放在AX中)。如果计算的和超出16位数的范围,则给出溢出标志DX=-1。

28.    设BUF中存放有N个无符号数(或有符号数),编程实现求它们的最小值(存入AX)和最大值(存入DX)。

29.    设BUFFER中存放有N个无符号(第1个字节存放缓冲区的长度),编程实现将其中的0元素抹去,并更新其长度。

30.    编写程序实现N个字乘以或除以1个字,设BUFN存放N个字,BUF1存放乘数或除数,PRODUCT存放乘积,QUOTIENT存放商,REMAINDER存放余数。

31.    编写一个子程序实现统计AL中1的个数,然后检测出字节型缓冲区BUF中0和1个数相等的元素个数。

32.    设有n(设为17)个人围坐在圆桌周围,按顺时针给他们编号(1,2,…,n),从第1个人开始按顺时针方向加1报数,当报数到m(设为11)时,该人出列,余下的人继续进行,直到所有人出列为止。编写程序模拟这一过程,求出出列人的编号顺序。

33.    编写子程序实现以十六进制数在屏幕上显示AL的内容。

34.     从键盘上读入一个正整数N(0≤N≤65535),转换成十六进制数存入AX,并在屏幕上显示出来。

35.     在缓冲区BUFFER中,第1个字节存放数组的长度(<256),从第2个字节开始存放字符的ASCII码,编写子程序完成在最高位给字符加上偶校验。

36.      编写程序完成求多位数(N个字)的绝对值。

37.      已知斐波那契数列的定义为: ,编写求该数列前n项的子程序。

38.      编写程序实现循环显示10条信息,保存每条信息的变量分别为INFOM1~INFORM10。

39.      编写程序实现将包含20个数据的数组ARRAY分成两个数组:正数数组ARRAYP和负数数组ARRAYN,并分别将这两个数组中数据的个数显示出来。

40.      编写程序实现求缓冲区BUFFER100个字中的最小偶数(存入AX)。

41.      编写程序实现求级数 的前n项和刚大于2000的项数n。

42.      已知数组A中包含有15个互不相等的整数,数组B中包含有20个互不相等的整数,编写程序实现将既在数组A中出现又在数组B中出现的整数存放于数组C中。

43.      定义一条宏指令,实现将指定数据段的段地址传送到段寄存器ES或DS的功能。

44.      定义一条宏指令,实现从键盘中输入一个字符串(利用INT 21H的09号功能)。

45.      定义一条宏指令,实现在屏幕上显示出指定的字符串。

46.      定义一条宏指令,实现在屏幕上输出回车、换行。

47.      利用其它指令完成与下列指令一样的功能:

(1)REP MOVSB;     (2)REP LODSB;

(3)REP STOSB;     (4)REP SCASB。

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

STR1  DB  ‘ASSEMBLE  LANGUAGE’

     STR2  DB  20 DUP(?)

利用字符串指令编写程序段实现:

(1)从左到右将STR1中的字符串传送到STR2;

(2)从右到左将STR1中的字符串传送到STR2;

(3)将STR1中的第6个和第7个字节装入DX;

(4)扫描STR1字符串中有无空格,如有则将第一个空格符的地址传送到SI。

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

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

编写程序实现将STRING中的’&’用’/’代替。

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

MOV CX,100

LEA SI,FIRST

LEA DI,SECOND

REP MOVSB

51.        分析下列程序段:

LEA DI,STRING

MOV CX,200

CLD

MOV AL,20H

REPZ  SCASB

JNZ  FOUND

JMP  NOT_FOUND

    问:转移到FOUND的条件。

52.    设在数据段的变量OLDS和NEWS中保存有5个字节的字符串,如果OLDS字符串不同于NEWS字符串,则执行NEW_LESS,否则顺序执行程序。

53.    编程实现将STRING字符串中的小写字母变换成大写字母。

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

STUDENT_NAME  DB  30 DUP(?)

STUDENT_ADDR  DB  9 DUP(?)

STUDENT_PRINT  DB  50 DUP(?)

编写程序实现:

(1)用空格符清除缓冲区STUDENT_PRINT;

(2)在STUDENT_ADDR中查找第一个’_’字符;

(3)在STUDENT_ADDR中查找最后一个’_’字符;

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

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

55.    在DS:X_BUF为起始地址的表中存有按由小到大顺序排列的一组16位无符号数,其中该表的第一、二两字节存放数据个数。现在DS:X_KEY中存有一个关键字(16位无符号数),要求从上述表中查找第一个此关键字,若找到此关键字,则DI中存放该关键字在该表中的偏移量;若无此关键字,则将该关键字插入X_BUF表中,使该表依然有序,并将该关键字在表中的偏移量存放在DI中。

56.    分析下列子程序FUNC1,并回答相应的问题。

FUNC1  PROC    NEAR       

        XOR     CX,CX

        MOV     DX,01

        MOV     CL,X

        JCXZ    A20

        INC     DX

        INC     DX

        DEC     CX

        JCXZ    A20

   A10: MOV     AX,02

        SHL     AX,CL

        ADD     DX,AX

        LOOP    A10

   A20: MOV     Y,DX

        RET

FUNC1  ENDP

若该子程序的入口参数为X(0≤X≤10),其输出参数为Y,则:

(1) 该子程序的功能是Y=f(X)=                   ;

(2) 若X=0 , 则Y=      ;

              若X=3 , 则Y=     ;

          若X=5 , 则Y=     。

 

57.    已知N(3<N<100)个8位无符号数已存放在缓存区INX中,其中第一个字节存放个数N,从第二个字节开始存放数据,下列的FUNC2子程序完成对这N个数据按由大到小排序,在划线处填入必要指令,使以下子程序完整。

FUNC2  PROC    NEAR

        LEA     SI,INX                 

        XOR     CX, CX

        MOV     CL, [SI]

        DEC     CX      

   B10: INC     SI

        MOV     DI,SI

        PUSH    SI

                             

        MOV     AL,[SI]

   B20: INC     SI

        CMP     AL,[SI]

                             

        MOV     AL,[SI]

        MOV     DI,SI

   B30: LOOP    B20                     

        POP     CX

        POP     SI

        MOV     AH,[SI]

        MOV     [SI],AL

        MOV     [DI],AH

        LOOP       B10

                             

FUNC2  ENDP

 

58.    假设X和X+2单元的内容为双精度数P,Y和Y+2单元的内容为双精度数Q (P,Q均为无符号数,其中X,Y为低位数),下列的子程序FUNC3完成使 2P>Q时,(AX)=1;2P<=Q时,(AX)=-1 ,在划线处填入必要指令,使以下子程序完整。

FUNC3  PROC    NEAR

        MOV     DX,X+2

        MOV     AX,X

        ADD     AX,AX

        ADC     DX,DX

        JC      C10

        CMP     DX,Y+2

                C20

                C10

        CMP     AX,Y

                C20

   C10: MOV     AX,1

                C30    

   C20: MOV     AX,-1 

   C30: RET

FUNC3  ENDP

 

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

  数据1  <原序号>

  数据2  <原序号>

          ……

60.    (上机题)按同余法产生一组随机数N(1<N<=50),并按N+50赋给45名同学的5门课程的成绩,要求编程实现计算每个同学的平均成绩,并根据平均成绩统计全班的成绩各等级的人数(A:90~100,B:80~89,C:70~79,D:66~69,E:60~65,F:60分以下),按下列格式显示:

Total  <总人数>

A:    <人数1>

B:    <人数2>

C:    <人数3>

D:    <人数4>

E:    <人数5>

F:    <人数6>

61.    (上机题)编写程序实现下列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”,结束程序的运行,返回操作系统。

[参考答案]

1.  解:(1)var1  DW  4512H,4512,-1,100/3,10H,65530

(2)var2  DB  ’BYTE’, ’word’, ’WORD’

   (3)buf1  DB  100 DUP(?)

   (4)buf2  DB  7 DUP(5 DUP(55H), 10 DUP(240))

   (5)var3  DB  LENGTH  buf1

   (6)pointer  DW  var1, var2

3.       答:  (1)MOV SI,100     ;指令正确,源:立即数寻址,目的:寄存器寻址

   (2)MOV BX,VAR1[SI]       ;指令正确,源:寄存器相对寻址,目的:寄存器寻址

   (3)MOV AX, [BX]           ;指令正确,源:寄存器间接寻址,目的:寄存器寻址

   (4)MOV AL, [DX]           ;指令错误,DX不能用作为地址寄存器

   (5)MOV BP, AL             ;指令错误,类型不一致

   (6)MOV VAR1, VAR2         ;指令错误,MOV指令不能从存储器到存储器传送

   (7)MOV CS, AX ;指令错误,CS不能用作为目的操作数

   (8)MOV DS, 0100H          ;指令错误,MOV指令不能将立即数传送到段寄存器

   (9)MOV [BX][SI], 1        ;指令错误,类型不定

   (10)MOV AX, VAR1+VAR2     ;指令错误,MOV指令中不能完成加法运算

   (11)ADD AX, LENGTH VAR1 ;指令正确,源:立即数寻址,目的:寄存器寻址

   (12)OR BL, TYPE VAR2      ;指令正确,源:立即数寻址,目的:寄存器寻址

   (13)SUB [DI], 78H         ;指令错误,类型不定

   (14)MOVS VAR1, VAR2       ;指令正确,源:隐含寻址,目的:隐含寻址

   (15)PUSH 100H             ;指令错误,立即数不能直接压入堆栈

   (16)POP CS                ;指令错误,CS不能用作为目的操作数

   (17)XCHG AX, ES           ;指令错误,XCHG指令中不能使用段寄存器

   (18)MOV DS, CS            ;指令错误,MOV指令不能从段寄存器到段寄存器

   (19)JMP L1+5              ;指令正确,段内直接转移

   (20)DIV AX, 10            ;指令错误,DIV指令格式错误

   (21)SHL BL, 2             ;指令错误,移位指令的移位数要么是1,要么是CL

   (22)MOV AL, 15+23         ;指令正确,源:立即数寻址,目的:寄存器寻址

   (23)MUL CX                ;指令正确,源:寄存器寻址,目的:隐含寻址

   (24)XCHG CL, [SI]         ;指令正确,源:寄存器间接寻址,目的:寄存器寻址

   (25)ADC CS:[0100], AH     ;指令正确,源:寄存器寻址,目的:直接寻址

   (26)SBB VAR1-5,154       ;指令正确,源:立即数寻址,目的:直接寻址

5.       答:(1)JMP  L1  ;段内直接寻址 (2)JMP NEAR L1  ;段内直接寻址

    (3)JNZ  L1  ;段内相对寻址    (4)JMP  BX      ;段内间接寻址

    (5)JG  L1   ;段内相对寻址    (6)JMP  VAR1[SI] ;段内间接寻址

    (7)JMP  FAR PTR L1 ;段间直接寻址(8)JMP  DVAR1 ;段间间接寻址

7.       答:DX寄存器中的内容为10FFH

9.       答:(1)ADD AL,N1-N2 ;指令错误,因为N1-N2超出一个字节的范围

    (2)MOV AX,N3+N4 ;指令正确

    (3)SUB BX,N4-N3 ;指令正确

    (4)SUB AH,N4-N3-N1 ;指令错误,因为N4-N3-N1超出一个字节的范围

    (5)ADD AL,N2 ; 指令正确   

    (6)MOV AH,N2*N2   ;指令正确

11.    解:(1)MOV  AL,40H

(2)SHL  AL,1

(3)MOV AH,16H

(4)ADD AL,AH

执行后(AL)=96H

13.    解:(1)XOR BX,VAR;   执行后(BX)=00F9H

    (2)AND BX,VAR;  执行后(BX)=0002H

(3)OR BX,VAR;       执行后(BX)=00FBH

(4)XOR BX,11110000B;执行后(BX)=003BH

(5)AND BX,00001111B;执行后(BX)=00C4H

(6)TEST BX,1 ;      执行后(BX)=00CBH(不变)

15.    答:(1)d       (2)c      (3)b

17.    解:    设要传送的字符串有30个。

N=30

STACK   SEGMENT STACK 'STACK'

        DW 100H DUP(?)

TOP     LABEL WORD

STACK   ENDS

DATA    SEGMENT

ASC1    DB  'abcdefghijklmnopqrstuvwxyz1234'

ASC2    DB  30 DUP(?)

DATA    ENDS

CODE    SEGMENT

相关话题/微机原理与接口技术