问题 问答题

请编制程序,其功能为:将内存中存放的连续的30个二进制数(0到100之间),按数值大小分别进行统计,0~59为D,60~74为C,75~84为B,85~100为A,统计出A、B、C、 D的个数,并按A、B、C、D次序存放在内存中。
例如:内存中原始数据为:21H,3CH,4DH,31H,4FH,51H,56H
统计结果:1,3,1,2
部分程序已经给出,其中原始数据由LOAD过程从文件INPUT1.DAT中读入从SOURCE开始的内存单元,转换结果(要求从RESULT 开始读入)由SAVE过程保存到OUTPUT1.DAT文件中。请在BEGIN和END之间补充使其完整,完成要求的功能。或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终产生运行结果。
部分程序如下:
;PROG1.ASM
EXTRN LOAD:FAR, SAVE:FAR
N EQU 30
DSEG SEGMENT
SOURCE DB N DUP ()
RESULT DB N DUP (0)
NAME0 DB ’INPUT1. DAT’,0
NAME1 DB ’OUTPUT1. DAT’,0
DSEG ENDS
SSEG SEGMENT STACK
DB 128 DUP ()
SSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG, DS:DSEG; SS:SSEG
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX, DSEG
MOV DS,AX
MOV ES, AX
LEA DX, SOURCE
LEA SI,NAME0
MOV CX,N
CALL LOAD
; *** BEGIN ***
MOV CX,N
LEA SI,SOURCE
CONT: MOV AL,[SI]
_____________
JB LB
INC RESULT
JMP OK
LB: CMP AL, 75
JB LC
INC ______
JMP OK
LC: CMP AL,60
JB LD
____________
JMP OK
LD: ____________
OK: INC SI
LOOP CONT
; *** END ***
LEA DX,RESULT
LEA SI,NAME1
MOV CX,4
CALL SAVE
RET
START ENDP
CSEG ENDS
END START

答案

参考答案:

*** BEGIN ***

MOV CX, N

LEA SI, SOURCE

CONT: MOV AL, [SI]

CMP AL, HE

JB LB

INC RESULT

JMP OK

LB: CMP AL, GE

JB LC

INC RESULT+A

JMP OK

LC: CMP AL, F0

JB LD

INC RESULT+B

JMP OK

LD: INC RESULT+C

OK: INC SI

LOOP CONT

; *** END ***

[INPUTA.DAT 中的输入数据]:

F0H,CCH,DDH, CAH,DFH,EAH,EFH,EIH,DAH,CBH

CEH,BAH,DFH,CAH,BAH,BBH,EAH, AAH,DEH,DDH

CAH, AEH,CBH,CDH,CCH,DFH,FCH,BDH,D0H,CEH

[输出结果]:

0D 0E 0H OD

单项选择题
选择题