彙編語言十一

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
相關文章
相關標籤/搜索