2012-02-27 24 views
0

私はアセンブリ言語を学びたいと思います。ちょうど始めに、私は結果を印刷して、コンソールに5 + 5と言ってみましょう。私はWindows 7 64ビットでフラットアセンブラを使用しています。アセンブリでコンソールに印刷するにはどうすればよいですか?

私は、コードを書き始めるしていると私はコンソールに出力することv1とv2の文字列をしたいと思いますが、私は成功するドント:

v1 db 'Enter value 1: ', 0 
val1 db 80 dup(?) 
v2 db 'Enter value 2: ', 0 
val2 db 80 dup(?) 

私はそれを実行しようとしたコードをコンパイルした後、 fasm.exe hello.ASMが表示されますが、注意が表示されます。私は値を入力すると約束されると思った。

私は間違っていますか?

+0

あなたがデータを宣言し、それを使って何をやっていない:ここではサンプルの出発点としての「Hello World」プログラムです。何かを表示するには、Windows関数(OutputDebugStringなど)またはcランタイム関数(printfなど)を呼び出すことができます。 – BitBank

答えて

5

実際にデータをコンソールに出力するコードを書く必要があります。今は、データブロックの一部を定義するだけです。

通常、データはWriteFileや(好きな人には)WriteConsoleOutputなどのデータを印刷します。

.386 
.MODEL flat, stdcall 

getstdout = -11 

WriteFile PROTO NEAR32 stdcall, \ 
     handle:dword,   \ 
     buffer:ptr byte,  \ 
     bytes:dword,   \ 
     written: ptr dword,  \ 
     overlapped: ptr byte 

GetStdHandle PROTO NEAR32, device:dword 

ExitProcess PROTO NEAR32, exitcode:dword 

.stack 8192 

.data 
message db "Hello World!" 
msg_size equ $ - offset message 

.data? 
written dd ? 

.code 
main proc 
    invoke GetStdHandle, getstdout 
    invoke WriteFile,     \ 
      eax,       \ 
      offset message,    \ 
      msg_size,     \ 
      offset written,    \ 
      0 
    invoke ExitProcess, 0 
main endp 
     end main 
+0

また、入力ルーチンだけでなく、多少の10進数/ 2進数の変換も必要になります。 –

+0

@BrianKnoblauch:はい、でも、それは明らかに宿題なので、必要なものすべてを手渡したいとは思っていませんでした。 –

+0

コメントはOPのためのものではありませんでした。彼はすべての問題を解決しませんでした。 :-) –

関連する問題