今天遇到了一个问题,一直没解决啊,很简单,就是
ret 和
mov ax,4c00h
int 21h
的区别啊,我问了很多人,他们都说是一样的只不过前者返回过程,后者是直接返回 dos
但我在做一个题时遇到问题觉得他们说的都不准确啊,请看:
DATA SEGMENT
MESG1 db 0DH,0AH,'FOUND$'
MESG2 Db 0DH,0AH,'NO FOUND$'
MESG3 Db 'ENTER KEYWORD:$'
BUFFER DW 3213,5128,57826,7632,1387
DW 45321,928,9876,1899,45678
COUNT dw 10
ADDR DW 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AH,9
MOV DX,OFFSET MESG3
INT 21H
CALL DECIBIN
MOV AX,BX
MOV DI,OFFSET BUFFER
MOV CX,COUNT
NEXT: CMP AX,[DI]
JE OK
ADD DI,2
LOOP NEXT
MOV ADDR,-1
MOV DX,OFFSET MESG2
JMP SHORT DISPLAY
OK: MOV ADDR,DI
MOV DX,OFFSET MESG
DISPLAY:
MOV AH,9
INT 21H
mov ax,4c00h
int 21h
DECIBIN PROC NEAR
MOV BX,0
NEWCHAR: MOV AH,1
INT 21H
SUB AL,30H
JL EXIT
CMP AL,9
JG EXIT
CBW
XCHG AX,BX
MOV CX,10
MUL CX
XCHG AX,BX
ADD BX,AX
JMP NEWCHAR
EXIT: RET
DECIBIN ENDP
CODE ENDS
END START
这个程序完成从键盘输入的一个数,然后查找,找到显示found 否则显示no found
这个程序没有主过程,显示正确,我把上面mov ax,4c00h int 21h 去掉,加上主过程,即:加上
DATA SEGMENT
MESG1 db 0DH,0AH,'FOUND$'
MESG2 Db 0DH,0AH,'NO FOUND$'
MESG3 Db 'ENTER KEYWORD:$'
BUFFER DW 3213,5128,57826,7632,1387
DW 45321,928,9876,1899,45678
COUNT dw 10
ADDR DW 0
DATA ENDS
CODE SEGMENT
main proc far ;主过程
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AH,9
MOV DX,OFFSET MESG3
INT 21H
CALL DECIBIN
MOV AX,BX
MOV DI,OFFSET BUFFER
MOV CX,COUNT
NEXT: CMP AX,[DI]
JE OK
ADD DI,2
LOOP NEXT
MOV ADDR,-1
MOV DX,OFFSET MESG2
JMP SHORT DISPLAY
OK: MOV ADDR,DI
MOV DX,OFFSET MESG
DISPLAY:
MOV AH,9
INT 21H
ret
main endp ;main 过程
DECIBIN PROC NEAR
MOV BX,0
NEWCHAR: MOV AH,1
INT 21H
SUB AL,30H
JL EXIT
CMP AL,9
JG EXIT
CBW
XCHG AX,BX
MOV CX,10
MUL CX
XCHG AX,BX
ADD BX,AX
JMP NEWCHAR
EXIT: RET
DECIBIN ENDP
CODE ENDS
END START
上面却不能输出,只有输入,如果一样为什么不对啊,我郁闷了好几天了,谁能解答啊
评论