+ -
当前位置:首页 → 问答吧 → 帮忙解决简单计算器的两个错误

帮忙解决简单计算器的两个错误

时间:2011-06-10

来源:互联网

DATA SEGMENT
 
B1 DB 0DH,0AH,' @@@@@@@@@@@@@@ Simple calculator @@@@@@@@@@@@@@@ $'  
B2 DB 0DH,0AH,' @ INPUT THE FIRST NUMBER: $'  
B3 DB 0DH,0AH,' @ INPUT THE SECOND NUMBER: $'  
B4 DB 0DH,0AH,' @ INPUT THE OPERATOR(+,-,*,/): $'  
B5 DB 0DH,0AH,' @ THE RESULT IS: $'  
B6 DB 0DH,0AH,' @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ $'
B7 DB 0DH,0AH,' CONTINUE? please INPUT THE KEY (O)! $'
B8 DB 0AH,0DH,' @ THE REMAINDER IS :$'
A DW 0
B DW 0
C11 DW 0
C12 DB 0
B11 DW 10
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
  MOV DS,AX
  S:MOV BX,0
  MOV DI,0
  MOV DX,0
  LEA DX,B1
  MOV AH,9
  INT 21H  
  LEA DX,B2  
  MOV AH,9
  INT 21H ;输出提示信息
  DAT_1:MOV AX,0
  MOV AH,1
  INT 21H ;输入第一个操作数
  CMP AL,0DH
  JE DAT_2  
  AND AL,0FH ;把数字字符转化为数字
  MOV AH,0
  ADD DI,AX
  MOV AX,DI
  MUL B11
  MOV DI,AX
  JMP DAT_1
  DAT_2:MOV AX,0  
  MOV AX,DI
  DIV B11
  MOV A,AX
  MOV DI,0
  MOV AX,0
  LEA DX,B3  
  MOV AH,9
  INT 21H
  DAT_3:MOV AH,1  
  INT 21H ;输入第二个操作数
  CMP AL,0DH
  JE DAT_4
  AND AL,0FH
  MOV AH,0
  ADD DI,AX
  MOV AX,DI
  MUL B11
  MOV DI,AX
  JMP DAT_3 ;将数字字符转化为数字
  DAT_4:MOV AX,0
  MOV AX,DI
  DIV B11
  MOV B,AX
  MOV DI,0
  MOV AX,0  
  LEA DX,B4
  MOV AH,9
  INT 21H
  MOV AH,1 ;输入操作符
  INT 21H
  MOV C12,AL
  CMP AL,'+'
  JE ADD_1
  CMP AL,'-'
  JE SBB_1
  CMP AL,'*'
  JE MUL_1  
  CMP AL,'/'
  JE DIV_1
ADD_1:MOV AX,0 ;加法运算
  MOV AX,A
  ADD AX,B
  MOV SI,AX
  JMP R  
 SBB_1:MOV AX,0 ;减法运算
  MOV AX,A
  SBB AX,B
  MOV SI,AX
  JMP R  
 MUL_1:MOV AX,0 ;乘法运算
  MOV AX,A
  MUL B
  MOV SI,AX
  JMP R  
 DIV_1:MOV AX,0 ;除法运算
  MOV DX,0
  MOV AX,A
  DIV B
  MOV SI,AX
  MOV C11,DX
  JMP R  
  R: LEA DX,B5
  MOV AH,9
  INT 21H
  MOV CX,SP
  MOV AX,SI  
  pp1:MOV DX,0
  MOV BX,10
  DIV BX
  PUSH DX ;将16进制数转化为10进制数
  CMP AX,0
  JNZ pp1
pp2: CMP SP,CX
  JE EXIT1
  POP DX
  ADD DL,30H
  MOV AH,2
  INT 21H
  JMP pp2 ;输出结果
EXIT1:CMP C12,'/'
  JNE LOPAENDS
  LEA DX,B8
  MOV AH,9
  INT 21H
  MOV AX,C11
pp3: MOV DX,0
  MOV BX,10
  DIV BX
  PUSH DX ;将16进制数转化为10进制数
  CMP AX,0
  JNZ pp3
 pp4: CMP SP,CX
  JE LOPAENDS
  POP DX
  ADD DL,30H
  MOV AH,2
  INT 21H
  JMP pp4
LOPAENDS: LEA DX,B6
  MOV AH,9
  INT 21H
  LEA DX,B7
  MOV AH,9
  INT 21H
  MOV AH,1
  INT 21H
  CMP AL,'o'
  JNE EXIT
  JMP S
EXIT: MOV AH,4CH
  INT 21H
CODE ENDS
  END START


1)19 symbol type conflict
2)155 with/coff switch,leading underscore requried for start address.START

请问怎么回事?

作者: zj995541086   发布时间: 2011-06-10

masm 6.15编译运行通过。你的这个程序是16位dos程序,汇编的时候只需这样:
ml /c ur-file.asm

作者: masmaster   发布时间: 2011-06-10