本实验考察知识点
-
有条件转移的意识,以及用法
- 与0比较,是否相等
- 区间的判断,如[61h,7Ah]
-
小写转大写(AND用法,是老知识点)
思路:
-
读取源字符串
-
处理
- 筛选出哪些字符是小写
- 小写转大写
- 循环处理(在不知字符串元素个数的情况下,有2种方式:1.计算出个数;2.条件判断)
-
写入目标位置
代码1:
;一、mov配合jcxz
assume ds:data,cs:code
data segment
db 'Hello Assembly!',0
db '----------------'
data ends
code segment
start: mov ax,data
mov ds,ax
mov si,0
mov es,ax
mov di,16
call letterc
mov ax,4c00h
int 21h
;程序名:letterc
;功能:将任意长度的字符串中的小写字母转为大写(不对符号进行处理)
;参数:ds:si指向源字符串,es:di指向目标字符串
;返回结果:无
letterc: push si
push di
push cx
mov cx,0;初始化
s: mov cl,[si]
jcxz program_end
;限定仅小写字母的ASCII范围内
cmp cl,61h
jb next
cmp cl,7Ah
ja next
;执行 小写转大写 的动作
and cl,11011111b
;不论是否是小写,对目标字符串都要执行next动作
next: mov es:[di],cl;此处有2种情况:cl被修改过 或 cl未被修改过。 都要复制到目标位置
inc si
inc di
jmp short s
program_end:mov es:[di],cl;末尾0复制到目标处
pop cx
pop di
pop si
ret
code ends
end start
代码2:
;二、mov配合je
assume ds:data,cs:code
data segment
db 'Hello Assemaly!';15个字符
db 0;末尾0
db '----------------';16个字符
data ends
code segment
start: mov ax,data
mov ds,ax
mov si,0
mov es,ax
mov di,16
call letterc
mov ax,4c00h
int 21h
;程序名:letterc
;功能:将任意长度的字符串中的小写字母转为大写(不对符号进行处理)
;参数:ds:si指向源字符串,es:di指向目标字符串
;返回结果:无
letterc:
push si
push di
push ax
s: mov al,[si]
cmp al,0
je program_end
;限定仅小写字母的ASCII范围内
cmp al,61h
jb next
cmp al,7Ah
ja next
;执行 小写转大写 的动作
and al,11011111b
;不论是否是小写,对目标字符串都要执行next动作
next: mov es:[di],al
inc si
inc di
jmp short s
program_end:mov es:[di],cl;末尾0复制到目标处
pop ax
pop di
pop si
ret
code ends
end start