すいません、VB4しかやってないんです、VBAはやったけど(ぼそ) チラシの裏だって立派な書き込み空間なんだからねっ!資源の有効活用なんだからねっ!とか偉そうに言ってるけど、実は色々と書き残したいだけ

だからなに? どうしろと? くるみサイズの脳みそしかないあやしいジャンガリアンベムスターがさすらう贖罪蹂躙(ゴシックペナルティ)

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  632  : 記事  35  : コメント  11675  : トラックバック  143

ニュース


片桐 継 は
こんなやつ

かたぎり つぐ ってよむの

大阪生まれ河内育ちなんだけど
関東に住みついちゃったの
和装着付師だったりするの
エセモノカキやってたりするの
VBが得意だったりするの
SQL文が大好きだったりするの
囲碁修行中だったりするの
ボトゲ好きだったりするの
F#かわいいよF#

正体は会った人だけ知ってるの

空気読まなくてごめんなさいなの


わんくまリンク

C#, VB.NET 掲示板
C# VB.NET掲示板

わんくま同盟
わんくま同盟Blog


WindowsでGo言語
WindowsでGo言語


ネット活動


SNSは疲れました

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

イベント活動

プログラムの活動

いろいろと試行錯誤orz くるしんだよ、べいべぇ。

なにしろ、VisualStudioのファイルテンプレにASMがいない

ので、作っちゃいけないのかなーと頭を抱えてたんだよねぇ。

でも、「拡張子asmでファイルをプロジェクトにいれて作って良い」ということに気付いたら、後は何とかなったw

というわけで、新規コンソールアプリ作って、ソースファイルフォルダに、hoge.asmを作成。

作ると「構成追加変更するよ」みたいなダイアログが出るので、そのままOKして適用してしまう。

; Filename: MasmHoge.ASM
.386
.MODEL flat, C
.CODE

MasmHoge PROC uses esi, arraychar:PTR

   mov esi, arraychar ; Load ESI with the address of the char array.

   mov BYTE PTR [esi], "H"      ; Since a char is 1 byte long, each
   mov BYTE PTR [esi+1], "e"    ; successive element can be accessed
   mov BYTE PTR [esi+2], "l"    ; by adding 1 more to esi.
   mov BYTE PTR [esi+3], "l"    ; by adding 1 more to esi.
   mov BYTE PTR [esi+4], "o"    ; by adding 1 more to esi.
   mov BYTE PTR [esi+5], " "    ; by adding 1 more to esi.
   mov BYTE PTR [esi+6], "W"    ; by adding 1 more to esi.
   mov BYTE PTR [esi+7], "o"    ; by adding 1 more to esi.
   mov BYTE PTR [esi+8], "r"    ; by adding 1 more to esi.
   mov BYTE PTR [esi+9], "d"    ; by adding 1 more to esi.
   mov BYTE PTR [esi+10], "!"    ; by adding 1 more to esi.

   ret

MasmHoge ENDP
END

これは、MasmHoge(char *)でそのアドレスに「Hello Word!」(Worldじゃない)を描く単純な処理w

でもって、呼び出し側

#include "stdafx.h"
/* Filename: CMAIN.C */ 

#include <stdio.h>

#ifdef __cplusplus
extern "C" {
#endif

void MasmHoge (char *);

#ifdef __cplusplus
}
#endif

char chararray[11] = "abc";

int _tmain(int argc, _TCHAR* argv[])
{
   printf ("%s\n", chararray);
   MasmHoge (chararray);
   printf ("%s\n", chararray);
}

変数配列chararrayが、「abc」から「Hello Word!」になれば成功

image

できたー♪

ひどりん、コメント&ヒントさんきうです。

投稿日時 : 2010年7月28日 17:49

コメント

# MASMを動かしてみた~VisualStudio2008でのビルド規則追加変更方法 2010/07/28 18:16 すいません、VB4しかやってないんです、VBAはやったけど(ぼそ)
MASMを動かしてみた~VisualStudio2008でのビルド規則追加変更方法

# re: MASMを動かしてみた~VisualStudioで 2010/07/30 8:42 774RR
\0 文字を付加していないのはわざと?

# re: MASMを動かしてみた~VisualStudioで 2010/07/30 11:02 かたぎり
わざとですー

最初が三文字なのもわざとー。

どうなるかなーと思ってw
何回か繰り返して動かしたんだけど
不具合でなくて、なんだかガッカリした<おい

# re: MASMを動かしてみた~VisualStudioで 2010/07/30 19:27 774RR
C++ 言語規格書によると (C でも同等の文言あり)
8.5.1-7 集成体のメンバ数より初期化子の個数のほうが小さい場合、
明示的に初期化されなかったメンバは値初期化 (8.5) される。

8.5 [char に対する値初期化は] ゼロ初期化である

とあるので char chararray[11] = "abc"; は
[0]='a' [1]='b' [2]='c' [3]='\0'; までは初期化子が明示されているのでこの値に、
[4] から [10] まではゼロ初期化により '\0' になります。

これによって C 側が初期値 '\0' 文字を与えています。
アセンブラ側で mov BYTE PTR [esi+11], 0 がなくてもそれなりに動くのはこのため。

# re: MASMを動かしてみた~VisualStudioで 2010/07/31 15:43 かたぎり
やっぱ、そのあたりシッカリとケアされてたのね

コンパイラやら規約やら、賢くなってるんだなぁ。


# re: MASM???????~VisualStudio? 2021/08/06 20:02 antimalarial drug hydroxychloroquine
chloroquine malaria https://chloroquineorigin.com/# what is hydroxychloroquine sulfate

Post Feedback

タイトル
名前
Url:
コメント