注册 登录
编程论坛 汇编论坛

小写怎么转换成大写

chengxiaobo 发布于 2006-12-20 23:11, 3140 次点击
请问各位大哥,用汇编怎么编写小写转换成大学的程序呢。
我自己编写了一个,程序是这样的:
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,转换成大写的。但我用这个程序得到的结果是,如果我输入小写的字母,会得到预期的结果,转换成了大写,可当我们输入大写字母时,它并没有输出大写字母,是输出其它的字符,当我输入其它的字符时,得到的结果也不是我们预期的,这是为什么,我这个程序的问题出在那里,如果要做到我所说的那样,怎样编写这个程序呢?
12 回复
#2
lefttime2006-12-21 14:56
......
cmp al,7ah
ja exit
cmp al,7ah
jb p6 ;当你输入的数的ASCII码比小写z小,就直接到p6(当作小写字母)执行,不会再顺序往下执行
......
#3
lefttime2006-12-21 15:11
[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
......
#4
chengxiaobo2006-12-21 19:54

呵呵,我知道你这个方法比我那个那多了,我当时怎么就没想到这样呢,呵呵,不过我还是有一点不明白,为什么它不会往下执行,如果不往下执行的话呢,那当我输入大写字母或其它的字符时怎么又有那样的结果呢。
我按照你的方法我程序改了一下,是这样的:
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命令执行到下一个命令时,它就可以了,这是为什么啊。呵呵。

#5
lefttime2006-12-21 20:31
第一个    INT 21H是输入,第二个是输出呀
#6
chengxiaobo2006-12-21 20:43

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

#7
lefttime2006-12-21 21:12
晕啊,你的程序流程都被你改了
我原先发的帖子只让你把该换的换了,结果你却把标号也换位
#8
chengxiaobo2006-12-21 21:15

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

#9
lefttime2006-12-21 21:18
不可以啊我是按照你原程序的流向来改的,你要改也得注意程序的流程啊
#10
chengxiaobo2006-12-21 21:24
为什么不可以啊。那要实现我那个怎么做才可以了呢,还有就是我问你的那个g命令的用法,是怎么用
#11
曾小2006-12-24 13:21
g [起始地址][断点]

它就是一 个断点执行的debug 的命令

我们一般是将断点设在程序的最后一个指令
#12
chengxiaobo2006-12-24 13:23
这个我知道一点,可好像我看到有的书上,它的g命令可以连续执行啊,为什么我们的就不可以了呢
#13
曾小2006-12-24 13:31
t命令可以
g我就不知道了
1