回 帖 发 新 帖 刷新版面

主题:帮忙看下哪出问题了~~~~~~~~~~~~

DATAS SEGMENT
    
DATAS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
    MOV AX,DATAS
    MOV DS,AX
begin:  mov ah,1
        int 21h
        cmp al,'a'
        jb  stop
        cmp al,'z'
        jg  stop
        dec al
        mov dl,al
        mov cx,3
 display:
        mov ah,2
        int 21h
        inc dl
        loop display
  stop: ret
     MOV AH,4CH
      INT 21H
CODES ENDS
    END START

这是我编的一个程序,从键盘上输入一个小写字母,然后找出它的前导字符和后续字符,并按顺序输出这三个字符,程序运行都没问题,可就是我按一个字母后他就自动退出掉,帮忙看下,谢谢!!!!!!!!

回复列表 (共3个回复)

沙发

DATAS SEGMENT

DATAS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
    MOV AX,DATAS
    MOV DS,AX
begin:  mov ah,01
        int 21h
        cmp al,'a'
        jb  stop
        cmp al,'z'
        ja  stop
        dec al
        mov dl,al
        mov ah,2
        int 21h
       add dl,2
       mov ah,2
        int 21h
  stop:MOV AH,4CH
      INT 21H
CODES ENDS
    END START

这样就可以了。
RET的出现比较莫名其妙。LZ在编程的时候不够仔细。
不过用01调用不能实现顺序输出的功能
应该用08调用

改进后的程序应该是

DATAS SEGMENT

DATAS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
    MOV AX,DATAS
    MOV DS,AX
begin:  mov ah,08
        int 21h
compare:cmp al,'a'
        jb  stop
        cmp al,'z'
        ja  stop
        mov dl,al
        dec dl
        mov cl,3
loop1:  mov ah,2
        int 21h
        inc dl
        loop loop1
  stop:MOV AH,4CH
      INT 21H
CODES ENDS
    END START
这就可以实现功能了

板凳

可以了 非常谢谢 非常非常感谢^_^!

3 楼


客气~[em1]

我来回复

您尚未登录,请登录后再回复。点此登录或注册