Вниз
Скачать: 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.011 c
14-70874
Bocman
2002-06-24 15:27
2002.07.22
Срочно, и не сложно....


1-70675
Maxuz
2002-07-09 01:26
2002.07.22
StatusBar


14-70894
Sirus
2002-06-15 16:41
2002.07.22
Нужно работать с файлом *.DBF без BDE... То есть прога должна


3-70666
DKalinin
2002-07-02 14:26
2002.07.22
Как узнать сколько параметров имеет процедура на сервере?


1-70773
anod
2002-07-09 22:28
2002.07.22
Объясните мне пожалуйста,




   Наверх