Консультация № 9197
19.05.2004, 12:48
0.00 руб.
0 5 5
Уважаемые эксперты!
Объясните неграмотному, что происходит
Я пишу прогу на Turbo Pascal 7.0, там делаю вставку на
ASMe, в которой нужно быстро заполнить одномерный массив данных f[i]вычисленными значениями переменной a
так вот команда типа
mov f[i] a
высвечивает ошибку синтаксиса;
Как же тогда в ASMe работать с массивами?
Заранее благодарен

Обсуждение

Неизвестный
19.05.2004, 12:48
общий
это ответ
Привет, Andrew!
Из памяти в память (например из переменной в массив) нельзя скопировать данные командой mov, это надо делать или через промежуточное занесение числа в регистр или пользоваться коммандой movs
St
давно
Советник
419
1011
19.05.2004, 12:48
общий
это ответ
Приветствую Вас, Andrew!
mov si,[f]
mov bx,[i]
mov ax,[a]
mov [si+bx],ax
inc bx
inc bx
...
<h6><font color=#FF7F00>* EMan: -=- Любовь существует! =-= </font></h6>
Неизвестный
19.05.2004, 12:48
общий
это ответ
Здравствуйте, Andrew!
Ну так и правильно ругается! А что ты хочешь? Если хочешь использовать обращения, подобные f [i], так и пиши просто на Паскале. А на ассемблере нужно писать примерно так:
asm
lea si, f
mov cx, <число элементов массива>
mov al (ax), a ; вычисленное значение, не знаю размерности
cld
rep stosb (stosw для размерности 16 бит)
Неизвестный
19.05.2004, 12:48
общий
это ответ
Добрый день, Andrew!
procedure AsmArray
var
f: array [0..5] of byte;
begin
asm
mov cx,5;
mov si,offset f;
mov al,5
sub al,cl
@l1: mov ds:[si],al;
inc si;
loop @l1;
end;
{массив заполнен значениями от 0 до 5}
end;
Неизвестный
19.05.2004, 12:48
общий
это ответ
Доброе время суток, Andrew!
Просто. Берешь адрес, суешь его в регистр, скажем BX. И работаешь, например так:
mov byte ptr [bx+8],52
mov byte ptr [bx+4],13
или так:
mov byte ptr [bx],1
inc bx
mov byte ptr [bx],2
или еще много как.
А вот и на Pascal.

Приложение:
program aaa;var s:array[0..5] of byte; i:byte;beginfor i:=0 to 5 do asm mov bx,offset s mov al,i cbw add bx,ax mov byte ptr [bx],al end;end.
Форма ответа