7.2.2 子程序的举例
优质
小牛编辑
136浏览
2023-12-01
例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 |