作者wil771126 (雨的印記)
看板ASM
標題[問題] 用MASM存取高階語言傳進去的陣列
時間Sat Jun 19 22:27:34 2010
為了某些程式的需求
想要先寫一些測式的做法 可是也失敗了
我想用MASM寫一段procedure 去存取由C++傳進去的陣列
C++ part:
extern "C" int getFirst(int *arr)
void main()
{
int *a = new int[5]
for(int i=0;i<5;i++)
{
a[i] = i;
}
int b = getFirst(a);
cout << b;
}
MASM part:
.code
_getFirst proc near
push ebp
mov ebp, esp
mov eax, [ebp]
pop ebp
ret
_getFirst endp
我該怎樣才可以用MASM 去做這個procedure呢
該從高階改還是低階改
還有 關於暫存器的用法 有什麼 使用原則(像EBP ESP等)
也跟大家請教一下 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.22.18.78
1F:→ wil771126:補充 [ebp] 後面加上 +8 +12 也不是我要的 06/19 22:31
※ 編輯: wil771126 來自: 163.22.18.78 (06/19 22:38)
2F:→ wil771126:我發現式用 [eax+8] 來取 規則是什麼@@ 06/20 02:17
3F:推 loveflames:[eax+8]?你是存取a[2]對吧 06/20 02:48
4F:推 loveflames:mov eax, [ebp]這行有點奇怪,你拿舊ebp的值要做什麼? 06/20 02:51
5F:→ wil771126:如果是傳一個整數 要用esp (傳給ebp) 當address去取得 06/20 22:21
6F:→ wil771126:eax+8 是a[0]沒錯 好像傳進去都從+8開始的 06/20 22:21
7F:推 loveflames:那你得把環境敘述的更詳細,最好還要截圖 06/21 03:56
8F:推 loveflames:因為這不合一般的規則,a已經推進getFirst的堆疊裡 06/21 03:57
9F:推 loveflames:就應該用getFirst的ebp來取 06/21 03:58