跳转至

11.函数

上一节我们用loop循环实现了计算\(2^{12}\),这次我们来将其封装为一个函数

assume cs:codesg

codesg segment

    mov ax,2
    mov cx,11

    call s
    int 21H

    s:
        add ax,ax
        loop s
        ret

codesg ends

end

其中call和ret都是转移指令,通过call转移到指定位置,ret再返回到call的下一行

本质上call是将下一行代码的地址入栈,ret则是出栈

call只能进行近距离转移(只记录偏移量),如果要转移到远处的代码段,则需要写成call far ptr(记录段地址+偏移量)

ret的远程转移为retf