📄 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -