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

Вниз

Не пойму почему не работает...   Найти похожие ветки 

 
Костик   (2008-10-29 13:25) [0]

Такая конструкция

pкocedure Asd();
var
 myvar: array [0..255] of byte;  
begin
myvar[i] := 0;
  asm
    pushad
    mov edi, offset myvar
..................

выдает ошибку обращения к адресу...
елси myvar сделать глобальлной, то все работает, а крайне надо видет ее только во процедуре...
Может подскажите в чем дело? Заранее благодарю


 
Сергей М. ©   (2008-10-29 13:28) [1]


> в чем дело?


В том что myvar локальная и размещена в стеке.


 
Костик   (2008-10-29 13:30) [2]

а можно как то передать ссылку на нее если уж она глобальная в эту процедуру


 
Сергей М. ©   (2008-10-29 13:33) [3]

Ты лучше изложи целиком задачу этой процедуры ..

Наверняка найдется оптимальное и правильное решение даже с лок.переменной ..


 
Костик   (2008-10-29 13:41) [4]

Делает она перебор всех перестановок байтов из myvar2 в myvar

pкocedure Asd();
var
myvar: array [0..255] of byte;  
myvar2: array [0..255] of byte;  
begin
//Инициализация
//например
//myvar2[0] := 65;
//myvar2[65] := 66;
//myvar[0] := 0;
//myvar[1] := 0;
.............

while(TRUE) do
begin
  asm
    pushad
    mov edi, offset myvar
    mov ebx, offset myvar2
    L1: movzx eax, byte ptr [edi]
    movzx eax,byte ptr [myvar2 + eax]
    cmp al, 0    
    je L3
    mov [edi], al  
    jmp L5

    L3: movzx eax, byte ptr [myvar2 + eax]
    mov [edi],al
    inc edi
    jmp L1

    L5: popad
  end;
//тут условие выхода
end;


 
Сергей М. ©   (2008-10-29 13:49) [5]


> mov edi, offset myvar


Вот так будет правильно:

lea edi, myvar

А почему цикл бесконечный ?
Не вижу выхода из цикла ..


 
Костик   (2008-10-29 14:01) [6]

//тут условие выхода
услови долго было набирать... :)

lea edi, myvar

а так можно локальные переменные применить?


 
Сергей М. ©   (2008-10-29 14:36) [7]


> так можно локальные переменные применить?


Конечно !

LEA = Load Effective Address

Это как раз то что тебе нужно.

А смещение лок.переменной компилятор трактует относительно тек.содержимого ebp

Т.е.

lea edi, myvar


по целевой задаче эквивалентна

lea edi, ebp + offset myvar

или

mov edi, offset myvar
add edi, ebp


 
Костик   (2008-10-29 14:48) [8]

ага, точно. Благодарю...


 
Костик   (2008-10-29 14:55) [9]

...неа, какие то глюканы появляются.... если в myvar больше двух елементов


 
Сергей М. ©   (2008-10-29 14:59) [10]

Ну рассказывай про "глюканы")..

С подробным кодом и комментариями, ессно ..


 
MBo ©   (2008-10-29 15:03) [11]

>Делает она перебор всех перестановок байтов из myvar2 в myvar
А что это означает?


 
icWasya ©   (2008-10-29 15:17) [12]

ну а вот это что такое ?
movzx eax,byte ptr [myvar2 + eax]
может быть имелось ввиду
movzx eax,byte ptr [ebp + eax]


 
Костик   (2008-10-29 15:22) [13]


> Ну рассказывай про "глюканы")..
>
> С подробным кодом и комментариями, ессно ..


   lea edi, offset myvar
   lea ebx, offset myvar2

//myvar2[0] := 65;
//myvar2[65] := ;
//myvar2[66] := 127;
допустим проинициализировали myvar
65 65 65
после запуска цикла
врезультате первой итерации в ней оказыватся вместо  66 65 65  
128 127 127



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.12.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
15-1223242931
обана!
2008-10-06 01:42
2008.12.07
А было бы нефигово


2-1225276588
031178
2008-10-29 13:36
2008.12.07
Как сравнить время


2-1225072338
Hadgi
2008-10-27 04:52
2008.12.07
Delphi. Поиск и удаление в телефонном справочнике


2-1225219523
vik2008
2008-10-28 21:45
2008.12.07
Замена слов


15-1223040224
Николай_
2008-10-03 17:23
2008.12.07
Сильно грелся процессор - в чем могло быть дело?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский