assembly sum division masm32

assembly - Número de impresión Después de usar div y mod-no funciona MASM



sum division (2)

Para eliminar el bloqueo:

1) Presumible que desea imprimir un número y no una cadena. Entonces cambia

fmt db ''%s'',0

a

fmt db ''%d'',0

2) Cambie el orden incorrecto y el desplazamiento incorrecto en

invoke crt_printf,offset Sum2,offset fmt ; this would be in C: printf (&Sum2,&fmt);

a

invoke crt_printf, offset fmt, Sum2

3) Agregue una salida al final:

invoke crt_exit, 0

Por cierto: supongo que SomeFunc no hará lo que quieras. Pero hay demasiados errores para una respuesta corta. Use un depurador para ver qué está pasando. Recomiendo OllyDbg .

Intento escribir un programa que obtenga un String que contenga un número, y poner en la variable Sum2 la suma de los dígitos del número que obtuvo la función. esto es lo que escribí pero no funciona y no sé por qué:

.386 .MODEL Flat, STDCALL option casemap:none SomeFunc proto :DWORD include /masm32/include/windows.inc include /masm32/include/msvcrt.inc includelib /masm32/lib/msvcrt.lib .data Sum2 dd ? stop db 0 fmt db ''%s'',0 .code SomeFunc proc Number:DWORD Lop: mov eax,Number mov ebx,''10'' xor edx,edx div ebx add Sum2,edx mov Number,eax cmp Number,0 jna Lop ret SomeFunc endp start: invoke SomeFunc,''123'' invoke crt_printf,offset Sum2,offset fmt end start

Realmente no entiendo por qué no funciona y cómo lo hago funcionar. ¿alguien puede explicarme? Perdón por mi mal ingles. gracias por la ayuda.


Concentrándose en SomeFunc

  • Debe borrar Sum2 antes de usar esta función. Sin hacerlo, solo puedes esperar tener suerte una vez.
  • Quieres dividir por 10 y no por una cadena ''10''
  • Debe continuar el ciclo siempre que EAX no sea cero.

Aplicando todo esto da:

SomeFunc proc Number:DWORD mov Sum2, 0 mov eax, Number mov ebx, 10 Lop: xor edx, edx div ebx add Sum2, edx mov Number, eax cmp eax, 0 jne Lop ret SomeFunc endp

Tenga en cuenta que SomeFunc espera un número mientras que invoke SomeFunc,''123'' pasa un puntero a una cadena de 3 caracteres.