首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

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

2012-04-23 
初涉汇编,不知道怎么改错。。求技术牛拯救。。DSEGMENTNUMDB 01H,02H,03H,04H,05H,06H,07H,08H,09H,0AH,0BH,0C

初涉汇编,不知道怎么改错。。求技术牛拯救。。
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];同样道理传送不能两个数者是内存储单位,否则是非法指令。

热点排行