Вычислить 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

Оцени полезность:

11   голосов , оценка 3.818 из 5
Похожие ответы