汇编作业题答案 下载本文

内容发布更新时间 : 2024/5/13 21:44:09星期一 下面是文章的全部内容请认真阅读。

CMP DX, 0

JZ NEXT ;整除,本数据非素数,转NEXT INC BX ;形成下一个测试数据 JMP TST ;继续测试 OK: INC CX ;统计本行输出数据个数 CMP CX, 10 JLE OUTPUT ;本行数据未满10个,直接输出 XOR CX, CX ;本行数据已满10个,清计数器 CALL CRLF ;输出回车换行 OUTPUT:MOV DX, -1 MOV AX, SI

CALL WRITEDEC ;输出一个素数 NEXT: INC SI ;产生下一个被测试数据 CMP SI, 1000 JB ONE ;未完成,继续 CALL CRLF ;结束一行 MOV AX, 4C00H INT 21H CODE ENDS END START

60 编写程序,输入N,计算:S=1*2+2*3+??+(N-1)*N 答: INCLUDE YLIB.H

CODE SEGMENT

ASSUME CS: CODE

MESS1 DB 0DH, 0AH, ‘Input N please: $’ MESS2 DB 0DH, 0AH, ‘S= $’ START:

PUSH CS POP DS

LEA DX, MESS1

CALL READDEC ;输入N MOV CX, AX XOR BX, BX ;BX用作累加器

ONE: MOV AX, CX MOV SI, AX DEC SI MUL SI ;计算J*(J-1) ADD BX, AX ;累加 LOOP ONE LEA DX, MESS2 MOV AX, BX

CALL WRITEDEC ;输出结果 CALL CRLF

MOV AX, 4C00H INT 21H CODE ENDS END START

61 编写程序,输入N,输出如下矩阵(设N=5)

1 1 1 1 1 2 2 2 2 1 3 3 3 2 1 4 4 3 2 1 5 4 3 2 1 答:设I为行(1~5), J为列(1~5),则(I, J)位置上的数据为:I: 6-J 。

INCLUDE YLIB.H CODE SEGMENT

ASSUME CS: CODE START:

CALL CRLF MOV SI, 1 ;SI为行号

ROW: MOV CX, 5 ;CX为6-列号

COL: CMP SI, CX ;判断当前位置 JB UP DOWN: MOV AX, CX ;下半三角,取6-列号 JMP OUTPUT UP: MOV AX, SI ;上半三角,取行号 OUTPUT: MOV DX, -1

CALL WRITEDEC ;输出一个数据 LOOP COL

CALL CRLF ;结束本行 INC SI ;修改行号 CMP SI, 5 JBE ROW ;未满5行,继续 MOV AX, 4C00H INT 21H CODE ENDS END START

(6-J)? I>

62 编写几个简单的子程序。

(1)显示一个字符的子程序。入口参数:DL=字符的ASCII码。

(2)从键盘上读取一个字符的子程序。出口参数:读取字符的ASC码在

CHAR中。

(3)输出换行回车的子程序。无入口、出口参数。

解:(1)SHOW PROC MOV AH, 02H INT 21H RET SHOW ENDP (2)READKEY PROC MOV AH, 01H INT 21H MOV CHAR, AL RET

READKEY ENDP (3)CRLF PROC MOV AL, 0AH MOV AH, 02H INT 21H MOV AL, 0DH INT 21H RET CRLF ENDP

63 过程定义的一般格式是怎样的?子程序入口为什么常有PUSH指令?出口为什么有POP指令?

解:过程的定义格式如下:

过程名 PROC [NEAR/FAR] 程序体

过程名 ENDP

在子程序入口处把相关寄存器的值入栈保护,程序返回前再恢复它们的值,这个操作称为“保护现场”和“恢复现场”,这两种操作分别用PUSH指令和POP指令实现。

64 阅读下面的程序,指出该程序计划完成的功能,同时指出程序中尚存在的错误。

CODE SEGMENT ASSUME: CS: CODE START: MOV CX, 20 LOOP0: CALL PRINTSPACE LOOP LOOP0

MOV AH, 4CH INT 21H PRINTSPACE PROC NEAR MOV CX, 40 ;该行上面添加:PUSH CX PSLOOP:MOV AL, ‘ ’ MOV AH, 02H INT 21H LOOP PSLOOP MOV AL, 0AH MOV AH, 02H INT 21H

MOV AL, 0DH

MOV AH, 02H INT 21H ; 该行下面添加:POP CX RET PRINTSPACE ENDP CODE ENDS

END START

功能:输出20行空行,每行有40个空格。

65阅读下面的程序,指出该程序计划完成的功能,同时指出程序中尚存在的错误。

CODE SEGMENT ASSUME: CS: CODE START: MOV CX, 20 LOOP0: CALL PRINTSPACE LOOP LOOP0 MOV AH, 4CH INT 21H PRINTSPACE PROC NEAR MOV CX, 40 ;该行上面添加:PUSH CX PSLOOP:MOV AL, ‘ ’ MOV AH, 02H INT 21H LOOP PSLOOP MOV AL, 0AH MOV AH, 02H INT 21H

MOV AL, 0DH

MOV AH, 02H INT 21H ; 该行下面添加:POP CX RET PRINTSPACE ENDP CODE ENDS

END START

功能:输出20行空行,每行有40个空格。

66编写子程序,把8位或16位二进制数转换成二进制数字串。

入口参数:CX=被转换数的位数,DX=要转换的二进制数(如果CX=8,那么二进制数在DL中),DS: DI=存放二进制数字字符串缓冲区的首地址

出口参数:转换后的二进制数字字符串存放在DS: DI指向的缓冲区内。 解: TRANS PROC

PUSH DI CMP CX, 8 JE EIGHT NEXT: ROL DX, 1 MOV AL, 18H RCL AL, 1 MOV [DI], AL INC DI LOOP NEXT JMP EXIT EIGHT: ROL DL, 1 MOV AL, 18H RCL AL, 1 MOV [DI], AL INC DI LOOP EIGHT EXIT: POP DI

RET

TRANS ENDP

67阅读下面的子程序,叙述它完成的功能,它的入口参数和出口参数各是什么?

CLSCREEN PROC

MOV AX, 0600H MOV CX, 0 MOV DH, X MOV DL, Y MOV BH, 07H INT 10H RET

CLSCREEN ENDP

解:屏幕窗口上卷,左上角为(0,0),右下角为(y, x),卷入行属性为黑底白字。

68编写程序,键入一个以$为结束符的数字串,统计其中“0”~“9”各个数字出现的次数,分别存放到S0~S9这10个单元中去。 解:.MODEL SMALL