Я потратил много времени, чтобы напечатать и выровнять ниже ассемблерный код, пожалуйста, объясните мне, как работает этот код, я хочу знать, что в строке "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
Пожалуйста, проведите меня через этот код.
Благодарю.