Y1=7, если x<3. Как докончить? (Часть 2) - Assembler
Формулировка задачи:
Здравствуйте. Вот опять та же задача и та же проблема... http://www.cyberforum.ru/assembler/thread825450.html
ХМ... нет, теперь другая проблема.
В общем, помогите пожалуйста. Нужно теперь нужно сделать подпрограмму...
вот код программы с макрокомандами, за которую большое спасибо ..................
Вот я набрал вроде три файла: вычисление У1, У2 и У. Но, у меня бесконечное вычисление получается. посомтрите пожалуйста, что же не так блин
Нахождение У1:
Нахождение У2:
Ну и У:
Компануется все нормально, только вот чует моя п*п* что-то тут не так...
Задача:
http://www.cyberforum.ru/attachments/251122d1364842822
Mikl___
у..model small .stack 30 .data x dw 6 a dw 2 y dw ? y1 dw ? y2 dw ? .code func1 macro x11,a11,y11 local MТ1,MT2,MT3 push ax mov ax,x11 cmp ax,3 jge MT1 add ax,7 JMP MT2 MT1: mov ax,a11 test ax,ax jns MT3 neg ax ;зменение знака MT3: add ax,x11 MT2: mov y11,ax pop ax endm func2 macro x11,a11,y22 local M1,M2 push ax cmp x11,5 jg M1 mov y22,1 jmp M2 M1: mov ax,a11 add ax,x11 mov y22,ax M2: pop ax endm .startup mov ax,@data mov ds,ax func1 x,a,y1 ; вычисление y1 func2 x,a,y2 ; вычисление y2 mov dx,0 mov ax,y1 div y2 mov y,dx; y = y1 mod y2 .exit 0 end
.model small .code iro61 proc far public iro61 push ax push bx mov ax,6 cmp ax,3 jge MT1 add ax,7 JMP MT2 MT1: mov ax,2 test ax,ax ; AND b CMP jns MT3 neg ax ;изменение знака MT3: add ax,6 MT2: mov bx,ax pop ax ret iro61 endp .exit 0 end
.model small .code iro62 proc far public iro62 push ax cmp ax,5 jg M1 mov ax,1 jmp M2 M1: mov ax,2 add ax,6 mov bx,ax M2: pop ax ret iro62 endp .exit 0 end
.model medium Title iro6 Extrn iro61:far Extrn iro62:far .stack 30 .data x dw 6 a dw 2 y dw ? y1 dw ? y2 dw ? .code .startup mov ax,@data mov ds,ax call iro61 mov ax,@data mov ds,ax call iro62 add ax,bx mov y1,ax mov dx,0 mov ax,y1 div y2 mov y,dx .exit 0 end
помогите пожалуйста
Решение задачи: «Y1=7, если x<3. Как докончить? (Часть 2)»
textual
Листинг программы
Program lab7; var a,x:word; y1,y2:word; {$L lab7_as} function yy2 (var x1,a1):word;external; function yy1 (var x1,a1):word;assembler; asm push ax push bx mov ax,x cmp ax,3 jge @M1 add ax,7 jmp @M2 @M1: mov ax,a test ax,ax jns @M3 neg ax @M3: add ax,x @M2: mov bx,ax pop ax end; begin write('x= '); readln(x); write('a= '); readln(a); y1:=yy1(x,a); y2:=yy2(x,a); writeln('*'); write(y1 mod y2); readln; end.
Объяснение кода листинга программы
- Программа написана на языке ассемблера.
- В программе используются 4 переменные: a, x, y1, y2 (переменные a и x читаются с клавиатуры, y1 и y2 вычисляются в программе).
- Переменная a инициализируется значением 7.
- Переменная x инициализируется значением, считываемым с клавиатуры.
- Переменная y1 вычисляется как сумма a и x, если x меньше 3, иначе как a.
- Переменная y2 вычисляется как сумма a и x.
- Выводится значение переменной y1, модуль значения переменной y2 (остаток от деления y1 на y2).
- Программа завершается чтением с клавиатуры.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д