
- •Integer- -32768… 32767 2 байта со знаком
- •Работа с integer (word)
- •Условный переход
- •Сумма первых 10 четных чисел
- •Найти количество чисел от а до 1, которые делятся на 3.
- •Var a,c:byte; (* Кол. Чисел от а до 1, дел на 3*)
- •Можно использовать для а тип word, то тогда надо, чтобы результат был не больше 255.
Работа с integer (word)
var a,b,d1,d2:integer; |
|
a1,b1:integer; |
|
c1:longint; |
|
begin |
|
read(a,b); |
|
asm |
a+b |
mov ax,a |
пересылаем в регистр ax значение переменной а |
mov bx,b |
пересылаем в регистр bx значение переменной b |
add ax,bx |
складываем значения регистров ax и bx |
mov a1,ax |
пересылаем полученный результат в переменную a1 |
end; |
|
asm |
a-b |
mov ax,a |
пересылаем в регистр ax значение переменной а |
mov bx,b |
пересылаем в регистр bx значение переменной b |
sub ax,bx |
вычитаем из значения регистра ax значение регистра bx |
mov b1,ax |
пересылаем полученный результат в переменную b1 |
end; |
|
asm |
a*b |
mov ax,a |
пересылаем в регистр ax значение переменной а |
Imul b |
умножаем результат регистра ax на b (результат записывается в регистры ax, dx) |
mov word ptr c1,ax |
пересылаем часть результата из регистров ax и dx в переменную c1
|
mov word ptr c1+2,dx |
|
end; |
|
asm |
a/b |
mov ax,a |
пересылаем в регистр ax значение переменной а |
cwd |
подготовка к делению |
Idiv b |
делим результат регистра ax на b |
mov d1,ax |
пересылаем результат деления из регистра ax в переменную d1 |
mov d2,dx |
пересылаем остаток то деления из регистра dx в переменную d2 |
end; |
|
writeln(a1,' ',b1,' ',c1) |
|
writeln(d1,' ' ,d2); |
|
end. |
|
Условный переход
Ввести число. Если оно больше 0, то напечатать 1, если равно, то 0, если меньше 0, то -1.
var a,b:integer; |
|
begin |
|
read(a); |
|
asm |
|
cmp a,0 |
сравниваем переменную а с 0 |
jl @1 |
a<0 переход на метку @1 |
jg @2 |
a>0 переход на метку @2 |
mov b,0 |
пересылаем в переменную b 0 |
jmp @3 |
переход на метку @3 |
@1: mov b, -1 |
пересылаем в переменную b -1 |
jmp @3 |
переход на метку @3 |
@2: mov b,1 |
пересылаем в переменную b 1 |
@3: |
метка, если @1 или @2 не выполняются |
end; |
|
writeln(b); |
|
end. |
|
Ввести 2 числа word. Если первое больше второго, то напечатать их разность, если меньше, то произведение, если равны, то напеч. число.
var |
|
a,s:WORD; |
|
d:longint; |
|
begin |
|
writeln('Введите два числа: '); |
|
readln(a,s); |
|
asm |
|
mov ax,a |
пересылаем в регистр ax значение переменной a |
cmp ax,s |
сравниваем значение регистра ax с s |
jg @bol |
a>s переход на метку @bol |
je @rav |
a=s переход на метку @rav |
mul s |
a<s => произведение |
jmp @vv |
переход на метку @vv |
@bol: |
|
sub ax,s |
a>s => разность |
mov dx,0 |
пересылаем в регистр dx 0 |
jmp vv |
переход на метку @vv |
@rav: |
|
mov dx, 0 |
пересылаем в регистр dx 0 |
@vv: |
|
mov word ptr d,ax |
пересылаем результат из регистров ax и dx в переменную d |
mov word ptr d+2,dx |
|
end; |
|
writeln('Результат: ', d); |
|
end. |
|