当前位置: 代码迷 >> 汇编语言 >> 初涉汇编,不知道如何改错。求技术牛拯救。
  详细解决方案

初涉汇编,不知道如何改错。求技术牛拯救。

热度:7900   发布时间:2013-02-26 00:00:00.0
初涉汇编,不知道怎么改错。。求技术牛拯救。。
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
这里不对,其他也就不要分析了。



------解决方案--------------------------------------------------------
探讨

NG: CMP NUM[SI],D1;两个数进行比较不能都是内存储单位。
MOV D2,ENG[SI+DI];同样道理传送不能两个数者是内存储单位,否则是非法指令。
  相关解决方案