Ещё один пример из Зубкова

Тема в разделе "WASM.BEGINNERS", создана пользователем Igor1024, 27 дек 2010.

  1. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    MASM на многие листинги, в частности 'Жизнь' из Зубкова (lifebios.asm) выдаёт:
    "unresolved external symbol _start".
    Ещё творение мелкомягких ругает FAR_BSS (кстати каково значение этой (контанты||переменной?) - пытался под FASM переписать). Надеюсь код в студию не надо.
     
  2. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    Так, почему ругань этот MASM наводит я кажется понял, т.к мой мелкомягкий компилер не умеет 'делать' DOS программы .
    Вопрос: что за FAR_BSS, чтобы я смог его впихнуть в прогу на FASM'e? (Значение этого FAR_BSS).
     
  3. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
  4. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    Да, что-то я зачастил...
    iZzz32, спасибо за ответ, но не получилось. Видать я туплю.
    Зубков после листинга даёт пример записи прямо в видеопамять, что позволяет задекларировать прогу как .COM, как задать эту cекцию?(простите мою глупость...) если файл .exe , то вариант с секцией легко прокатывает, но как в .COM файле задать? (тем более можно потестить лишь в нём - пишу под винду).

    Код (Text):
    1. org 100h
    2.  
    3. start:
    4.         ;push FAR_BSS
    5.         pop ds
    6.         xor ax, ax
    7.         int 1Ah
    8.         mov di, 320*200+1
    9. fill_buffer:
    10.         imul dx, 4e35h
    11.         inc dx
    12.         mov ax, dx
    13.         shr ax, 15
    14.         mov byte[di], al
    15.  
    16.         dec di
    17.         jnz fill_buffer
    18.  
    19.         mov ax, 0013h
    20.         int 10h
    21.  
    22. new_cycle:
    23.         mov di, 320*200+1
    24.  
    25. step_1:
    26.         mov al, byte[di+1]
    27.         add al, byte[di-1]
    28.         add al, byte[di+319]
    29.         add al, byte[di-319]
    30.         add al, byte[di+320]
    31.         add al, byte[di-320]
    32.         add al, byte[di+321]
    33.         add al, byte[di-321]
    34.         shl al, 4
    35.  
    36.         or byte[di], al
    37.  
    38.         dec di
    39.         jnz step_1
    40.  
    41.  
    42.         mov di, 320*200+1
    43.  
    44. flip_cycle:
    45.         mov al, byte[di]
    46.         shr al, 4
    47.         cmp al, 3
    48.         je birth
    49.         cmp al, 2
    50.         je f_c_continue
    51.         mov byte[di], 0
    52.         jmp short f_c_continue
    53.  
    54. birth:
    55.         mov byte[di], 1
    56.  
    57. f_c_continue:
    58.         and byte[di], 0fh
    59.         dec di
    60.         jnz flip_cycle
    61.  
    62.  
    63.        ; mov si, 320*200+1 Закомменчен первый вариант
    64.  
    65.  
    66.        ; mov cx, 319
    67.        ; mov dx, 199
    68.  
    69. zdisplay:
    70.        push 0A000h;здесь пишем в видеопамять
    71.        pop es
    72.        mov cx, 320*200
    73.        mov di, cx
    74.        mov si, cx
    75.        inc si
    76.        rep movsb
    77.        ; mov al, byte[si]
    78.        ; mov ah, 0ch
    79.        ; int 10h
    80.        ; dec si
    81.        ; dec cx
    82.        ; jns zdisplay
    83.        ; mov cx, 319
    84.        ; dec dx
    85.        ;jns zdisplay
    86.  
    87.         mov ah, 1
    88.         int 16h
    89.         jz new_cycle
    90.  
    91.         mov ax, 0003h
    92.         int 10h
    93.         mov ax, 4c00h
    94.         int 21h
    95.  
    96.  
    97. ;segment 'FAR_BSS'/или без кавычек...
    98. FAR_BSS:db 320*200+1 dup(?)
     
  5. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    Считать сегмент в рантайме. Или переписывать все dec di / jnz и т. п.
    Код (Text):
    1. start:
    2.         push    ds
    3.         pop     ax
    4.         shl     ax,4
    5.         add     ax,FAR_BSS
    6.         shr     ax,4
    7.         mov     ds,ax
    8. ...
    9. align   0x10
    10. FAR_BSS:db 320*200+1 dup(?)
     
  6. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    У Зубкова все примеры написаны на TASM.
    Скачай себе TASM и не взрывай людям мозг.
    FAR_BSS это просто имя переменной, попробуй подобавлять везде offset - должно помочь.
    Код (Text):
    1. push offset FAR_BSS
     
  7. Igor1024

    Igor1024 Васил Троянов Боянов (Azis)

    Публикаций:
    0
    Регистрация:
    15 окт 2010
    Сообщения:
    345
    Адрес:
    Sliven, Bulgaria
    iZzz32, большое спасибо, всё заработало.
    cppasm, у Зубкова примеры под MASM и под TASM подходят. Он сам в начале книги писал.
    Мне больше FASM нравится, потому и страраюсь писать на нём.