1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
| ;编写一个子程序,将包含任意字符,以0结尾的字符串的小写字母转变为大写字母,并将其显示在屏幕中间
;名称:letterc ;功能:将以0结尾的字符串中的小写字母转变为大写字母 ;参数:ds:si指向字符串首地址
assume cs:codesg
datasg segment
db "Beginner's All-purpose Symbolic Instruction Code.",0
datasg ends
stack segment stack
db 128 dup (0)
stack ends
codesg segment
begin: mov ax,stack mov ss,ax mov sp,128
call init_reg call init_show call init_let mov si,160*11 + 20*2 call init_show
mov ax,4c00h int 21h
;思路:遍历字符串,如果小于ASCII表中的值,就and转变为大写字母。通过jcxz判断0结束循环 ;ASCII表中小写字母的值大于大写字母的值,其中a为61H
init_let: push di push ds push cx
letterc: mov cx,ds:[di] jcxz ok cmp byte ptr ds:[di],61H jnb change inc di jmp short letterc change: and byte ptr ds:[di],11011111b inc di jmp short letterc
ok: pop cx pop ds pop di ret
;=========================================== ;将字符串显示在屏幕中间 init_show: push si push di push dx push es push ds
show_str: mov dl,ds:[di] cmp dl,0 je show_Ret mov es:[si],dl add si,2 inc di jmp show_str
show_Ret: pop ds pop es pop dx pop di pop si ret ;===========================================
init_reg: mov ax,datasg mov ds,ax
mov bx,0B800H mov es,bx
mov di,0 mov si,160*10 + 20*2 mov cx,0 ret
codesg ends
end begin
|