Ассемблер для Windows



         

Критические секции - часть 5


; вывод OUTSTR PROC ; проверяем, не закончился ли текст MOV EBX,IND CMP BYTE PTR [EBX],0 JNE NO_0 RET NO_0: ; вход в критическую секцию PUSH OFFSET SK CALL EnterCriticalSection@4 ;----------------- PUSH HW CALL GetDC@4 MOV DC,EAX ;---------------- цвет фона = цвет окна PUSH RGBW PUSH EAX CALL SetBkColor@8 ;---------------- цвет текста (красный) PUSH RGBT PUSH DC CALL SetTextColor@8 ;---------------- вывести текст PUSH 1 PUSH IND PUSH YT PUSH XT PUSH DC CALL TextOutA@20 ;- вычислить длину текста в пикселях текста PUSH OFFSET SZT PUSH 1 PUSH IND PUSH DC CALL GetTextExtentPoint32A@16 ; увеличить указатели MOV EAX,SZT.X1 ADD XT,EAX INC IND ;---------------- закрыть контекст PUSH DC CALL DeleteDC@4 ; выход из критической секции PUSH OFFSET SK CALL LeaveCriticalSection@4 RET OUTSTR ENDP

; первый поток THREAD1 PROC L01: ; проверить, не конец ли текста MOV EBX,IND CMP BYTE PTR [EBX],0 JE _END1 ; вывод очередного символа CALL OUTSTR ; задержка PUSH 1000 CALL Sleep@4 JMP L01 _END1: RET 4 THREAD1 ENDP

; второй поток THREAD2 PROC L02: ; проверить, не конец ли текста MOV EBX,IND CMP BYTE PTR [EBX],0 JE _END2 ; вывод очередного символа CALL OUTSTR ; задержка PUSH 1000 CALL Sleep@4 JMP L02 _END2: RET 4 THREAD2 ENDP _TEXT ENDS END START




Содержание  Назад  Вперед