es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ensamblador x86 de NASM, ¿cómo imprimir correctamente el resultado de una multiplicación?

Así que he encontrado numerosas respuestas para esto en Stack Overflow, pero aún no puedo hacer que funcione. ¿Qué hay de malo en mi código?
“`
mov al, 12
mov bl, 12
mul bl ; respuesta en ax
aam

<pre><code> mov bx, 10 ; Constante de divisor
xor cx, cx ; Limpiar el contador
.a: xor dx, dx ; Limpiar dx
div bx ; Dividir ax con bx, cociente en al, resto en ah
mov dh, ah ; Mover ah a dh, para poder empujar el registro de 16 bits de dx
push dx ; Empujar dx que contiene el resto
inc cx ; Incrementar el contador
test al, al ; Si al (el cociente) no es cero, bucle de nuevo.
jnz .a
.b: pop dx ; Pop el último resto a dx desde la pila
add dx, '0' ; Agregar '0' para convertirlo en carácter
push cx ; Empujar el contador de bucle a la pila para que la impresión no interfiera con él
mov eax, 4 ;
mov ebx, 1 ;
mov ecx, edx ; Imprimir el último carácter sacado de la pila
mov edx, 1 ;
int 0x80 ;
pop cx ; Pop el contador de bucle de vuelta a cx
loop .b ; bucle mientras cx no sea 0
</code></pre>

“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sin más contexto, es difícil determinar exactamente qué está mal con el código. Sin embargo, aquí hay algunas cosas a considerar/verificar:

    • Asegúrese de que se incluyan todas las bibliotecas y encabezados necesarios. Dependiendo del sistema y el compilador que se esté utilizando, algunos pueden ser requeridos.
    • Verifique que los valores que se utilizan (por ejemplo, las constantes 12 y 10) sean apropiados para la tarea que se está realizando.
    • Verifique cualquier operación aritmética que se esté realizando. En este caso, multiplicar 12 por 12 puede resultar en un valor demasiado grande para el registro al de 8 bits, por lo que puede ser una fuente de error.
    • Asegúrese de que la pila se esté usando adecuadamente y que los valores se estén empujando y sacando correctamente.
    • Examina de cerca cualquier declaración condicional (por ejemplo, la línea jnz .a) para asegurarse de que estén revisando adecuadamente los valores correctos y que el control de flujo sea correcto.

    De nuevo, sin más contexto, es difícil ser específico sobre lo que podría estar mal, pero estas son algunas consideraciones generales a tener en cuenta al solucionar problemas de código en ensamblador.

Comments are closed.