Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2010, 20:06   #1
BioHoHoL
 
Регистрация: 03.02.2010
Сообщений: 4
По умолчанию Программа с использованием макросов...

Добрый вечер.
Есть программа котьорая выводит на экран "Тарас", постепенно увеличивая и уменьшая надпись.
Нужно переделать код так чтобы буквы выводились с помощью макросов
Вот предположительно как должен работать макрос

Он доллжен создавать некую матрицу.

Сама программа уже неоднократно переделывалась, преподаватель давал много разных заданий, но ему не угодить. Мне очень нужно так как это зачет, а сессия официально уже закончилась.

Во вложении экзе фаил и фаил асм.
Вложения
Тип файла: rar taras.rar (2.8 Кб, 7 просмотров)
BioHoHoL вне форума Ответить с цитированием
Старый 03.02.2010, 20:10   #2
BioHoHoL
 
Регистрация: 03.02.2010
Сообщений: 4
По умолчанию

Вот непосредственно сам код программы.
.model small
.data
;закодированное изображение
txt db 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1 ,1,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0, 0,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,0
db 0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,1 ,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0, 1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1
db 0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0 ,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0, 0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0
db 0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0 ,1,1,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0, 0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0
db 0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1 ,1,1,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0, 0,1,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0
db 0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0 ,1,1,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0, 1,1,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0
db 0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0 ,1,1,0,0,0,1,1,0,0,0,0,0,1,1,0,0,1, 1,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,0,0
db 0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,1 ,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,1, 1,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0
db 0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,1 ,1,1,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1, 1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1
db 0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,0 ,0,1,1,1,0,1,1,0,1,1,1,1,0,0,0,0,0, 1,1,1,1,0,0,1,1,1,0,0,0,0,1,1,1,1,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

ksize equ $-txt ;размер изображения
tcx dw ? ;временно хранится х
.stack 256
.code
start: mov ax,@data ;инициализируем сегментные регистры
mov ds,ax
mov ax,0a000h
mov es,ax
mov ax,0013h
int 10h ;устанавливаем видеорежим 320*240*256 цветов
mov cx,32000 ;очищаем экран
xor ax,ax
xor di,di
rep stosw
mov bx,1 ;коэффициент масштабирования
m2: call scaled_text;выволим картинку с заданным масштабом
inc bx ;увеличиваем масштаб
in al,60h ;читаем из порта клавиатуры
cmp al,1 ;если нажата ESC, то выход
jz ex
call waitp ;задержка
cmp bx,7 ;достигли максимального масштаба
jnz m2 ;если нет, продолжаем
dec bx ;корректируем масштаб
m3: mov cx,32000 ;очищаем экран
xor ax,ax
xor di,di
rep stosw
call scaled_text;выволим картинку с заданным масштабом
dec bx ;увеличиваем масштаб
in al,60h ;читаем из порта клавиатуры
cmp al,1 ;если нажата ESC, то выход
jz ex
call waitp ;ожидание
cmp bx,0 ;достигли минимального масштаба?
jnz m3 ;если нет, продолжаем
inc bx ;корректируем масштаб
jmp m2 ;начинаем сначала


ex: mov ax,4c00h ;выход из программы
int 21h


waitp: push cx ;подпрограмма задержки выполнения программы
push dx
mov dx,1000 ;Поскольку у меня не работает функция 86h int 16h(задержка)
;то будем приостанавливать программу при помощи циклов ожидания
llp1: xor cx,cx
llp: loop llp ;внутренний цикл ожидания
dec dx
jnz llp1 ;внешни цикл ожидания
pop dx
pop cx
ret

scaled_text: ;вывод в центре экрана отмасштабированой картинки. bx - масштаб
xor di,di ;счетчис столбца картинки
mov si,offset txt;начало картинки
mov ax,53 ;длина строки картинки
mul bx ;умножаем масштаб на длину строки
mov cx,320
sub cx,ax
shr cx,1 ;получаем коорд левого угла отмасштабир картинки, выводивой в центр экрана
mov tcx,cx ;сохраняем сх
mov ax,14
mul bx
mov dx,200
sub dx,ax
shr dx,1 ;получаем коорд верхнего угла отмасштабир картинки, выводивой в центр экрана
lp: cmp si,offset txt+ksize; проверяем достигли ли конца картинки
jz skip ;если достигли, то заканчиваем вывод
lodsb ;берем байт(пиксель) из картинки
inc di ;увеличиваем счетчик столбцов
call scaled_pixel;выводим отмасштабированый пиксель
add cx,bx ;переходим к следующей горизонтальной координате
cmp di,53 ;если закончиласть строка картинки
jnz m1
xor di,di ;то обнулить счетчик
mov cx,tcx ;восстановить сх
add dx,bx ;увеличикаем координату y

m1: jmp lp ;продолжаем вывод
skip: ret ;выход из подпрограммы

;подпрограмма вывода отмасштабированного пикселя
scaled_pixel:
push di ;сохраняем регистры
push si
push dx
push cx
push bx
push ax
mov si,bx ;сохраняем масштаб
mov ax,320
mul dx ;y*320
add ax,cx ;y*320+х
mov di,ax ;получили адрес верхнего левого угола квадратика
pop ax ;восстанавливаем цвет пикселя
pxlp: mov cx,si ;количество пикселей погориз=масштабу
push di ;сохраняем адрес верхнего левого угола квадратика
rep stosb ;выводим строку пикселей из квадратика
pop di ;восстанавливаем адрес верхнего левого угола квадратика
add di,320 ;переходим на следующую строку
dec bx ;уменьшаем количество оставшихся строк
jnz pxlp ;продолжаем пока не выведем все
pop bx ;восстановить регистры
pop cx
pop dx
pop si
pop di
ret ;выход
end start
BioHoHoL вне форума Ответить с цитированием
Старый 09.02.2010, 20:42   #3
BioHoHoL
 
Регистрация: 03.02.2010
Сообщений: 4
По умолчанию

Хоть ктонить может решить проблему?

Если вам будет удобнее то можно связаться по эмэйлу yourgfriend@mail.ru
BioHoHoL вне форума Ответить с цитированием
Старый 17.02.2010, 16:45   #4
BioHoHoL
 
Регистрация: 03.02.2010
Сообщений: 4
По умолчанию

Я готов заплатить, в пределах разумного, за помощь, мне очень нужно!
BioHoHoL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа с использованием рекуррентных формул giggles Паскаль, Turbo Pascal, PascalABC.NET 4 13.10.2009 11:09
Автоматический запуск макросов с листа на котором указан перечень макросов с параметрами и без Neoli Microsoft Office Excel 2 09.03.2009 14:31
программа с использованием БД Paradox hinku Общие вопросы Delphi 0 07.10.2008 11:27
Программа на C++ с использованием fstream Dergard Помощь студентам 2 14.12.2007 05:18
Программа с использованием функции Cartman18 Помощь студентам 1 10.12.2007 16:29