Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.22;
Скачать: 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 вся ветка

Текущий архив: 2002.07.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
1-70721
Prog_mail
2002-07-09 11:52
2002.07.22
Как сделать интерфейс XP


6-70853
crushik
2002-04-06 12:46
2002.07.22
как написать клиента для IRC?


6-70855
ananimous
2002-05-13 15:20
2002.07.22
Сервер-клиент на сокетах


8-70834
Baron
2002-03-09 18:18
2002.07.22
GLScene


14-70925
PycUS
2002-06-24 22:56
2002.07.22
Размер проги