HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0328
begriffマシン語について素朴な疑問5未解決


begriff

リンク

2008/3/28(Fri) 10:03:39|NO.14654

アセンブラ自体はさわりだけわかるんですが、
機械語をHSPに組み込んで どの時点で実行されるとか、関数のようなものなのか、など疑問に思っています。
たとえば(意味ないけど)

-a
350D:0100 mov AX,ff

を組み込んだとしてどういうスクリプトを作るのでしょう・・・?



この記事に返信する


いでじま

リンク

2008/3/28(Fri) 14:45:11|NO.14658

こんにちは。
アセンブリソースを見る限りは返り値を0xffにする、ということですね?
良くわかりませんが、適当に作ってみました。
無駄などがあるかもしれませんが、ご参考程度に。

#uselib "kernel32.dll" #func global VirtualProtect "VirtualProtect" var,int,int,var #define global exedim(%1,%2)dim %1,%2:VirtualProtect %1, %2*4,$40,AZSD #module "MachineCode" #deffunc muimi if pmui=0{exedim mui,2 : pmui=varptr.mui mui.0=$0000FFB8,$0000C300 } prm=0 return callfunc(prm,pmui,0) #global muimi mes stat stop
まずはアセンブリ言語においては関数ではなくプロシージャという概念を用います。
プロシージャに関してはhttp://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B7%E3%83%BC%E3%82%B8%E3%83%A3
で解説されています。
実行されている位置は恐らくcallfuncでしょう。
それ以外に考えにくいです。
”関数のようなもの”にするためにはHSPの方で書き換えれば良いです。
マシン語自体に関数、もしくは命令という概念はありません。

自分はマシン語作成の際(とはいえこれが二度目ですが)にはMASMと呼ばれるアセンブラを用いています。
ビルドの際のbatは以下になります。

\masm32\bin\ml /AT /Bl \masm32\bin\link16 /Fe test001.bin test001.asm pause
あらかじめ16bit用のリンカを用意する必要がありますね。
上記batを見ていただければわかると思いますが、link16.exeという名前に改名して保存してあります。
あと2行目のpauseを書いておくことによってビルド時にエラーが出たときにその画面のまま停止しておいてくれます。
(これがないとXPはすぐに消えちゃうんですよね)

長くなってしまいましたが、以下にマシン語のソースを記して終わりにさせていただきます。

.386 .MODEL TINY,STDCALL OPTION SEGMENT:USE32 .CODE muimi PROC mov eax, 0ffh ret muimi ENDP END muimi
axではなくeaxを用いたのは返り値が1byteを超過する場合に0xffにならない可能性を見越してのことです。
それでは、失礼いたします。



begriff

リンク

2008/3/28(Fri) 20:22:41|NO.14661

ありがとうございます。
概念は何とか理解できました。^^
私がアセンブラをさわったのはコマンドプロンプトのdebugコマンド(?)
ですが違いがあるものなのでしょうか。



いでじま

リンク

2008/3/28(Fri) 20:35:25|NO.14662

純粋にニーモニックを書き連ねるのと、ビルドするために色々前提などを書き加えるという違いではないでしょうか。
デバッグコマンドは用いたことは無いのでよくはわからないのですが、APIの使用などの面でも変わってくるのでは。



mma

リンク

2008/3/29(Sat) 18:37:21|NO.14683

前にも同じ事書いた気がするけどこのサイトで勉強すればいいのでは?
http://hp.vector.co.jp/authors/VA034288/26/MACHINE/masm.html



begriff

リンク

2008/3/29(Sat) 19:26:37|NO.14684

ありがとうございます。
参考にさせていただきます。



ONION software Copyright 1997-2018(c) All rights reserved.