我们在子程序中使用的寄存器,很可能在主程序中也要使用,造成了寄存器使用上的冲突。解决的方法是,在子程序的开始将子程序中所有用到的寄存器中的内容都保存起来,在子程序返回前再恢复。可以用栈来保存寄存器中的内容。
以后,我们编写子程序的标准框架如下:
子程序开始:
子程序中使用的寄存器入栈
子程序内容
子程序中使用的寄存器出栈
返回(ret、retf)
示例:设计一个子程序,功能:将一个全是字母,以0结尾的字符串,转化成大写。
assume cs:code data segment db ‘word‘,0 db ‘unix‘,0 db ‘wind‘,0 db ‘good‘,0 data ends code segment start: mov ax,data mov ds,ax mov bx,0 mov cx,4s: mov si,bx call capital add bx,5 loop s mov ax,4c00h int 21h capital: push cx push sichange: mov cl,[si] mov ch,0 jcxz ok and byte ptr [si],11011111b inc si jmp short change ok: pop si pop cx ret code ends end start
原文地址:https://www.cnblogs.com/gkp307/p/9928503.html
时间: 2024-10-05 05:04:48