今天遇到了一个问题,一直没解决啊,很简单,就是 ret 和 mov ax,4c00h int 21h 的区别啊,我问了很多人,他们都说是一样的只不过前者返回过程,后者是直接返回 dos 但我在做一个题时遇到问题觉得他们说的都不准确啊,请看: DATA SEGMENTMESG1 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,45678COUNT dw 10ADDR DW 0DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AH,9MOV DX,OFFSET MESG3INT 21HCALL DECIBINMOV AX,BXMOV DI,OFFSET BUFFERMOV CX,COUNTNEXT: CMP AX,[DI] JE OK ADD DI,2 LOOP NEXT MOV ADDR,-1 MOV DX,OFFSET MESG2 JMP SHORT DISPLAYOK: MOV ADDR,DI MOV DX,OFFSET MESG DISPLAY: MOV AH,9 INT 21H mov ax,4c00h int 21h DECIBIN PROC NEARMOV BX,0NEWCHAR: MOV AH,1INT 21HSUB AL,30HJL EXITCMP AL,9JG EXITCBWXCHG AX,BXMOV CX,10MUL CXXCHG AX,BXADD BX,AXJMP NEWCHAREXIT: RETDECIBIN ENDPCODE ENDS END START这个程序完成从键盘输入的一个数,然后查找,找到显示found 否则显示no found 这个程序没有主过程,显示正确,我把上面mov ax,4c00h int 21h 去掉,加上主过程,即:加上 DATA SEGMENTMESG1 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,45678COUNT dw 10ADDR DW 0DATA ENDS CODE SEGMENT main proc far ;主过程 ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AH,9MOV DX,OFFSET MESG3INT 21HCALL DECIBINMOV AX,BXMOV DI,OFFSET BUFFERMOV CX,COUNTNEXT: CMP AX,[DI] JE OK ADD DI,2 LOOP NEXT MOV ADDR,-1 MOV DX,OFFSET MESG2 JMP SHORT DISPLAYOK: MOV ADDR,DI MOV DX,OFFSET MESG DISPLAY: MOV AH,9 INT 21H ret main endp ;main 过程 DECIBIN PROC NEARMOV BX,0NEWCHAR: MOV AH,1INT 21HSUB AL,30HJL EXITCMP AL,9JG EXITCBWXCHG AX,BXMOV CX,10MUL CXXCHG AX,BXADD BX,AXJMP NEWCHAREXIT: RETDECIBIN ENDPCODE ENDS END START上面却不能输出,只有输入,如果一样为什么不对啊,我郁闷了好几天了,谁能解答啊

评论