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í:
- ¿Cómo funciona $ en NASM, exactamente? 1 respuesta
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