Y
Size: a a a
E
ДЦ
ДЦ
E
ДЦ
d
ДЦ
E
Указатель — переменная, диапазон значений которой состоит из адресов ячеек памяти или специального значения — нулевого адреса. Последнее используется для указания того, что в данный момент указатель не ссылается ни на одну из допустимых ячеек.
А теперь - магия!ptr dd 0= указатель, указывающий на нулевой адрес
ptr dd str
= указатель, указывающий на адрес str
"Указатель — адрес ячейки памяти."https://assembler-code.com/ukazatel-v-programmirovanii/
(MS-DOS, TASM - работа с указателями)
"Как устроены указатели на уровне ассемблера"https://ru.stackoverflow.com/questions/970273/%d0%9a%d0%b0%d0%ba-%d1%83%d1%81%d1%82%d1%80%d0%be%d0%b5%d0%bd%d1%8b-%d1%83%d0%ba%d0%b0%d0%b7%d0%b0%d1%82%d0%b5%d0%bb%d0%b8-%d0%bd%d0%b0-%d1%83%d1%80%d0%be%d0%b2%d0%bd%d0%b5-%d0%b0%d1%81%d1%81%d0%b5%d0%bc%d0%b1%d0%bb%d0%b5%d1%80%d0%b0#970306
foo(int*): ; В rdiуказатель
на 32 битную переменную.
mov eax, DWORD PTR [rdi] ; Помещаем в eax значение, находящееся по адресу (указателю) rdi
sal eax ; сдвиг eax влево на 1 бит ( eax*=2 )
mov DWORD PTR [rdi], eax ; Помещаем eax обратно по адресу из rdi
ret
E
ptr dd str
.ДЦ
E
int addr = 0x400000;
char[] str = "Test";
int* ptr = &str;
str db 'Test', 0
ptr dd str
mov eax, str ; EAX = указатель на str
E
II