assume cs:code
data segment
db "Beginner's All-purpose Symblic Instruction Code.",0
data ends
code segment
start:
mov ax,data
mov ds,ax ;ds 段寄存器中存放要操作的源数据的段地址
mov si,0 ;初始偏移地址为 0
call letterc ;调用子程序
mov ah,4ch
int 21h
letterc: ;子程序开始执行前 ds:si 指向字符串的入口地址
push cx
push si ;子程序执行前照常进行寄存器的保护工作
lnext:
sub ch,ch ;ch 寄存器置零, 以备 loop 指令使用
mov cl,[si] ;将字符串第一个字符放进 cl 寄存器, 8bit
jcxz lret ;如果还没到最后一个 0 的话, 则继续执行下一个指令, 一旦将字符串的最后一个 0 移入 cl 后, cx 寄存器为零, 程序跳转到 lret 标号处执行
cmp cl,'a' ;比较指令
jb plusi
cmp cl,'z'
ja plusi
and byte ptr [si],11011111b ;前面执行了两次 cmp 指令, 只有当ds:si指向的字符为小写字母时, 才将其转变为大写字母
plusi:
inc si
jmp short lnext
lret:
pop si
pop cx
ret
code ends
end start