Вычислить значение выражения - 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
Объяснение кода листинга программы
- Объявление переменных a и b со значениями 3 и 6 соответственно:
a dw 3,b dw 6. - Сравнение значений a и b:
cmp ax, bx. - Если a > b, то устанавливается значение X = -11:
mov ax, -11. - Если a < b, то вычисляется выражение (a - 8) / b:
sub ax, 8. - Перевод числа в строку для вывода на экран:
mov di, 10,cwd,idiv bx,push dx,push ax. - Проверка знака числа и добавление знака минус, если число отрицательное:
or ax, dx,jns on1,not ax,inc ax,push ax,mov al, '-',int 29h. - Преобразование числа из двоичной системы счисления в десятичную и вывод на экран:
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. - Если преобразованная часть числа не равна нулю, то вычисляется десятичная дробная часть:
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. - Возврат из подпрограммы и завершение программы:
ret,end begin.