标题:小写怎么转换成大写
只看楼主
chengxiaobo
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2006-11-15
 问题点数:0 回复次数:12 
小写怎么转换成大写
请问各位大哥,用汇编怎么编写小写转换成大学的程序呢。
我自己编写了一个,程序是这样的:
prognam segment
main proc far
assume cs:prognam
start:
push ds
sub ax,ax
push ax
mov ah,1
int 21h
cmp al,7ah
ja exit
cmp al,7ah
jb p6
cmp al,61h
ja p6
cmp al,61h
jb exit
cmp al,50h
ja exit
cmp al,50h
jb p2
cmp al,41h
ja p2
cmp al,41h
jb exit
p2:mov dl,al
mov ah,2h
int 21h
p6:sub al,20h
mov dl,al
mov ah,2h
int 21h
exit:mov ax,4c00h
int 21h
main endp
prognam ends
end start
这个程序我的思路是这样的,首先要判断输入的字符是不是字母,不是字母的就退出,是的话呢,还要判断是大学的还是小写的,是大写的就直接输出,是小写的就减32,转换成大写的。但我用这个程序得到的结果是,如果我输入小写的字母,会得到预期的结果,转换成了大写,可当我们输入大写字母时,它并没有输出大写字母,是输出其它的字符,当我输入其它的字符时,得到的结果也不是我们预期的,这是为什么,我这个程序的问题出在那里,如果要做到我所说的那样,怎样编写这个程序呢?
搜索更多相关主题的帖子: cmp 小写 exit push prognam 
2006-12-20 23:11
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
得分:0 
......
cmp al,7ah
ja exit
cmp al,7ah
jb p6 ;当你输入的数的ASCII码比小写z小,就直接到p6(当作小写字母)执行,不会再顺序往下执行
......

我是金子,我要闪光的
2006-12-21 14:56
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
得分:0 
[QUOTE]......
cmp al,7ah
ja exit
cmp al,7ah
jb p6
cmp al,61h
ja p6
cmp al,61h
jb exit
cmp al,50h
ja exit
cmp al,50h
jb p2
cmp al,41h
ja p2
cmp al,41h
jb exit
p2:mov dl,al
mov ah,2h
int 21h
p6:sub al,20h
mov dl,al
mov ah,2h
int 21h
......[/QUOTE]
把上面代码用下面的替换

......
MOV AH,2
MOV DL,AL
CMP AL,7AH
JA EXIT
CMP AL,61H
JB P2
SUB DL,20H
P2: CMP DL,41H
JB EXIT
CMP DL,5AH
JA EXIT
INT 21H
......

我是金子,我要闪光的
2006-12-21 15:11
chengxiaobo
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2006-11-15
得分:0 

呵呵,我知道你这个方法比我那个那多了,我当时怎么就没想到这样呢,呵呵,不过我还是有一点不明白,为什么它不会往下执行,如果不往下执行的话呢,那当我输入大写字母或其它的字符时怎么又有那样的结果呢。
我按照你的方法我程序改了一下,是这样的:
prognam segment
main proc far
assume cs:prognam
start:
push ds
sub ax,ax
push ax
exit:mov ah,1
int 21h
MOV AH,2
MOV DL,AL
CMP AL,7AH
JA EXIT
CMP AL,61H
JB P2
SUB DL,20H
P2: CMP DL,41H
JB EXIT
CMP DL,5AH
JA EXIT
INT 21H
main endp
prognam ends
end start
当我做到反汇编时,用g命令执行到INT 21H时,他不会把小写字母转换成大学的,但当你用G命令执行到下一个命令时,它就可以了,这是为什么啊。呵呵。

2006-12-21 19:54
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
得分:0 
第一个    INT 21H是输入,第二个是输出呀

我是金子,我要闪光的
2006-12-21 20:31
chengxiaobo
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2006-11-15
得分:0 

这个我知道的啊,我是用g命令执行了最后一个INT 21H的,得不到我们想要的结果,就像假如那个偏移量是0021,我就这样做g 21再回车,可当我输入a时,没有转换成大写的,可当我这样做时g 24,它就可以了,这是为什么啊,我们要执行的话,不是执行到INT 21H那里吗

2006-12-21 20:43
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
得分:0 
晕啊,你的程序流程都被你改了
我原先发的帖子只让你把该换的换了,结果你却把标号也换位

我是金子,我要闪光的
2006-12-21 21:12
chengxiaobo
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2006-11-15
得分:0 

是啊,难道这样不可以吗,我现在就是想当输入到其它的字符时,我就可以接着再输入字符啊。这样做不行吗
另外问一下,g命令可以连续执行吗,我在做这个的时候,我怎么执行了一次,就不能再执行g 命令了,弄的我要退出来,再进去执行。

2006-12-21 21:15
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
得分:0 
不可以啊我是按照你原程序的流向来改的,你要改也得注意程序的流程啊

我是金子,我要闪光的
2006-12-21 21:18
chengxiaobo
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2006-11-15
得分:0 
为什么不可以啊。那要实现我那个怎么做才可以了呢,还有就是我问你的那个g命令的用法,是怎么用
2006-12-21 21:24



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




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

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