線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1589
推到 Plurk!
推到 Facebook!

inline assembly 存取 structure member 的寫法

缺席
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-10 09:43:25 IP:61.224.xxx.xxx 未訂閱
問題:inline assembly 存取 structure member 的寫法    如題,以下只是簡單對暫存器直接存取(不會 work 的)
typedef struct{
  DWORD A;
  DWORD B;
  DWORD C;
  DWORD D;
} MyRegs;
  
MyRegs __fastcall TestingPutSomeRegToStructure(MyRegs Input)
{
  MyRegs Output;
  asm{
    mov eax, Input.A
    mov ebx, Input.B
    mov ecx, Input.C
    mov edx, Input.D
    mov Output.A, eax
    mov Output.B, ebx
    mov Output.C, ecx
    mov Output.D, edx
  };
  return Output;
}
我知道,可以直接使用 _EAX, _EBX 這些來直接存取暫存器,所以,以下的可以用的 code
typedef struct{
  DWORD A;
  DWORD B;
  DWORD C;
  DWORD D;
} MyRegs;
  
MyRegs __fastcall TestingPutSomeRegToStructure(MyRegs Input)
{
  MyRegs Output;
  _EAX=Input.A;
  Output.A=_EAX;
  return Output;
}
但我想知道如何在 inline assembly 中,直接將資料寫入 struct 的寫法。 在 google 找到一些,但測試後都是不能用的... VC 的 inline assembly 與 BCB 的不知道是否也有不同? 想要寫 inline assembly 主要是想評估自己寫出 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30185 的可行性... 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-12 09:33:27 IP:211.23.xxx.xxx 未訂閱
BCB是呼叫TASM VC <--- unknow    但是標準的MASM是可以使用struct的 ^^~ 以小弟的慣用法, 就是學C的陣列 取得第一個指標後, 然後自己去算offset  不知道那位大大有更好的方法
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-12 16:35:21 IP:61.231.xxx.xxx 未訂閱
引言: BCB是呼叫TASM VC <--- unknow 但是標準的MASM是可以使用struct的 ^^~ 以小弟的慣用法, 就是學C的陣列 取得第一個指標後, 然後自己去算offset 不知道那位大大有更好的方法 < face="Verdana, Arial, Helvetica"> 標準的 TASM 也可是可以使用 struct ,但在 inline assembly 中好像有一些限制... 好像也沒有書專門在講 inline assembly 的... 我不想使用 Input.A=_EAX; 之類的直接存取 EAX 等暫存器,因為,可能會有 side effect! 除非每個用到暫存器直接存取的地方都要再看一次 assembly 出來的 code ,否則很難保證暫存器的值是否已被修改了。如果有制式或比較標準的寫法,那就不用看 assembly code 來 debug 了,否則,為了測試程式效能結果產生出更多的 BUG 那不是太不划算了嗎? 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-15 13:15:16 IP:61.231.xxx.xxx 未訂閱
哇!已變成「懸賞題」了耶... < > 希望在進入<>「回收區」前有人可以提供解答... < > <>沒空更新的網頁... href="http://dllee.adsldns.org">http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-20 20:20:25 IP:211.76.xxx.xxx 未訂閱
我想, 在C下有使用assembly的人, 都可能有這樣的想法    不過這招, 一定書上沒寫, 只能看看誰比較會玩complier的    把經驗分享出來 我也滿想知道的
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-03 21:58:33 IP:61.224.xxx.xxx 未訂閱
真的只能用 Offset 來算嗎? 不能用  Output.A ?    沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-30 19:51:05 IP:61.224.xxx.xxx 未訂閱
在未來的一段時間,可能會比較忙, 因此,暫時將此問題結案了 < > 如果您有好的解答,歡迎回應,目前的系統可以重新給分喔 < > 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
系統時間:2024-05-02 17:34:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!