肖-肖 发表于 2021-5-25 15:13:17

程序有问题,请指点一下

本帖最后由 肖-肖 于 2021-5-25 17:41 编辑

想着:
       从键盘输入一串字符,在字符串尾插入“$”,并显示该字符串。
我弄的代码是:

DATAS SEGMENT
    BUFSIZE DB 30H        ;
    ACTLEN DB ?                ;实际输入的字符数
    CHARS DB 30H DUP(?)        ;实际输入的字符从此开始存放
DATAS ENDS

STACKS SEGMENT
    ;堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
        mov dx,offset BUFSIZE        ;输入缓冲区
        mov ah,0AH        ;10号功能号
        INT 21H                ;
        XOR CX,CX        ;清cx为0
        mov cl,ACTLEN        ;取得输入的字符个数
        mov dx,offset CHARS        ;输入的字符串起始地址送DX
        mov bx,dx        ;将字符串首地址送bx
        add bx,cx        ;得到字符串尾地址
        mov BYTE PTR,'$'
        mov ah,09H        ;字符串显示功能
        INT 21H                ;显示输入的字符串
      MOV AH,4CH        ;调用返回DOS功能
      INT 21H                ;返回DOS
CODES ENDS
    END START


运行结果是:
   
问题是我只是输入了数据,并没有输出数据啊!!! 请指点一下,请说的详细些,最好加上示例代码,谢谢~

人造人 发表于 2021-5-25 17:37:13

第 26 行有问题,编译报错

肖-肖 发表于 2021-5-25 17:42:46

人造人 发表于 2021-5-25 17:37
第 26 行有问题,编译报错


代码格式我不弄了,一改上一秒还是好的,一点保存就坏了,我不会弄了
直接这么粘吧

人造人 发表于 2021-5-25 17:56:54

调试了一下,发现确实是输出了字符串,不过是在 0 的位置输出的,正好替换掉输入在屏幕上的那个字符串,所以看起来像没有输出
换一行就看出来了

DATAS SEGMENT
    BUFSIZE DB 30H      ;
    ACTLEN DB ?                ;实际输入的字符数
    CHARS DB 30H DUP(?)      ;实际输入的字符从此开始存放
DATAS ENDS

STACKS SEGMENT
    ;堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
      mov dx,offset BUFSIZE      ;输入缓冲区
      mov ah,0AH      ;10号功能号
      INT 21H                ;
      mov dl, 0ah
      mov ah, 02h
      int 21h
      XOR CX,CX      ;清cx为0
      mov cl,ACTLEN      ;取得输入的字符个数
      mov dx,offset CHARS      ;输入的字符串起始地址送DX
      mov bx,dx      ;将字符串首地址送bx
      add bx,cx      ;得到字符串尾地址
      mov BYTE PTR, '
      ;mov dx,offset CHARS
      mov ah,09H      ;字符串显示功能
      INT 21H                ;显示输入的字符串
      MOV AH,4CH      ;调用返回DOS功能
      INT 21H                ;返回DOS
CODES ENDS
END START

人造人 发表于 2021-5-25 17:58:04

肖-肖 发表于 2021-5-25 17:42
代码格式我不弄了,一改上一秒还是好的,一点保存就坏了,我不会弄了
直接这么粘吧

配上背景以后,这样也不错
^_^

肖-肖 发表于 2021-5-25 18:24:08

人造人 发表于 2021-5-25 17:56
调试了一下,发现确实是输出了字符串,不过是在 0 的位置输出的,正好替换掉输入在屏幕上的那个字符串,所 ...

嗯嗯 原来如此

我看了下那个DOS的功能调用表
02H是显示器输出
当我想要问为什么是mov dl,0aH的时候
这时候我想起了9号功能有时候也有回车和换行,分别是0DH和0Ah
这下我就明白了呀!
感谢 感谢
我还有一道题,有时间再看下吧,指点下我 嘿嘿

肖-肖 发表于 2021-5-25 18:25:41

人造人 发表于 2021-5-25 17:58
配上背景以后,这样也不错
^_^

我也这么觉得 哈哈 ^_^
页: [1]
查看完整版本: 程序有问题,请指点一下