我花了很多时间在汇编代码下键入和对齐,请指导我这段代码的工作方式,我想知道在“ 9”行(INC DX)上将为ARENA留出足够的空间(如注释),我还想知道在行“ 19”处为什么要递减AX(DEC AX)。
1.MOV DI, [BUFFSTRT]
2.MOV WORD PTR ES:[BUFFHEAD+2], ES
3.MOV WORD PTR ES:[BUFFHEAD], DI
4.MOV WORD PTR ES:[DI.BUFDRV], 00FFH
5.MOV ES:[DI.BUFPRI], FREEPRI
6.MOV WORD PTR ES:[DI.NEXTBUF], -1
7.MOV WORD PTR ES:[DI.NEXTBUF+2], -1
8.PUSH ES
9.INC DX ;Leave enough room for the ARENA
10.MOV BYTE PTR [CreatePDB], 0FFH ;create jnfs and
;set CurrentPDB
11.invoke $CREATE_PROCESS_DATA_BLOCK ;set up
;segment
12.ASSUME DS: NOTHING, ES :NOTHING
13.POP ES
14.ASSUME ES:DOSGROUP
15.PUSH AX
16.MOV AX, [CurrentPDB]
17.MOV ES:[CurrentPDB], AX ;Put it in the real
;location
18.MOV BYTE PTR ES:[CreatePDB], 0h ;reset flag in the
;REAL location
19.DEC AX
20.MOV ES:[arena_head], AX
21.PUSH DS
22.MOV DS, AX
23.MOV DS:[arena_signature], arena_signature_end
24.MOV DS:[arena_owner], arena_owner_system
25.SUB AX, ES:[ENDMEM]
26.NEG AX
27.DEC AX
28.MOV DS:[arena_size], AX
29.POP DS
30.POP AX
31.MOV DI, OFFSET DOSGROUP:sftabl + sft_table ;point
;to system file table 0
32.MOV AL, 3
33.STOSB ;Adjust Refcount
34.MOV DI, OFFSET DOSGROUP:SYSINITVAR
请引导我完成此代码。 谢谢。