⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 g_real.asm

📁 操作系统实验教程核心技术与编程实例书中地例子代码
💻 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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -