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