Вычислить выражение - Assembler (223244)

Узнай цену своей работы

Формулировка задачи:

Написать программу, которая вычисляет арифметическое выражение и результат записывает в память Операнды А, В, С, D, E, F беззнаковые, длиной в байтах, согласно индекса X=K+B3-D2/C1+E1*F2 K=25630

Решение задачи: «Вычислить выражение»

textual
Листинг программы
LOCALS
 
.model small
 
.stack 100h
 
.data
        A       db      0
        B       db      3 dup(1)
        C       db      8
        D       dw      12
        E       db      48
        F       dw      84
        K       dw      25630
 
        Res     db      4 dup(0)
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        mov     dx,     0               ;(dx:ax):=K
        mov     ax,     K
        add     ax,     word ptr B      ;(dx:ax):=K+B3
        adc     dl,     byte ptr B+2
        adc     dh,     0
 
        mov     word ptr Res,   ax      ;сохранение промежуточных результатов
        mov     word ptr Res+2, dx
 
        mov     ax,     D               ;(dx:ax):=D2
        mov     dx,     0
        mov     bh,     0               ;bx:=C1
        mov     bl,     C
        div     bx                      ;ax:=D2/C1
        mov     bx,     ax              ;bx:=D2/C1
 
        mov     ax,     word ptr Res    ;восстановление промежуточных результатов
        mov     dx,     word ptr Res+2
 
        sub     ax,     bx              ;(dx:ax):=(dx:ax)-bx=K+B3-D2/C1
        sbb     dx,     0
 
        push    ax                      ;сохранение промежуточных результатов
        push    dx
 
        mov     ah,     0               ;(dx:ax):=E1*F2
        mov     al,     E
        mul     word ptr F
 
        pop     bx                      ;восстановление промежуточных результатов
        pop     cx
 
        add     ax,     cx              ;(dx:ax):=K+B3-D2/C1+E1*F2
        adc     dx,     bx
 
        mov     word ptr Res,   ax      ;запись результата в память
        mov     word ptr Res+2, dx
 
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main

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

11   голосов , оценка 4.091 из 5