正文

今天郁闷了2007-06-12 22:30:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/wfxsky/26734.html

分享到:

今天遇到了一个问题,一直没解决啊,很简单,就是

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
上面却不能输出,只有输入,如果一样为什么不对啊,我郁闷了好几天了,谁能解答啊

 

阅读(2770) | 评论(4)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册