2012-04-28 110 views
24

Por ejemplo, si estábamos escribiendo un simple programa de tipo hola mundo, la sección .data podría contener algo como:

section .data 

msg  db  'Enter something: ' 
len  equ  $ - msg 

Lo que hace el $ en este ejemplo representan, y por qué $ - msg igual a la longitud de la ¿cuerda?

+0

@ James: No, no se habla de un uso diferente de la '' signo $. – Job

Respuesta

19

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

+7

Supongamos que no declare len inmediatamente después de msg. Entonces "aquí" ya no apunta al final de la cadena, ¿correcto? – InvalidBrainException

+2

Eso es correcto. –

11

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

+2

No estoy del todo claro a lo que el ensamblador se refiere como la "dirección actual". Por "dirección actual" te refieres a "la última declaración compilada" (que sería 'msg db 'Enter something:'')? – InvalidBrainException

+2

@Terribad: el ensamblador cuenta el número de bytes puestos en la sección hasta el momento. '$' es donde va el siguiente. –

0

$ se usa para referirse a la dirección actual y $$ se usa 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 tercera línea de $ refiere a la dirección de la línea en sí, mientras $$ se refiere a la dirección de la primera línea (donde comenzó nuestra sección). Esta convención me funciona en nasm.

fuente: nasm.us

+2

Esto no es correcto. El signo de dólar doble ('$$') se refiere al comienzo de la sección actual, _no_ la declaración anterior. – Virtlink

+0

Gracias por señalarlo. Lo he corregido ahora. –

4

documentación NASM

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

NASM soporta dos fichas especiales en las expresiones, lo que permite a los cálculos implican la posición de montaje actual: el $ $$ y fichas. $ 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 EQU se utiliza, la línea de 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 a ser la constante de 12

Cuestiones relacionadas