to COM

Тема в разделе "WASM.BEGINNERS", создана пользователем DioNNiS, 23 сен 2006.

  1. DioNNiS

    DioNNiS New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2006
    Сообщения:
    25
    Имеется программа выводящая надипись на экран:
    Код (Text):
    1. .model small
    2. .stack 100h
    3. .data
    4. string db "Hi!",13,10,"$"
    5. ;string_len = $ - string
    6. .code
    7. start:
    8.     mov ax, @data
    9.     mov ds, ax      
    10. l00p:
    11.     lodsb
    12.     test al, al              
    13.     jz exit
    14.     mov bx, 07h
    15.     mov ah, 0Eh          
    16.     int 010h                
    17.     jmp l00p
    18. exit:
    19.     mov     ax, 4C00h       ; the exit fuction  [4C+no error (00)]
    20.     int     21h             ; call DOS interrupt 21h
    21. end start
    Помогите пожалуйста ее переделать в COM файл. Я никак не пойму, как сделать что бы данные и код находились в одном сегменте....=(((
     
  2. afybc

    afybc New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2006
    Сообщения:
    73
    размести данные после int 21h
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    или модешь в начале jmp start поставить.
     
  4. DioNNiS

    DioNNiS New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2006
    Сообщения:
    25
    Я - просто полный ламер.... я не могу после этого загрузить их в ds и ax
    Я вот как делаю:
    Код (Text):
    1. .model small
    2. .stack 100h
    3. .data
    4. .code
    5. start:
    6.     mov ax, offset string
    7.     mov ds, ax    
    8. l00p:
    9.     lodsb
    10.     test al, al              
    11.     jz exit
    12.     mov bx, 07h
    13.     mov ah, 0Eh          
    14.     int 010h                
    15.     jmp l00p
    16. exit:
    17.     mov     ax, 4C00h       ; the exit fuction  [4C+no error (00)]
    18.     int     21h             ; call DOS interrupt 21h
    19.     string db "Hi!",13,10,"$"
    20. end start
    но это неправильно...=(((
     
  5. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    Код (Text):
    1. .model tiny
    2. .code
    3. org 100h
    4. start:
    5.     mov ax, seg string
    6.     mov ds, ax
    7.     mov si, offset string
    8. l00p:
    9.     lodsb
    10.     test al, al              
    11.     jz exit
    12.     mov bx, 07h
    13.     mov ah, 0Eh          
    14.     int 010h                
    15.     jmp l00p
    16. exit:
    17.     mov        ax, 4C00h        ; the exit fuction  [4C+no error (00)]
    18.     int        21h                ; call DOS interrupt 21h
    19.     string db "Hi!",13,10,"$"
    20. end start
     
  6. DioNNiS

    DioNNiS New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2006
    Сообщения:
    25
    Не получается, пишет:
    Компилирую вот так:
    D:\tasm\bin\tasm /Zi Asm1.asm
    D:\tasm\bin\tlink /t Asm1.obj
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    .code попробуй убрать.
     
  8. DioNNiS

    DioNNiS New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2006
    Сообщения:
    25
    нет .code тут обязательно. Если не будет сегмента кода, то тогда прога как вообще будет существовать то...
    P.S. блина, хотя я вообще asm почти не знаю, попробую, но наврятли..
     
  9. DioNNiS

    DioNNiS New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2006
    Сообщения:
    25
    Конечно же не прокатило....

    Насколько я понимаю тут ошибка в стоке
    Код (Text):
    1.     mov ax, seg string
    Подскажите как без нее обойтись?
     
  10. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Код (Text):
    1. ; hello-l.asm
    2. ; Выводит на экран сообщение "Hello World!" и завершается
    3.         .model     tiny              ; модель памяти, используемая для СОМ
    4.         .code                        ; начало сегмента кода
    5.         org        100h              ; начальное значение счетчика - 100h
    6. start:  mov        ah,9              ; номер функции DOS - в АН
    7.         mov        dx,offset message ; адрес строки - в DX
    8.         int        21h               ; вызов системной функции DOS
    9.         ret                          ; завершение СОМ-программы
    10. message db         "Hello World!",0Dh,0Ah,'$' ; строка для вывода
    11.         end        start             ; конец программы
    Исходник от Зубкова.
    tasm hello-1.asm
    tasm /t /x hello-1.obj
     
  11. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Код (Text):
    1. .model tiny
    2. .code
    3. .386
    4. org 100h
    5. start:
    6.  
    7. lea dx,string
    8. mov ah,9
    9. int 21h
    10. ret
    11.  
    12. string     db 'Hi!$'
    13. end start
    ЗЫ: Опередили
     
  12. DioNNiS

    DioNNiS New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2006
    Сообщения:
    25
    Блина, нужно сделать тоже самое только с 10 прерыванием Bios!!!!
    Так то понятно....
     
  13. DioNNiS

    DioNNiS New Member

    Публикаций:
    0
    Регистрация:
    8 сен 2006
    Сообщения:
    25
    Всем спасибо!
    В общемя сам догадался как надо сделать:
    Всего лишь вот так:
    Код (Text):
    1. .model tiny
    2. .386
    3.  
    4. .code
    5. org 100h
    6. start:
    7.     mov ah, 03
    8.     xor bh, bh
    9.     int 10h
    10.    
    11.     mov cx, 24
    12.     mov bx, 0007
    13.     lea bp, message
    14.     mov ax, 1301h
    15.     int 10h
    16.    
    17.     int 20h
    18.     message db "Handling BIOS interrupts"
    19. end start