Может я чего не понимаю 4:15 ? регистр rsp же всегда указывает на вершину стека, а не на адрес возврата. Адрес возврата лежит по смещению от регистра RSP и при вызове команды RET значение возврата выталкивается из стека в регистр ЕIP при этом значение RSP автоматически корректируется. Если я что то упустил подскажите пожалуйста в какую сторону смотреть. P.S за выкладывание лекций спасибо - круто что и у остальных людей есть возможность самостоятельно пообучаться!
1:05:46 или вам не повезло в квадрате и вам попался какой-нибудь 8051 (б-же, когда он уже помрет окончательно), под который нормального сишного компилятора нет даже. и для прошивки чуть больше, чем помигать диодом наверняка придется либо костылять ассемблерные вставки, либо еще что-нибудь подобное *косится на его разные виды памяти, которых вечно нехватает, различные вендорские костыли к архитектуре и вот это все*
Какой замечательный преподаватель и жутко полезный материал! Спасибо!
Спасибо что вы есть Константин, у многих нету возможности учится в МФТИ, а вы эту возможность даете!
Согласен на все 100
перед просмотром сразу ставлю лайк!
Caller - звонарь
Calleе - аллё, отвечающий
Отличное мнемоническое правило, спасибо ))
Спасибо!
calleR-командиР вызывает callee:
- callee, сделай то..., за собой прибери.
callee, не тупи, и всегда попроси:
- не троньте 12-15, bx и bp. (би пи)
На слайде 41 (Вызов функций и ABI) опечатка:
mov ebx, esi в комментарии написано "// eDx = b"
Может я чего не понимаю 4:15 ? регистр rsp же всегда указывает на вершину стека, а не на адрес возврата. Адрес возврата лежит по смещению от регистра RSP и при вызове команды RET значение возврата выталкивается из стека в регистр ЕIP при этом значение RSP автоматически корректируется. Если я что то упустил подскажите пожалуйста в какую сторону смотреть.
P.S за выкладывание лекций спасибо - круто что и у остальных людей есть возможность самостоятельно пообучаться!
С учетом того, что клоны sun Solaris всё ещё живут в opensource, утверждение про смерть System V какое-то преждевременное.
1:05:46 или вам не повезло в квадрате и вам попался какой-нибудь 8051 (б-же, когда он уже помрет окончательно), под который нормального сишного компилятора нет даже. и для прошивки чуть больше, чем помигать диодом наверняка придется либо костылять ассемблерные вставки, либо еще что-нибудь подобное *косится на его разные виды памяти, которых вечно нехватает, различные вендорские костыли к архитектуре и вот это все*
Да, в эмбедеде этого хватает, сочувствую.
Не помрет, вон китайцы недавно сделали 32-битное ядро 51-го, обещают 70 кратное ускорение
Спасибо большое Константин Игоревич! Как всегда, я в восторге, преисполнен положительными эмоциями!
Пора это сообщение уже как шаблон постить под каждым вашим видео, ведь они всегда содержат очень ценный материал, а подача ... великолепная!
stdin:
208 161 208 191
208 176 209 129
208 184 208 177
208 190 32 208
177 208 190 208
187 209 140 209
136 208 190 208
181 32 208 154
208 190 208 189
209 129 209 130
208 176 208 189
209 130 208 184
208 189 32 208
152 208 179 208
190 209 128 208
181 208 178 208
184 209 135 33
code:
[[nodiscard]]
std::optional
convertToString(std::vector uchars)
{
if (uchars.empty()) [[unlikely]]
return std::nullopt;
std::string result {};
std::move(std::begin(uchars), std::end(uchars), std::back_inserter(result));
if (result.empty()) [[unlikely]]
return std::nullopt;
return result;
}
[[nodiscard]]
std::vector
readSTD_IN()
{
std::vector text { };
for(int tmp; std::cin >> tmp;)
text.emplace_back(tmp);
return text;
}
int main()
{
std::vector text { readSTD_IN() };
std::optional str_opt { convertToString(std::move(text)) };
std::cout
кто ленивый как я:
print(bytearray(int(i) for i in " ".join(open("/tmp/1").read().split("
")).split()).decode())