Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TASM5.1 не создает obj файл, появление ошибки 
:(
    Опции темы
andreyshag
Дата 2.12.2007, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 2.12.2007

Репутация: нет
Всего: нет



TASM5.1  не создает файл расширения obj. При компиляции выводится на экран  ERROR(13) Near jump or call to different CS.При проверке выяснилось что не выполняется оператор цикла loop.Помогите разрешить ошибку.Программирую для Intel Pentium3 667 МГц.
PM MAIL   Вверх
JAPH
Дата 2.12.2007, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: 5
Всего: 23



Код в студию smile assume cs:code_segment имеется?


--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
andreyshag
Дата 2.12.2007, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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

PM MAIL   Вверх
JAPH
Дата 2.12.2007, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: 5
Всего: 23



Код
CSEG segment
assume cs:CSEG
org 100h
Begin:
mov ax,0B800h
mov es,ax
;mov di,0
xor di,di
;mov al,1
;mov ah,31
mov ax, 1F01h
mov cx,2000
Next:
;mov es:[di],ax
;add di,2
;sub cx, 1
;jnz Next
stosw
loop Next
mov ah,10h
int 16h
int 20h
CSEG ends
end Begin


Это сообщение отредактировал(а) JAPH - 2.12.2007, 20:37


--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
andreyshag
Дата 2.12.2007, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 2.12.2007

Репутация: нет
Всего: нет



Для чего нужна строка ?
assume cs:CSEG

Добавлено через 3 минуты и 34 секунды
Программа действительно заработала.Спасибо за помощь.
PM MAIL   Вверх
JAPH
Дата 2.12.2007, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: 5
Всего: 23



assume позволяет ассемблеру связать определённый сегмент с сегментным регистром, чтобы при необходимости автоматически добавлять префиксы переопределения сегмента. В случае с CS ассемблер не знает, что CSEG - текущий сегмент кода, поэтому думает, что метка Next находится вне сегмента, адресуемого CS, значит, надо использовать far jump (хотя loop такого вообще не позволяет)



--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
andreyshag
Дата 2.12.2007, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 2.12.2007

Репутация: нет
Всего: нет



Программа без цикла на том же компьютере нормально компилируется безстроки assume cs:CSEG  Почему так происходит?
PM MAIL   Вверх
JAPH
Дата 2.12.2007, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: 5
Всего: 23



Пока вы не ссылаетесь на литеральные метки, всё в порядке. Но как только ассемблер встречает операнд Next, он определяет сегмент, в котором находится эта метка, смотрит, что она нужна как адрес ближнего перехода и проверяет, возможен ли ближний переход из сегмента, указываемого CS, в сегмент CSEG. Без assume ассемблер думает, что такой переход невозможен, и хочет сгенерировать дальний переход, но для этого нужно явно указать far ptr, чего нет. TASM сдаётся.



--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
andreyshag
Дата 2.12.2007, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 2.12.2007

Репутация: нет
Всего: нет



Понятно. Благодарю.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0421 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.