17.11.2018, 10:44 [+3 UTC]
в нашей команде: 3 110 чел. | участники онлайн: 4 (рекорд: 17)

:: РЕГИСТРАЦИЯ

:: задать вопрос

:: все разделы

:: правила

:: новости

:: участники

:: доска почёта

:: форум

:: блоги

:: поиск

:: статистика

:: наш журнал

:: наши встречи

:: наша галерея

:: отзывы о нас

:: поддержка

:: руководство

Версия системы:
7.55 (06.11.2018)

Общие новости:
24.09.2018, 16:49

Форум:
08.11.2018, 13:36

Последний вопрос:
16.11.2018, 20:14

Последний ответ:
17.11.2018, 10:37

Последняя рассылка:
16.11.2018, 23:45

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
02.04.2010, 18:35 »
jeck26
Спасибо за разные варианты решения проблемы. Придётся покупать новую видюху. [вопрос № 177556, ответ № 260478]
27.11.2017, 12:12 »
goldssky@yandex.ru
Спасибо. Только мне надо было без применения лог.дифференцирования. [вопрос № 191907, ответ № 275675]

РАЗДЕЛ • Assembler

Создание программ на языке Assembler.

[администратор рассылки: Лысков Игорь Витальевич (Старший модератор)]

Лучшие эксперты в этом разделе

Зенченко Константин Николаевич
Статус: Модератор
Рейтинг: 686
Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 126
Evgen aka Chuma
Статус: 6-й класс
Рейтинг: 15

Перейти к консультации №:
 

Консультация онлайн # 67580
Раздел: • Assembler
Автор вопроса: Loriendil
Отправлена: 18.12.2006, 20:27
Поступило ответов: 2

Уважаемые эксперты! Подскажите, пожалуйста, зачем в проге нужна команда mov ah,9 (прога в приложении)? Зачем сначало заполнять 8-разрядный регистр, а затем 16-разрядный.
И объесните ,пожалуста, почему при ассемблеровании этой же проги (ехе-файл я всё-таки заставил комп сделать) , но он выдал такую строку:
LINK : warning L4021: no stack segment
( Про отсутствие сегмента я понял , но почему ведь в проге стоит - CSEG segment? Непонятно.)

Приложение:

Состояние: Консультация закрыта

Ответ # 132333 от Вiктор

Здравствуйте, Loriendil!
1) mov ah,9 - когда вызывается прерывание 21h, то обработчик прерывания смотрит что находится в регистре аh. Если мы положим туда значение 9, то обработчик вызовет 9-ю функцию 21h-го прерывания (вывод сообщения), что нам и надо.
2) обработчик использует значения обоих регистров (и аh, и dх). В каждом из них должны быть нужные данные. А порядок заполнения значения не имеет, главное чтобы перед вызовом прерывания регистры содержали нужные значения.
3) линковщик справедливо ругается - в программе нет сегмента стека. Вы ведь объявили единственный сегмент, как для СОМ-программы. Вообще, у вас код СОМ-программы, а не ехе-программы. (один сегмент, команда начать код с 100h байт - org 100h)
4)для того чтобы сделать работоспособную ехе-программу код должен быть другой - содержать по крайней мере сегменты стека и кода, например:
stk segment stack 'STACK'
db 100 dup (0fah) ; стек на 100 байт
stk ends
CSEG segment
assume cs:CSEG, ds:CSEG, ss:stk
Begin:
mov ah,9
mov dx,offset Message
int 21h
xor ax,ax
int 20h
Message db 'Hello world!$'
CSEG ends
end Begin

вместо объявления сегмента стека по упрощённому синтаксису можно написать что-то вроде
.model small
.stack 1024 ; стек на 1024 байт
.data
Message db 'Hello world!$'
.code
Begin:
mov ah,9
mov dx,offset Message
int 21h
int 20h
end Begin
(Р.S. в коде могут быть ошибки, давно не писал на асме.)


Консультировал: Вiктор
Дата отправки: 18.12.2006, 21:02

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Ответ # 132400 от Брона Вячеслав

Здравствуйте, Loriendil!
В регистре AHзадается код функции 21-го ДОС прерывания. В регистре DX задается смещение к выдаваемой на экран строке.
А сообщение выдается по поводу отсутствия в тексте вашей программы явного указания сегмента стека. это всего лишь предупреждение, и в данном случае все нормально.
На это предупреждение Вам придется обращать внимание при написании более сложных программ.
Дело в том, что, если Вы не указываете явным образом сегмент стека, ДОС, при загрузке Вашей программы на выполнение определит сегментом стека системмный, а его глубина весьма невелика - что приводит к неправильной работе программы при интенсивном использовании подпрограмм, особенно с большим колличеством параметров передаваемых через стек.


Консультировал: Брона Вячеслав
Дата отправки: 19.12.2006, 11:43

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.14114 сек.

© 2001-2018, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.55 от 06.11.2018