Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2016, 22:10   #1
Dimas190597
 
Регистрация: 02.10.2016
Сообщений: 9
По умолчанию Помогите с адресацией

mov ax,W_TAB+3
это прямая адресация, но нигде не могу найти, что делает "+3"?
Dimas190597 вне форума Ответить с цитированием
Старый 02.11.2016, 02:33   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

допустим у тебя есть массив из 10 байтов с именем W_TAB
db W_TAB 19,28,37,46,55,64,73,82,91,10
  1. если у тебя MASM или TASM, тогда команда mov ax,W_TAB+3 загрузит в АL 46, а в АН 55
  2. если у тебя FASM, тогда команда mov ax,W_TAB+3 загрузит в АХ адрес ячейки в оперативной памяти, в которую помещен 4-ый элемента массива W_TAB
Mikl___ вне форума Ответить с цитированием
Старый 09.11.2016, 22:50   #3
Ethereal2
Пользователь
 
Регистрация: 17.02.2013
Сообщений: 26
По умолчанию

Цитата:
Сообщение от Dimas190597 Посмотреть сообщение
mov ax,W_TAB+3
это прямая адресация, но нигде не могу найти, что делает "+3"?
Ты реально компилируешь команду
mov ax, константа
Но ведь вместо константы можно всегда написать выражение. Его сосчитает ассеблер при компиляции. Например, ты пишешь
mov ax, 3+2
ассемблер сосчитает выражение и скомпилирует
mov ax, 5
Ну а в твоем случае ассемблер возьмет W_TAB, чтобы это W_TAB ни значило (если W_TAB - метка, то он возьмет адрес этой метки) и прибавит к нему 3. А потом скомпилирует
mov ax, результат_этого_сложения
Ethereal2 вне форума Ответить с цитированием
Старый 10.11.2016, 23:53   #4
Ethereal2
Пользователь
 
Регистрация: 17.02.2013
Сообщений: 26
По умолчанию

Только какой это будет иметь смысл ?
Фишка в том, что в MASM (и оттуда из совместимости в TASM) была зачем-то введена типизация. У каждой метки есть тип. И исходя из него ассемблер соображает что ему компилировать. Типа из контекста. Если ты напишешь :
W_TAB = 5, то
mov ax, W_TAB+3
даст тебе
mov ax, 8 ; константа_восемь
а если ты напишешь
W_TAB dw 1,2,3
то
mov ax, W_TAB+3
даст тебе
mov ax, косвенно с адреса на 3 больше, чем у метки W_TAB
потому-что в первом случае у метки есть тип "константа", а втором случае тип "указатель на слово". Вот такой вот богомерзки неоднозначный синтаксис у MASM/TASM.

А у FASM такой неоднозначности нет и там эта команда скомпилируется как выше указал Mikl.
Ethereal2 вне форума Ответить с цитированием
Старый 10.11.2016, 23:57   #5
Ethereal2
Пользователь
 
Регистрация: 17.02.2013
Сообщений: 26
По умолчанию

--------
Ethereal2 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое создание форм с адресацией Алексей_2012 Общие вопросы Delphi 24 29.04.2015 02:23
Проблема с многоуровневой адресацией grook Общие вопросы C/C++ 3 18.12.2010 17:15
Снова торможу с адресацией... tae1980 Microsoft Office Excel 18 28.03.2010 21:05
Помогите с адресацией листа в формуле ABCOz Microsoft Office Excel 2 09.09.2009 13:38
Помогите новичку с адресацией разобраться Zeneth Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 13 16.06.2009 19:55