Size: a a a

Compiler Development

2020 December 10

h

hazer_hazer in Compiler Development
Berkus Decker
call кладет адрес возврата на стек, jmp не кладёт
А как же ret?
Он автоматически заменяет место в стаке, где лежал адрес на функцию значением?
источник

M

MrSmith in Compiler Development
Я вообшем про концептуальные отличия
источник

BD

Berkus Decker in Compiler Development
hazer_hazer
или, например, ret команда, это вообще как с точки зрения машинного кода?
return это управление стеком возврата плюс команда перехода (или возврата)
источник

BD

Berkus Decker in Compiler Development
hazer_hazer
А как же ret?
Он автоматически заменяет место в стаке, где лежал адрес на функцию значением?
если ты про машкод то ret берет со стека адрес возврата и переходит по нему
источник

BD

Berkus Decker in Compiler Development
это есть в мануалах по ассемблеру для нужной архитектуры
источник

M

MrSmith in Compiler Development
Я понял чего ты хочешь
источник

VS

Victor Shamparov in Compiler Development
Berkus Decker
если ты про машкод то ret берет со стека адрес возврата и переходит по нему
Или не со стека, но в любом случае из стандартного места, где этот адрес лежит. Из регистра, например.
источник

BD

Berkus Decker in Compiler Development
или из регистра д
источник

BD

Berkus Decker in Compiler Development
например LR 🙂
источник

h

hazer_hazer in Compiler Development
Мне вот единственное, что непонятно. Зачем, когда реализуют яп с байт-кодом использовать такие концепции как аккумулятор и тд?
Хотя стоп.... Это же капец удобно
источник

BD

Berkus Decker in Compiler Development
но тогда и ret не нужен, достаточно перехода jmp LR
источник

M

MrSmith in Compiler Development
hazer_hazer
Мне вот единственное, что непонятно. Зачем, когда реализуют яп с байт-кодом использовать такие концепции как аккумулятор и тд?
Хотя стоп.... Это же капец удобно
Статью гугли 7 видов интерпретаторов
источник

BD

Berkus Decker in Compiler Development
hazer_hazer
Мне вот единственное, что непонятно. Зачем, когда реализуют яп с байт-кодом использовать такие концепции как аккумулятор и тд?
Хотя стоп.... Это же капец удобно
ну байткод может быть стековым, а может быть адресным, а может быть стековым с регистром, всякие варианты есть
источник

h

hazer_hazer in Compiler Development
hazer_hazer
Мне вот единственное, что непонятно. Зачем, когда реализуют яп с байт-кодом использовать такие концепции как аккумулятор и тд?
Хотя стоп.... Это же капец удобно
Блин. Я только что осознал, что аккумулятор в вм может решить множество проблем с линейностью
источник

VS

Victor Shamparov in Compiler Development
Berkus Decker
но тогда и ret не нужен, достаточно перехода jmp LR
Но там же придётся вручную восстанавливать предыдущий адрес возврата (то есть из той функции, куда мы вернулись).
источник

BD

Berkus Decker in Compiler Development
Victor Shamparov
Но там же придётся вручную восстанавливать предыдущий адрес возврата (то есть из той функции, куда мы вернулись).
д, но чего не сделаешь для экономии количества команд!
источник

VS

Victor Shamparov in Compiler Development
Berkus Decker
д, но чего не сделаешь для экономии количества команд!
Хм... Но не за счёт же call/ret.
источник

M

MrSmith in Compiler Development
источник

M

MrSmith in Compiler Development
Можешь у него в публикациях порыться, много низкоуровнего типа cpuid и тд
источник

h

hazer_hazer in Compiler Development
MrSmith
Можешь у него в публикациях порыться, много низкоуровнего типа cpuid и тд
большое спасибо
источник