📄 isr.cod
字号:
002a0 6a 01 push 1
002a2 56 push esi
002a3 e8 00 00 00 00 call _SerialHandleModemUpdate@8
$L14963:
; 762 :
; 763 : }
; 764 :
; 765 : //
; 766 : // We can only send the xon character if
; 767 : // the only reason we are holding is because
; 768 : // of the xoff. (Hardware flow control or
; 769 : // sending break preclude putting a new character
; 770 : // on the wire.)
; 771 : //
; 772 :
; 773 : if (Extension->SendXonChar &&
; 774 : !(Extension->TXHolding & ~SERIAL_TX_XOFF)) {
002a8 80 be db 01 00
00 00 cmp BYTE PTR [esi+475], 0
002af 0f 84 96 00 00
00 je $L14965
002b5 f7 86 1c 01 00
00 f7 ff ff ff test DWORD PTR [esi+284], -9 ; fffffff7H
002bf 0f 85 86 00 00
00 jne $L14965
; 775 :
; 776 : if ((Extension->HandFlow.FlowReplace &
; 777 : SERIAL_RTS_MASK) ==
; 778 : SERIAL_TRANSMIT_TOGGLE) {
002c5 8b 86 78 01 00
00 mov eax, DWORD PTR [esi+376]
002cb 66 25 c0 00 and ax, 192 ; 000000c0H
002cf 3c c0 cmp al, 192 ; 000000c0H
002d1 75 3c jne SHORT $L14968
; 779 :
; 780 : //
; 781 : // We have to raise if we're sending
; 782 : // this character.
; 783 : //
; 784 :
; 785 : SerialSetRTS(Extension);
002d3 56 push esi
002d4 e8 00 00 00 00 call _SerialSetRTS@4
; 786 :
; 787 : Extension->PerfStats.TransmittedCount++;
; 788 : Extension->WmiPerfData.TransmittedCount++;
; 789 : WRITE_TRANSMIT_HOLDING(
; 790 : Extension->Controller,
; 791 : Extension->SpecialChars.XonChar
; 792 : );
002d9 8a 86 70 01 00
00 mov al, BYTE PTR [esi+368]
002df ff 86 88 01 00
00 inc DWORD PTR [esi+392]
002e5 ff 86 1c 06 00
00 inc DWORD PTR [esi+1564]
002eb 50 push eax
002ec ff b6 98 00 00
00 push DWORD PTR [esi+152]
002f2 ff d7 call edi
; 793 :
; 794 : SerialInsertQueueDpc(
; 795 : &Extension->StartTimerLowerRTSDpc,
; 796 : NULL,
; 797 : NULL,
; 798 : Extension
; 799 : )?Extension->CountOfTryingToLowerRTS++:0;
002f4 56 push esi
002f5 53 push ebx
002f6 8d 86 4c 03 00
00 lea eax, DWORD PTR [esi+844]
002fc 53 push ebx
002fd 50 push eax
002fe e8 00 00 00 00 call _SerialInsertQueueDpc@16
00303 84 c0 test al, al
00305 74 23 je SHORT $L14978
00307 ff 86 3c 01 00
00 inc DWORD PTR [esi+316]
; 800 :
; 801 :
; 802 : } else {
0030d eb 1b jmp SHORT $L14978
$L14968:
; 803 :
; 804 : Extension->PerfStats.TransmittedCount++;
; 805 : Extension->WmiPerfData.TransmittedCount++;
; 806 : WRITE_TRANSMIT_HOLDING(
; 807 : Extension->Controller,
; 808 : Extension->SpecialChars.XonChar
; 809 : );
0030f 8a 86 70 01 00
00 mov al, BYTE PTR [esi+368]
00315 ff 86 88 01 00
00 inc DWORD PTR [esi+392]
0031b ff 86 1c 06 00
00 inc DWORD PTR [esi+1564]
00321 50 push eax
00322 ff b6 98 00 00
00 push DWORD PTR [esi+152]
00328 ff d7 call edi
$L14978:
; 810 :
; 811 : }
; 812 :
; 813 :
; 814 : Extension->SendXonChar = FALSE;
0032a 80 a6 db 01 00
00 00 and BYTE PTR [esi+475], 0
; 815 : Extension->HoldingEmpty = FALSE;
00331 80 a6 a0 01 00
00 00 and BYTE PTR [esi+416], 0
; 816 :
; 817 : //
; 818 : // If we send an xon, by definition we
; 819 : // can't be holding by Xoff.
; 820 : //
; 821 :
; 822 : Extension->TXHolding &= ~SERIAL_TX_XOFF;
00338 83 a6 1c 01 00
00 f7 and DWORD PTR [esi+284], -9 ; fffffff7H
; 823 :
; 824 : //
; 825 : // If we are sending an xon char then
; 826 : // by definition we can't be "holding"
; 827 : // up reception by Xoff.
; 828 : //
; 829 :
; 830 : Extension->RXHolding &= ~SERIAL_RX_XOFF;
0033f 83 a6 20 01 00
00 fd and DWORD PTR [esi+288], -3 ; fffffffdH
; 831 :
; 832 : } else if (Extension->SendXoffChar &&
00346 e9 cb fe ff ff jmp $L14916
$L14965:
; 833 : !Extension->TXHolding) {
0034b 80 be dc 01 00
00 00 cmp BYTE PTR [esi+476], 0
00352 0f 84 b6 00 00
00 je $L14983
00358 39 9e 1c 01 00
00 cmp DWORD PTR [esi+284], ebx
0035e 0f 85 aa 00 00
00 jne $L14983
; 834 :
; 835 : if ((Extension->HandFlow.FlowReplace &
; 836 : SERIAL_RTS_MASK) ==
; 837 : SERIAL_TRANSMIT_TOGGLE) {
00364 8b 86 78 01 00
00 mov eax, DWORD PTR [esi+376]
0036a 66 25 c0 00 and ax, 192 ; 000000c0H
0036e 3c c0 cmp al, 192 ; 000000c0H
00370 75 3c jne SHORT $L14986
; 838 :
; 839 : //
; 840 : // We have to raise if we're sending
; 841 : // this character.
; 842 : //
; 843 :
; 844 : SerialSetRTS(Extension);
00372 56 push esi
00373 e8 00 00 00 00 call _SerialSetRTS@4
; 845 :
; 846 : Extension->PerfStats.TransmittedCount++;
; 847 : Extension->WmiPerfData.TransmittedCount++;
; 848 : WRITE_TRANSMIT_HOLDING(
; 849 : Extension->Controller,
; 850 : Extension->SpecialChars.XoffChar
; 851 : );
00378 8a 86 71 01 00
00 mov al, BYTE PTR [esi+369]
0037e ff 86 88 01 00
00 inc DWORD PTR [esi+392]
00384 ff 86 1c 06 00
00 inc DWORD PTR [esi+1564]
0038a 50 push eax
0038b ff b6 98 00 00
00 push DWORD PTR [esi+152]
00391 ff d7 call edi
; 852 :
; 853 : SerialInsertQueueDpc(
; 854 : &Extension->StartTimerLowerRTSDpc,
; 855 : NULL,
; 856 : NULL,
; 857 : Extension
; 858 : )?Extension->CountOfTryingToLowerRTS++:0;
00393 56 push esi
00394 53 push ebx
00395 8d 86 4c 03 00
00 lea eax, DWORD PTR [esi+844]
0039b 53 push ebx
0039c 50 push eax
0039d e8 00 00 00 00 call _SerialInsertQueueDpc@16
003a2 84 c0 test al, al
003a4 74 23 je SHORT $L14996
003a6 ff 86 3c 01 00
00 inc DWORD PTR [esi+316]
; 859 :
; 860 : } else {
003ac eb 1b jmp SHORT $L14996
$L14986:
; 861 :
; 862 : Extension->PerfStats.TransmittedCount++;
; 863 : Extension->WmiPerfData.TransmittedCount++;
; 864 : WRITE_TRANSMIT_HOLDING(
; 865 : Extension->Controller,
; 866 : Extension->SpecialChars.XoffChar
; 867 : );
003ae 8a 86 71 01 00
00 mov al, BYTE PTR [esi+369]
003b4 ff 86 88 01 00
00 inc DWORD PTR [esi+392]
003ba ff 86 1c 06 00
00 inc DWORD PTR [esi+1564]
003c0 50 push eax
003c1 ff b6 98 00 00
00 push DWORD PTR [esi+152]
003c7 ff d7 call edi
$L14996:
; 868 :
; 869 : }
; 870 :
; 871 : //
; 872 : // We can't be sending an Xoff character
; 873 : // if the transmission is already held
; 874 : // up because of Xoff. Therefore, if we
; 875 : // are holding then we can't send the char.
; 876 : //
; 877 :
; 878 : //
; 879 : // If the application has set xoff continue
; 880 : // mode then we don't actually stop sending
; 881 : // characters if we send an xoff to the other
; 882 : // side.
; 883 : //
; 884 :
; 885 : if (!(Extension->HandFlow.FlowReplace &
; 886 : SERIAL_XOFF_CONTINUE)) {
003c9 8b 86 78 01 00
00 mov eax, DWORD PTR [esi+376]
003cf 85 c0 test eax, eax
003d1 78 28 js SHORT $L15268
; 887 :
; 888 : Extension->TXHolding |= SERIAL_TX_XOFF;
003d3 83 8e 1c 01 00
00 08 or DWORD PTR [esi+284], 8
; 889 :
; 890 : if ((Extension->HandFlow.FlowReplace &
; 891 : SERIAL_RTS_MASK) ==
; 892 : SERIAL_TRANSMIT_TOGGLE) {
003da 66 25 c0 00 and ax, 192 ; 000000c0H
003de 3c c0 cmp al, 192 ; 000000c0H
003e0 75 19 jne SHORT $L15268
; 893 :
; 894 : SerialInsertQueueDpc(
; 895 : &Extension->StartTimerLowerRTSDpc,
; 896 : NULL,
; 897 : NULL,
; 898 : Extension
; 899 : )?Extension->CountOfTryingToLowerRTS++:0;
003e2 56 push esi
003e3 53 push ebx
003e4 8d 86 4c 03 00
00 lea eax, DWORD PTR [esi+844]
003ea 53 push ebx
003eb 50 push eax
003ec e8 00 00 00 00 call _SerialInsertQueueDpc@16
003f1 84 c0 test al, al
003f3 74 06 je SHORT $L15268
003f5 ff 86 3c 01 00
00 inc DWORD PTR [esi+316]
$L15268:
; 900 :
; 901 : }
; 902 :
; 903 : }
; 904 :
; 905 : Extension->SendXoffChar = FALSE;
003fb 80 a6 dc 01 00
00 00 and BYTE PTR [esi+476], 0
; 906 : Extension->HoldingEmpty = FALSE;
00402 80 a6 a0 01 00
00 00 and BYTE PTR [esi+416], 0
; 907 :
; 908 : //
; 909 : // Even if transmission is being held
; 910 : // up, we should still transmit an immediate
; 911 : // character if all that is holding us
; 912 : // up is xon/xoff (OS/2 rules).
; 913 : //
; 914 :
; 915 : } else if (Extension->TransmitImmediate &&
00409 e9 08 fe ff ff jmp $L14916
$L14983:
; 916 : (!Extension->TXHolding ||
; 917 : (Extension->TXHolding == SERIAL_TX_XOFF)
; 918 : )) {
0040e 8d 86 a1 01 00
00 lea eax, DWORD PTR [esi+417]
00414 80 38 00 cmp BYTE PTR [eax], 0
00417 0f 84 96 00 00
00 je $L15008
0041d 8b 8e 1c 01 00
00 mov ecx, DWORD PTR [esi+284]
00423 3b cb cmp ecx, ebx
00425 74 09 je SHORT $L15009
00427 83 f9 08 cmp ecx, 8
0042a 0f 85 83 00 00
00 jne $L15008
$L15009:
; 919 :
; 920 : Extension->TransmitImmediate = FALSE;
00430 80 20 00 and BYTE PTR [eax], 0
; 921 :
; 922 : if ((Extension->HandFlow.FlowReplace &
; 923 : SERIAL_RTS_MASK) ==
; 924 : SERIAL_TRANSMIT_TOGGLE) {
00433 8b 86 78 01 00
00 mov eax, DWORD PTR [esi+376]
00439 66 25 c0 00 and ax, 192 ; 000000c0H
0043d 3c c0 cmp al, 192 ; 000000c0H
0043f 75 3c jne SHORT $L15012
; 925 :
; 926 : //
; 927 : // We have to raise if we're sending
; 928 : // this character.
; 929 : //
; 930 :
; 931 : SerialSetRTS(Extension);
00441 56 push esi
00442 e8 00 00 00 00 call _SerialSetRTS@4
; 932 :
; 933 : Extension->PerfStats.TransmittedCount++;
; 934 : Extension->WmiPerfData.TransmittedCount++;
; 935 : WRITE_TRANSMIT_HOLDING(
; 936 : Extension->Controller,
; 937 : Extension->ImmediateChar
; 938 : );
00447 8a 86 d8 01 00
00 mov al, BYTE PTR [esi+472]
0044d ff 86 88 01 00
00 inc DWORD PTR [esi+392]
00453 ff 86 1c 06 00
00 inc DWORD PTR [esi+1564]
00459 50 push eax
0045a ff b6 98 00 00
00 push DWORD PTR [esi+152]
00460 ff d7 call edi
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -