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

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


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

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

cain52
Статус: 3-й класс
Рейтинг: 3
∙ повысить рейтинг »
Лысков Игорь Витальевич
Статус: Мастер-Эксперт
Рейтинг: 0
∙ повысить рейтинг »
Evgen aka Chuma
Статус: 6-й класс
Рейтинг: 0
∙ повысить рейтинг »

∙ Assembler

Номер выпуска:1765
Дата выхода:11.06.2020, 21:45
Администратор рассылки:Лысков Игорь Витальевич (Мастер-Эксперт)
Подписчиков / экспертов:85 / 25
Вопросов / ответов:1 / 1

Консультация # 198857: Уважаемые Игорь Витальевич, и эксперты, здравствуйте, MASM 6.11/13 для DOS, Windows 7, 64-bit, DOS Box Emulator. написал простой Листинг для экспериментирования (см. присоединенный файл). AfdPro показывает, что для второго набора команд в коде,
Код (Assembler) ::
...

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

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

MASM 6.11/13 для DOS, Windows 7, 64-bit, DOS Box Emulator.

написал простой Листинг для экспериментирования (см. присоединенный файл).

AfdPro показывает, что для второго набора команд в коде,

Код (Assembler) :: выделить код
mov si,1
mov bx,mas1[si]
add ax,bx


в регистр BX заносится 0700h, а не 0007h.

подскажите, пожалуйста, почему в данной ситуации возникает такой "артефакт" ?

Спасибо.

---------------------------------------
Код (Assembler) :: выделить код
Cseg1 segment
org 100h

_start:

	xor ax,ax

	mov si,0
	mov bx,mas1[si]
	add ax,bx
	
	mov si,1
	mov bx,mas1[si]
	add ax,bx
	
	mov si,1d
	
	int 20h
	
mas1 dw 4,7,1,9
	 dw 0,3,5,8
	 dw 6,2

Cseg1 ends
end _start

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


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

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

Команда mov bx,mas1[si] читает слово по адресу: mas1 + si

  • во время компиляции процессор подставляет вместо mas1 реальный адрес в памяти, в данном случае 0х0119;
  • слово читается так: в младший байт 16-ти битного регистра попадает значение, на которое указывает адрес, в старший - следующий байт;
  • изменяя si - можно добраться к любому адресу относительно mas1. В коде si - принимает значение 0х0000 и 0х0001, поэтому будут читаться BL с адреса 0х0000 BH с адреса 0х0001, при si равном 0х0000 и BL с адреса 0х0001 BH с адреса 0х0002, при si равном 0х0001;
  • массивы проще считывать строковыми командами LODS, при этом в АХ - будет очередной элемент массива, также автоматически изменится SI - на величину(размер в байтах) элемента массива.


Удачи!

Консультировал: Зенченко Константин Николаевич (Старший модератор)
Дата отправки: 11.06.2020, 13:51
Рейтинг ответа:

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


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

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

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


В избранное