汇编语言十一

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

 

posted @ 2018-11-25 16:47  driveby  阅读(217)  评论(0编辑  收藏  举报