码迷,mamicode.com
首页 > 其他好文 > 详细

寄存器冲突的问题

时间:2018-11-08 13:46:09      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:pop   sum   div   返回   有用   子程序   框架   and   tar   

我们在子程序中使用的寄存器,很可能在主程序中也要使用,造成了寄存器使用上的冲突。解决的方法是,在子程序的开始将子程序中所有用到的寄存器中的内容都保存起来,在子程序返回前再恢复。可以用栈来保存寄存器中的内容。

以后,我们编写子程序的标准框架如下:

子程序开始:

      子程序中使用的寄存器入栈

      子程序内容

      子程序中使用的寄存器出栈

      返回(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

 

寄存器冲突的问题

标签:pop   sum   div   返回   有用   子程序   框架   and   tar   

原文地址:https://www.cnblogs.com/gkp307/p/9928503.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!