Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Составьте программу сложения на ассемблере.

Кирилл Кабаков Знаток (412), закрыт 11 лет назад
Составьте программу сложения двоично-десятичных чисел разрядностью в четыре байта с представлением в каждом байте только одной десятичной цифры.
Буду трижды благодарен...
Лучший ответ
Миоко Таканава Гений (51590) 11 лет назад
Сложение чисел в неупакованном двоично-десятичном коде.
Компилятор TASM (tasm32).

ideal
p386
model flat, stdcall

procdesc GetStdHandle winapi :dword
procdesc WriteConsoleA winapi :dword, :dword, :dword, :dword, :dword
procdesc lstrlenA winapi: dword
procdesc ExitProcess winapi :dword
procdesc _putch winapi :dword
extrn _getch: near

STD_INPUT_HANDLE equ -10
STD_OUTPUT_HANDLE equ -11

segment data
Prompt1 db 'Введите 1-е число: ',0
Prompt2 db 13,10,'Введите 2-е число: ',0
ExitPrompt db 13,10,10,'Для завершения работы нажмите любую клавишу... ',0
Result db 13,10,'Сумма: '
Buff db 4 dup (?), 0

hStdIn dd ?
hStdOut dd ?
VarA dd ?
VarB dd ?
VarR dd ?
ends

segment code
N84677659:
    call GetStdHandle,STD_INPUT_HANDLE
    mov [hStdIn],eax
    call GetStdHandle,STD_OUTPUT_HANDLE
    mov [hStdOut],eax
    call Print,offset Prompt1
    call Input
    mov [VarA],edx
    call Print,offset Prompt2
    call Input
    mov [VarB],edx

    lea esi,[VarA]
    lea ebx,[VarB]
    lea edi,[VarR]
    mov ecx,4
    clc
SumLoop:
    lodsb
    adc al,[ebx]
    aaa
    stosb
    inc ebx
    loop SumLoop

    std
    mov eax,[VarR]
    or eax,30303030h
    lea edi,[Buff + 3]
    mov ecx,4
StorLoop:
    stosb
    shr eax,8
    loop StorLoop
    cld
    call Print,offset Result

    call Print,offset ExitPrompt
    call _getch
    call ExitProcess,0
   
proc Print stdcall,Str:dword
    call lstrlenA,[Str]
    call WriteConsoleA,[hStdOut],[Str],eax,0,0
    ret
endp

proc ReadChar uses ecx edx
RepRC:
    call _getch
    cmp al,0Dh
    je short ExitRC
    cmp al,30h
    jb RepRC
    cmp al,39h
    ja RepRC
ExitRC:
    ret
endp

proc Input
    mov ecx,4
    xor edx,edx
InpLoop:
    call ReadChar
    test al,0F0h
    jne short Digit
    jcxz ExitInp
    jmp InpLoop
Digit:
    jcxz InpLoop
    push ecx
    push edx
    call _putch,eax
    pop eax
    pop edx
    pop ecx
    shl edx,8
    mov dl,al
    and dl,0Fh
    dec ecx
    jmp InpLoop
ExitInp:
    ret
endp

ends
    end N84677659

P.S. Суммирование чисел выделено жирным шрифтом.
Программа блокирует нажатие любых клавиш, кроме цифровых и Enter.
Не реагирует на нажатие Enter, пока не будет введено 4 цифры.
Ввод более 4-х цифр блокируется.

Остальные ответы
Wind in the wild Гуру (3688) 11 лет назад
трижды - это три раза по 100р ?
Похожие вопросы