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

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

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

Помогите,пожалуйста! Необходимо вычислить выражение: W1*W2-B1*B2 И посоветуйте,пожалуйста,литературу по языку Ассемблер.Спасибо!

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

textual
Листинг программы
LOCALS
 
.model small
 
.stack 100h
 
.data
        W1      dw      300
        W2      dw      500
        B1      db      120
        B2      db      70
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        mov     ax,     W1      ;(dx:ax):=W1*W2
        imul    W2
        mov     cx,     ax      ;(bx:cx):=(dx:ax)
        mov     bx,     dx
 
        mov     al,     B1      ;ax:=B1*B2
        imul    B2
        cwd                     ;(dx:ax):=B1*B2
 
        sub     cx,     ax      ;(bx:cx):=W1*W2-B1*B2
        sbb     bx,     dx
 
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main

Объяснение кода листинга программы

  1. Установка сегмента данных на сегмент стека: .model small .stack 100h
  2. Объявление переменных: .data W1 dw 300 W2 dw 500 B1 db 120 B2 db 70
  3. Начало выполнения программы: main proc
  4. Передача сегмента данных в регистр ax: mov ax, @data
  5. Передача сегмента данных в регистр ds: mov ds, ax
  6. Вычисление значения (dx:ax) как (W1*W2): mov ax, W1 imul W2
  7. Передача результата в регистры bx и cx: mov cx, ax mov bx, dx
  8. Вычисление значения ax как (B1*B2): mov al, B1 imul B2
  9. Приведение регистра ax к типу dx: cwd
  10. Вычисление значения (bx:cx) как (W1W2)-(B1B2): sub cx, ax sbb bx, dx
  11. Вывод в консоль сообщения об успешном выполнении программы: mov ax, 4C00h int 21h
  12. Конец выполнения программы: main endp
  13. Конец файла: end

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

10   голосов , оценка 4.2 из 5