2012-04-15 16 views
0

プラットフォーム:Pentium 4プロセッサー(私は本当にアップグレードする必要があります:) Windows XPを実行しています。私は現在MASM32で組み立てています。x86アセンブリ、メモリに格納された変数を追加する方法は?

私はアセンブリの絶対初心者です。私は変数を追加する方法を理解しようとしています。変数の定義方法、レジスタへのデータの配置方法、レジスタの配置方法について理解していますが、2つの変数の値をどのように組み合わせるかは分かりません。

また、x86アセンブリに関するチュートリアルを分かりやすくするためのリンクや何かを教えてもらえますか、これまでに見つかったことはすべて高レベルのものであり、あまり説明しません。それは本当に感謝します。事前に

おかげで、 Progrmr

答えて

4

単純加算:メモリから

add eax, ebx ; Adds eax and ebx and stores the result in eax 

負荷は、次いでメモリに格納し、追加:上記の例で

mov eax, DWORD PTR [esi] ; Load a double word from memory into eax 
mov ebx, DWORD PTR [edi] ; Load a double word from memory into ebx 
add eax, ebx    ; Adds eax and ebx and stores the result in eax 
mov DWROD PTR[esi], eax  ; Store a double word in eax into memory 

、DWORD PTRを厳密に必要とされませんそれはあいまいさを取り除き、コードを読みやすくするので、練習するのは良い習慣です。

同じサイズのレジスタ(上記の例ではDWORD)のみを追加できることを覚えておくことが重要です。あなたはサイズの異なる二つのレジスタを追加したい場合は、次の

mov al, BYTE PTR [esi] ; Loads a single byte from memory into al 
mov bx, WORD PTR [edi] ; Loads a word from memory into bx 
movzx eax, al    ; Zero extends al into the entire eax register 
movzx ebx, bx    ; Zero extends bx into the entire ebx register 
add eax, ebx    ; Adds eax and ebx and stores the result in eax 

を同じことを行うための簡単な方法があるので、これはそれほど良い例ではありませんが、うまくいけば、それはあなたが使用できるトリックのいくつかを紹介します。あなたはまた、レジスタにメモリ値を追加することができます

mov eax, DWORD PTR [esi]  ; Load a double word from memory into eax 
add eax, DWORD PTR [edi]  ; Add a double word in memory to eax 

はここで参照として使用するには良いサイトです:http://ref.x86asm.net/

+0

ヒープありがとう!これは役に立ちました。 「同じことをする簡単な方法がある」とはどういう意味ですか?しかし、とにかく、ありがとう。 – Progrmr

+0

また、2つの数値を追加すると、変数にその値を置き、その変数をコンソールに表示するにはどうすればいいですか?ありがとう。 – Progrmr

+0

別のmov/movzx命令の代わりに、単にmovzx eax、BYTE PTR [esi]を実行することができます。コンソールから取得して印刷する場合は、次のリンクを試してください:http://www.masm32.com/board/index.php?topic=1094.0 – Sparafusile

0

私はあなたの概念的な問題と思われます。 x86の値はレジスタまたはメモリに格納され、変数の概念はより高いレベルになります。値を追加する1つの方法は、それらをレジスタに入れてから、追加操作を呼び出すことです。

http://computertech.createmybb3.com/showthread.php?tid=116

+0

[OK]を、理にかなっています。 – Progrmr

関連する問題