2012-03-09 9 views
0

私は最初のNASMプログラムで作業していますが、を逆転させる代わりに、00000000のビットを反転していることに気が付いたので、not命令を理解しようとしました。これを少し修正するか、そうでなければこれを修正するにはどうすればよいでしょうか?ここに私のコードは、私がどんな悪い習慣に入るためにしたくないと...OSM上のNASMは、バイトではなくビットで動作します

section .text 
    global start 

start: 
    mov eax, 255 
    not eax 
    push eax 

    mov eax, 0x1 
    sub esp, 4 
    int 0x80 

は、私のアセンブリのコーディングにも私にポインタを与えること自由に感じています。

答えて

4

ほとんどのコンピュータアーキテクチャ(x86を含む)では、ビットは直接アドレス可能なメモリの単位ではありません。直接参照できる最小の単位はバイトで、x86では8ビットが含まれています。あなたは正確に何を達成しようとしているのかを明言していないので、私はあなたの問題を正確に解決することはできませんが、シングルビット(またはビット群)を扱うことは、 AND命令には関係しません。最後に値を左または右にシフトしてから処理します。

n番目のビットの値をレジスタに実際に取得する場合は、おそらく命令BTが必要です。これは、キャリーフラグにn番目のビットの値を格納します。

他のヒントについては、pushの指示は、スタックポインタをスタックにプッシュされたバイト数だけ減らします()。これはx86アーキテクチャの特徴です。スタックは設計上、下向きに成長します。したがって、スタック上のスペースを解放したい場合は、(subではなく)を実行してください。これはスタック上により多くの領域を予約します。

関連する問題