回 帖 发 新 帖 刷新版面

主题:个位大哥大姐帮帮新手啊。。

我有如下一个程序 是通过MOVSB指令将DS中的字符串存到ES中,再将字符串显示。但我在DATAS SEGMENT 下面加了BUF DB 20        后运行只显示一个字符了 ,请高手指点
                            DB ?
                            DB 20 DUP(?)
一下啊?


DATAS SEGMENT
L1 DB 'INPUT NAME:'
CNT EQU $-L1
DATAS ENDS
DATA2 SEGMENT
OUTNAME DB 20 DUP(?)
DATA2 ENDS
CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,ES:DATA2
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV AX,DATA2
    MOV ES,AX
   
    MOV CX,CNT
    LEA DI,OUTNAME
    CLD
    REP MOVSB
    INC DI
    MOV [DI],'$'
    LEA DX,OUTNAME
    MOV AH,09H
    INT 21H
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START[em18][em18][em18][em18]

回复列表 (共6个回复)

沙发

你的SI有没有设置值?另外,movsb的用法你有没有掌握?

板凳

我把程序改成字符串输入,再把用MOVSB指令把字符串存ES段,再调用显示ES中的字符串
 程序如下,可是编译后字符串前面会出先多余字符 哪位大哥帮小弟解答一下啊?
[em17]
DATAS SEGMENT
MUN DB 20
    DB ?
    DB 20 DUP(?)
DATAS ENDS
DATA2 SEGMENT
OUTNAME DB 20 DUP(?)
DATA2 ENDS
CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,ES:DATA2
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV AX,DATA2
    MOV ES,AX
   
    MOV AH,0AH   ;输入字符串到MUN
    LEA DX,MUN
    INT 21H
    
    MOV AH,2     ;空格回车
    MOV DL,13
    INT 21H
    MOV DL,10
    INT 21H
    
    MOV CL,MUN[1] ;字符个数存CX
    MOV CH,0
    LEA SI,MUN    ;第一个字符地址存SI
    INC SI
    INC SI
    LEA DI,OUTNAME 
    CLD
    REP MOVSB     ;把MUN中输入的字符送OUTNAME中
    INC DI
    MOV [DI],'$'  ;字符窜结束符'$'送OUTNAME
    LEA DX,OUTNAME;显示输入的字符
    MOV AH,09H
    INT 21H
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

3 楼


我运行了,可以显示字符串

4 楼

你用的什么编译器?我用的是MSAM FOR WINDOWS 输入和输出字符有点不一样,输出字符前面会有个奇怪字符。还有个问题请教一下,我下了个MASM611编译器,但不清楚怎么使用,在MASM611 PWB平台上打程序,然后保存text.asm在C:\目录,再打开命令提示符输入masm text.asm命令,但是会出现'masm'不是内部或外部命令,这是什么原因啊?

5 楼

我用的也是masm611
可能是目录路径错了
程序可以在记事本中输入。保存为asm格式即可
文件和软件必须在同一目录下

6 楼

哦 知道了 谢谢了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册