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

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

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

Вычислить условный целочисленный выражение в форматах Integer и Word, используя команды сравнения. Результат проверить на область допустимых значений. Я думаю,что а и b запрашивать с консоли и проверять на то являетьсяли это числом.

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

textual
Листинг программы
  1. ;  b/a+2,a>b
  2. ;X=-11,a=b
  3. ;  (a-8)/b,a<b
  4. model   tiny
  5. .code
  6. org 100h
  7. begin:  mov ax,a
  8.     mov bx,b
  9.     cmp ax,bx
  10.     jg  @01
  11.     jl  @02
  12. ;equ
  13.     mov ax,-11
  14.     mov bx,1
  15.     jmp OutNum
  16. a   dw  3
  17. b   dw  6
  18. ;b/a+2=(b+2a)/a
  19. @01:    xchg    ax,bx
  20.     add ax,bx
  21.     add ax,bx;b+a+a
  22.     jmp OutNum
  23. ;a-8
  24. @02:    sub ax,8
  25. OutNum: mov di,10
  26.     cwd
  27.     idiv    bx
  28.     push    dx
  29.     push    ax
  30.     or  ax,dx
  31.     pop ax
  32.     jns on1
  33.     not ax
  34.     inc ax
  35.     push    ax
  36.     mov al,'-'
  37.     int 29h
  38.     pop ax
  39. on1:    xor cx,cx
  40. on2:    xor dx,dx
  41.     div di
  42.     push    dx
  43.     inc cx
  44.     or  ax,ax
  45.     jnz on2
  46. on3:    pop ax
  47.     or  al,'0'
  48.     int 29h
  49.     loop    on3
  50.     pop ax
  51.     or  ax,ax
  52.     jz  on6
  53.     jns on4
  54.     not ax
  55.     inc ax
  56. on4:    push    ax
  57.     mov al,'.'
  58.     int 29h
  59.     mov cx,20
  60. on5:    pop ax
  61.     or  ax,ax
  62.     jz  on6
  63.     dec cx
  64.     jz  on6
  65.     xor dx,dx
  66.     mul di
  67.     div bx
  68.     push    dx
  69.     or  al,'0'
  70.     int 29h
  71.     jmp on5
  72. on6:    ret
  73.     end begin

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

  1. Объявление переменных a и b со значениями 3 и 6 соответственно: a dw 3, b dw 6.
  2. Сравнение значений a и b: cmp ax, bx.
  3. Если a > b, то устанавливается значение X = -11: mov ax, -11.
  4. Если a < b, то вычисляется выражение (a - 8) / b: sub ax, 8.
  5. Перевод числа в строку для вывода на экран: mov di, 10, cwd, idiv bx, push dx, push ax.
  6. Проверка знака числа и добавление знака минус, если число отрицательное: or ax, dx, jns on1, not ax, inc ax, push ax, mov al, '-', int 29h.
  7. Преобразование числа из двоичной системы счисления в десятичную и вывод на экран: xor cx, cx, xor dx, dx, div di, push dx, inc cx, or ax, ax, jnz on2, pop ax, or al, '0', int 29h, loop on3.
  8. Если преобразованная часть числа не равна нулю, то вычисляется десятичная дробная часть: or ax, ax, jz on6, jns on4, not ax, inc ax, push ax, mov al, '.', int 29h, mov cx, 20, dec cx, xor dx, dx, mul di, div bx, push dx, or al, '0', int 29h, jmp on5.
  9. Возврат из подпрограммы и завершение программы: ret, end begin.

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


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

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

12   голосов , оценка 3.917 из 5

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

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

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