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

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


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

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

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Академик
Рейтинг: 10408
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Академик
Рейтинг: 3928
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2362
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Assembler (Ассемблер)

Номер выпуска:1513
Дата выхода:24.04.2012, 00:00
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:97 / 40
Вопросов / ответов:1 / 1

Консультация # 185866: Здравствуйте, уважаемые эксперты! Прошу вас помочь со следующим заданием. 1.Организация стековой памяти. Разработать программу с вызовом внутрисегментной команды CALL и RET ; 2.Организация стековой памяти. Разработать программу с вызовом межсегментной команды CALL и RET ; 3.Организация стековой памяти. Разработать программу вложенными вызо...


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

Здравствуйте, уважаемые эксперты! Прошу вас помочь со следующим заданием.
1.Организация стековой памяти. Разработать программу с вызовом внутрисегментной команды CALL и RET ;
2.Организация стековой памяти. Разработать программу с вызовом межсегментной команды CALL и RET ;
3.Организация стековой памяти. Разработать программу вложенными вызовами внутрисегментных и межсегментных команд CALL и RET.
Благодарю, если сможете помочь.

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


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

Здравствуйте, Наталия!
1.Организация стековой памяти.
Разработать программу с вызовом внутрисегментной команды CALL и RET ;

При внутрисегментном вызове в стек заносится смещение следующей команды.
Сегментный регистр CS не меняется
По внутрисегментной команде ret извлекается из стека адрес, куда и передается управление

Код :
_stack	segment	'stack'
	dw	100h dup(?)
_stack	ends

code	segment	'code'
assume	cs:code
start:
	mov	ax, 5
	call	square

	mov	ax, 4c00h
	int	21h

square	proc
	mul	ax
	ret
square	endp

code	ends

	end	start

2.Организация стековой памяти.
Разработать программу с вызовом межсегментной команды CALL и RET ;

При межсегментном вызове в стек заносится сначала сегмент текущего кода,
затем смещение следующей команды.
После чего происходит длинный вызов подпрограммы
По межсегментной команде ret из стека извлекаются и смещение и сегмент,
т.о. происходит длинный возврат в точку вызова
Код :
_stack	segment	'stack'
	dw	100h dup(?)
_stack	ends

code1	segment	'code'
assume	cs:code1
start:
	mov	ax, 5
	call	square

	mov	ax, 4c00h
	int	21h
code1	ends

code2	segment	'code'
assume	cs:code2
square	proc	far
	mul	ax
	ret
square	endp
code2	ends

	end	start


3.Организация стековой памяти.
Разработать программу вложенными вызовами внутрисегментных и
межсегментных команд CALL и RET.

В этом примере сначала делаем межсегментный вызов подпрограммы square
В которой происходит внутрисегментный вызов подпрограммы add1,
из которой, в свою очередь, происходит межсегментный вызов подпрограммы sub1
В стек заносится каждый раз либо короткий адрес, либо длинный адрес,
в зависимости от типа вызова.
Код :
_stack	segment	'stack'
	dw	100h dup(?)
_stack	ends

code1	segment	'code'
assume	cs:code1
start:
	mov	ax, 5
	call	square

	mov	ax, 4c00h
	int	21h

sub1	proc	far
	dec	ax
	ret
sub1	endp

code1	ends

code2	segment	'code'
assume	cs:code2
square	proc	far
	mul	ax
	call	add1
	ret
square	endp

add1	proc	near
	inc	ax
	call	sub1
	ret
add1	endp

code2	ends

	end	start

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

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

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

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


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

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

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



В избранное