D SEGMENT
NUM DB 01H,02H,03H,04H,05H,06H,07H,08H,09H,0AH,0BH,0CH
ENG DB 'JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC',0DH,0AH,'$'
D1 DB ?
D2 DB ?
D ENDS
C SEGMENT
ASSUME CS:C,DS:D
MAIN: JMP INPUT
JMP LOCATE
JMP DISPLAY
JMP LAST
INPUT: LEA DX,D1
MOV AH,0AH
INT 21H
LOCATE: LEA SI,NUM
MOV CX,000BH
NG: CMP NUM[SI],D1
JNE CMPE
LEA DI,NUM
SUB SI,DI
CMP SI,0CH
JNE LAST
LEA DI,ENG
MOV D2,ENG[SI+DI]
CMPE: INC SI
LOOP NG
DISPLAY: LEA DX,D2
MOV AH,9
INT 21H
LAST: MOV AH,4CH
INT 21H
C ENDS
END MAIN
报错是:
18:error a2052:Improper operand type
25: error a2047:Multiple index registers
26: error a2006:Phase error between passes
------解决方案--------------------------------------------------------
NG: CMP NUM[SI],D1;两个数进行比较不能都是内存储单位。
MOV D2,ENG[SI+DI];同样道理传送不能两个数者是内存储单位,否则是非法指令。
------解决方案--------------------------------------------------------
(1)逻辑上有错误吧,你以为
JMP INPUT
JMP LOCATE
JMP DISPLAY
JMP LAST
会顺序执行?
(2)没有初始化DS
(3)下面的语句中使用了串缓冲区,但没有定义。你没整明白0A号DOS中断如何使用。
LEA DX,D1
MOV AH,0AH
INT 21H
这里不对,其他也就不要分析了。
------解决方案--------------------------------------------------------