| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4609 人关注过本帖
标题:汇编中用0a号功能输入,然后倒序输出,我写了一个程序,有错误,在输出乱码 ...
只看楼主 加入收藏
qq471402415
Rank: 2
等 级:论坛游民
帖 子:88
专家分:45
注 册:2013-12-3
结帖率:82.35%
收藏
 问题点数:0 回复次数:3 
汇编中用0a号功能输入,然后倒序输出,我写了一个程序,有错误,在输出乱码后有正确结果输出,这是什么问题,新手求教
程序代码:
S1 SEGMENT
STRING DB 100,?,100 DUP(0)
S1 ENDS 
S2 SEGMENT PARA STACK
   DW 100 DUP (?)
   TOP LABEL WORD 
   S2 ENDS 
S3 SEGMENT
ASSUME DS:S1,SS:S2 ,CS :S3
P PROC FAR 
MOV AX,S1
MOV DS, AX
MOV AX ,S2
MOV SS,AX
LEA SP,TOP

LEA DX,STRING
MOV AH,0AH
INT 21H 

LEA BX,STRING
MOV CX,STRING[1]
ADD BX,CX
ADD BX,1
L1:
MOV DL,[BX]
MOV AH,2H
INT 21H
DEC BX
LOOP L1
  mov ah ,4ch
   int 21H
   P   ENDP
   S3  ENDS
       END P


2015-04-12 20:29
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
这么古老的事还有人做?
从你描述的看,应该是输入字符结尾没计算好,根据0ah资料,string第一个字节是缓冲区最大容量,第二个字节才是实际输入字符数(不包含回车符),因此你的显示代码如下:
XOR cx,cx
mov cl,string[1]
Lea bx,string
add bx,cx
L1:
.//你的循环显示代码
.
Loop l1

能编个毛线衣吗?
2015-04-13 10:27
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:0 
楼主的程序问题出在:
LEA BX,STRING
MOV CX,STRING[1]
ADD BX,CX
ADD BX,1
其中“MOV CX,STRING[1]”,你的本意是将实际输入的字符数放入CX中,但按DOS中断例程INT 21H的0AH功能设计,STRING缓冲区第2个字节存放实际输入的字符数,注意是“字节”,而你却将STRING[1]处的一个字存入了CX,即CX中存放的不是正确的实际输入字符数,从而之后“ADD BX,CX”“ADD BX,1”得到的也就不是最后一个字符的正确偏移地址,自然要输出一些乱码了。
以上的分析,希望能够帮到楼主!
2015-04-28 14:46
快速回复:汇编中用0a号功能输入,然后倒序输出,我写了一个程序,有错误,在输出 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017903 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved