registers lenguaje instruction ensamblador and assembly x86 intel-syntax

assembly - lenguaje - ¿Qué significa el signo de dólar($) en ensamblaje x86 al calcular longitudes de cadena como "$-label"?



mov assembly (4)

Esta pregunta ya tiene una respuesta aquí:

Por ejemplo, si estuviéramos escribiendo un programa de tipo hello world simple, la sección .data podría contener algo como:

section .data msg db ''Enter something: '' len equ $ - msg

¿Qué representa el $ en este ejemplo, y por qué $ - msg igual a la longitud de la cadena?


$ se usa para referirse a la dirección actual y $$ se utiliza para referirse a la dirección del inicio de la sección actual en el ensamblaje.

ejemplo:

section .text Mov A,0x0000 Mov B,0x0000 Mov C,0x0000

para la 3ra línea, $ se refiere a la dirección de la línea, mientras que $$ se refiere a la dirección de la 1ra línea (donde comenzó nuestra sección). Esta convención me funciona en nasm.

fuente: nasm.us


En este caso, $ significa la dirección actual según el ensamblador. $ - msg es la dirección actual del ensamblador menos la dirección de msg, que sería la longitud de la cadena.


Significa la dirección de "aquí". Aquí "aquí" es el byte después del final de la cadena de msg . Cualquier documentación del ensamblador describirá esto. Lee la documentación.


Documentación de NASM

http://www.nasm.us/doc/nasmdoc3.html#section-3.5

NASM admite dos tokens especiales en expresiones, lo que permite que los cálculos impliquen la posición actual del conjunto: los tokens $ y $$. $ evalúa la posición de ensamblaje al comienzo de la línea que contiene la expresión; para que pueda codificar un bucle infinito usando JMP $.

http://www.nasm.us/doc/nasmdoc3.html#section-3.2.4

EQU define un símbolo a un valor constante dado: cuando se usa EQU, la línea fuente debe contener una etiqueta. La acción de EQU es definir el nombre de etiqueta dado al valor de su (único) operando. Esta definición es absoluta, y no puede cambiar más tarde. Así por ejemplo,

message db ''hello, world'' msglen equ $-message

define msglen como la constante 12