Локальная переменная в Pas, доступ к ней |
1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!
Локальная переменная в Pas, доступ к ней |
Local |
12.05.2004 16:45
Сообщение
#1
|
Гость |
Привет!!
Procedure Pr(Str : String); Вот объясните почему Я промахиваюсь при вызове локальной перменной в процедуре с параметрами заранее спасибо |
Local |
12.05.2004 16:47
Сообщение
#2
|
Гость |
Я уж по всякому пробавал
mov ax,seg(Pr) |
Dark |
12.05.2004 17:00
Сообщение
#3
|
Знаток Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: 3 |
Все очень просто, твоя строка хранится встеке, а переменная @Data хранит Data сегмент паскалевской проги(заметь, не ПРОЦЕДУРЫ!)
Большая просьба - востанавливать DS, а то иначе ты изменяешь адрес расположения данных ВСЕЙ программы!!!! Procedure Pr(Str : String); -------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
Local |
12.05.2004 19:57
Сообщение
#4
|
Гость |
Цитата(Dark @ 12.05.04 17:00) Все очень просто, твоя строка хранится встеке, а переменная @Data хранит Data сегмент паскалевской проги(заметь, не ПРОЦЕДУРЫ!) Большая просьба - востанавливать DS, а то иначе ты изменяешь адрес расположения данных ВСЕЙ программы!!!! 1/@data хранит сегмент начала данных или точку входа в программу наверно сегмент данных потомучто к глобальным доступ беспромблем 2/остается непонятно почему нужно сохрянять в стеке DS и почему теперь не настаивается сегмент данных DS на начало сегмента тоесть через SS 3/можно по подробнее а то никак не ухвачу мысль ведь в стек можно положить не одну переменную 4/а-а-а- стоп кажись понял DS настраивается на начало стека ведь SS это сегмент стека т.е. 5/lea dx,Str это мы по стекку гуляем я правильно понял или нет P/S/ киньте меня куданить где об этом пишеть я имею ввиду использование ASM внутри PASCAL |
FreeMan |
12.05.2004 20:08
Сообщение
#5
|
- Группа: Пользователи Сообщений: 480 Пол: Мужской Репутация: 4 |
2) не рекомендуеться менять значение сегментных регистров.
З.Ы. что-то я видел форуме раздел "АЗЫ" - там посмотри! -------------------- бб
|
BlackShadow |
12.05.2004 21:26
Сообщение
#6
|
Гость |
FreeMan, надо просто по-осторожнее это делать, а по возможности вообще избегать.
И в "АЗАХ", единственная функция, которая должна работать нормально (быстро и качественно) - StrLen, сохраняет DS. DS хранит то значение, от которого отталкивается компилятор при адресации глобальных переменных. Т. е. сбив его, всепопытки изменить какую-нибудь твою переменную приведёт к изменению данных где-то там. Далее. Параметры функций адресуются по SS, который далеко не обязательно совпадает с DS => смещение переменной Str надо отсчитывать от SS, поэтому и меняется DS (хотя PUSH SS/POP DS по-моему шустрее и не сбивает AX, но это так, на будующее). |
Dark |
13.05.2004 5:54
Сообщение
#7
|
Знаток Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: 3 |
Цитата (хотя PUSH SS/POP DS по-моему шустрее и не сбивает AX, но это так, на будующее) pop
push
move
Я УБЕДИЛ? согласен что на современных компутерах это почти уже не так, но все таки на push pop уходит больше времени :D (ну... :p2: по крайней мере на 386... ) На тему не одной переменной Procedure Pr(Str,str1 : String); ЗЫ я тут файлик прекрепил, intel.doc - старенький конечно =) но все же...(rar3) Прикрепленные файлы intel.txt ( 17.37 килобайт ) Кол-во скачиваний: 267 -------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
Dark |
13.05.2004 5:55
Сообщение
#8
|
Знаток Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: 3 |
Local, в 5 пункте правильно - тока не гуляем, а грузим смещение ;)
-------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
Shadow |
13.05.2004 18:59
Сообщение
#9
|
Lonely_Raven Группа: Пользователи Сообщений: 640 Пол: Мужской Репутация: 1 |
Здоровеньки!!!
-------------------------------------- почитал Ваш горячий спор и вот решил выдать инфу насчет оптимизации программы на ASM под семейство микропроцессоров P6(Pentium Pro II/III) учитывая особенности ковейера данных процессора команда выбирается на конвейер устройством выборки команд, которое помещает их в устройство декодирования , состоящее из трех паралельно работающих декодеров 2а простых 1 сложныхю.. Декодеры преобразуют команды микропроцессора в микрооперации представляющие собой примитивные команды которые выполняютя 5-ю работающими паралельными исполнительными устройствами микропроцессора .... ну и так далее ..... Для достижения наибольшей производительности работы декодеров необходимо чтобы на их входы поступали команды декодируемые 6 микрооперациями ------------- некоторые команды декодируются 1 микрооперацией а некоторые >4 ------------- в последовательности 4+1+1 ========================================== ню дак вот расширенные регистры рассматиривать не будем там для MMX XMM технологии r8,r16,r32 операндв регистре байт слово 2слово m8,m16,m32 память i8,i16,i32 непосредственный операнд a8,a16,a32 отности операнд смещение в сегменте
так что MOV и для современных компов работает быстрее возможно Я и ошибаюсь может есть новая технология, есть еще например предсказания когда процессор анализ код и на основе этого предсказывает след команду если предсказать не удалось то идет момент синхронизации - может не точно ню Я тут не полность привел и вообще чем меньше команд тем медленнее получается это верно для определенного размера программы у меня даже пример где-то есть -------------------- Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ --------------------- RTFM - Read the fucking manual --------------------- http://www.livejournal.com/users/lonley_raven/ |
Guest |
28.01.2005 4:04
Сообщение
#10
|
Гость |
Можно так:
program Hello; ...а можно и так: program Hello; |
Текстовая версия | 27.04.2024 10:33 |