Вычислить n = 1+2+4+8+…+2^10 при помощи цикла - Assembler/FASM
Формулировка задачи:
Вычислить: n= 1+2+4+8+…+210 (с шагом +2) c помощью цикла.
В голове я понимаю как сделать, а руки не могут.
Решение задачи: «Вычислить n = 1+2+4+8+…+2^10 при помощи цикла»
textual
Листинг программы
format MZ ;Исполняемый файл DOS EXE (MZ EXE) entry code_seg:start ;Точка входа в программу ;-------------------------------------------------------------------- stack 200h ;Размер стека ;-------------------------------------------------------------------- segment data_seg ;Cегмент данных CrLf db 0Dh, 0Ah, '$' ;перевод строки msgPressAnyKey db 0Dh, 0Ah, 'Press any key to exit...', '$' ;-------------------------------------------------------------------- segment code_seg ;Сегмент кода start: ;Точка входа в программу mov ax, data_seg ;Инициализация регистра DS mov ds, ax xor ax, ax mov cx, 11 mov bx, 1 @@for: add ax, bx shl bx, 1 loop @@for call Show_AX mov ah, 09h mov dx, msgPressAnyKey int 21h mov ah, 0 int 16h mov ax, 4C00h int 21h ;Завершение программы ;-------------------------------------------------------------------- ; выводит число из регистра AX на экран ; входные данные: ; ax - число для отображения Show_AX: push ax push bx push cx push dx push di mov cx, 10 ; cx - основание системы счисления xor di, di ; di - кол. цифр в числе @@Conv: xor dx, dx div cx ; dl = num mod 10 add dl, '0' ; перевод в символьный формат inc di push dx ; складываем в стэк or ax, ax jnz @@Conv ; выводим из стэка на экран @@Show: pop dx ; dl = очередной символ mov ah, 2 ; ah - функция вывода символа на экран int 21h dec di ; повторяем пока di<>0 jnz @@Show pop di pop dx pop cx pop bx pop ax ret