例7.1 编写一个子程序UPPER,实现把寄存器AL中存放的字符变大写。
| 解: | ||||
| ;子程序功能:把AL中存放的字符变大写 | ||||
| ;入口参数:AL | ||||
| ;出口参数:AL | ||||
| ;算法描述:判断AL中字符必须在'a'~'z'之间才能把该字符变为大写 | ||||
| UPPER | PROC | |||
| CMP | AL, 'a' | ;书写'a'的ASCII码61H也可以 | ||
| JB | over | |||
| CMP | AL, 'z' | |||
| JA | over | |||
| SUB | AL, 20H | ;书写指令AND AL, 0DFH也可以 | ||
| over: | RET | |||
| UPPER | ENDP | |||
例7.2 编写一个求字符串长度的子程序StrLen,该字符串以0为结束标志,其首地址存放在DS:DX,其长度保存在CX中返回。
| 解: | ||||
| ;子程序功能:求字符串的长度 | ||||
| ;入口参数:DS:DX存放字符串的首地址,该字符串以0为结束标志 | ||||
| ;出口参数:CX存放该字符串的长度 | ||||
| ;算法描述:用BX来指针来扫描字符串中的字符,如果遇到其结束标志,则停止扫描字符串操作 | ||||
| StrLen | PROC | |||
| PUSH | AX | |||
| PUSH | BX | ;用堆栈来保存子程序所用到的寄存器内容 | ||
| XOR | CX, CX | |||
| XOR | AL, AL | |||
| MOV | BX, DX | |||
| again: | CMP | [BX], AL | ||
| JZ | over | |||
| INC | CX | ;增加字符串的长度 | ||
| INC | BX | ;访问字符串的指针向后移 | ||
| JMP | again | |||
| over: | POP | BX | ;恢复在子程序开始时所保存的寄存器内容 | |
| POP | AX | |||
| RET | ||||
| StrLen | ENDP | |||