+ -
当前位置:首页 → 问答吧 → 汇编运行时出错 怎么解决

汇编运行时出错 怎么解决

时间:2011-06-20

来源:互联网

B_P EQU BYTE PTR
W_P EQU WORD PTR
D_P EQU DWORD PTR
CODE SEGMENT
ASSUME CS:CODE,DS:CODE
  ORG 100H
;主程序开始
NEWSTAR:
  JMP STAR
  EVEN
NUM1 DW 0,0
NUM2 DW 0,0
NUM3 DW 0,0
JGV4 DW 0,0
YSF LABEL WORD
YSF1 DB 0
YSF2 DB 0
JUV DB 0
UV DB 0
OVERS LABEL NEAR
  CLD
  PUSH AX
OVERS1:
  LODSB
  CMP AL,' '
  JZ OVERS1
  CMP AL,9
  JZ OVERS1
  DEC SI
  CMP AL,13
  POP AX
  RET
TAB LABEL NEAR
  MOV AL,9
  JMP SHORT DISP
CRLF LABEL NEAR
  MOV AL,13  
  CALL DISP
  MOV AL,10
DISP LABEL NEAR
  PUSH AX
  PUSH DX
  MOV AH,2
  MOV DL,AL
  INT 21H
  POP DX
  POP AX
  RET
ISYSF LABEL NEAR
  CLD
  LODSB
  CALL ISJJ
  JZ ISYSF1
  CALL ISII
  JZ ISYSF1
  DEC SI
ISYSF1:
  RET
ISJJ LABEL NEAR
  CMP AL,'+'
  JZ ISYSF1
  CMP AL,'-' 
  RET
ISII LABEL NEAR
  CMP AL,'*'
  JZ ISYSF1
  CMP AL,'/'
  JZ ISYSF1
  CMP AL,'\'
  RET
DOUT LABEL NEAR
  PUSH AX
  PUSH BX
  PUSH DX
  PUSH BP
  XOR BP,BP
DOUT1:
  INC BP
  PUSH AX
  MOV AX,DX
  XOR DX,DX
  DIV CX
  MOV BX,AX
  POP AX
  DIV CX
  PUSH DX
  MOV DX,BX
  OR BX,AX
  JNZ DOUT1
DOUT2:
  POP AX
  ADD AL,'0'
  CMP AL,'9' 
  JBE DOUT3
  ADD AL,'A'-'9'-1
DOUT3:
  CALL DISP
  DEC BP
  JNZ DOUT2
  POP BP
  POP DX
  POP BX
  POP AX
  RET
DATE LABEL NEAR
  PUSH BX
  PUSH BP
  PUSH DI
  XOR AX,AX
  XOR DX,DX
DATE1:
  MOV DI,AX
  LODSB
  CMP AL,'0' 
  JB DATE7
  CMP AL,'9'
  JA DATE6
DATE2:
  AND AX,0FH
  SHL DI,1
  RCL DX,1
  MOV BX,DI
  MOV BP,DX
  SHL DI,1
  RCL DX,1
  SHL DI,1
  RCL DX,1
  JCXZ DATE3
  SHL DI,1
  RCL DX,1
  JMP SHORT DATE4
DATE3:
  ADD DI,BX
  ADC DX,BP
DATE4:
  ADD AX,DI
  ADC DX,0
  JMP DATE1
DATE5:
  ADD AL,9
  JMP DATE2
DATE6:
  JCXZ DATE7
  CMP AL,'A'
  JB DATE7
  CMP AL,'F'
  JBE DATE5
  CMP AL,'a'
  JB DATE7
  CMP AL,'f'
  JBE DATE5
DATE7:
  MOV AX,DI
  DEC SI
  OR DI,DX
  POP DI
  POP BP
  POP BX
  RET
JSJJ LABEL NEAR
  MOV AX,NUM2
  MOV DX,NUM2+2
  CMP YSF1,'+'
  JZ JSJJ1
  SUB NUM1,AX
  SBB NUM1+2,DX
  JMP SHORT JSJJ2
JSJJ1:
  ADD NUM1,AX
  ADC NUM1+2,DX
JSJJ2:
  RET
JSII1 LABEL NEAR 
  MOV BX,OFFSET NUM1
  JMP SHORT JSII2_1
JSII2 LABEL NEAR  
  MOV BX,OFFSET NUM2
JSII2_1:
  DB 66H
  MOV AX,[BX]
  DB 66H
  MOV CX,[BX+4]
  CMP YSF2,'*'  
  JNZ JSII2_2
  DB 66H
  IMUL CX
  JMP SHORT JSII2_3
JSII2_2:
  DB 66H
  CWD
  DB 66H
  IDIV CX
  CMP YSF2,'/'
  JZ JSII2_3
  DB 66H
  XCHG DX,AX
JSII2_3:
  DB 66H
  MOV [BX],AX
  RET
XUJG LABEL NEAR
  MOV AX,JGV4
  MOV DX,JGV4+2
  MOV CX,10
  CMP UV,10
  JZ XUJG0
  MOV CX,16
XUJG0:
  TEST DX,8000H
  JZ XUJG1
  CMP UV,10
  JZ XUJG2
  CALL DOUT
XUJG2:
  NOT AX
  NOT DX
  ADD AX,1
  ADC DX,0
  PUSH AX
  CMP UV,10
  JZ XUJG3
  MOV AL,' '
  CALL DISP
  MOV AL,'('
  CALL DISP
XUJG3:
  MOV AL,'-'
  CALL DISP
  POP AX
  CMP UV,10
  JZ XUJG1
  CALL DOUT
  MOV AL,')'
  CALL DISP
  RET
XUJG1:
  CALL DOUT 
  RET
JSJG LABEL NEAR
  CALL JSJJ
  MOV AX,NUM1
  MOV DX,NUM1+2
  RET
LOADATE LABEL NEAR
  LODSB
  CMP AL,'('
  JZ LOADATE1
  DEC SI
  PUSH CX
  XOR CX,CX
  CMP UV,10
  JZ LOADATE0
  INC CX
LOADATE0:
  CALL DATE
  POP CX
  RET
LOADATE1:
  PUSH NUM1
  PUSH NUM1+2
  PUSH NUM2
  PUSH NUM2+2
  PUSH YSF
  INC JUV
  MOV JGV4,0
  MOV JGV4+2,0
SZYS LABEL NEAR
  CALL ISYSF
  JZ SZYS2
  CALL LOADATE
  MOV NUM1,AX
  MOV NUM1+2,DX
SZYS1:
  XOR AX,AX
  MOV NUM2,AX
  MOV NUM2+2,AX
  CALL ISYSF
  JZ SZYS3
  JNZ SZYS6
SZYS2:
  PUSH AX
  MOV AX,JGV4
  MOV NUM1,AX
  MOV AX,JGV4+2
  MOV NUM1+2,AX
  POP AX
SZYS3:
  MOV YSF1,AL
  MOV YSF2,AL
  CALL ISJJ
  JZ SZYS4
  CALL LOADATE
  MOV NUM2,AX
  MOV NUM2+2,DX
  CALL JSII1
  JMP SZYS1
SZYS4:
  CALL LOADATE
  MOV NUM2,AX
  MOV NUM2+2,DX
SZYS4_1:
  CALL ISYSF
  JNZ SZYS6
  CALL ISJJ
  JNZ SZYS5
  PUSH AX
  CALL JSJJ
  POP AX
  MOV YSF1,AL
  JMP SZYS4
SZYS5:
  MOV YSF2,AL
  CALL LOADATE
  MOV NUM3,AX
  MOV NUM3+2,DX
  CALL JSII2
  JMP SZYS4_1
SZYS6:
  MOV CL,AL
  CMP AL,13
  JNZ SZYS9
SZYS7:
  CALL JSJG
  CMP JUV,0
  JZ SZYS8
  DEC JUV
  POP YSF
  POP NUM2+2
  POP NUM2
  POP NUM1+2
  POP NUM1
  RET
SZYS8:
  CMP AL,')'
  JNZ SZYS10
  MOV JGV4,AX
  MOV JGV4+2,DX
  JNZ SZYS12  
SZYS9:
  CMP AL,')'
  JNZ SZYS11
  INC SI
  JMP SZYS7
SZYS10:
  MOV NUM1,AX
  MOV NUM1+2,DX
  JMP SZYS1
SZYS11:
  STC
  RET
SZYS12:
  CLC
  RET
UVIL LABEL NEAR
  PUSH SI
UVIL1:
  LODSB
  CMP AL,' '
  JZ UVIL2
  CMP AL,9
  JZ UVIL2
  CMP AL,13
  JZ UVIL4
  JNZ UVIL1
UVIL2:
  MOV BX,SI
  CALL OVERS
  JZ UVIL3
  LODSW
  CALL OVERS
  POP SI
  JNZ SZYS11
  CMP AX,'01'
  JNZ SZYS11
  PUSH SI
  MOV UV,10
UVIL3:
  MOV AL,13
  MOV [BX-1],AL
UVIL4:
  POP SI
  CLC
  RET
   
 

作者: wuhui15312884191   发布时间: 2011-06-20

debug了吗?

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