Вниз
Скачать: 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.01 c
8-70830
Yaro
2002-03-10 09:05
2002.07.22
GDI+ и антиалайзинг


3-70628
Mamed
2002-07-01 13:49
2002.07.22
Operator Like HELP!!!!


1-70720
Leviathan
2002-07-11 15:37
2002.07.22
TCalendar и язык в названиях месяцев


1-70781
eruc
2002-07-09 22:10
2002.07.22
ListBox1


1-70770
dy1
2002-07-09 21:40
2002.07.22
Поиск и замена




   Наверх