汇编语言(王爽 第三版)实验11 编写子程序
(2017-04-10 15:09:26)
标签:
汇编王爽it教育 |
分类: 汇编语言(王爽第三版)实验 |
实验11
编写子程序
名称:letterc
功能:将以0结尾的字符串中的小写字母转变成大写字母
参数:ds:si指向字符串首地址
应用举例:
assume cs:codesg
datasg segment
db "Beginner's All-purpose Symbolic Instruction Code.",0 datasg ends
codesg segment
begin:
mov ax, datasg
mov ds, ax
mov si, 0
call letterc
mov ax, 4c00H
int 21H letterc:
????????
???????? codesg ends
end begin
程序分析:
1.在数据段定义了一个字符串,注意这个字符串不光是有大小写字符,还有其他字符,并以0结尾。(在C语言中字符串的存储也是按照0字符来结尾的,以前我们介绍了,这个是方便判断字符串是否到结尾处。)
老样子,在子程序中,首先将子程序预计使用到的变量入栈保存。ax和si吧。
2.判断是否是结尾?也就是遇到0.
3. 判断字符串中的字符是否是小写字母?因为小写字母‘a’~‘z’是连续的ASCII码
4.如果是小写字母使用and指令转换成大写的。
5.这个子程序只是将该字符串的小写字母转换成了大写字母,但是调用它后没有任何的显示结果的,因为它只是个单纯的转换。
6.怎样测试结果?我们原来应该设计过显示字符串的子程序,可以使用把它显示在屏幕上;也可以使用debug来查看。这需要修改下这个子程序。
汇编代码如下:
assume cs:codesg
datasg
segment
datasg ends
codesg segment
begin:
letterc:
codesg ends
end begin
注:这个程序是不能测试结果的。
修改后的代码如下(红色的是新增代码):
assume cs:codesg
datasg
segment
db "Beginner's All-purpose Symbolic Instruction Code.",0 ;注意0结尾
datasg ends
codesg segment
begin:
letterc:
codesg ends
end begin
编译并连接后,在debug中的实验结果如下:
-d ds:0
0B66:0000
0B66:0010
0B66:0020
0B66:0030
0B66:0040
0B66:0050
0B66:0060
注意红色标注的是字符串的“.”和“0”