1. Data types
We will now see the types of data present in assembler. As you will see there is not much.
|Double word||32 bits|
|Quad word||64 bits|
|Ten bytes||80 bits|
2. Define initialized data
When reading the NASM documentation, you end up falling on a page containing the image below. This image makes it possible to understand the definition of variable in a program in assembler:
Each type of data can be read as below:
|db||Define byte (1 byte)|
|dw||Define word (2 bytes)|
|dd||Define double word (4 bytes)|
|dq||Define quad word (8 bytes)|
|dt||Define ten bytes (10 bytes)|
3. Define uninitialized data
To declare uninitialized data, here's how to do it:
As you can see, it's pretty simple to define data.
Before finishing this part of the tutorial, we have to know one last element which is the endianness.
Endianness refers to the sequential order in which bytes are arranged into larger numerical values when stored in memory or when transmitted over digital links. Endianness is of interest in computer science because two conflicting and incompatible formats are in common use: words may be represented in big-endian or little-endian format, depending on whether bits or bytes or other components are ordered from the big end (most significant bit) or the little end (least significant bit).
You can put into practice what we have just seen. To do this, you can declare variables of different types and understand what is going on with a debugger.
Here is a small skeleton to help you:
section .text global _start _start: ; not important here but if you want to test assignation mov rax, var1 mov rbx, var2 ; ... section .data var1: db 0x12, 0x34 var2: dw 0x1234 var3: TIMES 3 db 0x41 ; etc section .bss buf: resw 20 ; etc