Другие языки программирования и технологии

Помогите написать программу в Assembler НАЙТИ СУММУ ЦИФР 3-ЗНАЧНОГО ЧИСЛА И ПРОИЗВЕДЕНИЕ 4-ЗНАЧНОГО ЧИСЛА

Программа написана так, как мне удалось понять условие задачи. Более внятно нужно расписывать задание.

p386
model flat, stdcall

includelib "imp32i.lib"

procdesc _getch
procdesc _putch :dword
procdesc printf :dword, :vararg
procdesc _exit :dword

dataseg
Prompt db "Введите число: ", 0
ResSum db "Сумма цифр 3-значного числа = %u", 10, 0
ResProd db "Произведение цифр 4-значного числа = %u", 10, 0
ResError db "Введено не 3-х и не 4-значное число. ", 10, 0
Format db "%u", 10, 0

codeseg
    startupcode
RepLoop:
    call printf, Prompt
    call ReadUInt
    cmp eax, 100
    jb LT3GT4
    cmp eax, 10000
    jae LT3GT4
    xor ebx, ebx
    mov esi, 10
    cmp eax, 1000
    jae FourDigit

ThreeDigit:
    test eax, eax
    jz @F
    xor edx, edx
    div esi
    add ebx, edx
    jmp ThreeDigit
@@:
    call printf, ResSum, ebx
    jmp RepLoop

FourDigit:
    inc ebx
@@:
    test eax, eax
    jz @F
    xor edx, edx
    div esi
    push eax
    mov eax, edx
    mul ebx
    mov ebx, eax
    pop eax
    jmp @B
@@:
    call printf, ResProd, ebx
    jmp RepLoop

LT3GT4:
    call printf, ResError
    jmp RepLoop

proc ReadUInt uses ebx ecx edx edi
    local Len :dword
    xor ebx, ebx
    mov [Len], ebx
ReadUIntRep:
    call _getch
    cmp al, 1Bh
    jne @F
    call _exit, 0
@@:
    cmp al, 8
    jne @F
    test [Len], 03Fh
    jz ReadUIntRep
    dec [Len]
    call _putch, 8
    call _putch, 32
    call _putch, 8
    mov eax, ebx
    xor edx, edx
    mov ebx, 10
    div ebx
    mov ebx, eax
    jmp ReadUIntRep
@@:
    cmp al, 0Dh
    jne @F
    test [Len], 03Fh
    jz ReadUIntRep
    jmp ReadUIntQuit
@@:
    mov ecx, eax
    sub al, 30h
    jb ReadUIntRep
    cmp al, 9
    ja ReadUIntRep
    mov edi, ebx
    movzx eax, al
    mov edx, 10
    xchg eax, ebx
    mul edx
    jnc @F
ReadUIntOverflow:
    mov ebx, edi
    jmp ReadUIntRep
@@:
    add ebx, eax
    jc ReadUIntOverflow
    cmp [Len], 50
    jae ReadUIntRep
    inc [Len]
    call _putch, ecx
    jmp ReadUIntRep
ReadUIntQuit:
    call _putch, 10
    mov eax, ebx
    ret
    endp



P.S. Завершение работы программы происходит по нажатию клавиши ESC.
Мейрбек Кубышев
Мейрбек Кубышев
51 590
Лучший ответ

Похожие вопросы