| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 847 人关注过本帖
标题:汇编新手提问——小写字母转大写
只看楼主 加入收藏
zz199200
Rank: 1
等 级:新手上路
帖 子:18
专家分:2
注 册:2011-11-26
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:8 
汇编新手提问——小写字母转大写
DATAS SEGMENT
    string db 13,10,'please enter a character:',13,10,'$'
    buf     db 2
            db '?'
            db 2 dup(?)
DATAS ENDS

STACKS SEGMENT
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX   
    lea dx,string            ;提示输入小写字母
    mov ah,9
    int 21h   
    lea dx,buf                ;输入字母
    mov ah,10
    int 21h   
    and dl,0dfh                ;转换                           
    mov ah,2                ;输出字母
    int 21h
    mov ah,4ch
    int 21h
CODES ENDS
    END START

结果总是黑三角。。。本人菜鸟,大家给点帮助吧
搜索更多相关主题的帖子: character please 字母 
2013-10-06 16:03
zz199200
Rank: 1
等 级:新手上路
帖 子:18
专家分:2
注 册:2011-11-26
收藏
得分:0 
感觉buf定义错了,在cv下dx总是1E,buf该怎么改呢
2013-10-06 16:14
Explorerlxz
Rank: 9Rank: 9Rank: 9
来 自:zzu
等 级:蜘蛛侠
威 望:4
帖 子:302
专家分:1032
注 册:2013-4-24
收藏
得分:5 
程序代码:
DATAS SEGMENT
    string db 13,10,'please enter a character:',13,10,'$'
    buf     db 2
            db '?'
            db 2 dup(?)
DATAS ENDS

STACKS SEGMENT
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX   
    lea dx,string            ;提示输入小写字母
    mov ah,9
    int 21h   
    lea dx,buf                ;输入字母
    mov ah,10
    int 21h
    lea si,buf+2
    mov dl,[si]
    sub dl,20h                ;转换  
    mov ah,2                ;输出字母
    int 21h
    mov ah,1
    int 21h
    mov ah,4ch
    int 21h
CODES ENDS
    END START

我看了看网上别的程序改了改!具体原因现在还不清楚,不过可以肯定,你缓冲区没定义错误
2013-10-06 18:06
Explorerlxz
Rank: 9Rank: 9Rank: 9
来 自:zzu
等 级:蜘蛛侠
威 望:4
帖 子:302
专家分:1032
注 册:2013-4-24
收藏
得分:10 
buf     db 2            ;用户定义存放2字节的缓冲区
            db '?'       ;系统填入实际输入字符字节数
            db 2 dup(?)  ;存放输入字节的ASCII码值

我们输出的是缓冲区的第三个字节的大写字母,
 lea si,buf+2                  ;指向第三个字符
    mov dl,[si]                ;读入dl中
    sub dl,20h                ;转换(不知楼主的and dl,0dfh有何深意,如果你想这样转换好像也应该用and dl,5fh吧
后面的  
mov ah,1
int 21h
是我自己加的,在Masmplus中程序一闪而过,我让它停一下,不加也罢
2013-10-06 18:40
zz199200
Rank: 1
等 级:新手上路
帖 子:18
专家分:2
注 册:2011-11-26
收藏
得分:0 
回复 4楼 Explorerlxz
的确是转换程序错了,输入的ASCII码只有八位,应该用dl进行转换操作,多谢大神
(ps:应该是and 5fh,我打错了~)
2013-10-07 16:02
zz199200
Rank: 1
等 级:新手上路
帖 子:18
专家分:2
注 册:2011-11-26
收藏
得分:0 
回复 4楼 Explorerlxz
但我想不通为什么加buf+2尼?
2013-10-07 16:23
Explorerlxz
Rank: 9Rank: 9Rank: 9
来 自:zzu
等 级:蜘蛛侠
威 望:4
帖 子:302
专家分:1032
注 册:2013-4-24
收藏
得分:5 
buf     db 2            ;用户定义存放2字节的缓冲区
            db '?'       ;系统填入实际输入字符字节数
            db 2 dup(?)  ;存放输入字节的ASCII码值
你定义的缓冲区是什么意思总该知道吧!如果你直接取buf所在位置的字节时取到的是缓冲区的第一个字节2,
buf+2代表缓冲区第三个字节,即db 2 dup(?)中第一个字符,代表输入字符的ASCII码,所以……
2013-10-07 17:28
zz199200
Rank: 1
等 级:新手上路
帖 子:18
专家分:2
注 册:2011-11-26
收藏
得分:0 
回复 7楼 Explorerlxz
哦,非常感谢
2013-10-08 10:52
mfwwxd
Rank: 1
等 级:新手上路
帖 子:10
专家分:2
注 册:2013-10-17
收藏
得分:0 
非常感谢
2013-10-17 21:45
快速回复:汇编新手提问——小写字母转大写
数据加载中...
 
   



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

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