я запутался в приведенной ниже программе на ассемблере.в строке, объявленной явно - PullRequest
0 голосов
/ 29 ноября 2018

Я сбит с толку, что значение переменной DPBBUF_SIZ, заданное ниже значения, заданного как (4472 + 15) / 16 и присвоенного переменной DPBBUF_SIZ, выражается в шестнадцатеричном или десятичном виде.пожалуйста, дайте мне знать, какое значение будет присвоено переменной varBale DPBBUF_SIZ.заранее спасибо.

    DOSSIZE     EQU  5000H
    DPBBUF_SIZ  DW   (4472 + 15) / 16 ; my PROBLEM is that what value will 
                                  ;be assigned to varible "DPBBUF_SIZ" here.
    GOINIT:
    CLD
    XOR     SI,SI
    MOV     DI,SI

    IF      MSVER
    MOV     CX,[MEMORY_SIZE]
    CMP     CX,1
    JNZ     NOSCAN
    MOV     CX,2048                 ; START SCANNING AT 32K BOUNDARY
    XOR     BX,BX

    MEMSCAN:INC     CX
    JZ      SETEND
    MOV     DS,CX
    MOV     AL,[BX]
    NOT     AL
    MOV     [BX],AL
    CMP     AL,[BX]
    NOT     AL
    MOV     [BX],AL
    JZ      MEMSCAN
    SETEND:
    MOV     [MEMORY_SIZE],CX
    ENDIF

    IF      IBMVER OR IBMJAPVER
    MOV     CX,[MEMORY_SIZE]
    ENDIF

    NOSCAN:
    MOV     AX,CS
    MOV     DS,AX
    ASSUME  DS:SYSINITSEG

    IF      HIGHMEM
    SUB     CX,(DOSSIZE / 16)       ; Leave room for DOS
    SUB     CX,CS:[DPBBUF_SIZ]      ; Allow OEM to tune  (my problem: what 
             ;will be the final value of CX after this line or instruction)
    ENDIF


    SHR     AX,1                    ; Divide by 16 for paras
    SHR     AX,1
    SHR     AX,1
    SHR     AX,1
    SUB     CX,AX
    MOV     ES,CX

    SHR     CX,1                    ; Divide by 2 to get words
    REP     MOVSW                   ; RELOCATE SYSINIT

    ASSUME  ES:SYSINITSEG

    PUSH    ES
    MOV     AX,OFFSET SYSIN
    PUSH    AX

    ....................
    ....more code here..

Я думаю, что данного кода будет достаточно, чтобы понять проблему.я делаю какую-то ошибку, пожалуйста, руководство.спасибо.

...