Вниз
Скачать: CL | DM;

Ламерский вопрос по встроенному Assembler у   Найти похожие ветки 

 
YY   (2002-04-30 18:51) [0]

Знатоки встроенного Ассемблера, ответьте, пожалуйста, бедному начинающему, в чём же здесь дело:

var
MPass:array [0..10] of Byte;
pos:Word;
begin
asm
.
.
mov BX,pos
mov AH,byte ptr MPass[BX]
.
.
end;
end;

На строке mov AH,byte ptr MPass[BX] выдаётся ошибка "Operand size mismatch". То же самое, если писать mov AH,MPass[BX].
Самое главное, что это прекрасно компилировалось и правильно работало в Turbo Pascal 7.0, а будучи скопированным в Delphi, работать не хочет ни в какую.


 
Vovchik ©   (2002-04-30 22:18) [1]

Надо так:

var
MPass:array [0..10] of Byte;
pos:Word;
begin
asm
.
.
//первый элемент
lea esi, MPass
mov ah, byte ptr [esi]

//шестой элемент
add esi, 5
mov ah, byte ptr [esi]
.
.
end;
end;

И опять же я это писал недавно.


 
Anatoly Podgoretsky ©   (2002-04-30 22:39) [2]

32 битная модель памяти
EBX
Но у тебя явно будут и другие проблемы, для началя прочитай хотя тему callng convention в части регистров


 
Vovchik ©   (2002-04-30 23:31) [3]

Приведённый мной пример работал в дельфи - я проверил. Чтобы не было проблем, можно добавить pusha, popa, но компилер спасает сам некоторые регистры. В хелпе написано какие.


 
Anatoly Podgoretsky ©   (2002-04-30 23:47) [4]

По твоему примеру надо ESI сохранять, а по его EBX


 
Vovchik ©   (2002-05-01 00:14) [5]

>Anatoly Podgoretsky © (30.04.02 23:47)

Ну и ладно, сохраним. Просто как-то принято сохранять указатели в esi и edi.


 
Anatoly Podgoretsky ©   (2002-05-01 10:24) [6]

Это с времен 8086, но не принципиально, важно, что бы регистры были сохранены согласно спецификации конкретной версии Паскаля
PushA/PopA хороши если не нвдо возвращать знвчения.


 
YY   (2002-05-01 13:25) [7]

Большое спасибо всем за советы. Всё работает.
Я перевёл свой код с Pascal на Delphi.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.008 c
3-70578
jen_bond
2002-06-28 01:37
2002.07.22
ОТмена кеширования


1-70782
BlackSun
2002-07-10 01:34
2002.07.22
Программно нажать ссылку в TWebBrowser


1-70681
AL2002
2002-07-08 19:09
2002.07.22
кАК выбить прогу?


3-70618
RDA
2002-06-29 15:11
2002.07.22
Изменения в наборе данных


6-70852
GatesBill
2002-05-12 15:55
2002.07.22
как передать параметры исполняемому файлу




   Наверх