INSERT PROC MOV [DI],AX ADD DI,2
RET
INSERT ENDP CODE ENDS END MAIN
29.设有4个学生参加5门考试,请计算每个学生的平均成绩和每门课的平均分成绩,并在显示器上显示,输出格式如下:
Chg1 chg2 chg3 chg4 chg5 meam S1 78 85 55 100 97 S2 67 96 43 79 84 S3 92 55 76 92 65 S4 43 95 82 89 75
Aver 不计小数。
DATA SEGMENT
PRINT DB ' CHG1 CHG2 CHG3 CHG4 CHG5 MEAN',13,10
DB 'S1 78 85 55 100 97 ' B1 DB 0,0,13,10
DB 'S2 67 96 43 79 84 ' B2 DB 0,0,13,10
DB 'S3 92 55 76 92 65 ' B3 DB 0,0,13,10
DB 'S4 43 95 82 89 75 '
B4 DB 0,0,13,10 DB 'AVER ' A1 DB 0,0,' ' A2 DB 0,0,' ' A3 DB 0,0,' ' A4 DB 0,0,' ' A5 DB 0,0,' ','$' MINUS1 DB 5 MINUS2 DB 4 MINUS3 DB 10 C DB 78,85,55,100,97 DB 67,96,43,79,84 DB 92,55,76,92,65 DB 43,95,82,89,75
DATA ENDS CODE SEGMENT
ASSUME CS:CODE,ES:DATA,DS:DATA
MAIN PROC FAR MOV AX,DATA MOV DS,AX MOV ES,AX
CALL MEAM CALL AVER
CALL OUTPUT
MOV AX,4C00H INT 21H MAIN ENDP
46
MEAM PROC MOV CL,4 LEA SI,C LEA DI,B1
CLC
AGAIN: MOV AX,0
MOV CH,5
AGAN: ADD AL,[SI] ADC AH,0
INC SI
DEC CH JNZ AGAN CALL M
DEC CL JNZ AGAIN
RET MEAM ENDP M PROC DIV MINUS1 MOV AH,0 DIV MINUS3
OR AX,3030H
MOV [DI],AL MOV [DI+1],AH ADD DI,34
RET
M ENDP
AVER PROC MOV CL ,5 LEA BX,C LEA DI ,A1
CLC
AGAIN1: MOV AX,0 MOV SI,BX MOV CH,4
AGAN1: ADD AL,[SI] ADC AH,0 ADD SI,5 DEC CH
JNZ AGAN1 CALL A
INC BX DEC CL JNZ AGAIN1
RET
AVER ENDP A PROC DIV MINUS2 MOV AH,0 DIV MINUS3 OR AX,3030H MOV [DI],AL MOV [DI+1],AH ADD DI,5
RET
47
A ENDP
OUTPUT PROC LEA DX,PRINT MOV AH,9 INT 21H
RET
OUTPUT ENDP
CODE ENDS END MAIN
30、编程计算从2开始的N(N<50)个偶数之和(2+4+6+…),主程序从键盘输入整数N,调用子程序求出N个偶数之和,由主程序显示结果。尝试分别使用以下3种方法编写完整程序。 (1)利用寄存器传递参数 (2)利用公共数据段变量传递参数 (3)利用堆栈传递参数
DATA SEGMENT COUNT DB 0 BUF DB 3 DB ? DB 3 DUP(?)
PRINT DB 10,13 OUTPU DB 0,0,0,0,'$' SUM DW 0 M DW 2 N DW 10
DATA ENDS CODE SEGMENT
ASSUME CS:CODE,ES:DATA,DS:DATA MAIN PROC FAR MOV AX,DATA MOV ES,AX MOV DS,AX
CALL INPUT
MOV AX,SUM
AGAIN: INC SUM ADD AX,SUM LOOP AGAIN MUL M CALL OUTPUT
MOV AH,4CH INT 21H MAIN ENDP
INPUT PROC LEA DX,BUF MOV AH,0AH INT 21H
MOV AX,WORD PTR BUF+2 AND AX,0F0FH
48
PUSH AX MOV AH,0 MUL N POP DX XCHG DH,DL MOV DH,0 ADD AX,DX MOV CX,AX RET INPUT ENDP
OUTPUT PROC LEA BX, OUTPU ADD BX,3 MOV CX,3 TO: MOV DX,0 DIV N MOV [BX],DL
OR BYTE PTR [BX],30H DEC BX LOOP TO MOV [BX],AL
OR BYTE PTR [BX],30H
LEA DX,PRINT MOV AH,9 INT 21H RET OUTPUT ENDP
CODE ENDS END MAIN
32将两个磁盘文件合并成一个新的文件
DATA SEGMENT BUF1 DB 20 DB ?
DB 20 DUP(0) BUF2 DB 20 DB ?
DB 20 DUP(0) BUF3 DB 20 DB ?
DB 20 DUP(0) B1 DW 0 B2 DW 0 B3 DW 0
SPACE DB 10,13,'$' BUF DB 55535 DUP(?) DATA ENDS CODE SEGMENT
ASSUME CS:CODE ,DS:DATA,ES:DATA
MAIN PROC FAR MOV AX,DATA MOV ES,AX MOV DS,AX
LEA DX,BUF1 CALL INPUT
49
CALL OUTPUT LEA DX,BUF2 CALL INPUT CALL OUTPUT LEA DX,BUF3 CALL INPUT MOV CL,BUF1+1 MOV CH,0 MOV SI,CX MOV BUF1[SI+2],0
MOV AH,3DH MOV AL ,2 LEA DX,BUF1+2 INT 21H MOV B1,AX MOV CL,BUF2+1 MOV CH,0 MOV SI,CX MOV BUF2[SI+2],0
MOV AH,3DH MOV AL, 2 LEA DX,BUF2+2 INT 21H MOV B2,AX MOV CL,BUF3+1
MOV CH,0
MOV SI,CX MOV BUF3[SI+2],0
MOV AH,3CH MOV CX,0 LEA DX,BUF3+2 INT 21H
MOV B3,AX
MOV AH,3EH MOV BX,B3 INT 21H
MOV AH,3DH MOV AL ,2 LEA DX,BUF3+2 INT 21H
MOV AH,3FH MOV BX,B1 MOV CX,0FFFFH LEA DX,BUF INT 21H MOV SI,AX
MOV AH,3FH MOV BX,B2 MOV CX,0FFFFH LEA DX,BUF[SI] INT 21H
ADD SI,AX
50