Chingiz Опубликовано 15 февраля, 2004 Жалоба Поделиться Опубликовано 15 февраля, 2004 В ASMе я пока-что слабоват (учусь скажем так), и тут вот столкунлся с такой проблемой, не вьезжаю как такое получается! Я создаю маленькую програмку: сегменты размечаю вручную, тоесть с помощью SEGMENT... ENDS и тут то и начинается веселье! В процесе дебагинга выяснилось, что каким то макаром адрес сегмента даных оказывается записаным в регистре сегмента стека (тоесть вместо DS в SS), либо же данные помещаются по адресу сегмента стека. Если поменять вручную содержимое DS на SS, либо сделать нехитрое копирование то все работает нормально, читает что положено из памяти. Компилировалось это все в TASM и MASM - результат аналогичен. Компиляция без дерективы .386 Программа просто пробная и никакой логической нагрузки не несет! assume cs:_code _data segment string db "This is a string" alist db 10h, 20h, 30h _data ends _code segment 'code' main: assume ds:_data ;mov ax,data -----вот это помогает------ ;mov ds,ax mov bx,offset alist mov dl,[bx] inc bx mov dl, [bx] inc bx mov dl,[bx] mov ax, 4c00h int 21h _code ends end main Подскажите что творится, и в чем я не прав! Ссылка на комментарий Поделиться на другие сайты Поделиться
Chingiz Опубликовано 16 февраля, 2004 Автор Жалоба Поделиться Опубликовано 16 февраля, 2004 Спасибо за такое большое количество ответов! К счастью я сам нашел решение! И оказалось оно достаточно глупым! Оказывается директивы assume не достаточно для того чтобы "умная" система записала в регистр DS адресс сегмента данных, поэтому его то надо туда копировать вручную! (глупо получилось с учетом того, что я и сам это пробовал) Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти