アセンブリ言語のコーディングを学習しました。x86アセンブリ言語でのストレージと文字列の操作
Q:符号付き整数を表す文字列を2の補数の値に変換し、その結果をリトルエンディアンの順番でメモリの連続した場所に格納します。
たとえば、2の補数が64ビットであると仮定すると、1 = 0xFFFFFFFFFFFFFFFEです。私はGDBで
.data
S: .string "-149"
Result: .quad
.text
.globl main
main:
mov S,%rax
cmp %rax,0
jl positive
sub %rax,%rax
not S
add S,%rax
sub $30,%rax
not %rax
add $1, %rax
mov %rax,Result
positive:
sub $30,%rax
not %rax
add $1,%rax
mov %rax,Result
ff6b 0xffffのFFFF FFFFを生じるはずである私のコード内の番号-149をやった、格納されている文字列の整数の値はこれです。
(gdb) x/24xb &S
0x601038: 0x2d 0x31 0x34 0x39 0x00 0x00 0x00 0x00
0x601040: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x601048: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
私は-149に任意の計算をやってみたかった場合、私は何とかメモリ内のこれらの場所にアクセスする必要があるだろう - どのように私はこれをやって行くのですか?
4が10の場所にあることがわかっている場合は、10を掛けて40を取得し、9を追加して1x100を追加して100を取得し、それを追加することもできます。
計算にはどのようにアクセスすればよいですか?
他の部分も釘付けにしていないようです。私たちはここでデバッグの質問に答えることはできません、正確な問題が何であるかを明確にしてください。連続した "場所"の部分は事実上明確ではありません。x86はリトルエンディアンで、処理する必要がある数値のサイズ(ビット数)に応じて、その要求はメモリに格納されます。 –
ありがとうMargaret、具体的には、.stringに保存された符号付き整数値に論理演算子を適用する方法については疑問があります。 –