ошибки кодирования на ассемблере - PullRequest
0 голосов
/ 15 апреля 2020

когда я пишу код ниже заданным способом1:

<------------------from here------------------------>
COMERR:                 <--------------
    MOV DX,BADCOM
    MOV AH,9        
    INT 33
    STI

SERINIT:
    MOV AX,CS
    MOV DS,AX
    MOV DX,OFFSET FCB       
    MOV AH,15
    INT 33                  
    OR  AL,AL
    JNZ COMERR               ;<== (error1)Relative jump is out of range
    XOR AX,AX
    INC AX
    MOV [FCB+14],AX 
    MOV AH,39       
    INT 33
<-------------------till here------------------------>  

, тогда я получаю ошибку "Относительный скачок вне диапазона". потому что (я думаю) метка «COMERR:» достаточно далека от инструкции «JNZ COMERR».

С другой стороны, когда я пишу код, указанный ниже2:

<-------------------from here------------------------>
SERINIT:
    MOV AX,CS
    MOV DS,AX
    MOV DX,OFFSET FCB       
    MOV AH,15
    INT 33                  
    OR  AL,AL
    JNZ COMERR               ;<== (error2)Phase error between passes
    XOR AX,AX
    INC AX
    MOV [FCB+14],AX 
    MOV AH,39       
    INT 33
COMERR:                       ;<--------------------
    MOV DX,BADCOM
    MOV AH,9        
    INT 33
    STI
<-------------------------till here----------------------------->

тогда я получаю ошибку «Ошибка фазы между проходами», потому что (я думаю), что метка «COMERR:» расположена после инструкции JUMP (JNZ COMERR :), и должна быть перед инструкцией «JNZ COMERR:».

Пожалуйста, объясните мне, как сохранить этот код.

...