Size: a a a

Ассемблер

2021 September 06

s

s54816 in Ассемблер
char[] str, &str, ну и каст, но про каст будем считать, что опущен для краткости.
источник

E

Entusiast in Ассемблер
Какой инфы?
Что там ещё можно связать?
источник

d

disba1ancer in Ассемблер
Указателю на инт указатель на char присваиваешь
источник

II

Ira Irina in Ассемблер
Я же пишу, например определения оператора "+".
источник

s

s54816 in Ассемблер
Не на char, на массив char. Это ещё более другой тип.
источник

d

disba1ancer in Ассемблер
Ну да...
источник

E

Entusiast in Ассемблер
Но в итоге там ничего из этого не будет.
Хоть сейчас могу показать дизассемблер.
Там будет просто в секции:
ptr dd str
В другой секции
str db 'Test', 0
И в коде, соответственно, никакого мусора, или супер-крутой-магии не будет
источник

II

Ira Irina in Ассемблер
Вот скажи кода ты пишешь, p++, откуда компилятор знает сколько надо прибавить?
источник

II

Ira Irina in Ассемблер
И почему транслятор ассемлрера не знает сам сколько надо прибавить
источник

E

Entusiast in Ассемблер
Размер типа данных p, который ты сам указываешь
источник

II

Ira Irina in Ассемблер
ага)) это дополнительная инфа, которая известна компилятору помимо значения
источник

E

Entusiast in Ассемблер
А зачем это? Это что-то изменит, в чём-то ограничивает? Я могу всё так-же сделать p++, просто написав по-своему. От этого сам термин никогда не изменится
источник

E

Entusiast in Ассемблер
Ну и на этом всё.
А по итогу всё потому, что компилятор вынужден держать эту информацию во время процесса компиляции
источник

II

Ira Irina in Ассемблер
Ты все можешь сделать на асме в том числе и написать компилятор си с адресной арифметикой.
источник

E

Entusiast in Ассемблер
Но зачем, если адресная арифметика есть везде?
Может ты тогда имел ввиду, просто добавить типы данных, и учёт размера типа данных при арифметике?
источник

II

Ira Irina in Ассемблер
Ты ее реализуешь сам, с помощью универсальной арифметики
источник

E

Entusiast in Ассемблер
Во))
"Универсальная адресная арифметика" тут больше подходила бы))
Но только всё равно это по-итогу входит в сам компилятор Си.
int a =0;
a++; // a +
1
Это адресная арифметика? Нет.
источник

II

Ira Irina in Ассемблер
Я думаю ключевое слово здесь тип данных. Арифметика для типа данных в том числе для укзателей, возможна, если как минимум типы данных имеются. А в асме их нет
источник

II

Ira Irina in Ассемблер
Нет конечно не адресная. Адресная арифметика - это арифметические операции определенные над типом данных "адрес".  А тут инт
источник

E

Entusiast in Ассемблер
Ну вот... В ассемблере значит:
a dd b ; int* a = &b;
add [a], 4 ; a++
Не адресная арифметика, а какая-то там обычная арифметика. И ничего она вообще с указателями не делает, что вообще подразумевает под собой АДРЕСНАЯ арифметика = "арифметика над указателями"
источник