Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Болталка (https://forum.antichat.xyz/forumdisplay.php?f=46)
-   -   Зачет по ассемблеру. (https://forum.antichat.xyz/showthread.php?t=165843)

Baofy 24.12.2009 18:25

Зачет по ассемблеру.
 
Помогите с зачетом, сам я в ассемблере не понимаю надо написать 2 программы в паскале с встраиваемыми модулями ассемблера. Задачи:

1) Найти сумму натуральных чисел меньшик K.

2) Найти частное между 2 числами введенными с клавиатуры. Эту я сделал но она не работает вот листинг:

var a,b:integer;
chas:integer;
begin
writeln('Vvedite a ');
readln(a);
writeln ('Vvedite b');
readln(b);
asm
mov ax,a
mov bx,b
div ax,b
mov chas,ax

end;
writeln('Chasnoe', chas);
end.

Deathdreams 24.12.2009 18:26

Цитата:

a,b:integer;
chas:integer;
Почему не real?

Baofy 24.12.2009 18:28

Deathdreams да у нас это особого значения не имеет можно и целые и с точкой главно чтобы работала.

.Slip 24.12.2009 18:51

asm
mov ax, [a]
div ax, [b]
move [chas], ax

Не? Просто нету возможности проверить вот и тыкаюсь

Baofy 24.12.2009 20:43

.Slip пишет Error 155: Invalid combination of opcode and operands выдает на строчке div ax, [b]

.Slip 24.12.2009 20:47

Дай какой нибудь рабочий кусок паскаль+асм для примера, мне никак сейчас не проверить, поэтому методом тыка.

Baofy 24.12.2009 20:53

.Slip да у меня у самого нету, решить надо. если убрать b то программа работает но всегда в частное выдаеться один т.е например делишь 6 на 3 будет 1 и так всегда а с b отказываеться работать хз почему(
asm
mov ax, a
div ax, b
mov [chas], ax

Retimiled 24.12.2009 21:02

1.я как то так 8)
mov cx, [K]
dec cx
xor ax,ax
A: add cx
loop A:
mov [rez],ax

P.S. .... нужно просто определиться как ПАСКАЛЯ-АССЕМБЛЯ берет переменные и записывает их... затем вспомнить что DIV получает не только целое но и остаток от деления и где они лежат зависят от ТОЛЩИНЫ переменных!

:) и главное у DIV один операнд .... при ширине WORD целое записывается в AL(нижний байт AX) а остаток в AH(верхний байт AX) ...

Цитата:

Сообщение от Baofy
.Slip да у меня у самого нету, решить надо. если убрать b то программа работает но всегда в частное выдаеться один т.е например делишь 6 на 3 будет 1 и так всегда а с b отказываеться работать хз почему(
asm
mov ax, a
div ax, b
mov [chas], ax

... это говорит о том что при делении адреса 'a' ....который никак не поместится в AX разделить на адрес 'b' который урежется до WORD .... действительно будет получаться всегда 1

Baofy 24.12.2009 21:18

Retimiled ок спасибо только пока не могу проверить.

slesh 24.12.2009 23:36

ппц. народ. div ax, b полюбому выдаст ошибку.

1) div принимает тока 1 параметр.
2) если делитель размером в слово, то делимое должно быть расположено в паре регистров dx:ax, причем младшая часть делимого находится в ax. После операции частное помещается в ax, а остаток — в dx;

по этому будет чтото типа такого
Код:

mov ax,a
mov bx,b
xor dx,dx ; dx = 0
div bx
mov chas, ax



Время: 07:37