假设我有一个名为 func 的函数:
PROC func:
;Bla bla
ret
ENDP func
Run Code Online (Sandbox Code Playgroud)
现在,假设我使用 register ax,bx例如,为了保存它们的初始值,我将它们推送到函数内部的堆栈中。
现在的问题是:在创建堆栈帧之前推送寄存器之间是否有很大的不同:
PROC func:
push bp
push ax
push bx
mov bp, sp
;Bla bla
ret
ENDP func
Run Code Online (Sandbox Code Playgroud)
还是之后?
PROC func:
push bp
mov bp, sp
push ax
push bx
;Bla bla
ret
ENDP func
Run Code Online (Sandbox Code Playgroud)
我应该在我的程序中使用什么?一种方法比另一种更好或更“正确”吗?因为我目前使用第一种方法。
我一直在研究交换函数,或者最终使用 x86 程序集实现冒泡排序。
我的代码还包括一个函数,该函数稍后为另一个函数重构给定数字(从 - 到 +,反之亦然),我在测试交换函数之前调用了该函数
这是到目前为止的代码:
org 100h
jmp main
numToNeg dw -9
toSwap1 db 'a'
toSwap2 db 'b'
param1 equ 8
swap1 equ 12
swap2 equ 14
main:
push offset numToNeg
call refactor
mov ax, numToNeg
call print_num
PRINTN
PRINTN "Before Swap:"
mov al, toSwap1
Call print_al_chr ;This function prints the given char inside al
mov al, toSwap2
Call print_al_chr
push offset toSwap1
push offset toSwap2
call swap
PRINTN
PRINTN "After Swap:"
mov al, toSwap1
Call print_al_chr …Run Code Online (Sandbox Code Playgroud)