标题:汇编中用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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-443911-1-1.html




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

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