Уравнение - 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
Объяснение кода листинга программы
- В сегменте данных (Datas) содержатся переменные и константы:
- a, b, c1, c2, c3, c4 - шестнадцатеричные числа, используемые в расчётах;
- ostacha, x, z - шестнадцатеричные числа, используемые для вывода результатов;
- mesg, mesg1 - строки, используемые для вывода сообщений;
- null - пустая строка, используемая для вывода сообщения об ошибке.
- В сегменте кода (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, и выводится результат с десятичной частью.
- Выполняется выход из программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д