2016-10-16 1 views
0

в моей программе. Я пытаюсь поменять местами между двумя ссылочными значениями, но, похоже, у меня возникла проблема в разыменовании первого параметра из стека без использования регистра SI.Сборка 8086: замена значений значений по ссылке

Может ли кто-нибудь помочь мне? Извините за 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

Что вы сделали, просто загрузили два значения, вы забыли записать их обратно в память. Не знаете, в чем проблема с 'si'. – Jester

+0

@jester В настоящее время моя проблема заключается в разыменовании значения второго параметра, что я делаю неправильно? –

+0

Насколько я могу судить, код хорош, за исключением отсутствующих скобок вокруг '[bp + 4]'. Что вам нужно, это записать результат, который был заменен, то есть вы отсутствуете 'mov [si], dx; mov [bx], ax'. – Jester

ответ

0

После call swap вам нужно каким-то образом выйти на операционную систему, или же процессор переходит к переоформить вашу функцию подкачки, с катастрофическими результатами.

Предполагая, что модель памяти 16-разрядную, и предполагая, что вы хотите поменять это байт, (судя по db 'a' и db 'b'), что вы хотите сделать внутри swap функции что-то вроде этого:

mov si,[bp+4] 
mov di,[bp+6] 
mov al,[si] 
mov ah,[di] 
mov [si],ah 
mov [di],al 

Для справок в будущем: «похоже, что у меня проблема» не является адекватным описанием проблемы. Попробуйте объяснить a) именно то, что вы ожидали увидеть, и б) именно то, что происходит вместо этого.

+0

Извините, но ваше решение, похоже, не работает, –

+0

И благодаря комментарию, отредактированному. –

+0

Ну, я написал «что-то вроде этого». Возможно, вам придется немного подкорректировать его. Например, вы предполагаете, что ваши параметры находятся на bp + 4 и bp + 6, поэтому я использую одни и те же смещения, я не помню, с какими-то правильными смещениями. Но в любом случае это не волшебство, вы должны понимать, как это работает. Я даю вам правильное направление для продолжения. –

 Смежные вопросы

  • Нет связанных вопросов^_^