Текущий архив: 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.45 MB
Время: 0.009 c