Size: a a a

Ассемблер

2021 September 06

ДЦ

Дмитро Цимбалюк... in Ассемблер
какой в какой указатель кастить
источник

E

Entusiast in Ассемблер
Кстати, откуда ты взял это определение адресной арифметики = "это когда компилятор сам подставляет размер типа данных указателя в арифметике с указателями"?

Должен же быть источник. Я такого определения нигде не нашёл
Или сам выдумал?
источник

s

s54816 in Ассемблер
Да вот же ты сам цитировал. Только дальше одного абзаца прочитать не смог. Давай я для тебя скопипащу сюда:
Согласно стандартам языка Си и Си++, при арифметике с указателями, результирующий адрес должен оставаться строго на границе единичного объекта массива (или следовать сразу за ним). Сложение или вычитание указателя сдвигает его на величину, кратную размеру того типа данных, на который он указывает.
источник

E

Entusiast in Ассемблер
И что? Ну адресная арифметика в Си подставляет в арифметике с указателями - размер типа данных указателя
От этого меняется определение, что адресная арифметика это не арифметика над указателями?
А я могу так:
"Адресная арифметика в ассемблере отличается от ЯВУ тем, что рассчитывать тип данных указателя нужно самому, а после - проводить над указателем соответствующие арифметические операции"

Ну это глупо, Это же просто скопировано обьяснение "адресной арифметики В С" из статьи про "Проблемы адресной арифметики в С" - естественно, там будет описан стандарт адресной арифметики в ЯВУ.
Но специально для тебя вначале описали вообще - что такое адресная арифметика. И согласно этому описанию - адресная арифметика есть в ассемблере
источник

ДЦ

Дмитро Цимбалюк... in Ассемблер
судя по всему, для вас одна и та же вещь не одно и то же
источник

s

s54816 in Ассемблер
Это обычная арифметика. Целочисленная (точнее, модулярная целочисленная, потому что регистры не бесконечные). Даже инструкция lea, которая специально сделана для вычисления адресов, использует обычную арифметику, и её для обычных вычислений используют чуть ли не чаще, чем для адресов. Это что касается процессора. И ассемблер (как программа), тоже считает в обычной арифметике. Ассемблеров, которые умели бы table dd 0,1,2,3 ... mov eax,[table][2], я не знаю. Может быть такие и есть.
источник

II

Ira Irina in Ассемблер
вот в "нужно самому", собака и порылась. В си "+" - это вызов функции реализующей этот оператор, для конкретного типа данных. В ассемблере "+" - это просто "+".
источник

E

Entusiast in Ассемблер
А, то есть когда добавляется "адрес" - тогда определение внезапно становится "компилятор сам подставляет размер типа данных указателя"?
Снова противоречишь себе, адресная арифметика - везде адресная арифметика, как арифметика над указателями
А выше просто описано его использование в ЯВУ (то, как это упростили в С, C++)
источник

s

s54816 in Ассемблер
«Вот это слово из статьи подтверждает мои слова, а вот на это я закрою глазкиглазки».
источник

E

Entusiast in Ассемблер
Не-не: "Вот это определение указывает на правоту в его сторону, а это описан стандарт адресной арифметики в Си. Пожалуй я возьму, и выдам реализацию адресной арифметики в Си как адресную арифметику вообще - в программировании, а ещё скажу, что в ассемблере её нет, потому что в Си адресную арифметику упростили до подстановку размера типа данных указателя в арифметике с указателями"
источник

ДЦ

Дмитро Цимбалюк... in Ассемблер
ну логично же, что арифметика указателей есть и там, и там
никто не запрещает приплюсовать/умножить адреса
источник

s

s54816 in Ассемблер
Не вижу смысла продолжать тебе что-то доказывать. Я тебе уже давно сказал, что ты можешь называть это как угодно, но будь готов, что другие люди тебя не поймут.
источник

E

Entusiast in Ассемблер
Я уверен, что у тебя уже был такой спор, и кто-то тебе сказал точно такое же. Вот ты снова наступаешь на грабли, потому что называешь реализацию адресной арифметики в Си - как понятие вообще адресной арифметики во всём программировании, вследствие путанницы, возникает утверждение "в ассемблере адресной арифметики нет".
Но если ты ещё раз прочитаешь адекватное понятие адресной арифметики "адресная арифметика = арифметика над указателями - вычисление\сравнение", а потом перепрочитаешь фразу "Согласно стандарту, в С, C++ (то есть далее - описание реализации адресной арифметики в ЯВУ, то, как она была улучшена) - адресная арифметика ... бла-бла, подставляет размер типа данных указателя, в арифметике с указателями" - поймёшь, что всё-таки ты не прав
источник

ДЦ

Дмитро Цимбалюк... in Ассемблер
в си просто добавлен слой абстракции, где и так понятно, что под капотом происходит
источник

ДЦ

Дмитро Цимбалюк... in Ассемблер
array+index*sizeof(type(array))
источник

II

Ira Irina in Ассемблер
оно само должно умножаться, ты просто пишешь "+", а транслятор знает сам как произвести эту операцию. Тогда это арифметика над эти типом данных. Если ты сам вычисляшь, это уже просто арифметика)
источник

E

Entusiast in Ассемблер
1. "Адресная арифметика (address arithmetic) — это способ вычисления адреса какого-либо объекта при помощи арифметических операций над указателями, а также использование указателей в операциях сравнения. Адресную арифметику также называют арифметикой над указателями"
(https://habr.com/ru/company/pvs-studio/blog/97810/)

2. "Под адресной арифметикой понимаются арифметические действия над указателями."
https://foxford.ru/wiki/informatika/adresnaya-arifmetika-v-s

3. "Под адресной арифметикой понимаются действия над указателями, связанные с использованием адресов памяти"
proguroki.ru/urok7/urok7_1/urok7_1_6/urok-7-1-6-adresnaya-arifmetika

4. "...Также существует такое понятие, как адресная арифметика. Правда, скорее всего, это не понятие, а возможность пороизводить над адресами и указателями какие-либо определённые арифметические действия."
https://narodstream.ru/c-urok-27-adresnaya-arifmetika-chast-1/
источник

s

s54816 in Ассемблер
Я сейчас скажу страшную вещь, но развивать свою мысль не планирую (потому что это ещё на два дня). В ассемблере НЕТ УКАЗАТЕЛЕЙ.
источник

Y

Yura in Ассемблер
Вот чорт
источник

E

Entusiast in Ассемблер
Ну них утверждение))))
Думал-думал, но такое не ожидал.
Ну тут уже доказывать нет смысла, просто почитай вообще про указатели, и организацию памяти (потому что там тоже это затрагивается)
источник