В универе пишем на асме встроеном в borland C
Ниу кого нет никакой литературы по этому поводу? А то что то ваще ничего не понять…
Пользуюсь книгой ДАО и ЮРОВЫМ
В универе пишем на асме встроеном в borland C
Ниу кого нет никакой литературы по этому поводу? А то что то ваще ничего не понять…
Пользуюсь книгой ДАО и ЮРОВЫМ
Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.
8 октября 2008 в 22:05
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;
Вот наколбасил другой код, но он тоже не фурычит
6 октября 2008 в 23:03
Вобщем адрес ячейки в видеопамяти считается по формуле =b8000h+(номер_строки*80*2)+номер_позиции*2. И строка и позиция считаются с нуля. При этом на экране помещается 25 строк, в каждой – 80 позиций.
Тоесть например первый тексель одинадцатой строчки будет находиться по адресу b8000h+(10*80*2) =b8000h+1600 =b8640h.
6 октября 2008 в 23:02
По умолчанию досовские программы работают в третьем видеорежиме. И b9000 – это адрес где-то в начале другой видеостраницы.
6 октября 2008 в 22:00
у меня задание скопировать массив из видео памяти по адресу В8000, в В9000 – это примерно чуток выше чем середина экрана…
Не пойму суть замечания, разъясни.
6 октября 2008 в 18:00
И что этот код должен делать? )
В третьем режиме размер страницы видеопамяти =2*80*25 =4000 байт.
Ты копируешь 4096 байт непонятно куда.
6 октября 2008 в 16:05
Я уже заебся, вот мой код, прицените:
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
6 октября 2008 в 10:04
Ай да, точно.
6 октября 2008 в 9:01
#6
Виталий XLink Шушерин:
Там адресс надо через смещение писать
6 октября 2008 в 9:00
Спасибо братва, вот на выходных почитал ДаО, чуть подразобрался… Вот мне только кажеться что мои проги написаны верно, но почему то фугкционируют ни так как надо… ДУмаю это как раз что-то с архитектурой(
6 октября 2008 в 3:00
По-моему чем использовать asm встроенный в borland C, лучше использовать masm32. Если конечно от вас этого (borland C) не требуют. Ну это так, лишь-бы чё-нить ляпнуть =) Встроенный он наверное и в Сях встроенный – ничего хорошего, короче. Я как-то в Delphi пытался на асме вставки делать – плохо получалось очень.
6 октября 2008 в 2:03
B800 это сегмент был вообще-то )
3 октября 2008 в 16:04
ассемблерные вставки делают код непортабельным, если вы захотите перенести сорц на другую архитектуру. если хотите получить максимум выгоды из высокого языка с оптимизацией не хуже чем у проги на асме пользуйте gcc, mingw
3 октября 2008 в 15:02
Хинт: для записи в видеопамять часто используют инструкции для "потоковой" (строковой) записи. ))
movsb, movsw, movsd
3 октября 2008 в 13:04
Я так понял пишите под ДОС, 16-ти разрядные приложения?
mov di, B8000h ; Можно использовать di, si, bx
mov ax, value ; можно использовать ax, bx ,cx, dx
mov [di],ax ; скобки означают, что помещаем ax не в регистр di, а по адресу который он содержит
3 октября 2008 в 9:05
На выходных сам сяду за юрова
3 октября 2008 в 9:04
для начала надо наверное подучить ассемблер сам
сам я его уже года два не пользовал (
mov [adr],val
2 октября 2008 в 20:05
Спасибо буду обраться к тебе по вопросам, ок?
Вот не понятно как записать что-нить в видео память, к примеру по адресу B8000
2 октября 2008 в 18:00
Юров очень хорошая книга для начинающих, написано понятно и просто. Ассемблерные вставки легко делаются в среде Борланд С, главное не забывать сохранять в стек регисты перед вызовом функций на С, и восстанавливать.
P.S. Пиши конкретно, что не понятно =)