Проблема программирования на ассемблере, как с помощью INC или DEC на 1 может предоставить нам место - PullRequest
0 голосов
/ 21 июня 2019

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

Пожалуйста, проведите меня через этот код. Благодарю.

...