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

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

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

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

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

textual
Листинг программы
;  b/a+2,a>b
;X=-11,a=b
;  (a-8)/b,a<b
model   tiny
.code
org 100h
begin:  mov ax,a
    mov bx,b
    cmp ax,bx
    jg  @01
    jl  @02
;equ
    mov ax,-11
    mov bx,1
    jmp OutNum
a   dw  3
b   dw  6
;b/a+2=(b+2a)/a
@01:    xchg    ax,bx
    add ax,bx
    add ax,bx;b+a+a
    jmp OutNum
;a-8
@02:    sub ax,8
OutNum: mov di,10
    cwd
    idiv    bx
    push    dx
    push    ax
    or  ax,dx
    pop ax
    jns on1
    not ax
    inc ax
    push    ax
    mov al,'-'
    int 29h
    pop ax
on1:    xor cx,cx
on2:    xor dx,dx
    div di
    push    dx
    inc cx
    or  ax,ax
    jnz on2
on3:    pop ax
    or  al,'0'
    int 29h
    loop    on3
    pop ax
    or  ax,ax
    jz  on6
    jns on4
    not ax
    inc ax
on4:    push    ax
    mov al,'.'
    int 29h
    mov cx,20
on5:    pop ax
    or  ax,ax
    jz  on6
    dec cx
    jz  on6
    xor dx,dx
    mul di
    div bx
    push    dx
    or  al,'0'
    int 29h
    jmp on5
on6:    ret
    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