¿Recibo un error al llamar a writeString en EDX?
He estado haciendo una tarea en Visual Studio que se supone que imprime un array de caracteres en un formato de “caja”, donde después de cada 4 caracteres hay un salto de línea.
Pero cuando intento llamar a la función writeString de Irvine32 por segunda vez, el programa produce un error de violación de acceso en la lectura de la ubicación.
Aquí está mi código (estoy usando DWORD, por eso incremento en 4):
mov esi, OFFSET array1
mov ebx, totalSize
mov eax, counter
forLoop:
cmp eax, ebx
jae loopExit
mov edx, 0
mov edx, [esi + eax * 4]
call writeString
jmp forLoop
Incluso intenté hacerlo más simple usando la suma en su lugar, pero aún así no funcionó:
mov esi, OFFSET array1
mov ebx, totalSize
mov eax, counter
forLoop:
cmp eax, ebx
jae loopExit
mov edx, 0
mov edx, esi
call writeString
mov ecx, 4
mov esi, [esi + 4]
jmp forLoop
No puedo entender qué está saliendo mal aquí. Simplemente creo que hay algo incorrecto con el puntero o writeString, pero no sé qué.
Gracias por cualquier ayuda y disculpa si esta es una pregunta tonta.
davy.ai
Parece que puede haber un problema con la función writeString o la forma en que se llama. Según el código proporcionado, no está claro cuál es el valor de totalSize y counter, y cómo se relacionan con el tamaño de la matriz.
Una posible solución podría ser utilizar un bucle para iterar a través de la matriz e imprimir cada caracter individualmente, en lugar de llamar a la función writeString múltiples veces. Además, puede ser necesario ajustar el puntero utilizado para acceder a la matriz para asegurarse de que apunta a la ubicación correcta en la memoria.
Aquí hay un ejemplo de cómo se podría implementar:
Este código recorre la matriz, imprimiendo un caracter a la vez utilizando la función writeChar. También verifica si se han impreso 4 caracteres y agrega un caracter de salto de línea antes de continuar. El contador de caracteres se utiliza para realizar un seguimiento de cuántos caracteres se han imprimido y se reinicia después de cada cuarto caracter.
En general, el problema con el error de “Access violation reading location” podría deberse a varios factores diferentes, como valores incorrectos de puntero o problemas de asignación de memoria. Puede ser útil depurar el código paso a paso con un depurador o agregar declaraciones de impresión para ver qué valores se están utilizando y cuándo ocurre el error.