;unsigned getVLQ(unsigned char **src) ;{ // прочети величина с променлива дължина ; unsigned char c, *p = *src;// (вж. Standard MIDI-File Format Spec. 1.1) ; unsigned value = *p++; ; if (value & 0x80) { ; value &= 0x7f; ; do ; value = (value << 7) + ((c = *p++) & 0x7f); ; while (c & 0x80); ; } ; *src = p; ; return value; ;} option prologue:none, epilogue:none .code getvlq proc _getvlq proc ; src = RDI, p = RSI XOR EAX,EAX ; value = EAX c = AL MOV RSI,[RDI] ; получи адреса .repeat LODSB ; прочети следващия байт и обнови адреса ROR EAX,8 ; намести байта като най старши; има ли други? .until (!carry?) ; да, продължи BSWAP EAX ; не, постави байтовете на местата им MOV EDX,7F7F7F7FH ; подготви маска за сгъстяване на битовете PEXT EAX,EAX,EDX ; остави само значещите MOV [RDI],RSI ; съхрани новия адрес RET _getvlq endp getvlq endp end