Comments 11
Всегда поражало - как люди из ничего могут выдумать целую статью...
Нормальная учебная статья - для тех, кто ещё не в теме и хочет понять. У Петцольда в "Code" примерно такой же уровень разворачивания разъяснений, или местами ещё подробнее. А оно как раз считается отличной книгой для старшего школьного возраста. Часто вопросы надо обжевать с 2-3 сторон, чтобы достичь понимания >95% аудитории.
Другой вопрос, что в статье никак не сказано, что всё это для x86-64 - это можно увидеть только в URL оригинала или в предыдущей статье. Уже для ARM будут существенные отличия, а для MIPS, RISC-V и прочих, которые вполне могут попасться сейчас ассемблерщику, всё совсем не так (тех же флагов условий нет, сравнение идёт на двух регистрах или на регистре и константе). Ну и порядок статей странноватый, условия без объяснения перед этим, что в регистрах и памяти и почему...
Зная ассемблер под одну архитектуру, достаточно не сложно разобраться в другой архитектуре. Важно само понимание происходящего.
И именно на этом моменте я бы лучше книги почитал, потому что там информации на порядок больше, и больше разъяснений и примеров.
Это продолжение цикла статей. В первой части автор указывал, что это под x86-64. А также, что это кодировка от intel. Мне бы вот интересней бы было почитать что нибудь по сложнее, например про работу с ассемблером АРМ-намного шире и сложнее, чем под x86-64. Всетаки под x86-64 ассемблер если не самый понятный и простой, то один из точно!
В первой части автор указывал, что это под x86-64. А также, что это кодировка от intel.
Я так и сказал в своём комментарии :)
Мне бы вот интересней бы было почитать что нибудь по сложнее, например про работу с ассемблером АРМ-намного шире и сложнее, чем под x86-64. Всетаки под x86-64 ассемблер если не самый понятный и простой, то один из точно!
Статей про ARM (оба, AArch32 и AArch64) полно, и на русском я находил достаточно, хотя на английском на порядки больше.
Что x86 (32, 64) проще и понятнее - я бы как раз не сказал. Даже на чисто прикладном уровне много проблем с неортогональностью или странной логикой команд. Где-то привязанные регистры - деление, так *AX и *DX, сдвиги, так *CX. Никому не нужная RCL, которую тянут через все разрядности. В 64 битах: где-то непосредственные константы в 4 байта, где-то в 8. В одной команде нельзя использовать AH и SIL/DIL/R8B/etc. Флаги ставятся иногда по безумной логике. Много таких примеров. ARM по сравнению с этим практически прямолинеен и логичен. А если идти в системное программирование, так ARM ещё в разы проще...
Может стоило упомянуть про чудесный CMOV?
Просто чтобы у новичков было представление, что в каких-то случаях ветвление можно реализовать и без нарушения линейности исполнения.
Так такая команда в x86 чуть ли не единственная :(
Вон в arm: таких аж целая куча суффиксов: https://www.davespace.co.uk/arm/introduction-to-arm/conditional.html
Да, у ARM-а это выглядит более богато, в том смысле что их можно применить не только к MOV-ам. А сами то суффиксы и в x86 есть, просто применяются только к CMOV.
Но я в основном имел в виду саму идею аппаратной реализации условного выполнения инструкции, без использования jump-ов.
Интересная статья, простая и понятная
Ассемблер для программистов на языках высокого уровня: условные конструкции