call-综合练习2

Tutorial: 汇编基础 Category: C语言 Published: 2026-04-07 13:58:26 Views: 20 Likes: 0 Comments: 0
1. 小写转大写
assume cs:code,ds:data,ss:stack
; 题目:小写转大写

data segment
           db 'word',0
           db 'unix',0
           db 'wind',0
           db 'good',0
data ends

stack segment stack
            db 128 dup(0)
stack ends

code segment
      start:
                       mov  ax, stack
                       mov  ss,ax
                       mov  sp,128

                       call init_reg
                       call clean_screen
                       call up_letter

      testA:
                       mov  ax,1000H
                       jmp  testA

                       mov  ax,4c00h
                       int  21h
      ;================================
      up_letter:
                       mov  si,0
                       mov  di,160*10 + 40*2
                       mov  cx,4
      upLetter:
                       call show_string
                       call capital_letter
                       call show_word
                       add  di,160
                       add  si,5
                       loop upLetter
                       ret
      ;================================
      show_word:
                       push di
                       add  di,10*2
                       call show_string
                       pop  di
                       ret
      ;================================
      capital_letter:
                       push cx
                       push ds
                       push si
                       mov  cx,0

      capitalLetter:
                       mov  cl, ds:[si]
                       jcxz capitalLetterRet
                       and  byte ptr ds:[si], 11011111B
                       inc  si
                       jmp  capitalLetter

      capitalLetterRet:
                       pop  si
                       pop  ds
                       pop  cx
                       ret
      ;================================
      show_string:
                       push cx
                       push ds
                       push es
                       push si
                       push di
                       mov  cx,0
      showString:
                       mov  cl,ds:[si]
                       jcxz showStringRet
                       mov  es:[di], cl
                       add  di,2
                       inc  si
                       jmp  showString
      showStringRet:
                       pop  di
                       pop  si
                       pop  es
                       pop  ds
                       pop  cx
                       ret
      ;================================
      clean_screen:
                       mov  bx,0
                       mov  dx,0700H
                       mov  cx,2000

      clearScreen:
                       mov  es:[bx],dx
                       add  bx,2
                       loop clearScreen
      ;================================
      init_reg:
                       mov  bx,data
                       mov  ds,bx
                       mov  bx,0B800H
                       mov  es,bx
                       ret

code ends
end start
Prev: call-综合练习1 Next: mul