www.pudn.com > czxtsycx1.zip > G_REAL.ASM


GDT_INIT     PROC FAR 
        PUSH  DS 
        MOV   AX,GDTSEG 
        MOV   DS,AX 
        MOV   CX,GDT_INIT_COUNT 
        MOV   SI,OFFSET GDT_INIT_BEGIN 
GDT_INIT1: 
        MOV   AX,[SI].LIMIT 
        CMP   AX,0FFFFH 
        JE    GDT_INIT2 
        DEC   AX 
GDT_INIT2:    MOV   [SI].LIMIT,AX 
        MOV   AX,[SI].BASE_L 
        MOVZX EAX,AX 
        SHL   EAX,4 
        SHLD  EDX,EAX,16 
        MOV   [SI].BASE_L,AX 
        MOV   [SI].BASE_M,DL 
        MOV   [SI].BASE_H,DH 
        ADD   SI,SIZE GDT_DESC 
        LOOP  GDT_INIT1 
 
        POP   DS 
       ; 
        XOR DX,DX 
        MOV CX,16 
        MOV AX,GDTSEG 
        MUL CX             ;DX:AX=32 address for GDT 
        MOV GDT_ADDR,GDTLEN 
        MOV GDT_ADDR+2,AX 
        MOV GDT_ADDR+4,DX 
        RET 
GDT_INIT ENDP 
 
DISP2_16_dos    PROC FAR 
            ;in al code 2 using ah 
            ;out ah:al:code 16 
            mov ah,al 
            shr ah,4 
            cmp ah,9 
            jle disp2_16_1_dos 
            add ah,7     
disp2_16_1_dos: add ah,30h 
            and al,0fh 
            cmp al,9 
            jle disp2_16_2_dos 
            add al,7 
disp2_16_2_dos: add al,30h 
            RET 
DISP2_16_dos    ENDP 
 
DISP_EXT_AX_dos PROC FAR 
            ;in cx:position 
            push ds 
            PUSH AX 
            PUSH BX 
            PUSH DX 
 
            push ax 
            mov ax,data 
            mov ds,ax 
            pop ax 
 
            MOV BX,AX 
            mov al,BH 
            CALL DISP2_16_dos 
            mov DS:t_string,ah 
            mov DS:t_string[1],al 
            MOV AL,BL 
            CALL DISP2_16_dos 
            mov DS:t_string[2],ah 
            mov DS:t_string[3],al 
            mov DS:t_string[4],' ' 
            mov DS:t_string[5],'$' 
            MOV AH,9 
            MOV DX,OFFSET t_string 
            ;add dx,16 
            INT 21H 
            POP DX 
            POP BX 
            POP AX 
            pop ds 
            RET 
DISP_EXT_AX_dos     ENDP 
G_INPUT_FILE PROC FAR 
            ;run_file into c_buf 
            ;in:         ds:data & other work area 
            ;input run_file_name 
            MOV DX,OFFSET INPUT_MSG 
            MOV AH,9 
            INT 21H 
            MOV DX,OFFSET FILE_NAME 
            MOV AH,0AH 
            INT 21H 
            MOV SI,OFFSET FILE_NAME+2 
            MOV BL,FILE_NAME+1 
            MOV BH,0 
            MOV BYTE PTR[SI+BX],0 
           ;*********************************************** 
                                      ; mov file to c_buffer 
            MOV AX,3D02H              ;for read 
            LEA DX,FILE_NAME+2 
            INT 21H 
            JNC READ_FILE 
            LEA DX,ERR_FILE 
            MOV AH,9 
            INT 21H 
            MOV AH,4CH 
            INT 21H 
READ_FILE:  MOV DS:FILE_HANDLE,AX 
            MOV BX,DS:FILE_HANDLE  ;file_handle to BX 
            MOV CX,32000            ;to read byte_count 
            MOV DX,OFFSET C_BUFFER 
            MOV AH,3FH             ;read file 
            INT 21H 
            mov c_buf_size,ax      ;real read_byte_count 
            MOV BX,DS:FILE_HANDLE   
            MOV AH,3EH            ;close file 
            INT 21H 
            ret 
G_INPUT_FILE ENDP