%include 'rw32-2022.inc' section .data ; 1 + 4 + 2 + 2 + 2 + 4 + 4= 19 currentTest dd 0 TEST_REC_SIZE EQU 19 testCount dd 11 tests: t1 db 10 dd 20 dw 10 dw 7 dw 7 dd 0 dd 0 t2 db 0 dd 0 dw 0 dw 0 dw 0 dd 0 dd 0 t3 db 0xFF dd 0x0000FFFF dw 0xFFFF dw 0xFFFF dw 0xFFFF dd 0 dd 0 t4 db 0x80 dd 0x00008000 dw 0x8000 dw 0x8000 dw 0x8000 dd 0 dd 0 t5 db 0x7F dd 0x00007FFF dw 0x7FFF dw 0x7FFF dw 0x7FFF dd 0 dd 0 t6 db 0x7F dd 0x7FFFFFFF dw 0x7FFF dw 0x7FFF dw 0x7FFF dd 0 dd 0 t7 db 0x80 dd 0x80000000 dw 0x8000 dw 0x8000 dw 0x8000 dd 0 dd 0 t8 db 0xFF dd 0xFFFFFFFF dw 0xFFFF dw 0xFFFF dw 0xFFFF dd 0 dd 0 t9 db 10 dd 20 dw 10 dw 7 dw 7 dd 0xFFFFFFFF dd 0xFFFFFFFF t10 db 10 dd 20 dw 10 dw 7 dw 7 dd 0x7FFFFFFF dd 0x7FFFFFFF t11 db 10 dd 20 dw 10 dw 7 dw 7 dd 0x80000000 dd 0x80000000 a db 0 b dd 0 c dw 0 d dw 0 e dw 0 q dd 0 r dd 0 section .text PRINT_ABCDE: mov al,'(' call WriteChar mov al,[a] call WriteUInt8 mov al,',' call WriteChar mov eax,[b] call WriteUInt32 mov al,',' call WriteChar mov ax,[c] call WriteUInt16 mov al,',' call WriteChar mov ax,[d] call WriteUInt16 mov al,',' call WriteChar mov ax,[e] call WriteUInt16 mov al,')' call WriteChar mov al,'=' call WriteChar ret CMAIN: enter 0,0 pushad pushfd mov eax,3 jmp .skip_pars mov eax,[ebp+8] ; argc cmp eax,2 jb exit mov esi,[ebp+12] ; argv mov edi,[esi] ; argv[0] CEXTERN atoi push dword [esi+4] call atoi add esp,4 cmp eax,1 jb exit cmp eax,[testCount] ja exit mov ebx,-1 mov ecx,-1 mov edx,-1 mov esi,-1 mov edi,-1 mov ebp,-1 .skip_pars: imul eax,eax,TEST_REC_SIZE lea esi,[tests + eax - TEST_REC_SIZE] mov [currentTest],esi mov edi,a mov ecx,TEST_REC_SIZE cld rep movsb call PRINT_ABCDE mov dword [q],0xABABABAB mov dword [r],0xBABABABA mov eax,[currentTest + 11] mov edx,[currentTest + 15] mov esi,0 call task12 mov esi,q mov ecx,2 call WriteArrayUInt32 exit: popfd popad leave xor eax,eax ret user_test_code_begin: task12: xor eax, eax xor ebx, ebx xor edx, edx xor ecx, ecx mov al, byte [a] cbw cwde imul dword [b] mov ebx, eax xor eax, eax mov ax, word [c] cwde add eax, ebx add eax, 32 mov ecx,eax xor eax, eax xor ebx, ebx xor edx, edx mov ax, 5 mov bx, word [d] imul bx shl edx, 16 mov dx, ax mov eax, edx mov ebx, eax xor eax, eax mov ax, word [e] cwde add eax, ebx mov ebx, 1256 add eax, ebx xchg eax, ecx cdq idiv ecx mov [q], eax mov [r], edx ret user_test_code_end: ret