Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2002.07.22;
Скачать: [xml.tar.bz2];

Вниз

Ламерский вопрос по встроенному 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.058 c
1-70761
Fiend
2002-07-09 18:21
2002.07.22
Service


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


1-70763
Alex-A
2002-07-04 12:02
2002.07.22
Извлечь из Icl - иконку


7-70936
_TOLTEC
2002-04-25 15:10
2002.07.22
MacAddress


14-70862
Alex_Sudakov
2002-06-21 10:55
2002.07.22
SP2





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский