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

遇到一个棘手的问题,求好心人解答一下

rapic 发布于 2009-11-19 09:03, 927 次点击
STACK1  SEGMENT   STACK
              DW        256 DUP(?)
      STACK1  ENDS

        DATA  SEGMENT   USE16
        MES1  DB        'Show a as hex:',0DH,0AH,'$'
        MES2  DB        'Please input a string:','$'
        MES3  DB        50
              DB        ?
              DB        50 DUP(?),'$'

        DATA  ENDS

        CODE  SEGMENT   USE16
              ASSUME    CS:CODE,DS:DATA
         
      START:  MOV       AX,DATA
              MOV       DS,AX
              MOV       AX,0
              MOV       DX,OFFSET MES2
              MOV       AH,09H
              INT       21H                  

              MOV       DX,OFFSET MES3
              MOV       AH,0AH
              INT       21H

              MOV       DX,OFFSET MES3
              MOV       AH,09H
              INT       21H

              MOV       DX,OFFSET MES1         
              MOV       AH,09H
              INT       21H
              MOV       AX,4C00H    ;go back to dos
              INT       21H
        CODE  ENDS
              END       START

为什么我这个程序不能实现显示出键盘输入的字符串啊?另外我MES3在数据段的最初数据并不是全空啊,里面有一个最初的值2.有好心人能帮我解答一下吗?我郁闷好几天了。
4 回复
#2
rockcjw2009-11-24 21:14
建议你把0A号功能再看一下
#3
az98416822009-11-30 02:42
MOV       AX,DATA
              MOV       DS,AX
              MOV       AX,0

这一步 貌似是多余
为什么 这一步 会影响 输出  我也不知道
我的是这样
data segment
mes1 db 'show a as',0dh,0ah,'$'
mes2 dw 50 dup(?),'$'
data ends

code segment
assume cs:code,ds:data
main proc far

start: mov dx,offset mes1+0
       ;mov byte ptr mes1+[bx],'$'
       mov ah,09h
       int 21h      ;这段貌似是输出DATA

      mov dx,offset mes2
      mov ah,0ah
      int 21h        ;往MES2输入数据
   
      mov ah,4ch
      int 21h
   
main endp
code ends
end main


[ 本帖最后由 az9841682 于 2009-11-30 02:43 编辑 ]
#4
娜美2009-12-02 20:18
你的输出STRING字符串有问题。。。。不能简单的用0Ah功能(应该没你这么用的吧貌似)。。
调用。。。。改成单个字符输出试试
#5
az98416822009-12-20 16:09
改动了一下
为什么SHOW  A  AS 前面有一大把的乱码 求什么去掉
data segment
mes1 db 'show a as',0ah,0dh,'$'
mes2 dw 50 dup(?),'$'
data ends

code segment
assume cs:code,ds:data
main proc far

start:sub dx,dx
      mov dx,offset mes1+0
      ;mov byte ptr mes1+[bx],'$'
      mov ah,09h
      int 21h

mov dx,offset mes2
mov ah,0ah
int 21h

mov dl,0dh
mov ah,02h
int 21h

mov dl,0ah
mov ah,02h
int 21h

lea dx,mes2
mov ah,09h
int 21h

mov ah,4ch
int 21h

main endp
code ends
end main
1