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

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


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

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

Evgen aka Chuma
Статус: 6-й класс
Рейтинг: 14
∙ повысить рейтинг »
Kdsfofwe21
Статус: 1-й класс
Рейтинг: 0
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 0
∙ повысить рейтинг »

∙ Assembler

Номер выпуска:1714
Дата выхода:24.11.2018, 22:15
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:65 / 21
Вопросов / ответов:1 / 1

Консультация # 193952: Уважаемый Игорь Витальевич и Константин Николаевич, здравствуйте, вопросы по Листингу 10.4 - давайте разбираться еще раз smile smile , 1) строки: mov ax, ...

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

Уважаемый Игорь Витальевич и Константин Николаевич,
здравствуйте,

вопросы по Листингу 10.4 - давайте разбираться еще раз smile smile ,

1) строки:

mov ax, 2521h
mov dx, offset Init_21h_proc
int 21h

означают, что прерывание int 21h (точнее специальная процедура - или последовательность действий, как говорит Константин Николаевич) как-бы "подменяет" саму себя на наше "искусственное" прерывание, которое в книге О.А.Калашникова называется "обработчиком прерывания" - я всего-лишь угадываю (!), что в таблице векторов прерываний в MS-DOS (первый 1 Кбайт памяти), а именно там где записаны коды именно (!) прерывания int 21h что-то добавляется таким образом, что при вызове прерывания int 21h другой (!!!) программой, например, Листинг 3.1, которая загружается в память ОЗУ-RAM, вызывается не естественный-настоящий код прерывания int 21h, а весь этот вызов перенаправляется на наше (точнее Калашниковский) "искусственное прерывание", или, другими словами, на обработчик прерывания (точнее на процедуру-подпрограмму) Int_21h_proc.

правильно ли я понимаю суть (смысл) дела ?

2) со следующими строками мне не все ясно:

mov dx, offset Init
int 27h

в книге О.А.Калашникова написано, что после выполнения этих строк com-программа соответствующая Листингу 10.4 остается резидентной (квази-постоянной) в памяти ОЗУ-RAM - от самого начала, соответствующему адресу cs:0000h и вплоть (то есть, по) до строки "Init_21h_proc endp", то есть до метки "Init".

а) означает ли это, что все, начиная со строки "jmp Init" и кончая строки "Init_21h_proc endp" остается резидентной (постоянной) в памяти ОЗУ-RAM после запуска com-программы Листинга 10.4, а все, что начи ная с метки "Init" и кончая самого "int 27h" не остается резидентной (постоянной) в памяти ОЗУ-RAM ?

3) в следующих сообщениях я хотел бы полностью разобраться в работе подпрограммы "Init_21h_proc" - с Вашей помощью, Игорь Витальевич и Константин Николаевич, так как Часть 3-я действительно (!!!) трудная для моего понимания.

Спасибо. smile

Дата отправки: 19.11.2018, 18:20
Вопрос задал: Ильдар Рифович Альмиев (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Зенченко Константин Николаевич (Модератор):

Здравствуйте, Ильдар Рифович Альмиев!

Таблица прерываний, это своего рода стандарт, какая бы версия ОСи не применялась.
Команда INT читает следующий за ней байт, умножает его на 4-е, читает адрес 0000:0084 (адрес 21-го прерывания). На картинке видно, что, не зависимо, от того, что записано по этому адресу, вызывается код, который реализует это прерывание. Левая картинка стандартный Command promt(командная строка) WIN7Enterprise 32-бита(у меня сейчас такая smile ), правая картинка DOSBox(ну там и так видно). В зависимости от WIN(95, 98, SE, ME, XP, 7, 8, 10) и релиза WIN(старт, хом, ... про), эти адреса будут меняться. Но как я уже говорил, не важно какой там адрес, важно, что делает код по записанному там адресу.

Теперь по кодам, на картинке:
Моя отсебятина:181120с.ВАТ:

© Цитата:
181120
181120a
181120b
181120
181120a

В обоих случаях запускает программы в одной последовательностию

181120.ASM
Код (Assembler) :: выделить код
model	tiny
code
186
org	100h
begin:
	xor	ax,ax
	mov	es,ax
	mov	ax,es:[4*21h+2]
	call	SW
	mov	al,':'
	int	29h
	mov	ax,es:[4*21h]
SW:	xchg	ah,al
	call	SB
	xchg	ah,al
SB:	push	ax
	shr	al,4
	call	SH
	pop	ax
SH:	and	al,0Fh
	cmp	al,10
	jb	S0
	add	al,7
S0:	add	al,'0'
	int	29h
	ret
	end	begin

Читалка адреса данного прерывания(21h), заметьте без самого прерывания.
smile

И код по книге:
181120a.ASM:
Код (Assembler) :: выделить код
CSEG segment
assume CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG
org 100h
Begin:
	mov ah,9
	mov dx,offset String
	int 21h
	int 20h
String db 'test10.$'
CSEG ends
end Begin


181120b.ASM:
Код (Assembler) :: выделить код
CSEG segment
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
org 100h
Start:
	jmp Init
Int_21h_proc proc
	cmp ah,9
	je Ok_09
	jmp dword ptr cs:[Int_21h_vect]
Ok_09:
	push ds
	push dx
	push cs
	pop ds
	mov dx,offset My_string
	pushf
	call dword ptr cs:[Int_21h_vect]
	pop dx
	pop ds
	iret
Int_21h_vect dd ?
My_string db 'prog10!$'
int_21h_proc endp
Init:
	mov ah,35h
	mov al,21h
	int 21h
	mov word ptr Int_21h_vect,bx
	mov word ptr Int_21h_vect+2,es
	mov ax,2521h
	mov dx,offset Int_21h_proc
	int 21h
	mov dx,offset Init
	int 27h
CSEG ends
end Start

Теперь очередь за Вами, Вы должны, это(то что происходит на картинке) осознать самостоятельно и у Вас все должно стать на свои места.

Удачи!

Консультировал: Зенченко Константин Николаевич (Модератор)
Дата отправки: 22.11.2018, 00:35

5
нет комментария
-----
Дата оценки: 23.11.2018, 20:20

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

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


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

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

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


В избранное