将小写字符转换为大写字符,实现逻辑在代码中已经备注
assume cs:code,ds:data,ss:stack
data segment
db 'Beginners All-purpose Symbolic Instruction COde.',0
data ends
stack segment
db 128 dup(0)
stack ends
code segment
start:
;初始化程序
mov ax,stack
mov ss,ax
mov sp,128
call init_reg
call clear_screen
call show_str
call letterc
mov ax,0b800h
mov es,ax
mov di,160*11+2*8
call show_str
mov ax,4c00h
int 21h
;=================================
;名称:letterc
;功能:将以0结尾的字符串中的小写字母转变成大写字母
;参数:ds:si 指向字符串首地址
;应用举例:将A-->a,B-->b ...
;判断逻辑:读取一个字符并判断该字符是否大于等于'a',再判断是否小于等于'z',如果等0,直接返回。
;大于等于简单实现逻辑是:jb 小于等于实现:ja
;=================================
letterc:
push dx
push si
push di
upLetter:
mov dl,ds:[si]
cmp dl,0
je upLetterRet
cmp dl,'a'
jb nextLetter
cmp dl,'z'
ja nextLetter
and dl,11011111B
mov byte ptr [si],dl
nextLetter:
inc si
jmp short upLetter
upLetterRet:
pop di
pop si
pop dx
ret
;===================================================
;名称:init_reg
;功能:参数初始化
;参数:ds=data; si=0,
; es:0b800h,di=0
;应用举例:
;===================================================
init_reg:
mov ax,data
mov ds,ax
mov si,0
mov ax,0b800h
mov es,ax
mov di,160*10+2*8
ret
;===================================================
;名称:clear_screen
;功能:清空屏幕
;参数:es=0b800h
;应用举例:
;===================================================
clear_screen:
mov cx,2000
mov dx,0700h
mov bx,0
clearScreen:
mov es:[bx],dx
add bx,2
loop clearScreen
ret
;===================================================
;名称:init_reg
;功能:参数初始化
;参数:ds=data; si=0
; es:0b800h, di=0
;应用举例:
;===================================================
show_str:
push si
push di
push cx
mov cx,0
s0:
mov cl,ds:[si]
jcxz s1
mov byte ptr es:[di+0],cl
mov byte ptr es:[di+1],01000010B
inc si
add di,2
jmp short s0
s1:
pop cx
pop di
pop si
ret
code ends
end start