私は x86 アセンブリに不慣れで、このドキュメントのコードを理解しようとしています: http://www.cs.cmu.edu/~410-s07/p4/p4-boot.pdfページ 3:
movw $0x1234, %ax
movw %ax, %ds
movw $0x5678, %bx
# The following instruction is the same as "movw $0x1337, (%bx)".
movw $0x1337, %ds:(%bx) # Places 0x1337 into memory word 0x179b8.
# Segment Base: %ds << 4: 12340
# Offset: %bx: + 5678
# -------
# Linear Address: 179b8
しかし、私はコマンドを理解していません:
movw $0x1337, %ds:(%bx) # Places 0x1337 into memory word 0x179b8.
%ds と (%bx) の連結が ((%ds << 4) | %bx) と同じなのはなぜですか?
私はリアル モード (16 ビット) であるため、連結は %ds << 8であってはなりません。%ds << 4の代わりに?
そして、括弧が %bx のすぐ近くにあるのはなぜですか? そして、次のような構造全体ではありません: movw $0x1337, (%ds:%bx) ?