assembly - español - nasm tutorial
Diferencia entre "sección" y "segmento" en NASM (1)
Estoy usando algunos programas NASM para bebés para ayudarme a aprender el idioma.
Según lo que he leído, los programas NASM pueden tener tres secciones; el .data, el .bss y el .text que es obligatorio. Sin embargo, estoy encontrando muy a menudo que a veces los nombres de las divisiones son de section
y otras veces es de segment
.
Por ejemplo, con este "Hola mundo" que encontré en línea:
; hello.asm a first program for nasm for Linux, Intel, gcc
;
; assemble: nasm -f elf -l hello.lst hello.asm
; link: gcc -o hello hello.o
; run: hello
; output is: Hello World
SECTION .data ; data section
msg: db "Hello World",10 ; the string to print, 10=cr
len: equ $-msg ; "$" means "here"
; len is a value, not an address
SECTION .text ; code section
global main ; make label available to linker
main: ; standard gcc entry point
mov edx,len ; arg3, length of string to print
mov ecx,msg ; arg2, pointer to string
mov ebx,1 ; arg1, where to write, screen
mov eax,4 ; write sysout command to int 80 hex
int 0x80 ; interrupt 80 hex, call kernel
mov ebx,0 ; exit code, 0=normal
mov eax,1 ; exit command to kernel
int 0x80 ; interrupt 80 hex, call kernel
Si cambio cada instancia de SECTION
a SEGMENT
, seguirá funcionando.
¿Alguien puede explicar la diferencia entre los dos, si hay alguno?
De la documentación de nasm :
La directiva SECTION (SEGMENT es un sinónimo exactamente equivalente)
Nasm puede producir resultados en varios formatos, algunos de los cuales admiten secciones. Ciertos nombres de sección pueden ser arbitrarios (como los tres enumerados), para ellos solo cuentan los flags de sección. Los predefinidos son solo accesos directos de conveniencia, .text
está marcado como código que contiene, .data
como datos inicializados de lectura-escritura y .bss
como datos de lectura-escritura inicializados cero. Podrías poner tu código en una sección llamada foo
, siempre que esté marcada como una sección de código, y puedes usar varias secciones como mejor te parezca.