Здравствуйте, Sacha!
Вот в приложении простейшее решение Вашей задачи.
Решается с помощью множителей nums
Я не понял, честно говоря, почему именно такое число должно получиться, но получил
Приложение:
; Title NEW
.model tiny
.386
LOCALS @@
.code
org 100h
start:
mov ax, 3
int 10h
mov eax, 12345678
CALL writeDWORD_DEC
CALL invert
CALL CRLF
CALL writeDWORD_DEC
lea dx, msg_press
mov ah, 9
int 21h
xor ax, ax
int 16h
int 20h
invert proc
; ОЖИДАЕТ слово для изменения в EAX
; организована аналогично writeDWORD_DEC
; только не показывает, а заполняет массив nums
; а из него формирует слово с помощью массива множителей mults
; и возвращает в EAX
push ebx
push ecx
push edx
push esi
push edi
mov ebx, 10
xor ecx, ecx
@@1:
xor edx, edx
div ebx
inc ecx
push edx
or eax, eax
jnz @@1
lea si, mults
cld
xor edi, edi ; временный аккумулятор числа
@@2:
lodsd
pop ebx
mul ebx
cwd
add edi, eax
LOOP @@2
mov eax, edi
pop edi
pop esi
pop edx
pop ecx
pop ebx
ret
invert endp
writeDWORD_DEC proc
; двойное слово в EAX показывает
push eax
push ebx
push ecx
push edx
mov ebx, 10
xor ecx, ecx
@@1:
xor edx, edx
div ebx
inc ecx
push edx
or eax, eax
jnz @@1
@@2:
pop eax
add al, '0'
int 29h
LOOP @@2
pop edx
pop ecx
pop ebx
pop eax
ret
writeDWORD_DEC endp
CRLF proc
push ax
mov al, 10
int 29h
mov al, 13
int 29h
pop ax
ret
CRLF endp
; с помощью этого массива любой порядок можно организовать ;))
mults dd 10, 1, 10000000, 1000000, 100000, 10000, 1000, 100
msg_press db 13,10,'Press any key ...$'
end start