TITLE Coded by Elk, 2002 .186 EXTRN readff:FAR, check:FAR, writeinf:FAR STCK SEGMENT STACK DB 256 DUP(?) STCK ENDS DATA SEGMENT hexdata DB 5 DUP(?) hexdatanum DD ? filehandle DW ? hexword DW ? in_str DB 13,0,13 DUP(' ') infile DB 13 DUP(0) error DB 'Error!$' DATA ENDS CODE SEGMENT 'CODE' ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX LEA DX, in_str MOV AH, 0Ah INT 21h MOV SI, WORD PTR in_str[1] XOR DI, DI MOV CL, 8 SHL SI, CL SHR SI, CL re_snd: MOV AL, in_str[DI+2] MOV infile[DI], AL DEC SI INC DI TEST SI, SI JNZ re_snd PUSH OFFSET infile PUSH OFFSET filehandle PUSH OFFSET hexdata CALL readff XOR AX, AX MOV DI, 4 next: MOV CL, 4 SHL AX, CL XOR BX, BX MOV BL, hexdata[DI] CMP BX, 57 JG abc SUB BX, 48 JMP in_ax abc: SUB BX, 55 in_ax: ADD AX, BX DEC DI TEST DI, DI JZ ouut JMP next ouut: XOR DX, DX MOV DL, hexdata[DI] CMP DX, 57 JG abc_dx SUB DX, 48 JMP in_dx abc_dx: SUB DX, 55 in_dx: MOV WORD PTR hexdatanum, AX LEA DI, hexdatanum MOV [DI+2], DX PUSH WORD PTR hexdatanum PUSH WORD PTR hexdatanum+2 PUSH hexword CALL check TEST AX, AX JZ no_error MOV AH, 2 MOV DX, 13 INT 21h MOV DX, 10 INT 21h MOV DX, OFFSET error MOV AH, 9 INT 21h JMP quit no_error: POP BX MOV hexword, BX MOV hexdata[1], BH MOV hexdata[0], BL PUSH OFFSET infile PUSH OFFSET filehandle PUSH OFFSET hexdata CALL writeinf quit: MOV AX, 4C00h INT 21h CODE ENDS END START