注册 登录
编程论坛 汇编论坛

请问这个程序错在哪

flyfx1989 发布于 2010-12-12 21:34, 493 次点击
D SEGMENT
D1 DB 20
    DB ?
    DB 2 DUP(?)
EMON DB 'JAN' ,'FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC'
CHAR DB 3 DUP(?),0DH,0AH,'$'
D2 DB 'INPUT MONTH',0DH,0AH,'$'
D3 DB ?
D ENDS
C SEGMENT
 ASSUME CS:C,DS:D,ES:D

 MAIN PROC FAR
MOV AX,D
MOV DS,AX
MOV ES,AX
START:
CALL INPUT
CALL LOCATE
CALL DISPLAY
JMP START
EXIT:MOV AH,4CH
INT 21H
RET
MAIN ENDP

INPUT PROC NEAR
LEA DX,D2
MOV AH,9
INT 21H
LEA DX,D1
MOV AH,0AH
INT 21H
MOV AL,D1+2
SUB AL,'0'
MOV BL,10
MUL BL
MOV AH,D1+3
SUB AH,'0'
ADD AL,AH
MOV D3,AL
RET
INPUT ENDP

LOCATE PROC NEAR
MOV AL,D3
DEC AL
MOV BL,3
MUL BL
MOV SI,0
MOV BX,OFFSET EMON
MOV AH,0
ADD BX,AX
LOP:
MOV CX,3
MOV AL,[BX+SI]
MOV CHAR[SI],AL
INC SI
LOOP LOP
RET
LOCATE ENDP

DISPLAY PROC NEAR
LEA DX,CHAR
MOV AH,9
INT 21H
RET
DISPLAY ENDP

CODE ENDS
     END START
2 回复
#2
zaixuexi2010-12-12 22:31
D SEGMENT
D1  DB 3
    DB ?
    DB 2 DUP(?)
EMON DB 'JAN' ,'FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC'
CHAR DB 3 DUP(?),0DH,0AH,'$'
D2 DB 'INPUT MONTH',0DH,0AH,'$'
D3 DB ?
D ENDS
C SEGMENT
ASSUME CS:C,DS:D,ES:D

MAIN PROC FAR

START:
MOV AX,D
MOV DS,AX
MOV ES,AX
CALL INPUT
CALL LOCATE
CALL DISPLAY
JMP START
EXIT:
MOV AH,4CH
INT 21H
MAIN ENDP

INPUT PROC NEAR
LEA DX,D2
MOV AH,9
INT 21H
LEA DX,D1
MOV AH,0AH
INT 21H
MOV AL,D1+2
SUB AL,'0'
MOV BL,10
MUL BL
MOV AH,D1+3
SUB AH,'0'
ADD AL,AH
MOV D3,AL
RET
INPUT ENDP

LOCATE PROC NEAR
MOV AL,D3
DEC AL
MOV BL,3
MUL BL
MOV SI,0
MOV BX,OFFSET EMON
MOV AH,0
ADD BX,AX
LOP:
MOV CX,3
MOV AL,[BX+SI]
MOV CHAR[SI],AL
INC SI
LOOP LOP
RET
LOCATE ENDP

DISPLAY PROC NEAR
LEA DX,CHAR
MOV AH,9
INT 21H
RET
DISPLAY ENDP

C ENDS
END START
我改了一点,没看懂你的locate要干什么事,呵呵.
#3
xiaomarn2010-12-13 20:03
程序代码:
data SEGMENT
    D1     DB 20
        DB ?
        DB 2 DUP(?)
    EMON DB 'JAN' ,'FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC'
    crlf db 0dh,0ah
    CHAR DB 3 DUP(?),0DH,0AH,'$'
    D2 DB 'INPUT MONTH',0DH,0AH,'$'
    D3 DB ?
    errmsg db 'input error!','$'
data ENDS

code SEGMENT
ASSUME CS:code,DS:data,ES:data

MAIN PROC FAR
START:
    MOV AX,data
    MOV DS,AX
    MOV ES,AX

    CALL INPUT
    CALL LOCATE
    CALL DISPLAY
    ;JMP START
EXIT:MOV AH,4CH
    INT 21H
    RET
MAIN ENDP

INPUT PROC NEAR
    LEA DX,D2
    MOV AH,9
    INT 21H
    LEA DX,D1
    MOV AH,0AH
    INT 21H
    MOV AL,D1+2
    SUB AL,'0'
    cmp al,1
    ja mm
    MOV BL,10
    MUL BL
    MOV AH,D1+3
    cmp ah,0dh
    jz cr
    SUB AH,'0'   

    cmp ah,2
    ja err
    ADD AL,AH
mm:
    MOV D3,AL
    RET
cr:
    mov d3,1
    ret
err:
    mov dx,offset errmsg
    mov ah,9
    int 21h
   

    mov ah,4ch
    int 21h
INPUT ENDP

LOCATE PROC NEAR
    MOV AL,D3
    DEC AL
    MOV BL,3
    MUL BL
    MOV SI,0
    MOV BX,OFFSET EMON
    MOV AH,0
    ADD BX,AX
    MOV CX,3
LOP:   

    MOV AL,[BX+SI]
    MOV CHAR[SI],AL
    INC SI
    LOOP LOP
    RET
LOCATE ENDP

DISPLAY PROC NEAR
    LEA DX,crlf
    MOV AH,9
    INT 21H
    RET
DISPLAY ENDP

CODE ENDS
     END START

1