Bjarne Diddit
Bjarne Diddit

Reputation: 21

Assembler memory address representation

I'm trying to get into assembler and I often come across numbers in the following form:

org 7c00h

; initialize the stack:
mov     ax, 07c0h
mov     ss, ax
mov     sp, 03feh ; top of the stack.

7c00h, 07c0h, 03feh - What is the name of this number notation? What do they mean? Why are they used over "normal" decimal numbers?

Upvotes: 2

Views: 1973

Answers (3)

starblue
starblue

Reputation: 56772

These are numbers in hexadecimal notation, i.e. in base 16, where A to F have the digit values 10 to 15.

One advantage is that there is a more direct conversion to binary numbers. With a little bit of practice it is easy to see which bits in the number are 1 and which are 0.

Another is is that many numbers used internally, such as memory addresses, are round numbers in hexadecimal, i.e. contain a lot of zeros.

Upvotes: 1

Joshua
Joshua

Reputation: 43278

Worth noting also, 0:7C00 is the boot sector load address.

Further worth noting: 07C0:03FE is the same address as 0:7FFE due to the way segmented addressing works.

This guy's left himself a 510 byte stack (he made the very typical off-by-two error in setting up the boot sector's stack).

Upvotes: 1

Alexander Dzhoganov
Alexander Dzhoganov

Reputation: 226

It's hexadecimal, the numeral system with 16 digits 0-9 and A-F. Memory addresses are given in hex, because it's shorter, easier to read, and the numbers that represent memory locations don't mean anything special to humans, so no sense to have long numbers. I would guess that somewhere in the past someone had to type in some addresses by hand as well, might as well have started there.

Upvotes: 1

Related Questions