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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
1023
begriff機械語による標準出力について5解決


begriff

リンク

2008/10/23(Thu) 07:09:50|NO.20393

コンソールモードにおいてmesは改行を付加するため 主観的ですが 使いづらさを感じます。
それで機械語を使って 自作してしまえと 思い 一文字(1バイト)を表示するテストプログラムを
組んでみたのですが、機械語コード上の4・5バイト目である
CD 21  int 21h 
のところで システムエラーが発生します。

考えられるミスは
・ファンクションコールの使用方法が間違っている。
・そもそもの機械語に間違いが在る (ハンドアセンブリングなので・・・可能性は無きにしも非ず)
・HSPのコンソールモード上ではファンクションコールなど割り込みが使用できない仕様になっている。

しかし上二つは重ね重ね見直したので無いと思います。
三つ目であった場合どうしようもないです。

↓ソースコード

#runtime "hsp3cl" #uselib "kernel32.dll" #func global VirtualProtect "VirtualProtect" var,int,int,var #module #defcfunc funcname funcsize=10 argsize=0 past=0 dim funcdata,funcsize dim arg,argsize VirtualProtect funcdata, funcsize*4,$40,past funcdata(0)=$02B441B2,$00C321CD /* B2 41 dl 41h ('A') B4 02 ah 02h CD 21 int 21h C3 ret */ eax=callfunc(arg,varptr(funcdata),argsize) return eax #global g=funcname()
協力お願いします。



この記事に返信する


begriff

リンク

2008/10/23(Thu) 07:18:06|NO.20394

訂正

/* B2 41 mov dl 41h ('A') B4 02 mov ah 02h CD 21 int 21h C3 ret */



YOYO

リンク

2008/10/24(Fri) 10:27:55|NO.20421

>・HSPのコンソールモード上ではファンクションコールなど割り込みが使用できない仕様になっている。
むしろ何故使えると考えているのかが不思議。
HSP上で直接16ビットプログラムが使えるわけ無いです。
改行しない出力ならprintfかputcharを使ってください。

#runtime "hsp3cl" #uselib "msvcrt.dll" #func putchar "putchar" int #func printf "printf" str printf "abc" putchar 'd' printf "efg"



begriff

リンク

2008/10/24(Fri) 22:24:04|NO.20428

やはりmsvcrt.dllを使うしかないようですね。

>むしろ何故使える … 
使えないわけでは無いようです。
しかし int 21hでのファンクションコールはDOSでのことで
windows NT・2000では int 2Eh を使うようです。

DOS以外の環境でのファンクションコール番号は公開されていない(unixでは公開されている)
しかし 公開しない代わりにAPIでその(低水準な)機能を補填するような方針をとっているらしいです。
ですので YOYOさんの提示された方法がやはり最良かと思われます。

返答していただきありがとうございます。



YOYO

リンク

2008/10/25(Sat) 12:24:57|NO.20433

>>むしろ何故使える … 
>使えないわけでは無いようです。
私が言ってるのはDOSのファンクションコールを含んだコードをHSP上から直接呼び出せるわけ無いって事です。
DOSファンクションコールを実行すること自体は98,Meでなら可能だが。
int 2Ehを実行することはHSPからでも出来るがほとんど意味無いです。



pizza

リンク

2008/10/30(Thu) 13:58:44|NO.20498

>やはりmsvcrt.dllを使うしかないようですね。
GetStdHandleとWriteFileでもいけますよ。



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