Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Упрощенные директивы описания сегментов... Помогите разобраться 
:(
    Опции темы
suvolod
Дата 14.5.2006, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Недавно начал читать самоучитель, в котором используются в основном 
упрощенные директивы описания сегментов (типа .data, .code и т.д). И никак не могу с ними разобраться:
Ниже привожу пример, написанный мной с "полными" директивами. Все работает, программа приглашает нажать клавишу и после выводит сообщение, что клавиша нажата...
Код

.model large, C

M_DATA segment para public 'data'
    Mess1 db 'Enter any key...$'
    Mess2 db 'You have pressed the key!$'
M_DATA ENDS

M_CODE segment para public 'code'
ASSUME CS:M_CODE, DS:M_DATA
    
Out_string proc NEAR
    mov ah,9
    int 21h
    ret
Out_string endp

Wait_key proc NEAR
    mov ah,10h
    int 16h
    ret
Wait_key endp


BEGIN:
    mov ax,M_DATA
    mov ds,ax
    
    LEA dx, Mess1
    call Out_string
    call Wait_key
    
    LEA dx, Mess2
    call Out_string
    call Wait_key
    
    
    ;корректный выход в dos
    mov ah, 4ch
    int 21h    
M_CODE ENDS
End BEGIN



После этого я попробовал описать ту-же задачу упрощенными директивами - примерно вот так:
.386
.model large, C

.data
var dd 33333333h
Mess1 db 'Enter any key...$'
Mess2 db 'You have pressed the key!$'


.code
assume CS:@code, DS:@data

Out_string proc NEAR
    mov ah,9
    int 21h
    ret
Out_string endp

Wait_key proc NEAR
    mov ah,10h
    int 16h
    ret
Wait_key endp

BEGIN:  
    mov eax, @data
    mov ds, eax
    
    LEA dx, Mess1
    call Out_string
    call Wait_key
    
    LEA dx, Mess2
    call Out_string
    call Wait_key
    
    mov ah, 4ch
    int 21h

End BEGIN
Сразу же возникли проблемы: 
//1  Я не понимаю, как мне спозиционировать сегменты. Например, сегмент данных я пытался установить вот так:
Код

....
.code
assume cs:@code, ds:@data
BEGIN:  
mov eax, @data
mov ds, eax
.....


Программа понимает такие инструкции (с префиксом @), только если включить директиву .386
Но после включения этой директивы у меня не работают вызовы фций... - то есть программа просто завершается, не выводя никаких диалоговых сообщений в консоли... Подозреваю, что это связано с тем, что директива .386 предполагает уже оперирование 32-х разрядными регистрами/операндами. Но что-где не стыкуется, никак не могу понять, хотя пытаюсь разобраться уже 2 дня.

Пожалуйста, накидайте рабочий пример с использованием упрощеных директив, и поясните хотя-бы коротко, в чем заключалась моя ошибка....
   
Я меня смущает еще одна вещь. Я нашел в своей электронной библиотеке несколько примеров с использованием упрощенных директив, и очень много примеров,  
где нет никакого "ручного" позиционирования на сегмент данных... Получается, что использование .code/.data предполагает, 
что ассемблер сам автоматом разрулит где код, а где данные, и найдет соотвествующие метки-переменные. Но на практике это у меня не подтвердилось...
Написал примерно следующее:
Код

.386
.model large, C

.data
var dd 33333333h
.code
BEGIN:  
    mov eax, var
End BEGIN


...и просмотрел это дело через отладчик CodeView. 
В eax грузиться какой-то мусор, причем CodeView вообще подменяет команду "mov eax, var" на нечто вроде "mov ax, WORD PTR [0008]", то есть мало того 
что сегмент данных не спозиционирован, он еще и 32-разрядные регистры подменяет на 16-разрядные...
 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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