![]() |
|
|
![]()
|
|
| alex_andr |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 11.2.2007 Репутация: нет Всего: нет |
Здравствуйте!
Прошу подсказать начинающему. Делаю начальные шаги в АСМе. Для простоты понимания тренируюсь в ДОСе. Исходные: ДОС 6.22, ТАСМ 3.0, Вот линкер не помню версию, но достался мне в одном пакете с ТАСМом. Проблема в том, что линковщик всегда ругается на отсутствие стека, хотя я добросовестно, один к одному из книги Пирогова вырисовываю скелет программы вот в таком примерно виде: datseg segment mem1 db ? ;для запоминания какой нибудь фигни ... ... ;бла бла бла datseg ends stseg segment stack db 60 dup (?) stseg ends codseg segment assume cs:codseg ds:datseg ss:stseg Затем, как положено провожу настройку сегментных регистров begin: mov ax,stseg mov ss,ax mov ax,datseg mov ds,ax Ну дальше там код программы бла бла бла Ну и завершающий штрих codseg ends end begin Что у меня не так? Прошу помочь добрым словом. С уважением. Александр. |
|||
|
||||
| JAPH |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 8.1.2007 Где: Ленобласть Репутация: 5 Всего: 23 |
Сегмент стэка в маленьких программах необязателен, но его присутствие желательно, вот линковщик и предупреждает (! - заметьте, исполняемый файл-то он создаёт, это всего лишь warning).
Сегмент стэка выглядит так:
В cseg надо прописать
Настраивать SS и SP не надо, они настраиваются автоматически при загрузке программы в память. -------------------- Что непонятно - спрашиваем |
||||
|
|||||
| alex_andr |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 11.2.2007 Репутация: нет Всего: нет |
Здравствуйте!
Честно говоря, я не понял в чем моя ошибка. В размере стека? В Вашем примере 400h, это больше чем мои 60, или в прописывании оператора "assume"? Но в Вашем примере нет отличий от моего, просто Вы применяеете немного другие имена - cseg (у меня codseg) и sseg (у меня stseg) Что касается настройки сегментных регистров, то я пробовал и без этого, результат не меняется. Исполняемый файл, как Вы подметили, создается всегда, просто предупреждает. Кажется у Пирогова я читал, что без стека программа работать будет, она будет использовать системный стек. Но интересен сам факт, ведь я же все описываю, почему оно не принимает? Все остальное понимает, а это нет. И вот еще что меня смущает. Я как-то набрал пример из другой книжки, там синтаксис видимо от MASMа, а может и еще чего, я не знаю, хочу разобраться, так там он не ругался, все сделал без предупреждений. Примерно так было: model small .stack 100 .datseg ... ну и так далее. Я попробовал в свою программу поставить строку .steck 100, она потребовала model. Я прописал и про модель, все оттранслировалось без предупреждений, но программа не работала. В общем, я запутался. Если знаете подробнее, прошу пояснить. С уважением. Александр. |
|||
|
||||
| JAPH |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 8.1.2007 Где: Ленобласть Репутация: 5 Всего: 23 |
Sorry, невнимательно прочитал первый пост - прога разбита на куски, и я не заметил assume. В нём параметры разделяются запятыми, которых у вас в примере я не вижу.
Далее, что касается моделей памяти. Тут одно из двух - либо всюду полное определение сегментов, либо всюду .code, .data, .data? и т.п. Кстати, .model small P.S. У меня без ошибок и предупреждений отрабатывает
Да, и приводите полный пример программы - вдруг её работонеспособность обусловлена ошибками в коде (книги пишут люди)? -------------------- Что непонятно - спрашиваем |
||||
|
|||||
![]()
|
| Правила форума "Asm для начинающих" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm для начинающих | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |