8086汇编(28)寄存器冲突的问题
2019-04-04 本文已影响0人
迷心迷
寄存器冲突的问题
我们在子程序中使用的寄存器,很可能在主程序中也要使用,造成了寄存器使用上的冲突。解决的方法是,在子程序的开始将子程序中所有用到的寄存器中的内容都保存起来,在子程序返回前再恢复。可以用栈来保存寄存器中的内容。
以后,我们编写子程序的标准框架如下:
子程序开始:
子程序中使用的寄存器入栈
子程序内容
子程序中使用的寄存器出栈
返回(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,4
s:
mov si,bx
call capital
add bx,5
loop s
mov ax,4c00h
int 21h
capital:
push cx
push si
change:
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