| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1057 人关注过本帖
标题:自己写的程序,有乱码?求高手解答
只看楼主 加入收藏
moto专家
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2008-12-1
收藏
 问题点数:0 回复次数:5 
自己写的程序,有乱码?求高手解答
统计字符串中字符的个数并存入字符串中,字符串再下移两个单元,并在屏幕上显示
DATA SEGMENT
STRING DB 'ZHUTOU$'
DATA    ENDS             ;数据段结束
CODE    SEGMENT          ;定义代码段
ASSUME  CS:CODE,ES:DATA
START:  MOV AX,DATA  
        MOV ES,AX        ;初始化ES
        LEA DI,STRING    ;字符串首地址送给DI
        
        


        MOV AL,24H       ;$给AL
        MOV DX,0         ;DX清0
        CLD              ;清状态标志位
LOOP1:  SCASB            ;串扫描
        JZ L1         ;找到则转到STOP
        INC DX           ;未找到,DX加1
        JMP LOOP1       ;继续循环
        
L1:     LEA BX,STRING
        ADD BX,DX
        MOV CX,DX
        INC CX
LOOP2:  MOV AL,[BX]
        MOV [BX+2],AL
        DEC BX
        LOOP LOOP2
        

        MOV [BX+3],DX
        PUSH  DX


        MOV  DX,OFFSET STRING
        MOV  AH,09
        INT  21H
        POP DX
        MOV AX,DX        ;显示程序
        MOV BL,10        
        DIV BL           ;AX除以DL
        MOV BH,AH        ;余数放到BH
        MOV DL,AL        ;商放到DL
        OR  DL,30H       ;把DL变为ASCII码
        MOV AH,2H        ;2号功能调用
        INT 21H         
        MOV DL,BH        ;余数放到DL中
        OR  DL,30H       ;把DL变为ASCII码
        MOV AH,2         ;2号功能调用
        INT 21H         
        MOV AH,4CH      
        INT 21H         
CODE    ENDS             ;代码段结束
        END START        ;源程序结束


输出先是些乱码,最后才有结果 求高手解答
搜索更多相关主题的帖子: 乱码 解答 
2008-12-04 11:39
moto专家
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2008-12-1
收藏
得分:0 
没有人会吗?
2008-12-04 16:47
moto专家
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2008-12-1
收藏
得分:0 
没有人会吗?
2008-12-04 16:47
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
DATA SEGMENT
STRING DB 'ZHUTOU$'
DATA    ENDS             ;数据段结束
CODE    SEGMENT          ;定义代码段
ASSUME  CS:CODE,ES:DATA
START:  MOV AX,DATA  
        MOV ES,AX        ;初始化ES
        mov ds,ax
        LEA DI,STRING    ;字符串首地址送给DI
        
        


        MOV AL,24H       ;$给AL
        MOV DX,0         ;DX清0
        CLD              ;清状态标志位
LOOP1:  SCASB            ;串扫描
        JZ L1         ;找到则转到STOP
        INC DX           ;未找到,DX加1
        JMP LOOP1       ;继续循环
        
L1:     LEA BX,STRING
        ADD BX,DX
        MOV CX,DX
        INC CX
        inc bx
LOOP2: dec bx
    MOV AL,[BX]
        MOV [BX+2],AL
        ;DEC BX        
        LOOP LOOP2
        

        add bx,dx
    MOV [BX+3],DX
        PUSH  DX


        MOV  DX,OFFSET STRING
       add dx,2
        MOV  AH,09
        INT  21H
        POP DX
        MOV AX,DX        ;显示程序
        MOV BL,10        
        DIV BL           ;AX除以DL
        MOV BH,AH        ;余数放到BH
        MOV DL,AL        ;商放到DL
        OR  DL,30H       ;把DL变为ASCII码
        MOV AH,2H        ;2号功能调用
        INT 21H         
        MOV DL,BH        ;余数放到DL中
        OR  DL,30H       ;把DL变为ASCII码
        MOV AH,2         ;2号功能调用
        INT 21H         
        MOV AH,4CH      
        INT 21H         
CODE    ENDS             ;代码段结束
        END START        ;源程序结束
2008-12-04 18:25
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
我修改了几个地方,你自己看看行不?
1.DS也要注意初始化,因为它是数据段的默认段地址;
2.LOOP循环是先执行循环体,再减CX,所以,要把DEC BX放在前面;
3.MOV [BX+3],DX 这个指令写入的地址有问题,因为,此时BX已经为0 !
4.由于字符串已经后移了两个字节,所以,字符串的最前面两个字节就不能显示了,所以有add dx,2
2008-12-04 18:31
moto专家
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2008-12-1
收藏
得分:0 
感谢斑竹了,功能实现了,还是我学的太浅了,我又看了一下发现我没设置堆栈区,也没出错。
2008-12-04 22:41
快速回复:自己写的程序,有乱码?求高手解答
数据加载中...
 
   



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

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