singlepost

СИ + ASM? << На главную или назад  

В универе пишем на асме встроеном в borland C
Ниу кого нет никакой литературы по этому поводу? А то что то ваще ничего не понять…
Пользуюсь книгой ДАО и ЮРОВЫМ

20 ответов в теме “СИ + ASM?”

  1. 18
    Никита Миклушов ответил:

    asm push ds;
    asm push es;

    asm mov bx, 0;
    asm mov ax, 0xb800;
    asm mov ds, ax ;
    asm mov al, 'A';
    asm mov ds: [bx], al;

    asm mov bx, 2;
    asm mov al, 0×52;
    asm mov ds: [bx], al;

    asm mov si,0xb800;
    asm mov di,0xb820;

    asm mov cx,10;
    asm cld;
    asm rep movsb;

    asm pop es;
    asm pop ds;

    Вот наколбасил другой код, но он тоже не фурычит

  2. 17
    Сергей Старовой ответил:

    Вобщем адрес ячейки в видеопамяти считается по формуле =b8000h+(номер_строки*80*2)+номер_позиции*2. И строка и позиция считаются с нуля. При этом на экране помещается 25 строк, в каждой – 80 позиций.
    Тоесть например первый тексель одинадцатой строчки будет находиться по адресу b8000h+(10*80*2) =b8000h+1600 =b8640h.

  3. 16
    Сергей Старовой ответил:

    По умолчанию досовские программы работают в третьем видеорежиме. И b9000 – это адрес где-то в начале другой видеостраницы.

  4. 15
    Никита Миклушов ответил:

    у меня задание скопировать массив из видео памяти по адресу В8000, в В9000 – это примерно чуток выше чем середина экрана…

    Не пойму суть замечания, разъясни.

  5. 14
    Сергей Старовой ответил:

    И что этот код должен делать? )
    В третьем режиме размер страницы видеопамяти =2*80*25 =4000 байт.
    Ты копируешь 4096 байт непонятно куда.

  6. 13
    Никита Миклушов ответил:

    Я уже заебся, вот мой код, прицените:

    asm mov bx, 0xb000
    asm push ds
    asm mov es, bx
    asm mov ds, bx
    asm mov si, 0×8000
    asm mov di, 0×9000
    asm mov cx, 0×1000
    asm mov ax, 1000
    asm cld
    asm rep movsb;
    asm pop ds

  7. 12
    Xlink Crepuscular ответил:

    Ай да, точно.

  8. 11
    Никита Миклушов ответил:

    #6
    Виталий XLink Шушерин:

    Там адресс надо через смещение писать

  9. 10
    Никита Миклушов ответил:

    Спасибо братва, вот на выходных почитал ДаО, чуть подразобрался… Вот мне только кажеться что мои проги написаны верно, но почему то фугкционируют ни так как надо… ДУмаю это как раз что-то с архитектурой(

  10. 9
    Deleted Deleted ответил:

    По-моему чем использовать asm встроенный в borland C, лучше использовать masm32. Если конечно от вас этого (borland C) не требуют. Ну это так, лишь-бы чё-нить ляпнуть =) Встроенный он наверное и в Сях встроенный – ничего хорошего, короче. Я как-то в Delphi пытался на асме вставки делать – плохо получалось очень.

  11. 8
    Сергей Старовой ответил:

    B800 это сегмент был вообще-то )

  12. 7
    Dele Ted ответил:

    ассемблерные вставки делают код непортабельным, если вы захотите перенести сорц на другую архитектуру. если хотите получить максимум выгоды из высокого языка с оптимизацией не хуже чем у проги на асме пользуйте gcc, mingw

  13. 6
    Александр Летов ответил:

    Хинт: для записи в видеопамять часто используют инструкции для "потоковой" (строковой) записи. :) ))

    movsb, movsw, movsd

  14. 5
    Xlink Crepuscular ответил:

    Я так понял пишите под ДОС, 16-ти разрядные приложения?

    mov di, B8000h ; Можно использовать di, si, bx
    mov ax, value ; можно использовать ax, bx ,cx, dx
    mov [di],ax ; скобки означают, что помещаем ax не в регистр di, а по адресу который он содержит

  15. 4
    Никита Миклушов ответил:

    На выходных сам сяду за юрова

  16. 3
    Игорь Маранчак ответил:

    для начала надо наверное подучить ассемблер сам
    сам я его уже года два не пользовал (

    mov [adr],val

  17. 2
    Никита Миклушов ответил:

    Спасибо буду обраться к тебе по вопросам, ок?
    Вот не понятно как записать что-нить в видео память, к примеру по адресу B8000

  18. 1
    Xlink Crepuscular ответил:

    Юров очень хорошая книга для начинающих, написано понятно и просто. Ассемблерные вставки легко делаются в среде Борланд С, главное не забывать сохранять в стек регисты перед вызовом функций на С, и восстанавливать.

    P.S. Пиши конкретно, что не понятно =)

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.