Сложение чисел

Немного мозговыноса

asm task

Попалась мне тут интересная задачка на асме.

Звучит примерно так:

На стандартный поток ввода подается последовательность 32-битных знаковых целых чисел. Последовательность завершается признаком конца файла. На стандартный вывод напечатайте сумму всех чисел в последовательности. Если при прибавлении очередного считанного числа к промежуточному значению получается результат, не представимый 32-битным знаковым типом, напечатайте либо максимальное представимое значение (при сложении положительных чисел), либо максимальное представимое отрицательное значение (при сложении отрицательных чисел) и завершите программу. Вывод числа завершайте переходом на новую строку. В программе допускается не более двух инструкций условного и безусловного перехода Программа будет компоноваться с libc. Точка входа в программу - main. Можете использовать следующие вспомогательные функции:

  • readi32 - считать целое 32-битное знаковое число
  • writei32 - напечатать целое 32-битное знаковое число
  • nl - перевод каретки
  • finish - завершение программы

Для желающих, сразу же привожу решение:

main:
loop:
    call readi32
    jc end

    add ebx, eax
    jo overflow
    jmp loop
overflow:
    mov eax, ebx
    mov ebx, 0x80000000
    shr eax, 31
    sub ebx, eax
end:
    mov eax, ebx
    call write32i
    call nl
    call finish

Previous Post Next Post