21.08.2019, 15:37 [+3 UTC]
в нашей команде: 3 777 чел. | участники онлайн: 2 (рекорд: 21)

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

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

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.77 (31.05.2019)
JS-v.1.34 | CSS-v.3.35

Общие новости:
28.04.2019, 09:13

Форум:
16.08.2019, 05:33

Последний вопрос:
21.08.2019, 15:23
Всего: 150124

Последний ответ:
21.08.2019, 11:21
Всего: 258853

Последняя рассылка:
21.08.2019, 06:45

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

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

Наша кнопка:

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

Отзывы о нас:
27.08.2009, 15:23 »
nikos
Отлично! Раньше, на других форумах, получал общие рассуждения, а здесь цифры!
22.04.2012, 09:38 »
lamed
Большое спасибо, проблема решена! [вопрос № 185863, ответ № 270601]
15.05.2010, 15:53 »
MrSpencer
Большое Вам спасибо! И за рисунок - отдельная благодарность [вопрос № 178372, ответ № 261405]

РАЗДЕЛ • Assembler

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

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

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

Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 93
Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 65
Kdsfofwe21
Статус: 2-й класс
Рейтинг: 0

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

Консультация онлайн # 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.13927 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.77 от 31.05.2019
Версия JS: 1.34 | Версия CSS: 3.35