; Да се напише подпрограма, която да връща в регистър RAX MAC-адреса, получен ; от низа тип ASCIIZ с начален адрес в регистър RDI. Низът е в 16-ичен вид с ; разделител между байтовете препинателен знак, напр. 00-0C-76-1F-C5-EB. option prologue:none, epilogue:none .code getmacst proc _getmacst proc MOV RSI,RDI ; LODSB работи с RSI XOR RDX,RDX ; Започни начисто .repeat .for (AH = 0 : : ) ; Нов текущ байт - започни натрупването от 0 LODSB ; Зареди поредния символ .break .if (AL < '0') ; Препинателен знак .if (AL > '9') ; Не е цифра AND AL,NOT ('a'-'A'); Преобраз. в гл. буква .break .if (AL < 'A' || AL > 'F') ; Разделител SUB AL,'A'-10-'0';Преобр.от ASCII в 2 етапа .endif SUB AL,'0' ; Преобразувай от ASCII-код SHL AH,4 ; Направи място за новата тетрада OR AH,AL ; и я добави .endfor ; Продължи със следващия символ от низа SHL RDX,8 ; Измести текущия адрес в RDX с байт наляво MOV DL,AH ; Запиши текущия байт отдясно .until (AL == 0) ; Продължи със следващия байт до края на низа XCHG RAX,RDX ; Върни адреса в RAX RET _getmacst endp getmacst endp end