Структура ехе файла, Где должна находиться точка входа? |
1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!
Структура ехе файла, Где должна находиться точка входа? |
dron4ik |
23.10.2009 12:28
Сообщение
#1
|
Бывалый Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: 0 |
Всем привет. Линкую программу в формат ехе и у меня выходит ошибка No program entry point. перевел на русский значит что точку входа не обнаружило. посоветуйте где писать эту точку входа.
CODE SEGMENT Добавлено через 13 мин. Удивительно,но вроде сделал сам1) Добавлено через 49 сек. Надеюсь вход сделал правильно.. CODES SEGMENT 'CODE' Добавлено через 49 сек. По чаще надо оказывается лекции открывать Добавлено через 3 мин. По крайней мере программа должна демонстрировать работу строковых операций.. |
xds |
23.10.2009 13:12
Сообщение
#2
|
N337 Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
Еще не определил стек. После загрузки образа будет SS:SP = 0.
-------------------- The idiots are winning.
|
dron4ik |
23.10.2009 13:29
Сообщение
#3
|
Бывалый Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: 0 |
аа..поэтому у меня в конце программы выходит ошибка какая то.
а как определить стек? |
xds |
23.10.2009 14:05
Сообщение
#4
|
N337 Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
В полной нотации (с директивами segment) в tasm вроде бы так:
stack segment stack Ставить последним в программе (перед end Main). Еще твоя программа при stos и movs затирает произвольный участок памяти (вероятно, свой PSP). -------------------- The idiots are winning.
|
dron4ik |
23.10.2009 14:43
Сообщение
#5
|
Бывалый Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: 0 |
вроде так.. но есть ошибка..*Warning* 40.asm(66) Reserved word used as symbol: STACK
CODES SEGMENT 'CODE' Добавлено через 1 мин. Еще твоя программа при stos и movs затирает произвольный участок памяти (вероятно, свой PSP).-- а как можно избавиться от произвольного затирания памяти? Сообщение отредактировано: dron4ik - 23.10.2009 14:44 |
xds |
23.10.2009 14:46
Сообщение
#6
|
N337 Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
Это не ошибка, а предупреждение. Если мешает, назови сегмент s, _stack или как угодно. На то, что он стековый, указывает модификатор stack после директивы.
Сообщение отредактировано: xds - 23.10.2009 14:47 -------------------- The idiots are winning.
|
dron4ik |
23.10.2009 14:51
Сообщение
#7
|
Бывалый Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: 0 |
Спасибо)
|
xds |
23.10.2009 14:51
Сообщение
#8
|
N337 Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
а как можно избавиться от произвольного затирания памяти? Добавить входные данные и буфер для выходных, загрузить указатели на них в ds:si и es:di. Так же, почитать про префиксы rep и repe — про то, сколько они раз повторяют команду. -------------------- The idiots are winning.
|
dron4ik |
23.10.2009 14:53
Сообщение
#9
|
Бывалый Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: 0 |
спасибо.) а в роли входных данных может быть строка?
Добавлено через 1 мин. про rep я знаю повторяет строковые команды сх раз, repe-вроде повторяет пока равно. |
xds |
23.10.2009 15:10
Сообщение
#10
|
N337 Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
Цитата спасибо.) а в роли входных данных может быть строка? Какая-нибудь цепочка байтов — «строка» в терминах соответствующих инструкций — определенная через директиву db. Можно для наглядности что-нибудь символьное.Цитата про rep я знаю повторяет строковые команды сх раз, repe-вроде повторяет пока равно. А cx у тебя чему равен? repe повторяет пока не равно, но cx раз максимум.-------------------- The idiots are winning.
|
dron4ik |
23.10.2009 15:12
Сообщение
#11
|
Бывалый Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: 0 |
хм...щас я пытаюсь сделать определение строки по примеру^
; В полях данных основного сегмента данных, Добавлено через 7 мин. Сделал..но ерунда какая то.. даже экзешник не создало при линковании.. Добавлено через 1 мин.
Добавлено через 8 мин. вот исправил , хотя бы линкуется.. но незнаю правильно ли работает.. CODES SEGMENT 'CODE' |
dron4ik |
23.10.2009 17:01
Сообщение
#12
|
Бывалый Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: 0 |
вот вроде бы все..проверьте кому не лень
CODES SEGMENT 'CODE' |
xds |
23.10.2009 17:32
Сообщение
#13
|
N337 Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
Не инициализировал DS и ES. В момент запуска они указывают на PSP. Данные у тебя в сегменте кода — на него после запуска указывает только CS.
-------------------- The idiots are winning.
|
dron4ik |
23.10.2009 17:33
Сообщение
#14
|
Бывалый Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: 0 |
ну вот надеюсь финальная версия...
Добавлено через 2 мин. Не инициализировал DS и ES. В момент запуска они указывают на PSP. Данные у тебя в сегменте кода — на него после запуска указывает только CS.---ничего не понял(((( |
xds |
23.10.2009 17:35
Сообщение
#15
|
N337 Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
Цитата ну вот надеюсь финальная версия... smile.gif Не. Где загрузка значений в DS и ES? -------------------- The idiots are winning.
|
dron4ik |
23.10.2009 17:38
Сообщение
#16
|
Бывалый Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: 0 |
xds..я совсем запутался((не пойму где и чего не хватает.(((
|
xds |
23.10.2009 17:45
Сообщение
#17
|
N337 Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
Не хватает копирования значения CS в DS и ES. Данные у тебя лежат там же, где и код. Значит, адреса меток считаются относительно того же сегмента. Но перед перед запуском программы ОС записывает в DS и ES значение, отличное от значения CS. Директива ASSUME не генерирует кода инициализации сегментных регистров — она нужна совсем для других целей.
-------------------- The idiots are winning.
|
volvo |
23.10.2009 17:46
Сообщение
#18
|
Гость |
Цитата незнаю правильно ли работает Это тебе лучше знать. Что оно ДОЛЖНО делать - ты не озвучил, посему все вышесказанное - не более как флуд. Да, оно теперь компилируется, и что? Я тебе тысячу программ приведу, которые компилируются, а поставленную задачу не решают. И они ВСЕ - неправильные. Как, возможно, и твоя. |
dron4ik |
23.10.2009 17:49
Сообщение
#19
|
Бывалый Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: 0 |
программа должна демонстрировать работу со строковыми операциями.
Не хватает копирования значения CS в DS и ES. Данные у тебя лежат там же, где и код. Значит, адреса меток считаются относительно того же сегмента. Но перед перед запуском программы ОС записывает в DS и ES значение, отличное от значения CS. Директива ASSUME не генерирует кода инициализации сегментных регистров — она нужна совсем для других целей.-- а как это сейчас исправить?( Добавлено через 6 мин. т.е. надо разделить прогу на сегменты? |
xds |
23.10.2009 17:57
Сообщение
#20
|
N337 Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
Цитата демонстрировать работу Как это у тебя реализуется? Добавлено через 1 мин. После точки входа: mov ax,cs -------------------- The idiots are winning.
|
Текстовая версия | 10.11.2024 13:39 |