Вычислить выражение с использованием команды условного перехода - Assembler

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

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

Вычислить выражение с использованием команды условного перехода. у=27-(7а+8b) если А>В и 11в+17 если А<=В

Решение задачи: «Вычислить выражение с использованием команды условного перехода»

textual
Листинг программы
  1. .model small
  2. .stack 100h
  3. .data
  4.         A       db      12
  5.         B       db      34
  6. .code
  7. main    proc
  8.         mov     ax,     @data
  9.         mov     ds,     ax
  10.  
  11.         ;проверка отношения A и B
  12.         mov     al,     A
  13.         mov     bl,     B
  14.         cmp     al,     bl
  15.         jg      A_Great_B
  16.  
  17.         ;если A<=B
  18.         mov     al,     11
  19.         imul    bl              ;ax:=11*A
  20.         add     ax,     17      ;ax:=11*A+17
  21.         jmp     @@Exit
  22.  
  23.         ;если A>B
  24. A_Great_B:
  25.         mov     cl,     7
  26.         imul    cl              ;ax:=7*A
  27.         mov     cx,     ax      ;cx:=7*A
  28.         mov     al,     8
  29.         imul    bl              ;ax:=8*B
  30.         add     cx,     ax      ;cx:=7*A+8*B
  31.         mov     ax,     27
  32.         sub     ax,     cx      ;ax:=27-(7*A+8*B)
  33. @@Exit:
  34.         mov     ax,     4C00h
  35.         int     21h
  36. main    endp
  37. end     main

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

  1. .model small - это команда, которая устанавливает модель памяти для программы. В данном случае, модель памяти - small, что означает, что для программы будет выделено 64 КБ памяти.
  2. .stack 100h - это команда, которая устанавливает размер стека для программы. В данном случае, размер стека составляет 100 байт.
  3. .data - это сегмент, в котором хранятся данные программы.
  4. A db 12 и B db 34 - это команды, которые определяют две переменные - A и B. Значение переменной A равно 12, а значение переменной B равно 34. Обе переменные хранятся в сегменте данных.
  5. main proc - это начало процедуры main.
  6. mov ax, @data и mov ds, ax - это команды, которые устанавливают сегмент данных на основе сегмента стека. Это позволяет программе обращаться к переменным A и B.
  7. mov al, A и mov bl, B - это команды, которые копируют значения переменных A и B в регистры al и bl соответственно.
  8. cmp al, bl - это команда, которая сравнивает значения в регистрах al и bl. Если значение в регистрале al больше или равно значению в регистре bl, то выполняется следующий переход.
  9. jg A_Great_B - это переход, который выполняется, если значение в регистрале al больше значения в регистре bl.
  10. mov cl, 7 и imul cl - это команды, которые умножают значение переменной A на 7 и сохраняют результат в регистре cx.
  11. mov cx, ax - это команда, которая копирует значение из регистра ax в регистр cx.
  12. mov al, 8 и imul bl - это команды, которые умножают значение переменной B на 8 и сохраняют результат в регистре ax.
  13. add cx, ax - это команда, которая складывает значения из регистров cx и ax и сохраняет результат в регистре cx.
  14. mov ax, 27 - это команда, которая устанавливает значение регистра ax равным 27.
  15. sub ax, cx - это команда, которая вычитает значение из регистра cx из значения в регистре ax и сохраняет результат в регистре ax.
  16. mov ax, 4C00h - это команда, которая устанавливает значение регистра ax равным 4C00h.
  17. int 21h - это команда, которая вызывает функцию 21h для выполнения операции ввода-вывода.
  18. main endp - это конец процедуры main.
  19. end main - это команда, которая заканчивает программу.
  20. hlt - это команда, которая приостанавливает выполнение программы и переходит в режим ожидания.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут