tutorial español assembler assembly syntax nasm

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.