![]() |
|
|
![]()
|
|
| andreyshag |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 2.12.2007 Репутация: нет Всего: нет |
TASM5.1 не создает файл расширения obj. При компиляции выводится на экран ERROR(13) Near jump or call to different CS.При проверке выяснилось что не выполняется оператор цикла loop.Помогите разрешить ошибку.Программирую для Intel Pentium3 667 МГц.
|
|||
|
||||
| JAPH |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 8.1.2007 Где: Ленобласть Репутация: 5 Всего: 23 |
Код в студию
-------------------- Что непонятно - спрашиваем |
|||
|
||||
| andreyshag |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 2.12.2007 Репутация: нет Всего: нет |
Не очент понял ответ.Могу выслать код прогаммы.
Добавлено через 5 минут и 44 секунды Непосредственно код: CSEG segment org 100h Begin: mov ax,0B800h mov es,ax mov di,0 mov al,1 mov ah,31 mov cx,2000 Next: mov es:[di],ax add di,2 loop Next mov ah,10h int 16h int 20h CSEG ends end Begin |
|||
|
||||
| JAPH |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 8.1.2007 Где: Ленобласть Репутация: 5 Всего: 23 |
Это сообщение отредактировал(а) JAPH - 2.12.2007, 20:37 -------------------- Что непонятно - спрашиваем |
|||
|
||||
| andreyshag |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 2.12.2007 Репутация: нет Всего: нет |
Для чего нужна строка ?
assume cs:CSEG Добавлено через 3 минуты и 34 секунды Программа действительно заработала.Спасибо за помощь. |
|||
|
||||
| JAPH |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 8.1.2007 Где: Ленобласть Репутация: 5 Всего: 23 |
assume позволяет ассемблеру связать определённый сегмент с сегментным регистром, чтобы при необходимости автоматически добавлять префиксы переопределения сегмента. В случае с CS ассемблер не знает, что CSEG - текущий сегмент кода, поэтому думает, что метка Next находится вне сегмента, адресуемого CS, значит, надо использовать far jump (хотя loop такого вообще не позволяет) -------------------- Что непонятно - спрашиваем |
|||
|
||||
| andreyshag |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 2.12.2007 Репутация: нет Всего: нет |
Программа без цикла на том же компьютере нормально компилируется безстроки assume cs:CSEG Почему так происходит?
|
|||
|
||||
| JAPH |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 8.1.2007 Где: Ленобласть Репутация: 5 Всего: 23 |
Пока вы не ссылаетесь на литеральные метки, всё в порядке. Но как только ассемблер встречает операнд Next, он определяет сегмент, в котором находится эта метка, смотрит, что она нужна как адрес ближнего перехода и проверяет, возможен ли ближний переход из сегмента, указываемого CS, в сегмент CSEG. Без assume ассемблер думает, что такой переход невозможен, и хочет сгенерировать дальний переход, но для этого нужно явно указать far ptr, чего нет. TASM сдаётся. -------------------- Что непонятно - спрашиваем |
|||
|
||||
| andreyshag |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 2.12.2007 Репутация: нет Всего: нет |
Понятно. Благодарю.
|
|||
|
||||
![]()
|
| Правила форума "Asm для начинающих" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm для начинающих | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |