在我的程序中我试图在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
答案 0 :(得分:0)
在call swap
之后你需要以某种方式退出到操作系统,否则CPU将继续重新执行你的交换功能,带来灾难性的结果。
假设一个16位内存模型,并假设你要交换的是 bytes ,(由db 'a'
和{{1}判断你想在db 'b'
函数中做什么是这样的:
swap
供将来参考:"好像我有问题"不是对问题的充分描述。尝试解释a)准确地说你期望发生什么,以及b)恰恰发生了什么。