Size: a a a

Ассемблер

2021 September 11

E

Entusiast in Ассемблер
Это всего-лишь значение...
источник

ВВ

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

E

Entusiast in Ассемблер
Ну это указатель. Значение.
0x018181833 - указатель на ячейку памяти (адрес)
0x018181833 - 0x5 = 0x1818182E - указатель (адрес) на другую ячейку памяти..

Ты чего. Шаг вперёд, два назад
источник

A

Aleksandr in Ассемблер
Не совсем. Там еще sub esp, x прячется
источник

E

Entusiast in Ассемблер
А если внимательнее посмотреть?
источник

ВВ

Вячеслав Васютин... in Ассемблер
Т.е., в esp какая-то большая цифирка лежит, которую можно уменьшить на x?
источник

E

Entusiast in Ассемблер
mov eax, 1
mov ebx, 1
sub eax, ebx

Ты спрашиваешь - "В EAX лежит 1, а в EBX 1, как можно отнять 1 от 1??"

Ну т.е вопрос очень вообще странный. Ты запутался, наверное, из-за ЯВУ, или ещё из-за чего-то. Что тебе вдруг начало казаться, что указатель, или адрес, который лежит в регистре - никак не вычислить
источник

ВВ

Вячеслав Васютин... in Ассемблер
А, можно вычислить? И как (может, поняв это, пойму и sub esp, x)?
источник

E

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

mov esp, 1
ESP = 1
sub esp, 1
ESP = 0

mov eax, 1
EAX = 1
sub eax, 1
EAX = 0

mov esp, 0x12121212
ESP = 0x12121212
sub esp, 0x12121212
ESP = 0
источник

ВВ

Вячеслав Васютин... in Ассемблер
Та это я понял.. Я не мону понять саму суть работы enter, вот, нахрен ему у адресса esp x отнимать, чтобы выделить в стеке память, если нужно в сам стэк идти и туда все ложить?
Допустим, esp = 0x1212121212, ну и отними у него 5? Что? Получится 0x12121277?
источник

ВВ

Вячеслав Васютин... in Ассемблер
Путаница какая-то...
источник

ВВ

Вячеслав Васютин... in Ассемблер
Или 5 в hex переводится, а затем у 0x12121212 отнимается 5 (hex'овый)?
источник

E

Entusiast in Ассемблер
Нет, получится  0x1212120D
И это мы уже выше обсуждали - нужно создавать кадры стека, чтобы работать с локальными переменными, и не запоминать их индексы слишком далеко:

push eax ; 4
push ebx ; 8
push ecx ; 12
push edx ; 16

mov dword[esp-20]
ESP-20 = local var 1
ESP+20 = argument 1

Лучше:
push ebp ; 4
mov ebp, esp
sub esp, 4 ; Одна локальная переменная

push eax ; 4
push ebx ; 8
push ecx ; 12
push edx ; 16

EBP-8 = local var 1
EBP+8 = argument 1

И так же есть другие причины, требующие создание стека. Я тебе уже скидывал статью по стеку, где описываются эти моменты

EBP (Base Pointer), фактически предназначен для этого ( ESP - stack pointer)
источник

E

Entusiast in Ассемблер
Зачем называть свои проекты "hueta"?
Какими бы они плохими, или банальными не были - это неуважение к себе
источник

P

Peter in Ассемблер
Очем это?
источник

E

Entusiast in Ассемблер
... о проектах?
источник

P

Peter in Ассемблер
Каких проектах?
источник

E

Entusiast in Ассемблер
"Программирование на ZX Spectrum. Мастер-класс"
источник

P

Peter in Ассемблер
А где там было «хуета»?
источник

E

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