Практика языка C (МФТИ, 2023-2024). Семинар 6.3. Вызовы функций в ассемблере x86 и ABI.

Поділитися
Вставка
  • Опубліковано 16 лис 2024

КОМЕНТАРІ • 16

  • @handlewithoutsuitcase
    @handlewithoutsuitcase 8 місяців тому +13

    Какой замечательный преподаватель и жутко полезный материал! Спасибо!

  • @ДенисеоСухочихио
    @ДенисеоСухочихио 8 місяців тому +17

    Спасибо что вы есть Константин, у многих нету возможности учится в МФТИ, а вы эту возможность даете!

  • @mahabat23
    @mahabat23 8 місяців тому +3

    перед просмотром сразу ставлю лайк!

  • @Chromaggus
    @Chromaggus 8 місяців тому +10

    Caller - звонарь
    Calleе - аллё, отвечающий

    • @tilir
      @tilir  8 місяців тому +1

      Отличное мнемоническое правило, спасибо ))

  • @ruslankhl
    @ruslankhl 8 місяців тому

    Спасибо!

  • @sibedir
    @sibedir 6 місяців тому +1

    calleR-командиР вызывает callee:
    - callee, сделай то..., за собой прибери.
    callee, не тупи, и всегда попроси:
    - не троньте 12-15, bx и bp. (би пи)

  • @The604FX
    @The604FX 7 місяців тому

    На слайде 41 (Вызов функций и ABI) опечатка:
    mov ebx, esi в комментарии написано "// eDx = b"

  • @Icanfly-
    @Icanfly- 6 місяців тому

    Может я чего не понимаю 4:15 ? регистр rsp же всегда указывает на вершину стека, а не на адрес возврата. Адрес возврата лежит по смещению от регистра RSP и при вызове команды RET значение возврата выталкивается из стека в регистр ЕIP при этом значение RSP автоматически корректируется. Если я что то упустил подскажите пожалуйста в какую сторону смотреть.
    P.S за выкладывание лекций спасибо - круто что и у остальных людей есть возможность самостоятельно пообучаться!

  • @a47mm_net23
    @a47mm_net23 6 місяців тому

    С учетом того, что клоны sun Solaris всё ещё живут в opensource, утверждение про смерть System V какое-то преждевременное.

  • @Stedmiel
    @Stedmiel 8 місяців тому +1

    1:05:46 или вам не повезло в квадрате и вам попался какой-нибудь 8051 (б-же, когда он уже помрет окончательно), под который нормального сишного компилятора нет даже. и для прошивки чуть больше, чем помигать диодом наверняка придется либо костылять ассемблерные вставки, либо еще что-нибудь подобное *косится на его разные виды памяти, которых вечно нехватает, различные вендорские костыли к архитектуре и вот это все*

    • @tilir
      @tilir  8 місяців тому +1

      Да, в эмбедеде этого хватает, сочувствую.

    • @alexandrgonzales6503
      @alexandrgonzales6503 8 місяців тому

      Не помрет, вон китайцы недавно сделали 32-битное ядро 51-го, обещают 70 кратное ускорение

  • @andreykhakimov5588
    @andreykhakimov5588 8 місяців тому +1

    Спасибо большое Константин Игоревич! Как всегда, я в восторге, преисполнен положительными эмоциями!
    Пора это сообщение уже как шаблон постить под каждым вашим видео, ведь они всегда содержат очень ценный материал, а подача ... великолепная!
    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

    • @VonDerSchah
      @VonDerSchah 7 місяців тому

      кто ленивый как я:
      print(bytearray(int(i) for i in " ".join(open("/tmp/1").read().split("
      ")).split()).decode())