La mejor manera de responder a esto es usar ejemplos de C. En C, hay dos maneras de realizar un seguimiento de la longitud de una matriz:
- Almacena una variable que le indica cuánto tiempo hace la matriz.
- Hace lo que las cadenas hacen y tienen el último elemento como 0.Luego, puede implementar una función de longitud de "cadena" que recorre la matriz hasta que encuentre cero.
Para el primer ejemplo, dependiendo del ensamblador que esté utilizando, es posible que pueda utilizar algunos trucos. Por ejemplo, en nasm usted puede hacer esto:
SECTION .data
msg: db "Hello World",10,0 ; the 0-terminated string.
len: equ $-msg ; "$" means current address.
Como se puede ver, se utiliza el operador de equ
para obtener nasm para calcular la diferencia entre la dirección actual y el inicio de msg
que debe ser igual a su longitud. Alternativamente, puede escribir la longitud allí como un dígito.
Para el segundo caso, podría escribir fácilmente una pequeña función para hacerlo. En general, si usted:
SECTION .text
global _mystrlen
_mystrlen:
push ebp ; conform to C calling conventions.
mov ebp, esp
xor eax, eax
lea ecx, [esp+8] ; load the start of the array into ecx
jecxz end ; jump if [ecx] is zero.
loop:
add eax, 1 ; could use inc eax as well.
add ecx, 4 ; always increment by (sizeof(int)). Change as appropriate
mov edx, [ecx] ; load ecx
cmp edx, 0 ; compare with zerp
je end ; if ecx is zero, we're done.
jmp loop ; if ecx isn't zero, loop until it is.
end:
leave ; restore stack frame
ret ; return. eax is retval
Tenga en cuenta que no he probado eso. Es solo para darte una idea.
Editar He probado la versión x86_64
en Linux, usando como rdi
param1, pasando int arr[10] = {1,2,3,4,5,6,7,8,9,0};
. Devuelve 9
como se esperaba. Tenga en cuenta que en Linux, el subrayado anterior a mystrlen
es innecesario.
hay tantos lenguajes ensambladores, que uno que está señalando? –
No existe una longitud inherente de matrices. Las matrices son solo un trozo de memoria en el que se introducen las cosas. No se puede saber de qué tamaño; necesitarás hacer un seguimiento de esto tú mismo. –
Nadie nunca indicó qué arquitectura está preguntando el OP. –