HSP3 で マシン語変換。


コールバックでマシン語を埋め込む必要があるときの、
ダンプコードからのHSP コードへの変換プログラム。

 

 

全体的なやり方については、ちょくとさんのウェブサイトの中の、

 

マシン語コードを作成してみる

を参照してください。

 

; マシン語コード変換スクリプト 簡易。

#uselib "user32.dll"
#func CharUpper "CharUpperA" var

 

varname = "code"        ; 変数名
numline = 6                ; 1行の要素数

 

; 出力されたマシン語コードを記述
cod = {"
8B 44 24 04 83 C0 1C 80 38 40 74 11 50 8B 44 24
14 6A 00 68 43 01 00 00 FF 70 04 FF 10 33 C0 40
C2 10 00
"}

 

CharUpper cod
dim alp,4 : sets = 0 : c = 0 : s = "" : res = varname+"(0)=$"
repeat 4 : alp(cnt) = "" : loop


repeat strlen(cod)
dat = peek(cod,cnt)
if (dat<48)|(90<dat) : continue
if (dat>57)&(65>dat) : continue

poke s,c\2,dat
c++
if c\2 = 0 {
        alp((c/2)-1) = s
        s = ""
        if c=8 : c=0 : gosub *mo
    }
loop

 

if c!=0 : gosub *mo

 

res = strmid(res,0,strlen(res)-3)
if (sets\2) : res = res+", $00000000" : sets++
buf = "xdim "+varname+","+sets+"\n"+res
mesbox buf, ginfo_winx, ginfo_winy, 4
stop

 

*mo
    repeat 4 : res = res + alp(3-cnt) : loop
    repeat 4 : alp(cnt) = "" : loop
    sets++
    res = res+", "
    if (sets\numline) = 0 : res = strmid(res,0,strlen(res)-2)+"\n"+varname+"("+numline+")="
    res = res+"$"
    return

 

ちょくとさんのウェブサイトに掲載されているものと比較して、信頼性が著しく違います。
向こうはちゃんとした物ですが、こっちはとりあえずそのコードを出すだけ。
動くかどうかは動かしてみるまで分かりません。

 

強烈にアバウトな感じですが、まぁ、そんな感じで。


 

関連記事


1 thought on “HSP3 で マシン語変換。

  1. 匿名

    #uselib “user32.dll”
    #func CharUpper “CharUpperA” var

    varname = “code” ; 変数名
    numline = 6 ; 1行の要素数

    ; 出力されたマシン語コードを記述
    cod = {”
    8B 44 24 04 83 C0 1C 80 38 40 74 11 50 8B 44 24
    14 6A 00 68 43 01 00 00 FF 70 04 FF 10 33 C0 40
    C2 10 00
    “}

    CharUpper cod
    dim alp,4 : sets = 0 : c = 0 : s = “” : res = varname+”(0)=$”
    repeat 4 : alp(cnt) = “” : loop

    repeat strlen(cod)
    dat = peek(cod,cnt)
    if (dat<48)|(9057)&(65>dat) : continue

    poke s,c\2,dat
    c++
    if c\2 = 0 {
    alp((c/2)-1) = s
    s = “”
    if c=8 : c=0 : gosub *mo
    }
    loop

    if c!=0 : gosub *mo

    res = strmid(res,0,strlen(res)-3)
    if (sets\2) : res = res+”, $00000000″ : sets++
    buf = “xdim “+varname+”,”+sets+”\n”+res
    mesbox buf, ginfo_winx, ginfo_winy, 4
    stop

    *mo
    repeat 4 : res = res + alp(3-cnt) : loop
    repeat 4 : alp(cnt) = “” : loop
    sets++
    res = res+”, ”
    if (sets\numline) = 0 : res = strmid(res,0,strlen(res)-2)+”\n”+varname+”(“+numline+”)=”
    res = res+”$”
    return

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください