2014-03-01 46 views
2

我正在嘗試創建用戶級線程庫。我有一個叫做 void switch_thread(tcb* currSp,tcb* newSp)的函數,它在C中實現。tcb* currSp,tcb* newSp是當前線程和新線程的棧指針。應該在x86彙編中實現switch_thread函數。 我的問題是如何將堆棧指針當前線程更改爲x86程序集中的新線程。如何將當前線程的堆棧指針更改爲x86彙編中的新線程

.text 
    .global switch_thread 
    switch_thread: 
     mov 0x4(%esp), %eax #current thread 
     mov 0x8(%esp), %ecx #new thread 
      //no idea how to implement rest of it. 
+3

修改esp很簡單。這是一切困難的事情。你想幫助修改esp嗎?看起來你已經知道如何做到這一點。或者你想要一切幫助嗎? –

+0

給我一個關於其餘實施的任何暗示。 – GPrathap

+0

這不是如何在這裏工作。 SO是針對特定問題的。 –

回答

3

<ucontext.h>的功能做的正是這一點,setcontext()是你特別想要的東西。該功能在GLIBC中實施,the source file for it可以在互聯網上的各個地方找到。

隨便看看程序集,它基本上恢復浮點上下文,然後恢復所有其他寄存器。