鱼C论坛

 找回密码
 立即注册
查看: 4260|回复: 6

[已解决]程序有问题,请指点一下

[复制链接]
发表于 2021-5-25 15:13:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 肖-肖 于 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[bx],'$'
        mov ah,09H        ;字符串显示功能
        INT 21H                ;显示输入的字符串
        MOV AH,4CH        ;调用返回DOS功能
        INT 21H                ;返回DOS
CODES ENDS
    END START


运行结果是:
    问1.png
问题是我只是输入了数据,并没有输出数据啊!!! 请指点一下,请说的详细些,最好加上示例代码,谢谢~
最佳答案
2021-5-25 17:56:54
调试了一下,发现确实是输出了字符串,不过是在 0 的位置输出的,正好替换掉输入在屏幕上的那个字符串,所以看起来像没有输出
换一行就看出来了

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

  6. STACKS SEGMENT
  7.     ;堆栈段代码
  8. STACKS ENDS

  9. CODES SEGMENT
  10.     ASSUME CS:CODES,DS:DATAS,SS:STACKS
  11. START:
  12.     MOV AX,DATAS
  13.     MOV DS,AX
  14.     ;此处输入代码段代码
  15.         mov dx,offset BUFSIZE        ;输入缓冲区
  16.         mov ah,0AH        ;10号功能号
  17.         INT 21H                ;
  18.         mov dl, 0ah
  19.         mov ah, 02h
  20.         int 21h
  21.         XOR CX,CX        ;清cx为0
  22.         mov cl,ACTLEN        ;取得输入的字符个数
  23.         mov dx,offset CHARS        ;输入的字符串起始地址送DX
  24.         mov bx,dx        ;将字符串首地址送bx
  25.         add bx,cx        ;得到字符串尾地址
  26.         mov BYTE PTR[bx], '
  27.         ;mov dx,offset CHARS
  28.         mov ah,09H        ;字符串显示功能
  29.         INT 21H                ;显示输入的字符串
  30.         MOV AH,4CH        ;调用返回DOS功能
  31.         INT 21H                ;返回DOS
  32. CODES ENDS
  33. END START
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-25 17:37:13 | 显示全部楼层
第 26 行有问题,编译报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-25 17:42:46 | 显示全部楼层
人造人 发表于 2021-5-25 17:37
第 26 行有问题,编译报错


代码格式我不弄了,一改上一秒还是好的,一点保存就坏了,我不会弄了
直接这么粘吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-25 17:56:54 | 显示全部楼层    本楼为最佳答案   
调试了一下,发现确实是输出了字符串,不过是在 0 的位置输出的,正好替换掉输入在屏幕上的那个字符串,所以看起来像没有输出
换一行就看出来了

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

  6. STACKS SEGMENT
  7.     ;堆栈段代码
  8. STACKS ENDS

  9. CODES SEGMENT
  10.     ASSUME CS:CODES,DS:DATAS,SS:STACKS
  11. START:
  12.     MOV AX,DATAS
  13.     MOV DS,AX
  14.     ;此处输入代码段代码
  15.         mov dx,offset BUFSIZE        ;输入缓冲区
  16.         mov ah,0AH        ;10号功能号
  17.         INT 21H                ;
  18.         mov dl, 0ah
  19.         mov ah, 02h
  20.         int 21h
  21.         XOR CX,CX        ;清cx为0
  22.         mov cl,ACTLEN        ;取得输入的字符个数
  23.         mov dx,offset CHARS        ;输入的字符串起始地址送DX
  24.         mov bx,dx        ;将字符串首地址送bx
  25.         add bx,cx        ;得到字符串尾地址
  26.         mov BYTE PTR[bx], '
  27.         ;mov dx,offset CHARS
  28.         mov ah,09H        ;字符串显示功能
  29.         INT 21H                ;显示输入的字符串
  30.         MOV AH,4CH        ;调用返回DOS功能
  31.         INT 21H                ;返回DOS
  32. CODES ENDS
  33. END START
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

配上背景以后,这样也不错
^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

嗯嗯 原来如此
提交1.png
我看了下那个DOS的功能调用表
02H是显示器输出
当我想要问为什么是mov dl,0aH的时候
这时候我想起了9号功能有时候也有回车和换行,分别是0DH和0Ah
这下我就明白了呀!
感谢 感谢
我还有一道题,有时间再看下吧,指点下我 嘿嘿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-25 18:25:41 | 显示全部楼层
人造人 发表于 2021-5-25 17:58
配上背景以后,这样也不错
^_^

我也这么觉得 哈哈 ^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-2 13:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表