Цикл 3х кратной вложенности в FASM

Тема в разделе "WASM.BEGINNERS", создана пользователем Clipsya, 25 мар 2009.

  1. Clipsya

    Clipsya New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2009
    Сообщения:
    5
    Всем доброго времени суток. Пишу простенький загрузчик, который выводит BMP файл формата 1024x768 256 цветов. Вывожу следующим образом: посекторно читаю дискету в один и тот же участок оп. памяти, оттуда - в видеопамять. Аргументы для вызова прерывания int13h храню в переменных (головка - current_head, сектор - current_sector, дорожка - current_track). После каждого вывода проверяю текущие значения этих переменных.
    Здесь и возникает проблема: одновременно почему-то работают только 2 проверки, стоит включить третью, не отбражается ничего. Хотя от метки @@ до последнего jnz точно меньше 128 байт. На всякий случай попробовал jnz dword - всё равно не пашет. Я просто теряюсь в догадках, подскажите плиз...

    Код (Text):
    1. ...
    2.  
    3.  mov di,0
    4.  
    5.    push 0
    6.    pop ds
    7.  
    8.  mov dx, [ds:window]     ;
    9.  mov bx, 0       ; установка окна А
    10.  call dword [ds:dwc]     ;
    11.  
    12.  
    13. @@:
    14.  
    15.                      ;----------чтение сектора
    16.    mov ax, 0                 ; сегмент
    17.    mov es,ax                 ;
    18.    mov bx, 8400h             ;
    19.    mov ah, 02h               ; функция 02h - чтение сектора
    20.    mov dh, [ds:current_head]         ; головка
    21.    mov dl, 0h                ; устройство
    22.    mov ch, [ds:current_track]        ; дорожка
    23.    mov cl, [ds:current_sector]       ; сектор
    24.    mov al, 1                 ; количество
    25.    int 13h
    26.  
    27.    push 0a000h
    28.    pop es
    29.  
    30.    mov cx, 512
    31.    mov si, 8400h
    32.  
    33.      sector:
    34.  
    35.      mov ax, [ds:si]
    36.      mov [es:di], ax
    37.      inc si
    38.      inc di
    39.  
    40.      loop sector
    41.  
    42.   inc byte [ds:current_sector]      ;
    43.   mov al, [ds:current_sector]       ;  Читаем 18 секторов
    44.   xor al,19             ;
    45.   jnz @B                ;
    46.  
    47.   inc byte [ds:current_head]        ;
    48.   mov byte [ds:current_sector],1    ;
    49.   mov al, [ds:current_head]     ; Теперь с другой стороны
    50.   xor al,2              ;
    51.   jnz word @B               ;
    52.  
    53.   ;inc byte [ds:current_track]      ;
    54.   ;mov byte [ds:current_sector], 1  ;
    55.   ;mov byte [ds:current_head], 0    ;        Переключаемся на следующую дорожку
    56.   ;mov al, byte [ds:current_track]  ;       (ЕСЛИ ЭТОТ БЛОК РАСКОММЕНТИРОВАН,
    57.   ;xor al,7                         ;                ТО ПРОГА НЕ РАБОТАЕТ)
    58.   ;jnz @B                           ;
    59.  
    60. jmp $
    61.  
    62. ;---------переменные------------
    63. mode_info:     
    64. db 256 dup (1)     
    65. dwc:           
    66. db 4 dup (2)       
    67. winA:          
    68. db 2 dup (3)       
    69. winB:          
    70. db 4           
    71. current_sector:
    72. db 1 dup (5)
    73. current_track:
    74. db 1 dup (0)
    75. current_head:
    76. db 1 dup (0)
    77. ...