小编god*_*kal的帖子

我们如何仅使用名称访问 DOS 函数,而不使用与之关联的十六进制数?

我正在浏览 MS-DOS 1.25 源代码 MSDOS.ASM,在这里我发现了由名称引入的 MS-DOS 内置函数,如下所示。我们可以看到系统标准函数“RENAME”的实现,这个函数是系统调用23,但是值23没有被使用。

; Standard Functions

DISPATCH DW ABORT ;0 
               DW CONIN 
               DW CONOUT 
               DW READER 
               DW PUNCH 
               DW LIST ;5 
               DW RAWIO 
               DW RAWINP
               DW RENAME

RENAME:     ;System call 23 
CALL MOVNAME 
JC ERRET 
ADD SI,5 
MOV DI,OFFSET DOSGROUP:NAME2 
CALL LODNAME 
JC ERRET 
CALL FINDNAME 
JC ERRET 
OR BH,BH ;Check if I/O device name 
JS ERRET ;If so, can't rename it 
MOV SI,OFFSET DOSGROUP:NAME1 
MOV DI,OFFSET DOSGROUP:NAME3 
MOV CX,6
REP MOVSW
Run Code Online (Sandbox Code Playgroud)

我的困惑是系统将如何识别 RENAME 函数,因为这个相同的函数在不同的模块中可能有不同的名称,并且没有附加十进制或十六进制值。正如我们所看到的,RENAME 函数是系统调用 …

assembly operating-system dos x86-16

2
推荐指数
1
解决办法
75
查看次数

什么是原始 MS-DOS 源代码中的 DI、EI 和 UP 指令(?)?

我正在为 OS 进行一个汇编语言项目。为此,我通过初始操作系统获取知识。在此过程中,我尝试了解 MS-DOS 1.25。但是当我运行这个文件 IO.ASM 然后我从下面给出的一些行的代码中得到四个错误,在这里我用“<-----this”符号标记了这些行。请指导我。

INIT:
XOR BP,BP       ; Set up 
;stack just below I/O 
;system.
MOV SS,BP
MOV SP,BIOSSEG*16

IF  INTINP-1
MOV AL,0FFH     ; Mask all 
;interrupts.
OUTB BASE+3 <------this
ENDIF

IF  INTINP
DI  ; Set up <------ this
;keyboard interrupt vector.
MOV [BP+64H],KBINT
MOV [BP+66H],CS
EI <-----this
ENDIF

MOV [BP+4*38H],PRNFCB
MOV [BP+4*38H+2],CS
PUSH CS
POP DS
;
; Initialize time-of-day 
;clock.
;
MOV SI,STCTAB
MOV CX,4        ;Initialize 
;4 registers
UP  <------this
INITSTC:
LODB
OUT STCCOM      ;Select …
Run Code Online (Sandbox Code Playgroud)

assembly operating-system dos x86-16

2
推荐指数
1
解决办法
197
查看次数

标签 统计

assembly ×2

dos ×2

operating-system ×2

x86-16 ×2