0

プラットフォーム:WindowsXPを実行しているPentium4プロセッサ(私は本当にアップグレードする必要があります:)。現在、MASM32で組み立てています。

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

また、x86アセンブリに関するわかりやすいチュートリアルへのリンクなどを教えてもらえますか?これまでに見つけたものはすべて本当に高レベルのものであり、あまり説明されていません。それは本当にありがたいです。

よろしくお願いします、Progrmr

4

2 に答える 2

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)のみを追加できることを覚えておくことが重要です。サイズの異なる2つのレジスタを追加する場合:

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/

于 2012-04-15T15:01:49.630 に答える
1

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

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

于 2012-04-15T10:13:30.320 に答える