Top.Mail.Ru
Ответы

Составить программу на Ассемблере для вычисления выражения

1. Составить на языке ассемблера программу, выполняющую заданные вычисления. При этом: - массив элементов данных – размерность DW; - в программе выполнять проверку деления на ноль или другие особые ситуации. 2. Составить программу просчета задания на языке высокого уровня (любом) и убедиться, что результат совпадает с результатом, полученным на ассемблерной программе (в прогрмме проверки учесть, что все вычисления на ассемблере – целочисленные!). Z[k] = (k+1)**2*X[k+1]**2+(N+1-k)**2*X[N+1-k]**2 N=6 k=1,2,...6

Дополнен

и скриншоты работы программы

По дате
По рейтингу
Аватар пользователя
8мес
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
 .model small 
.stack 100h 
 
.data 
    N DW 6 
    X DW 1, 2, 3, 4, 5, 6 
    Z DW 6 dup(?)  ; Зарезервировано пространство для массива Z 
 
.code 
main proc 
    mov ax, @data 
    mov ds, ax 
 
    mov cx, 6      ; Инициализация счетчика цикла 
 
    ; Цикл по k 
    loop_k: 
        push cx     ; Сохранение значения счетчика 
        mov bx, cx   ; bx = k 
        inc bx      ; bx = k+1 
 
        ; Вычисление (k+1)**2 
        mov ax, bx 
        mul ax      ; ax = (k+1)**2 
 
        ; Проверка деления на ноль для X[k+1] 
        mov bx, [X + bx*2]   ; bx = X[k+1] 
        cmp bx, 0 
        je divide_by_zero 
 
        ; Вычисление X[k+1]**2 
        mov dx, bx 
        mul dx      ; dx:ax = X[k+1]**2 
 
        ; Умножение на (k+1)**2 
        mul ax      ; dx:ax = (k+1)**2 * X[k+1]**2 
 
        ; Сохранение результата в Z[k] 
        mov [Z + bx*2 - 2], ax 
 
        ; Вычисление (N+1-k)**2 
        mov bx, N 
        inc bx      ; bx = N+1 
        sub bx, cx   ; bx = N+1 - k 
        mov ax, bx 
        mul ax      ; ax = (N+1-k)**2 
 
        ; Проверка деления на ноль для X[N+1-k] 
        mov bx, [X + bx*2]  ; bx = X[N+1-k] 
        cmp bx, 0 
        je divide_by_zero 
 
        ; Вычисление X[N+1-k]**2 
        mov dx, bx 
        mul dx      ; dx:ax = X[N+1-k]**2 
 
        ; Умножение на (N+1-k)**2 
        mul ax      ; dx:ax = (N+1-k)**2 * X[N+1-k]**2 
 
        ; Сложение с Z[k] 
        add [Z + bx*2 - 2], ax 
 
        pop cx      ; Восстановление значения счетчика 
        loop loop_k 
 
    ; Вывод результатов 
    ; ... (реализовать вывод массива Z) 
 
    exit: 
        mov ah, 4ch 
        int 21h 
 
    divide_by_zero: 
        ; Обработка деления на ноль (например, вывод сообщения) 
        ; ... 
        jmp exit 
main endp 
end main