程序集8086:按引用交换参数值

时间:2016-10-16 22:48:30

标签: assembly stack pass-by-reference x86-16

在我的程序中我试图在2个引用值之间进行交换,但似乎我在从堆栈中取消引用第一个参数而不使用SI寄存器时遇到了问题。

可以请别人帮帮我吗?抱歉misknowladge,我只是一个新手。

jmp main

toSwap1     db 'a'
toSwap2     db 'b'

main:  


lea si,toSwap1
push si
lea si,toSwap2
push si
call swap

 mov ah,0
int 16
ret




swap proc
push bp                 
mov bp,sp

mov si,bp+4   ;second param address
mov ax,[si]   ;second param value


mov bx,[bp+6]   ;address of firstparam
mov dx,ds:[bx]   ;first param value


mov sp,bp 
pop bp    


retn 4 ;takes 2 parameters

swap endp

1 个答案:

答案 0 :(得分:0)

call swap之后你需要以某种方式退出到操作系统,否则CPU将继续重新执行你的交换功能,带来灾难性的结果。

假设一个16位内存模型,并假设你要交换的是 bytes ,(由db 'a'和{{1}判断你想在db 'b'函数中做什么是这样的:

swap

供将来参考:"好像我有问题"不是对问题的充分描述。尝试解释a)准确地说你期望发生什么,以及b)恰恰发生了什么。