Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RFPRO.RU

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

Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 364
∙ повысить рейтинг »
Куликов Роман Евгеньевич
Статус: 1-й класс
Рейтинг: 0
∙ повысить рейтинг »
Козлова Ольга Александровна
Статус: 1-й класс
Рейтинг: 0
∙ повысить рейтинг »

∙ Assembler

Номер выпуска:1619
Дата выхода:21.06.2016, 19:21
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:24 / 8
Вопросов / ответов:1 / 1

Консультация # 189590: Здравствуйте! Прошу помощи в следующем вопросе: учил ассемблер и заметил что в одном уроке на fasm завершение программы пишут (на сайте)
Код (Assembler) :: выделить код
...

Консультация # 189590:

Здравствуйте! Прошу помощи в следующем вопросе:
учил ассемблер и заметил что в одном уроке на fasm завершение программы пишут (на сайте)

Код (Assembler) :: выделить код
mov ax, 4c00h
int 21h

а в masm (в книге) уже
Код (Assembler) :: выделить код
int 20h

это разница в языке программирования (разновидность языка ассемблер) или компиляторов?
в обоих случаях это .com файлы запускал под DOS, вот примеры
fasm
Код (Assembler) :: выделить код
use16               ;Генерировать 16-битный код
org 100h            ;Программа начинается с адреса 100h
 
    mov ax,255      ;Поместить 255 в регистр AX
    inc ax          ;Увеличить содержимое AX на 1
    nop             ;Эта команда ничего не делает
    mov bx,ax       ;Поместить в BX содержимое AX
 
    mov ax,4C00h    ;\
    int 21h         ;/ Завершение программы


masm
Код (Assembler) :: выделить код
CSEG segment
org 100h
Begin:
     mov ah,9
     mov dx,offset Message
     int 21h
     ;-----------
     int 20h
     ;-----------
Message db 'Hello, world!$'
CSEG ends
end Begin

Дата отправки: 16.06.2016, 18:58
Вопрос задал: arti-779 (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


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

Здравствуйте, arti-779!

© Цитата:
это разница в языке программирования (разновидность языка ассемблер) или компиляторов?
Нет, это два способа завершения программы.
mov ax, 4c00h
int 21h
Это более универсальный способ. С его помощью можно завершать любую программу, как EXE, так и COM
Кроме того, в AL можно задать код возврата (который можно проанализировать в BAT-файле по ERRORLEVEL)
int 20h
Это более упрощенный выход. У него есть ограничение: на момент вызова в CS должен быть адрес сегмента PSP.
Но такому условию удовлетворяют практически все COM-программы. Поэтому чаще всего в них и используется.
Эта возможность, упомянутая в мини-форуме Константином Николаевичем, сводится к выходу по int 20h
Т.к. команда RET извлечет из вершины стека смещение-адрес возврата (а там обычно 0) и передаст туда управление.
А по смещению 0 лежит PSP, в первых 2 байтах которого записана команда int 20h, по которой программа и завершается :)
Надо сказать, что это не совсем корректно... Вполне может статься, что нуля в вершине стека может и не оказаться...
Но в большинстве случаев работает...

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 18.06.2016, 13:45
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное