看了很多同学的实验, 谈谈我的解法。
;-------------------------------------------------------------------------------------
1 assume cs:code
2 data segment
3 db 'There are some string{[!~>_<~!]}',0
4 data ends
5 code segment
6 start:
7 mov ax,data
8 mov ds,ax ;指定数据段
9 mov si,0 ;DS:SI指向首地址
10 call letterc ;转换
11 call show ;显示
12 mov ah,4ch
13 int 21h
14 letterc:
15 push ax ;保护子程序用到的寄存器
16 push si ;
17 s: mov al,[si] ;将字符装入al中
18 cmp al,0 ;如果没有字符
19 jz ok ;则结束转换
20 cmp al,'a' ;如果al<a
21 jb s1 ;则跳至s1处
22 cmp al,'z' ;如果al>z
23 ja s1 ;则跳至s1处
24 and al,11011111b ;现在:z≤al≥a
25 mov [si],al ;转换
26 s1: inc si ;指向下一个字符
27 jmp s ;跳转s处,继续下一轮循环
28 ok: pop si ;转换结束
29 pop ax ;恢复寄存器
30 ret ;返回调用
31 show: ;不做解释啦
32 push si
33 push ax
34 push dx
35 sh: mov dl,[si]
36 cmp dl,0
37 jz done
38 mov ah,2
39 int 21h
40 inc si
41 jmp sh
42 done: pop dx
43 pop ax
44 pop si
45 ret
46 code ends
47 end start
;------------------------------------------------------------------------------------- |