где ошибка?

Тема в разделе "WASM.BEGINNERS", создана пользователем 777user777, 11 янв 2012.

  1. 777user777

    777user777 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2010
    Сообщения:
    109
    эта программа должна выводить содержимое файла на экран,но она не компилируется (под nasm):
    Код (Text):
    1. %define B_LENGTH 8 0
    2. %define STDOUT 0x0001
    3. SECTION .text
    4. org 0x100
    5. mov bp,STDOUT
    6. mov ax,0x3D00
    7. mov dx,file_name
    8. int 0x21
    9. jc error
    10. mov bx,ax
    11. read_next:
    12. mov ax,0x3F
    13. mov dx,buffer
    14. mov cx,B_LENGTH
    15. int 0x21
    16. jc error
    17. or ax,ax
    18. jz end_reading
    19. mov cx,ax
    20. mov ah,0x40
    21. xchg bp,bx
    22. int 0x21
    23. xchg bp,bx
    24. jmp read_next
    25. end_reading:
    26. mov ah,0x35
    27. int 0x21
    28. mov al,0
    29. endprog:
    30. mov ah,4Ch
    31. int 0x21
    32. error:
    33. mov al,1
    34. jmp short endprog
    35. SECTION .data
    36. file_name db "text.txt",0
    37. SECTION .bss
    38. buffer RESB B_LENGTH
    вроде где-то в первой строке,что там не так,не знаю.
     
  2. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    777user777

    Это так толсто что даже толсто.
     
  3. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.874
    777user777
    1) Ошибка в первой строке "%define B_LENGTH 8 0" ноль явно лишний, подправил и у меня ЕХЕ создался, но вот будет ли он работать?
    2) судя по обилию секций это ЕХЕ под ДОС но тогда зачем "org 0x100" это от СОМ-файла
    3) почему нет "mov ax,@data/mov ds,ax"? Для чего "mov bp,STDOUT"?
     
  4. 777user777

    777user777 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2010
    Сообщения:
    109
    это COM.
    STDOUT - это дескриптор стандартного вывода,в bp он просто временно хранится.
     
  5. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.874
    777user777
    Ну, а если это СОМ тогда зачем SECTION .text, SECTION .data, SECTION .bss?
    вот пример СОМ'а на nasm
    Код (Text):
    1. %define ONLY_NASM
    2. section .code
    3. org 0x100
    4. start:  mov ah,9
    5.     mov dx,Hello
    6.     int 0x21
    7.     mov ah,0
    8.     int 0x16
    9.     ret
    10. Hello   db 'Hello, world, from NASM-DOS-COM!$'
    warring не ошибка, а предупреждение... (не смертельно)
     
  6. 777user777

    777user777 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2010
    Сообщения:
    109
    без этого можно,но компилятор пишет
    Код (Text):
    1. warning: uninitialized space declared in .text section: zeroing
    но всеравно программа не работает
     
  7. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.874
  8. 777user777

    777user777 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2010
    Сообщения:
    109
    это я перепутал с 0x3E

    программа же читает из файла
     
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.874
    777user777
    эта программа на МАСМ выводит содержимое файла на экран, на НАСМ сам переводи
    Код (Text):
    1. ; masm dos com #
    2. .286
    3. .model tiny
    4. .code
    5. org 100h
    6. start: mov ax,3D00h
    7. lea dx,file_name
    8. int 21h
    9. mov bx, ax
    10. mov ax,4202h
    11. mov cx,0
    12. mov dx,0
    13. int 21h
    14. mov len_file,ax
    15. mov ax,4200h
    16. int 21h
    17. mov ah,3fh
    18. mov cx,len_file
    19. lea dx, finish
    20. int 21h
    21. mov ah,3eh
    22. int 21h
    23. push 0B900h
    24. pop es
    25. lea si,finish
    26. xor di,di
    27. mov cx,len_file
    28. mov ah,31
    29. @@: lodsb
    30. stosw
    31. loop @b
    32. mov ax,0501h
    33. int 10h
    34. xor ax,ax
    35. int 16h
    36. mov ax,0500h
    37. int 10h
    38. ret
    39. file_name db '0100.asm',0
    40. len_file dw ?
    41. finish equ $
    42. end start
     
  10. 777user777

    777user777 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2010
    Сообщения:
    109
    спасибо
     
  11. newbie

    newbie New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2008
    Сообщения:
    1.246
    ошибка в ДНК!
     
  12. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Достаточно на ник посмотреть. :)