label less;
label greater;
label ennnd;
var k: real;
n: byte;
result: byte;
min: byte;
max: byte;
i: Byte;
digit: byte;
Function Interval(digit, min, max: byte):byte;
label ennnd;
label greater;
label less;
var res: byte;
begin
res:=0;
asm
mov al,digit; //приравниваю al=digit
cmp al,min; //сравниваю с минимальной границей
ja greater; //если больше, то переходим
jna ennnd; //если нет, то на выход
greater:
cmp al,max; //сравниваю с максимальной границей
jb less; //если меньше, то переходим
jnb ennnd; //если нет, то на выход
less:
mov res,1; //если меньше, то попадает в интервал, то рес = 1
ennnd:
end;
end;
begin
writeln('Number of digit?: ');
readln(n);
writeln('Min digit?: ');
readln(min);
writeln('Max digit: ');
readln(max);
for i:= 0 to n-1 do
begin
writeln('Digit? ');
readln(digit);
if (Interval(digit,min,max) > 0) then
writeln('In Interval')
else
writeln('Not In Interval');
end;
readln(k);
end.
function IntervalAsm(const AValue, AMin, AMax: Byte): Boolean; register;
asm
// Входные параметры уже лежат в регистрах:
// al = AValue
// dl = AMin
// cl = AMax
cmp dl, al // сравнение с AMin
ja @@RetFalse // если al < dl, то выход с False
cmp cl, al // сравнение с AMax
jae @@RetTrue // если al <= cl, то выход с True
@@RetFalse:
xor eax, eax // eax = 0 -> Result = False
ret
@@RetTrue:
mov al, 1 // eax = 1 -> Result = True
ret
end;
uses
SysUtils;
label less;
label greater;
label ennnd;
var k: real;
n: byte;
min: byte;
max: byte;
i: byte;
digit: byte;
Function Interval(digit, min, max: byte):byte;
label ennnd;
label greater;
label less;
var res: byte;
begin
asm
mov res,0;
mov al,digit; //приравниваю al=digit
cmp al,min; //сравниваю с минимальной границей
ja greater; //если больше, то переходим
jna ennnd; //если нет, то на выход
greater:
cmp al,max; //сравниваю с максимальной границей
ja ennnd; //если нет, то на выход
mov res,1; //если меньше, то попадает в интервал, то рес = 1
ennnd:
end;
Interval:=res;
end;
begin
writeln('Number of digit?: ');
readln(n);
writeln('Min digit?: ');
readln(min);
writeln('Max digit: ');
readln(max);
for i:= 0 to n-1 do
begin
writeln('Digit? ');
readln(digit);
writeln(Interval(digit,min,max));
if (Interval(digit,min,max) > 0) then
writeln('In Interval')
else
writeln('Not In Interval');
end;
readln(k);
end.