[编程语言][汇编语言]另类的函数调用

在汇编语言中,在主调函数中使用call指令,并且在被调函数中使用ret,这样就实现了函数调用这个过程。本文想展示一个另类的函数调用。下文中的示例代码1为我们通常使用的函数调用,示例代码2为另类的函数调用。

示例代码1如下:


    .equ BOOT_SEG, 0x07C0

    .code16

    .section .text
    .global _start
_start:
    jmp $BOOT_SEG, $main
main:
    mov %cs, %ax
    mov %ax, %ds
    mov %ax, %ss

    mov $0x1, %ax
    mov $0x2, %bx
    call add

    hlt

add:
    push %bp
    mov %sp, %bp
    push %bx
    push %cx
    push %dx
    jmp save_registers

    add %bx, %ax

    pop %dx
    pop %cx
    pop %bx
    mov %bp, %sp
    pop %bp
    ret

    .org 510
    .word 0xAA55

示例代码2如下:


    .equ BOOT_SEG, 0x07C0

    .code16

    .section .text
    .global _start
_start:
    jmp $BOOT_SEG, $main
main:
    mov %cs, %ax
    mov %ax, %ds
    mov %ax, %ss

    mov $0x1, %ax
    mov $0x2, %bx
    call add

    hlt

save_registers:
    push $1f
    push %bp
    mov %sp, %bp
    push %bx
    push %cx
    push %dx

    jmp *4(%bp)

1:  pop %dx
    pop %cx
    pop %bx
    mov %bp, %sp
    pop %bp
    jmp *6(%bp)

add:
    push $1f
    jmp save_registers
1:  add %bx, %ax

    jmp *2(%bp)

    .org 510
    .word 0xAA55
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值