计算机原理答案 下载本文

MOV AX, 4C00H INT 21H CODE ENDS END START (4) CODE SEGMENT ASSUME CS: CODE RESULT DW ? START: XOR AX, AX MOV CX, 34 MOV BX, 1 AGAIN: ADD AX, BX ADD BX, 3 LOOP AGAIN MOV RESULT, AX MOV AX, 4C00H INT 21H CODE ENDS END START (5) CODE SEGMENT ASSUME CS: CODE RESULT DW ? START: XOR AX, AX MOV CX, 9 MOV BX, 11 AGAIN: ADD AX, BX ADD BX, 11 LOOP AGAIN MOV RESULT, AX MOV AX, 4C00H INT 21H CODE ENDS END START 14. 15. 16.

17. 编写程序,从键盘上输入20个十进制数字,求这些数字的和,向显示器输出。 INCLUDE YLIB.H DATA SEGEMNT MESS1 DB 0DH, 0AH, ?Input 20 decimal digits please : $? MESS2 DB 0DH, 0AH, ?Their sum is : $? DATA ENDS CODE SEGMENT

ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX LEA DX, MESS1 MOV AH, 09H INT 21H ;输出提示信息 XOR BX, BX ;BX用作累加器,清零 MOV CX, 20 ;循环计数器置初值 AGAIN: MOV AH, 01H INT 21H ;输入一个数字(在AL中) AND AL, 0FH ;转换成二进制数 ADD BL, AL ;累加 ADC BH, 0 LOOP AGAIN LEA DX, MESS2 MOV AX, BX CALL WRITEDEC ;输出20个数字的和 CALL CRLF MOV AX, 4C00H INT 21H CODE ENDS END START 18. 阅读以下程序,指出它的功能。 MOV CL, 04 SHL DX, CL MOV BL, AH SHL AX, CL SHR BL, CL OR DL, BL

答:把32位二进制代码(DX, AX)联合左移4位。 19. 已知(DX)=0B9H,(CL)=3,(CF)=1,确定下列指令单独执行以后DX寄存器的

值。

(1)SHR DX, 1 (2)SAR DX, CL (3)ROR DX, CL (4)ROL DX, CL (5)SAL DH, 1 (6)RCL DX, CL 答:

(1)指令“SHR DX, 1”执行之后,(DX)= 005CH (2)指令“SAR DX, CL”执行之后,(DX)= 0017H (3)指令“ROR DX, CL”执行之后,(DX)= 2017H

(4)指令“ROL DX, CL”执行之后,(DX)= 05C8H (5)指令“SAL DH, 1”执行之后,(DX)= 00B9H (6)指令“RCL DX, CL”执行之后,(DX)= 05CCH

20. 写程序,从键盘上输入一个0~65535之间的十进制无符号数,然后用二进制格式输

出这个值。例如,键盘输入“35”,显示器输出“00000000 00100011”。 答: INCLUDE YLIB.H DATA SEGEMNT MESS1 DB 0DH, 0AH, ?Input a unsigned decimal integer number please : $? MESS2 DB 0DH, 0AH, ?The number in binary is : $? DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX LEA DX, MESS1

CALL READDEC ;输入一个无符号整数 MOV BX, AX ;转存入BX LEA DX, MESS2 MOV AH, 09H INT 21H ;输出提示信息

MOV CX, 16 ;循环计数器置初值 AGAIN: SHL BX, 1 ;向左外移一位,进入CF MOV DL, 30H ADC DL, 0 ;形成一位二进制数字的ASCII代码 MOV AH, 2 INT 21H ;输出一个二进制数字 LOOP AGAIN ;循环16次 CALL CRLF MOV AX, 4C00H INT 21H CODE ENDS END START

21. 无符号数变量X用DD定义,编写程序,用十六进制格式输出变量X的值。 答: DATA SEGEMNT X DD 36895471 ;一个32B长整数 MESS DB 0DH, 0AH, ?The X in hexdecimal is : $? HEXTAB DB ?0123456789ABCDEF? DATA ENDS CODE SEGMENT USE16 ASSUME CS: CODE, DS: DATA START: MOV AX, DATA

MOV DS, AX LEA DX, MESS MOV AH, 09H INT 21H ;输出前导信息

MOV SI, word ptr X+2 ;将X高16位存入SI

MOV CX, 4 ;循环计数器置初值 LEA BX, HEXTAB ;换码表首地址装入BX AGAIN1:ROL SI, 4 ;把最高4位移到最低4位上 MOV AX, SI ;低8位转入AL AND AX, 000FH ;清除高4位

XLAT ;转换成十六进制数字的ASCII代码 MOV DL, AL MOV AH, 2 INT 21H ;输出一个十六进制数字

LOOP AGAIN1 ;循环8次

MOV SI, word ptr X ;将X低16位存入SI

MOV CX, 4 ;循环计数器置初值 AGAIN2:ROL SI, 4 ;把最高4位移到最低4位上 MOV AX, SI ;低8位转入AL AND AX, 000FH ;清除高4位

XLAT ;转换成十六进制数字的ASCII代码 MOV DL, AL MOV AH, 2 INT 21H ;输出一个十六进制数字

LOOP AGAIN2 ;循环8次 MOV AX, 4C00H INT 21H CODE ENDS END START

22. 编写指令序列,把AX中的16b二进制分为4组,每组4b,分别置入AL,BL,CL,

DL中。 答: MOV DX, AX ;最低4位直接进入DX

MOV CX, 4

ROL AX, CL ;最高4位移入最低4位 PUSH AX ;压入堆栈保存(准备送入AL) ROL AX, CL ;次高4位移入最低4位 MOV BX, AX ;送入BL ROL AX, CL ;第3组4位移入最低4位 MOV CX, AX ;送入CL POP AX ;从堆栈中弹出原最高4位 AND AX, 000FH ;清除高12位 AND BX, 000FH ;清除高12位 AND CX, 000FH ;清除高12位 AND DX, 000FH ;清除高12位