《汇编语言·第三版》--王爽
1 问题
编写一个子程序,将包含任意字符,以0结尾的字符串中的小写字母转变为大写字母,描述如下。
名称:letterc
功能:将以0结尾的字符串中的小写字母转变成大写字母
参数:ds:si指向字符串的首地址
返回:无
应用举例:
1. assume cs:codesg 2. 3. datasg segment 4. db "Beginners's All-purpose Symbolic Instruction Code.",0 5. datasg ends 6. 7. 8. codesg segment 9. start: 10. mov ax, datasg 11. mov ds, ax 12. mov si, 0 13. 14. call letterc 15. 16. r_s: 17. mov ax, 4c00h 18. int 21h 19. 20. letterc: 21. 22. ret 23. codesg ends 24. end start |
注意需要进行转化的是字符串中的小写字母a ~ z,而不是其它字符。
2 letterc代码
1. letterc: 2. mov cx, ds:[si] 3. jcxz r_s ;检测到字符串中的结束标志0 4. 5. cmp byte ptr ds:[si],'a' 6. jb next ;如果当前字符小于'a'则可以检测下一个字符 7. 8. cmp byte ptr ds:[si],'z' 9. ja next ;如果当前字符大于'z'则可检测下一个字符 10. 11. sub byte ptr ds:[si],32 ;如果当前字符处于['a', 'z']之间,则将其转变为对应的大写字符 12. 13. next: 14. inc si 15. loop letterc 16. 17. ret |