Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 24.12.2009
Сообщений: 4
1

Поменять направление

26.04.2010, 21:57. Показов 1026. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот код программы, в которой слово "Олег" раздвигается по горизонтали вправо:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
.model tiny, C
 
.code
org 100h
.186
 
start: mov ax,11h ;640х480х2
int 10h
xor bx,bx   ;смещение сивмолов. Увеличивается с каждым кадром
;o
m1:
xor di,di   ;очищаем экран
mov cx,19200
mov ax,0a000h
mov es,ax
xor ax,ax
rep stosw
mov di,bx   ;копируем смещение
push bx     ;сохраняем bx
mov ax,25   ;начальная координата х
add ax,bx   ;х+смещение
call line, ax, 30, 0, -1, 30
mov ax,0    ;начальная координата х
add ax,bx       ;х+смещение            
call line, ax, 30, 0, -1, 30
mov ax,25   ;начальная координата х
add ax,bx       ;х+смещение            
call line, ax, 0, -1, 0, 25
mov ax,25   ;начальная координата х
add ax,bx       ;х+смещение            
call line, ax, 30, -1, 0, 25
inc di      ;увеличиваем смещение
mov ax,2    
mul di      ;умножаем его на порядковый номер символа
add bx,ax   ;суммируем

mov ax,30   ;начальная координата х
add ax,bx       ;х+смещение            
 
call line, ax, 30, 1, -1, 120
mov ax,60   ;начальная координата х
add ax,bx       ;х+смещение            
call line, ax, 30, 0, -1, 120
inc di      ;увеличиваем смещение                    
mov ax,3                                                 
mul di          ;умножаем его на порядковый номер символа
add bx,ax       ;суммируем                               
;e
mov ax,62   ;начальная координата х
add ax,bx       ;х+смещение            
 
call line, ax, 30, 0, -1, 80
mov ax,62   ;начальная координата х
add ax,bx       ;х+смещение            
call line, ax, 15, 1, 0, 20
mov ax,62   ;начальная координата х
add ax,bx       ;х+смещение            
call line, ax, 0, 1, 0, 20
mov ax,62   ;начальная координата х
add ax,bx       ;х+смещение            
call line, ax, 30, 1, 0, 20
;r
inc di      ;увеличиваем смещение                    
mov ax,4                                                 
mul di          ;умножаем его на порядковый номер символа
add bx,ax       ;суммируем                               
mov ax,84   ;начальная координата х
add ax,bx       ;х+смещение            
call line, ax, 30, 0, -1, 80
mov ax,84   ;начальная координата х
add ax,bx       ;х+смещение            
call line, ax, 0, 1, 0, 20
in al,60h   ;читаем из порта клавиатуры
cmp al,1    ;если нажата ESC, то выход
jz ex
mov dx,1000 ;Поскольку у меня не работает функция 86h int 16h(задержка)
        ;то будем приостанавливать программу при помощи циклов ожидания
lp1:
xor cx,cx
lp:
loop lp     ;внутренний цикл ожидания
dec dx
jnz lp1     ;внешни цикл ожидания
pop bx      ;восстанавливаем смещение символов
inc bx      ;умеличиваем его
cmp bx,40   ;если смещение между символами достигло 40 пикселей
jz m2       ;то обнулить его
jmp m1      ;рисуем следующий кадр
m2:
mov bx,0    ;обнулить смещение
jmp m1
ex:
mov ax,3 ;установим текстовый режим
int 10h
 
mov ax, 4c00h
int 21h ;выход в ДОС
 
;Рисуем линию от точки (x, y) c направлением (deltax, deltay),
;и состоящую из count точек
line proc x:word, y:word, deltax:word, deltay:word, count:word
uses cx, dx, si
 
mov si, count
mov cx, x
mov dx, y
line_loop:
call SetPixel, cx, dx, 1
 
add cx, deltax
add dx, deltay
dec si ;счетчик точек
jnz line_loop
 
ret
line endp
 
; Name: PixelAddr
; Function: Определяет позицию пикселя в буфере VGA в режиме 640x480
;
; Caller: AX = y-координата 0-479
; BX = x-координата 0-639
;
; Returns: AH = битовая маска
; BX = смещение байта в видеобуфере
; CL = число сдвигов для сдвига маски влево
; ES = сегмент видеобуфера
 
BytesPerLine EQU 80 ; число байт в одной гор.линии
VideoBufferSeg EQU 0A000h
 
PixelAddr PROC near
mov cl,bl ; CL := младший байт x
 
push dx ; сохраним DX
 
mov dx,BytesPerLine ; AX := y * BytesPerLine
mul dx
 
pop dx
shr bx,1
shr bx,1
shr bx,1 ; BX := x/8
add bx,ax ; BX := y*BytesPerLine + x/8
; BX - смещение байта в видеобуфере
 
mov ax,VideoBufferSeg
mov es,ax ; ES:BX := адрес байта пикселя
 
and cl,7 ; CL := x & 7
xor cl,7 ; CL := число сдвигов для сдвига маски влево
mov ah,1 ; AH := несдвинутая маска
ret
 
PixelAddr ENDP
 
; Name: SetPixel
;
; Function: Устанавливает значение пикселя в режиме 640x480
;
; void SetPixel(x,y,n);
;
; int x,y; /* координаты пикселя */
;
; int n; /* цвет пикселя */
 
RMWbits EQU 0 ; read-modify-write bits
 
SetPixel PROC ARGx:word, ARGy:word, ARGn:word
uses cx, dx, bx, es
 
mov ax,ARGy ; AX := y
mov bx,ARGx ; BX := x
call PixelAddr ; AH := битовая маска
; ES:BX -> буфер
; CL := число сдвигов
 
; установка регистра битовой маски графического контроллера (GC)
 
shl ah,cl ; AH := битовая маска в соответствующей позиции
mov dx,3CEh ; порт регистра адреса GC
mov al,8 ; AL := номер регистра битовой маски
out dx,ax
 
; установка регистра режима GC
 
mov ax,0005h ; AL := номер регистра режима
; AH := режим записи 0 (биты 0,1)
; режим чтения 0 (бит 3)
out dx,ax
 
; установка регистра выбора вращения/функции
 
mov ah,RMWbits ; AH := биты Read-Modify-Write (=0)
mov al,3 ; AL := регистр выбора Data Rotate/Function
out dx,ax
 
; установка регистров установки/сброса и разрешения установки/сброса
 
mov ah,byte ptr ARGn; AH := цвет пикселя
mov al,0 ; AL := регистр установки/сброса
out dx,ax
 
mov ax,0F01h ; AH := разрешаем все цветовые слои
; AL := регистр разрешения установки/сброса
out dx,ax
 
; установка значения пикселя
 
or es:[bx],al ; загрузка в защелки во время чтения
; и установка во время записи
 
; восстановим значения по-умолчанию
 
mov ax,0FF08h ; маска битов
out dx,ax
 
mov ax,0005 ; регистр режима
out dx,ax
 
mov ax,0003 ; выбор функции
out dx,ax
 
mov ax,0001 ; разрешение установки/сброса
out dx,ax
 
ret
SetPixel ENDP
 
end start
______________________________________________________

Необходимо изменить направление раздвижения. Раздвигаться должно по диагонали в сторону правого нижнего угла. Заранее благодарен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2010, 21:57
Ответы с готовыми решениями:

Поменять направление текста
Каким образом можно поменять направление текста? Пример: 1 строка)Апельсин 2 строка)Яблоко 3...

Можно-ли поменять направление тока?
у меня на схеме в задаче ток направлен в одну сторону, а я просчитал задачу на черновике и ток...

Как поменять направление векторов
Вот у каждого объекта при выделении есть 3 стрелочки синяя, зеленая и красная (x, y, z). объект,...

Как поменять направление курсора мыши?
По обычному курсор наклонен влево. Можно ли сделать наклон в другую сторону? Где-то раньше видел...

1
0 / 0 / 0
Регистрация: 24.12.2009
Сообщений: 4
29.04.2010, 22:43  [ТС] 2
Неправильно сказал задание. Прошу помочь переделать программу так, что бы она не раздвигала текст, а делалавид что приближает буквы, то есть текст как будто перемещается в сторону левого нижнего угла и при этом увеличивается, создавая эффект масштабирования.
0
29.04.2010, 22:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2010, 22:43
Помогаю со студенческими работами здесь

За направление протекание электрического тока принято направление перемещения?
За направление протекание электрического тока принято направление перемещения? 1) электронов 2)...

Направление
Хотелось бы, чтобы участники форума поделились мнением о том, какое направлении в программирование...

Случайное направление
Подскажите как сгенерировать случайное направление в 2d пространстве? тоесть создать единичный...

Перспективное направление в C#
Как думаете, какое направление в C# перспективно?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru