Да, это сборка.
0000001f test eax,eax
00000021 je 0000000000000028
test eax,eax
проверяет, равен ли регистр eax нулю.
В этом случае он переходит на адрес 0x28. (je
прыжок равен), пропуская следующий звонок.
Если он не равен нулю, он не пропускает следующий вызов.
Независимо от этого он затем продолжается в 00000028 cmp qword ptr [rsp+48h],0
Все это кем-то, кто не использовал сборку i386 в течение 15 лет и кому приходилось гуглить на подобные хиты.
(Это мой вежливый способ сказать: «Пожалуйста, сделайте небольшое исследование, прежде чем спрашивать»).
Этот язык ассемблера специфичен для процессора?
Сборка зависит от диапазона / семейства процессоров.
Например, этот будет работать на AMD Opteron, AMD K6, K7, Intel Celeron, Intel Core, ... (все i386-иш код)
В то время как такие вещи будут работать на 6502, 6510 и подобных:
сеи
lda # $ 0d
Sta $ 0314
lda # $ c0
Sta $ 0315
кли
ртс
Если да, разработчики обычно используют это для отладки?
Я полагаю, что большинство не делают. Я предполагаю, что средний разработчик даже не знает, что такое сборка или машинный код. Он также не имеет ни малейшего представления об адресных шинах, шинах данных, строках кэша, архитектуре памяти или чем-то «глубоком».
Однако некоторые из нас делают.
Единственный язык ассемблера, который я выучил, был для 8085, который я больше не помню.
Это было предшественником кода, который вы использовали в примере.