2010/8/22:本掲示板は閲覧専用です。データが一部破損しておりますがご了承ください。
  新規投稿 ┃ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索 ┃設定 ┃ホーム  
1801 / 2351 ←次へ | 前へ→

【560】Re:最終的には...
←back ↑menu ↑top forward→
 ひよひよ  - 04/1/13(火) 8:39 -

引用なし
パスワード
   ▼ぬじぬじさん:
> 気になるので僕のコードの何処が間違っていたのか教えてもらえませんか。
まず、MASM for AMD64 には .model が使えません。まぁ、AMD64 専用なんで当たり前ですが... あと、
_TEXT    SEGMENT    DWORD PUBLIC USE32 'CODE'
この書式も通りません。
ここを AMD64 用に置き換えても、エラーが出て通りません。どうも、PUSH POP が使えない模様。なんで、使えないのかはまだ調べていないのですが... 何を隠そうレジスタ数が増えまくっているので、関数呼び出しのたびに PUSH して POP なスタイルは大変かもしれません。AMD64 のマニュアルはまだちゃんと読んでいない(オイ)のでよくわからないのですが...

とにかく MASM for AMD64 はアレコレ擬似コード周りが変更になっているのですが、資料が少なく(MSDN 以外に見つからない)困っています。最終的にはスタックを介した引数渡しができると良いとは思うのですが...


アセンブルするだけなら以下のコードでオッケー。関数としての機能は果たせませんが... かなりコメントアウトしてます。

;    .586p

;_TEXT    SEGMENT    DWORD PUBLIC USE32 'CODE'
;    ALIGN    4
.code


;; DWORD cpuid(DWORD dwOP, DWORD *lpAX, DWORD *lpBX, DWORD *lpCX, DWORD *lpDX)
_cpuid    PROC
    ;; ...
    ;; ESP+0C [lpBX]
    ;; ESP+08 [lpAX]
    ;; ESP+04 [dwOP]
    ;; ESP+00 [RETURN-ADDESS]
;    PUSH    EBP
    MOV    EBP, ESP

    ;; ...
    ;; ESP+0C [lpAX]
    ;; ESP+08 [dwOP]
    ;; ESP+04 [RETURN-ADDRESS]
    ;; ESP+00 [EBP]
    ;; EBP == ESP
;    PUSH    EDI
    ;PUSH    EAX
;    PUSH    EBX
;    PUSH    ECX
;    PUSH    EDX

    ;; EAX = dwOP;
    MOV    EAX, DWORD PTR [EBP+1*4+4]

    CPUID

    ;; EDI = lpAX;
    MOV    EDI, DWORD PTR [EBP+2*4+4]
    ;; *EDI = EAX;
    MOV    DWORD PTR [EDI], EAX

    ;; *lpBX = EBX;
    MOV    EDI, DWORD PTR [EBP+3*4+4]
    MOV    DWORD PTR [EDI], EBX

    ;; *lpCX = ECX;
    MOV    EDI, DWORD PTR [EBP+4*4+4]
    MOV    DWORD PTR [EDI], ECX

    ;; *lpDX = EDX
    MOV    EDI, DWORD PTR [EBP+5*4+4]
    MOV    DWORD PTR [EDI], EDX

;    POP    EDX
;    POP    ECX
;    POP    EBX
    ;POP    EAX
;    POP    EDI


    ;; return dwOP;
    MOV    EAX, DWORD PTR [EBP+1*4+4]
;    POP    EBP
    RET
_cpuid    ENDP


;; struct {
;;  DWORD dwLower;
;;  DWORD dwUpper;
;; } rdtsc();
_rdtsc    PROC
    ;; ...
    ;; ESP+0C [CALLER'S LOCAL VARIABLES]
    ;; ESP+08 [CALLER'S LOCAL VARIABLES]
    ;; ESP+04 [POINTER TO RETURN VALUE]
    ;; ESP+00 [RETURN ADDRESS]
;    PUSH    EDI
;    PUSH    EAX
;    PUSH    EDX

    ;; ...
    ;; ESP+14 [CALLER'S LOCAL VARIABLES]
    ;; ESP+10 [POINTER TO RETURN VALUE]
    ;; ESP+0C [RETURN ADDRESS]
    ;; ESP+08 [EDI]
    ;; ESP+04 [EAX]
    ;; ESP+00 [EDX]
    MOV    EDI, DWORD PTR [ESP+10H]

    RDTSC

    MOV    DWORD PTR [EDI+0], EAX
    MOV    DWORD PTR [EDI+4], EDX

;    POP    EDX
;    POP    EAX
;    POP    EDI

    XOR    EAX, EAX
    RET
_rdtsc    ENDP
end

    PUBLIC    _cpuid
    PUBLIC    _rdtsc

    END

;; THE END OF FILE
170 hits

【556】.asm ぬじぬじ 04/1/12(月) 22:26 [添付][添付]
【557】Re:.asm ひよひよ 04/1/12(月) 23:24
【558】最終的には... ひよひよ 04/1/13(火) 1:06
【559】Re:最終的には... ぬじぬじ 04/1/13(火) 2:30
【560】Re:最終的には... ひよひよ 04/1/13(火) 8:39
【561】Re:最終的には... ぬじぬじ 04/1/13(火) 10:27
【562】逆転の発想... ひよひよ 04/1/13(火) 12:05 [添付][添付]
【563】Re:逆転の発想... ぬじぬじ 04/1/13(火) 12:40 [添付]
【564】Re:逆転の発想... ぬじぬじ 04/1/13(火) 12:41 [添付]
【565】Re:逆転の発想... ぬじぬじ 04/1/13(火) 12:45 [添付]
【566】Re:逆転の発想... ぬじぬじ 04/1/13(火) 12:46 [添付]
【568】Re:逆転の発想... ひよひよ 04/1/13(火) 12:50
【573】CPUID バッチリ ひよひよ 04/1/16(金) 23:55
【567】Re:逆転の発想... ひよひよ 04/1/13(火) 12:48

1801 / 2351 ←次へ | 前へ→
  新規投稿 ┃ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索 ┃設定 ┃ホーム  
ページ:  ┃  記事番号:   
51982
(SS)C-BOARD v3.8(とほほ改ver2.1) is Free