2016-05-15 4 views
0

私はx86アセンブリのレジスタを理解するのに苦労していますが、EAXは完全な32ビット、AXは下位16ビット、そしてAHとALはAXの上位8ビットです。質問。x86 AHとALを指定してAXを計算しますか?

AL = 10、AH = 10の場合AXの値は何ですか?

私はこれを10をバイナリ(1010)に変換し、それをAX(0000 1010 0000 1010)の上位と下位ビットとして取り、これを10進数(2570)に変換します。ここで正しい答えをしていますか? RAXx86-64に存在する64ビットのレジスタで

RR RR RR RR EE EE HH LL 
|   |  || || 
|   |  || AL 
|   |  AH | 
|   |  |___| 
|   |  AX | 
|   |_________| 
|   EAX  | 
|_____________________| 
RAX 

に...:

+3

はい、正しいです。あなたは 'AX = 256 * AH + AL = 2560 + 10 = 2570'でもかまいません。 PS:疑わしいときにデバッガでコードを実行できます。 – Jester

+0

ショートカットが便利になってくれてありがとう@Jester :) – Dfarrelly

+3

ヘックスに変換するのは精神的に簡単です。すべてのバイトは2桁の16進数です。それはちょうど0x0a0aで、AHが最初です。 –

答えて

3

ピーターコルドによって示唆されるように、Iは16進数の値としてデータを想像するだろう。

ですから、このようなAH = 0x12AL = 0x34、持っていた場合:

00 00 00 00 00 00 12 34 
|   |  || || 
|   |  || AL 
|   |  AH | 
|   |  |___| 
|   |  AX | 
|   |_________| 
|   EAX  | 
|_____________________| 
RAX 

を...あなたは、このチャートに示すように、AHが唯一であることなどAX = 0x1234EAX = 0x000

注意を持っていましたここでは "奇妙な"レジスタは下位ビットと揃っていません。他のもの(ALAXEAXRAX、64ビット用)はサイズが異なりますが、すべてが右側に揃っています。 (たとえば、図のEE EEと記された2バイトには、レジスタ名はありません)

関連する問題