; Да се напише подпрограма, която да записва от адрес, подаден в регистър RSI, ; низ тип ASCIIZ в шестнадесетичен формат с разделител между байтовете тире, ; получен от MAC-адрес, подаден в регистър RDI. option prologue:none, epilogue:none .code putmacst proc _putmacst proc SHRD RAX,RDI,48 ; Запиши MAC-адреса в старшите 6 байта на RAX MOV RDI,RSI ; Начален адрес на низа MOV ECX,0AAAH ; Инициализирай брояча на тетрадите .repeat ROL RAX,4 ; Измести MAC-адреса с 1 тетрада наляво AND AL,0FH ; Изолирай най-старшата му тетрада в AL ADD AL,'0' ; Преобразувай в ASCII, приемайки я за цифра .if (AL > '9') ; Ако все пак е буква, увеличи ASCII-кода ѝ ADD AL,'A'-'9'-1 .endif STOSB ; Запиши го в низа SHR ECX,1 ; Четна тетрада? .continue .if (!carry?); Не, има още една MOV AL,'-' ; Да, подготви разделителя като следващ символ STOSB ; и го запиши в низа .until (zero?) ; Има и други байтове? Премини към следващия MOV BYTE PTR [RDI-1],CL; Замени шестото излишно тире с терминатор 0 RET _putmacst endp putmacst endp end