編寫一個子程序,將包含任意字符,以0結尾的字符串中的小寫字母轉變爲大寫字母,描述如下:
名稱:letterc
功能:將以0結尾的字符串中的小寫字母轉變爲大寫字母
參數:di:si指向字符串首地址
整體思路:
1.設置好指向字符串的指針
2.call進入子程序
3.結束
子程序思路:
1.將字符放置在一個字節型寄存器中,例如bl
2.cmp判斷當前字符是否爲0,如果爲0,則跳轉到退出子程序的指令處
3.cmp判斷當前字符是否在【97,122】範圍內,如果不在,那麼處理下一個字符
4.退出子程序的指令ret
注意:
1.由於題目要求轉化的是字符串的小寫字母,而不是其他字符(標點符號不能轉化),因此要限定字符的ASCII範圍
2.爲了便於書寫,將內存數據放在字節型寄存器中,自動匹配需要取得的內存長度
3.因爲不考慮字符串長度,不適用cx和loop指令,而是使用類似do-while的編程思想,即,直接使用jmp指令
DATAS SEGMENT
db "Beginner's All-purpose Symbolic Instruction Code.",0
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
mov ax,datas
mov ds,ax
mov si,0 ;設置指針指向字符串首個字符
call s1
;此處輸入代碼段代碼
MOV AH,4CH
INT 21H
s1: mov bl,[si]
cmp bl,0
je s0
cmp bl,97
jb s2
cmp bl,122
ja s2
and bl,11011111B
mov [si],bl
s2: inc si
mov ax,offset s1
jmp ax
s0: ret
CODES ENDS
END START