; Да се напише подпрограма, която да записва от адрес, подаден в регистър RSI, ; низ тип ASCIIZ в десетичен формат без водещи нули и с разделител между ; байтовете точка, получен от IP-адрес (IPv4), подаден в регистър EDI. option prologue:none, epilogue:none .code putipstr proc _putipstr proc MOV EDX,EDI ; EDX = IP-адрес MOV RDI,RSI ; RDI = начален адрес на низа MOV ECX,'.' shl 24 or '.' shl 16 or '.' shl 8; 3 рaздeлителя .repeat ROL EDX,8 ; Подготви следващия байт, от старши към младши XOR EAX,EAX MOV AL,DL ; Байтът трябва да е в AX заради командата DIV .if (AL > 9) ; Не само единици .if (AL > 99) ; Не само десетици и единици MOV DL,100 ; Подготви делителя DIV DL ; AL: 100тици, AH: 10ици, 1ици ADD AL,'0' ; Преобразувай стотиците в STOSB ; ASCII-код и го запиши в низа SHR EAX,8 ; AL = десетици и единици .endif MOV DL,10 ; Подготви делителя DIV DL ; AL = десетици, AH = единици ADD AL,'0' ; Преобразувай десетиците в STOSB ; ASCII-код и го запиши в низа MOV AL,AH ; AL = единици .endif ADD AL,'0' ; Преобразувай единиците в ASCII-код SHR ECX,8 ; Πocлeдeн бaйт? MOV AH,CL ; (Πoдгoтви paздeлитeля кaтo cлeдвaщ cимвoл STOSW ; и зaпиши eдиницитe и paздeлитeля в низa) .until (zero?) ; Не, премини към обработка на следващия байт RET ; Да, върни се в извикващата програма _putipstr endp putipstr endp end