アセンブラでWin16なWindowsプログラムを組んでみる。

リアルモード16ビットDOSのプログラムはいろいろ例が出てるのに、16ビットWindowsのプログラムは探してもほとんど無い。見つけてもINVOKEマクロで手抜きとか。ここではINVOKE無しで通常の呼出規約でAPIコールをする。ぱっと見はWin32に似ているが、結構違う。16ビットなのでレジスタの操作も16ビット単位。

これは前回のVS2017のmlとリンカではできなくてVisual C++ 6.0 SP5用のProcessor Packに入っているMASM 6.15を、リンカはVisual C++ 1.51に付いているものを使った。今のところMSDNで手に入る環境フルセットのMASM 6.11だけでもできると思う。

作成方法

ml msgbx16.asm /link libw.lib

msgbx16.asm

.model	small, pascal, nearstack
.386

MessageBox PROTO FAR PASCAL :WORD, :FAR PTR SBYTE, :FAR PTR SBYTE, :WORD


.code
Start:
	sub	sp, 4
	
	push	word ptr 0
	push	ds
	push	offset strMsg
	push	ds
	push	offset strCapt
	push	word ptr 40h
	call	far ptr MessageBox

	mov	ax, 4c00h
	int	21h


.data
strCapt	db 'msgbx16', 0
strMsg	db 'Hello World !', 0


.stack
	db	100 dup (0)


	end	Start

動作はVMware上のWindwos2000Pro。

masmwin

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中