What does the colon : mean in x86 assembly GAS syntax as in %ds:(%bx)?
Asked Answered
S

1

7

I am new to x86 assembly and I am trying to understand the code in this document : http://www.cs.cmu.edu/~410-s07/p4/p4-boot.pdf page 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

But I am not understanding the command :

movw $0x1337, %ds:(%bx) # Places 0x1337 into memory word 0x179b8.

Why concatenating %ds with (%bx) is the same as ((%ds << 4) | %bx) ?

As I am in real mode (16 bits), the concatenation shouldn't be %ds << 8 ? instead of %ds << 4?

And why the parenthesis is just around %bx? And not around the whole structure like : movw $0x1337, (%ds:%bx) ?

Scantling answered 11/9, 2013 at 8:51 Comment(1)
Possible duplicate of What are the segment and offset in real mode memory addressing? NASM version: stackoverflow.com/questions/3819699/…Rhonarhonchus
A
9

In real mode, the segment register is used to provide a 20-bit address. In this case, the data segment register ds provides the 'high' 16 bits of the address: (0x1234 << 4 = 0x12340), and the offset in the segment is given by: 0x5678, to yield: 0x179b8.

The data segment register is implicit, so it's not necessary to use: ds:(%bx). If you were using another segment register, like es, it would need to be explicit.

I hope I've understood your question. As to why it's not written as (%ds:%bx), that's really just a syntactic decision that you're stuck with.

Awed answered 11/9, 2013 at 9:7 Comment(2)
Hi, thanks for your answer! If it was not in real mode, it would be like ((0x1234 << 16) | 0x5678) ?Machination
@Scantling - No. Protected mode is much more complicated, with paging introduced in the 386. There's plenty of documentation and code (e.g., kernel source code) out there. And then there are x86-64 addressing modes, like 'long mode'.Awed

© 2022 - 2024 — McMap. All rights reserved.