Започнах да уча асемблиране и се сблъсках с проблеми, свързани с 32-битов абсолютен адрес. Наскоро прочетох публикация за този подобен проблем Защо има проблеми с абсолютното адресиране?. Можете ли да ми кажете защо, ако посоча без да пиша default rel
, получавам грешка, свързана с този изпълним базов адрес в mac os стартира 4 GB.
mov qword[test], ‘hello’
За да обобщим всичко, проблемът е защо mov qword[test], ‘hello’
е 32-битово адресиране? И ако посоча преди mov qword[test], ‘hello’
това REX.W
, това не ми помага да реша проблем с 32-битово адресиране?
Благодаря ти
rip+offset
(също 32 бита). Можете да кажете nasm с ключовата думаrel
илиdefault rel
, ако искате относително. Имайте предвид, чеqword [test]
се отнася за размера на операцията, а не за размера на адреса. - person Jester   schedule 20.06.2021[disp32]
или[rip+rel32]
. Вижте Позоваване на съдържанието на място в паметта. (x86 режими на адресиране). Отговорът ми на Защо глобалните променливи в x86-64 са достъпни спрямо указателя на инструкцията? включва обяснение как RIP-relative работи в машинен код. - person Peter Cordes   schedule 20.06.2021