Size: a a a

Ассемблер

2021 September 06

II

Ira Irina in Ассемблер
источник

II

Ira Irina in Ассемблер
Adding or subtracting from a pointer moves it by a multiple of the size of the data type it points to. For example, assume we have a pointer to an array of 4-byte integers. Incrementing this pointer will increment its value by 4 (the size of the element)
источник

E

Entusiast in Ассемблер
Ну ты взял это, небось, после описания реализации адресной арифметики в Си. Это не важно.
А вот начало тоже самое:
"Address arithmetic is a method of calculating the address of an object with the help of arithmetic operations on pointers and use of pointers in comparison operations."
Тоже самое, и дальше, вангую, - "Адресную арифметику так же называют арифметикой над адресами"
источник

II

Ira Irina in Ассемблер
Я это взял из оригинала статьи на перевод которой ты ссылаешься
источник

E

Entusiast in Ассемблер
Да, и там дальше описана адресная арифметика в Си, s54816 привёл неправильный пример, указав про реализацию адресной арифметики в Си, и попытался доказать, что раз в Си сделали прибавление размера типа данных указателя - значит теперь адресная арифметика это только реализация Си, и не более - как это описано везде - "Address arithmetic is a method of calculating the address of an object with the help of arithmetic operations on pointers and use of pointers in comparison operations."
источник

E

Entusiast in Ассемблер
Хм, а я ещё не жужлил на английском:

"Address arithmetic: an address in a computer program that results from performing an arithmetic operation on another address."
(Перевод)
"Адресная арифметика: адрес в компьютерной программе, который является результатом выполнения арифметической операции над другим адресом."
Вот это — красивое определение. Вычислил из адреса значение, и получил другой адрес (т.е — вычислил значение указателя (адрес), и получил указатель на другую переменную (другой адрес))

https://encyclopedia2.thefreedictionary.com/arithmetic+address
источник

II

Ira Irina in Ассемблер
Но вычислил то вычислил, но разве нет разницы, кто именно вычислил ты сам или трнаслятору достаточно символа "+"  и он сам в курсе как вычислять?
источник

E

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

Я же говорю, это просто упрощение от компилятора, "слой абстракции"
А сделать это можно и самому, и в итоге это всё равно останется адресной арифметикой. Так что есть она и в ассемблере, и в ЯВУ (и пусть там компилятор упрощает это, подставляя размер типа данных указателя в арифметику над указателем)
источник

DK

Dmitriy Knyaginin in Ассемблер
по моему вся эта адресная арифметика и указатели начались с разных систем адресации памяти... сегментную адресацию ещё кто-то помнит? что бы не морочить голову  с сегментами и смещениями ввели ещё понятие указателей...
источник

E

Entusiast in Ассемблер
Во-во, я вот ещё когда копал про адресную арифметику, нашёл какой-то документ по процессорам, и там было про организацию памяти, и затрагивалась адресная арифметика, ещё до всех ЯВУ

Сейчас найти попробую
источник

DK

Dmitriy Knyaginin in Ассемблер
источник

E

Entusiast in Ассемблер
Это тоже, но не то))

Вот: http://perscom.ru/2012-01-20-09-26-05/start10
"При использовании многокомпонентной адресации, использующей три компоненты (например, базово-индексной адресации со смещением в процессорах i*86) с компонентами можно связывать адрес начала массива, смещение в массиве от начала до нужной строки и смещение в строке до нужного элемента. Сложение компонент выполнит автоматически адресная арифметика."

И вот: https://docplayer.com/147518782-Formirovanie-adresa-operanda-v-pamyati-v-realnom-rezhime-raboty-processora-adresnaya-arifmetika.html
Ну  это тоже, что ты прислал. Там просто показано, как процессор внутри формирует адрес - это тоже адресная арифметика (см. 1)

И тут: https://systo.ru/prog/theor/addr-x86.html
источник

DK

Dmitriy Knyaginin in Ассемблер
если вспомнить времена когда win был версии 1.0 или был вообще dos... нужен был язык который скрывал всю сложность, с памятью и регистрами... вот и появились указатели, а потом ещё ссылки
источник

DK

Dmitriy Knyaginin in Ассемблер
источник

ST

Saenro T in Ассемблер
А ещё foо/bar, от которых меня типает)
источник

DK

Dmitriy Knyaginin in Ассемблер
смотри так и выгореть можно
источник

ВВ

Вячеслав Васютин... in Ассемблер
«Невозможно указать старшие 16 бит EAX в MOV.  80386 решает эту проблему, предоставляя новую инструкцию MOVZX.» Т.е. в младшие 8 бит eax я могу перекинуть значение, а обратно - нет?
источник

ВВ

Вячеслав Васютин... in Ассемблер
Т.е. преобразовать...
источник

E

Entusiast in Ассемблер
movzx eax, word[data] ; mov ax, word[data]
movzx eax, byte[data] ; mov al, byte[data]
(Только после movzx у тебя будет нули в старших битах, т.е:
EAX = 0x12345678
movzx eax, byte[data]
EAX = 0x00000012 ; 12 = байт из data
)

mov byte[data], al
mov word[data], ax
источник

d

disba1ancer in Ассемблер
Можешь если прочитаешь из регистра AL
источник