主题:很简单的问题,请帮忙解答
我自己编写了一个四则运算的小程序
很简单
但时用的顺序的方法
因为里面有许多重复的东西
想改成子程序调用
改了之后link也没问题
可是,不能运行。
说 不是有效的win32应用程序。
下面是没有盖完的部分代码
请帮我看一下
十分感谢!!
DATA SEGMENT
A DW ?
B DW ?
C DW ?
D DW 0
BCS DW 10000,1000,100,10,1 ;输出时候的被除数
S DB 5 DUP(30H),24H ;被输出数各个位的数字
M DB ? ;前0不输出的标志位
DATA ENDS
STACK SEGMENT PARA STACK 'STACK' ; 定义堆栈段开始
DW 100 DUP(100) ;堆栈大小为100个字
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
MAIN PROC FAR
;----------------------------
BEGIN: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV SI,82H
CALL INPUT
MOV A,BX ;把第一个数存到A
PUSH SI ;把操作符位置入栈
ADD SI,1 ;指向下一个操作数
CALL INPUT
MOV B,BX
MOV DX,A
CALL PRINT
MOV AH,4CH
INT 21H
MAIN ENDP
;-------------------------
INPUT PROC NEAR
NEW: XOR AX,AX
MOV AL,ES:[SI]
SUB AL,30H
JL NEXT
CMP AL,9
JG NEXT
CBW
XCHG AX,BX
MOV CX,10
MUL CX
XCHG AX,BX
ADD BX,AX
ADD SI,1
JMP NEW
NEXT: RET
INPUT ENDP
;----------------------------
PRINT PROC NEAR
MOV SI,0
MOV DI,0
MOV CX,5
;MOV DX,C ;~~~~~~~~
T: MOV AX,DX
XOR DX,DX
DIV BCS[SI]
ADD S[DI],AL
INC DI
ADD SI,2
LOOP T
MOV CX,5
LEA SI,S
MOV M,0 ;前0不输出的标志位
MOV DL,0AH ;换行回车
MOV AH,2
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
T3: MOV DL,[SI] ;前零判断,不输出
CMP M,1
JE T5
CMP DL,30H
JE T4
T5: MOV AH,2
INT 21H
MOV M,1
T4: INC SI
LOOP T3
RET
PRINT ENDP
;----------------------
CODE ENDS
很简单
但时用的顺序的方法
因为里面有许多重复的东西
想改成子程序调用
改了之后link也没问题
可是,不能运行。
说 不是有效的win32应用程序。
下面是没有盖完的部分代码
请帮我看一下
十分感谢!!
DATA SEGMENT
A DW ?
B DW ?
C DW ?
D DW 0
BCS DW 10000,1000,100,10,1 ;输出时候的被除数
S DB 5 DUP(30H),24H ;被输出数各个位的数字
M DB ? ;前0不输出的标志位
DATA ENDS
STACK SEGMENT PARA STACK 'STACK' ; 定义堆栈段开始
DW 100 DUP(100) ;堆栈大小为100个字
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
MAIN PROC FAR
;----------------------------
BEGIN: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV SI,82H
CALL INPUT
MOV A,BX ;把第一个数存到A
PUSH SI ;把操作符位置入栈
ADD SI,1 ;指向下一个操作数
CALL INPUT
MOV B,BX
MOV DX,A
CALL PRINT
MOV AH,4CH
INT 21H
MAIN ENDP
;-------------------------
INPUT PROC NEAR
NEW: XOR AX,AX
MOV AL,ES:[SI]
SUB AL,30H
JL NEXT
CMP AL,9
JG NEXT
CBW
XCHG AX,BX
MOV CX,10
MUL CX
XCHG AX,BX
ADD BX,AX
ADD SI,1
JMP NEW
NEXT: RET
INPUT ENDP
;----------------------------
PRINT PROC NEAR
MOV SI,0
MOV DI,0
MOV CX,5
;MOV DX,C ;~~~~~~~~
T: MOV AX,DX
XOR DX,DX
DIV BCS[SI]
ADD S[DI],AL
INC DI
ADD SI,2
LOOP T
MOV CX,5
LEA SI,S
MOV M,0 ;前0不输出的标志位
MOV DL,0AH ;换行回车
MOV AH,2
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
T3: MOV DL,[SI] ;前零判断,不输出
CMP M,1
JE T5
CMP DL,30H
JE T4
T5: MOV AH,2
INT 21H
MOV M,1
T4: INC SI
LOOP T3
RET
PRINT ENDP
;----------------------
CODE ENDS