简介 :
设计一个子程序 , 功能 :
将一个全是字母 , 以 0 结尾的字符串 , 转化为大写
分析 :
如果我们实现不知道字符串的长度 , 那么我们应该如何去将一个小写单词转成大写呢 ?
可以很容易就想到 , 我们一般是使用 00000000B 来标示一个字符串的结尾
那么我们只需要在转换的时候对字符进行判断 , 如果这个字符为 0 了 , 那么就说明这个字符串已经结束
就停止转换
代码 :
assume cs:code,ds:data,ss:stack
data segment
db "Freedom",0
data ends
stack segment
db 16 dup(0)
stack ends
code segment
start:
; 初始化数据段寄存器
mov ax, data
mov ds, ax
; 初始化栈段寄存器
mov ax, stack
mov ss, ax
; 初始化栈偏移地址寄存器
mov sp, 00A0H
; 初始化指向字符的寄存器
mov si, 0
call string_upper
; 结束程序
jmp finish
; 功能 : 将一个小写的英文单词的所有字符转换为大写
; 参数 : si 为该字符串首个字符在内存中数据段的偏移地址
; 返回 : None
string_upper:
each_char:
mov ch, 00H
mov cl, ds:[si]
jcxz success ; 当 cx 为 0 , 则说明遇到了 0 的字符 , 这个字符串也就结束了
call char_upper
mov ds:[si], cl ; 将大写字符再存回去
inc si
jmp each_char
success:
ret
; 功能 : 将一个小写英文字符转换为大写字符
; 参数 : cl
; 返回 : cl
char_upper:
and cl, 11011111B ; 转大写
ret
finish:
mov ax,4cH
int 21H
code ends
end start