汇编语言编程问题如何用INC或DEC乘以1可以为我们提供空间

时间:2019-06-21 15:51:45

标签: assembly dos x86-16

我花了很多时间在汇编代码下键入和对齐,请指导我这段代码的工作方式,我想知道在“ 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

请引导我完成此代码。 谢谢。

0 个答案:

没有答案