Уравнение - Assembler (226100)

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

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

Помогите решить уравнение я недавно начал учить ассемблер a/b+1 a>b -2 a=b (a-b)/a a<b

Решение задачи: «Уравнение»

textual
Листинг программы
Datas segment
a dw 1
b dw 10
c1 dw 1
c2 dw -25
c3 dw 5
c4 dw -1
ostacha dw ?
x dw ?
z dw ?
mesg db "Delenie na nol ! $";
mesg1 db "-2  $";
 
Datas ends
 
Codes segment
Assume cs:Codes, ds : Datas
 
First:
MOV ax, Datas
mov ds,ax
mov ax,a
cmp ax,b
jg @if1
jl @if3
je @if2
         @if1:
         xor ax, ax
         mov ax,b
         or ax,ax
         jz @null
         mov ax,a
         cwd
         idiv b
         adc ax,c1
         jmp @viv
 
         @if3:
         xor ax, ax
         mov ax,a
         or ax,ax
         jz @null
         mov ax,a         
         sub ax,b
         cwd
         idiv a
         jmp @viv
 
@if2:
         xor ax, ax
         mov    AH, 09h
         mov    DX, offset mesg1
         int    21h
         jmp @v
 
   @null:
   mov  AH, 09h
    mov DX, offset mesg
    int     21h
    jmp @v
 
;vivod
@viv:
 
mov x,ax
mov ostacha,dx
jmp outtext
 
outtext: mov ax,x
         push ax
cmp ax,0
jns @plus
mov ah,02h
mov dl,'-'
int 21h
pop ax
neg ax
@plus:
xor cx,cx
mov bx,10
@dvsn:xor dx,dx
      div bx
      push dx
      inc cx
      test ax,ax
      jnz short @dvsn
      mov ah,02h
      @vivod:pop dx
             add dl,30h
             int 21h
             loop @vivod
      mov ah,02h
      mov dl,'.'
      int 21h
 
mov ax,ostacha
push ax
xor cx,cx
mov bx,10
@dvsn_1:xor dx,dx
        div bx
        push dx
        inc cx
        test ax,ax
        jnz short @dvsn_1
        mov ah,02h
        @vivod_1:pop dx
                add dl,30h
                int 21h
                loop @vivod_1
 
;exit
@v:
mov ah,4ch
mov Al, 0
int 21h
Codes ends
end First

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

  1. В сегменте данных (Datas) содержатся переменные и константы:
    • a, b, c1, c2, c3, c4 - шестнадцатеричные числа, используемые в расчётах;
    • ostacha, x, z - шестнадцатеричные числа, используемые для вывода результатов;
    • mesg, mesg1 - строки, используемые для вывода сообщений;
    • null - пустая строка, используемая для вывода сообщения об ошибке.
  2. В сегменте кода (Codes) содержится машинный код, выполняющий следующие действия:
    • Проверка условия: если a больше b, то переход к блоку @if3, иначе к блоку @if1.
    • Блок @if1 выполняет деление a на b и выводит результат в ostacha и x.
    • Блок @if3 выполняет вычитание b из a и выводит результат в ostacha и x.
    • Если a равно нулю, то переход к блоку @null, иначе к блоку @if2.
    • Блок @null выводит сообщение об ошибке и переходит к блоку @viv.
    • Блок @if2 выводит сообщение с десятичной частью числа, используя переменные ostacha и x.
    • Блок @viv выводит число, используя переменную x.
    • Выполняется деление числа, используя переменные ostacha и x, и выводится результат.
    • Выполняется деление числа, используя переменные ostacha и x, и выводится результат с десятичной частью.
    • Выполняется выход из программы.

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


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

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

9   голосов , оценка 4 из 5
Похожие ответы