2009-11-08 73 views
0

我被這個問題困住了。我正在自學學習和翻譯一些基本的指導。但我不能用這個。彙編程序中的簡單遞增

任何人都可以幫助我嗎?

int 
secuencia (int n, EXPRESION * * o) 
{ 
    int a, i; 
    for (i = 0; i < n; i++){ 

    a = evaluarExpresion(*o); 

    // Im trying to do this: o++; 
    __asm { 
     mov eax,dword ptr [o] 
     mov ecx,dword ptr [eax] 
     inc [ecx] 
    } 
    } 
    return a ; 
} 

我寫的裏面並工作,但仍然不知道如何增加Ø

int 
secuencia (int n, EXPRESION * * o) 
{ 
    int a, i; 
    for (i = 0; i < n; i++){ 

     __asm { 

      mov eax,dword ptr [o] 
      mov ecx,dword ptr [eax] 
     push ebp 
      mov ebp, esp 
      push ecx 

      call evaluarExpresion 
     mov esp, ebp 

     pop ebp 

     mov a, eax 
     } 

    o++; 
    } 
    return a ; 
} 
+0

錯誤的輸出或錯誤? – GManNickG 2009-11-08 05:35:23

+0

控制檯不會執行任何操作(空白)。當我將所有__asm {...}更改爲o ++時,它都可以工作! – Sheldon 2009-11-08 05:45:20

回答

1
​​

Line1:我們將您的指針移動到esi寄存器。 線路2:我們增加你的O指針

mov eax, o 
mov esi, [eax] 
add esi, 4 

我不完全理解你正在嘗試做的,但我希望它幫助!

+0

嗨TOTO, 我嘗試: \t \t \t呼叫evaluarExpresion \t \t MOV ESI,[O] \t \t加ESI,4 //增量是這裏 \t \t \t \t MOV ESP,EBP 但不起作用。或者我需要把它放在另一個地方? – Sheldon 2009-11-08 06:29:55

+0

當然!不要使用INC,指針是4字節(在32位彙編語言中...) – Artelius 2009-11-08 06:31:47

+0

嗨託託,並再次感謝。 我需要做的是在彙編程序中,替換o ++指令。 我需要一個指向o的指針,並修改該指針內的指令以添加4(因此它可以傳遞到下一個元素)。我嘗試了你的兩條建議,但不起作用。更奇怪的是,只是把o ++留在asm之外(當然是C)就行了。所以它一定是一個翻譯問題。我不知道我是否解釋自己。非常感謝您的幫助。 – Sheldon 2009-11-08 06:44:37

1

有兩種選擇:

或者:

  • 舉動將o的值從內存中寫入一個寄存器(例如eax)
  • 增量寄存器
  • 移動從寄存器中的值返回到存儲器

  • 增量存儲在存儲器中的值直接

嘗試使用這兩種方法。

+0

我想給一些代碼,但我從來沒有使用過MASM語法(或者你使用的是什麼)。 – Artelius 2009-11-08 05:42:45

+0

嗨Artelius,我知道我需要做第二個,但我真的不知道如何。我正在工作幾個小時......但沒有什麼,你能請代碼解釋我嗎?我也嘗試與lea eax,o但不起作用。 謝謝 – Sheldon 2009-11-08 05:42:56

+0

嘗試'inc dword ptr o'或'inc dword ptr [o]'。如果這樣做成功了,不錯,但是我建議您練習時也嘗試將'o'移入寄存器,遞增寄存器並將寄存器再次移入內存。 – Artelius 2009-11-08 05:46:43