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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2012, 11:39   #1
pinkiller
Форумчанин
 
Регистрация: 29.10.2011
Сообщений: 141
По умолчанию Типы данных, из памяти в регистры и обратно, индексирование. Новичек

Код:
;4.На экране инициализировать 2 локальных окна. 
;Каждое окно со своим атрибутом и текстом в несколько строк. 
;Организовать циклическое переключение текста из одного окна в другое ;с временной задержкой 2...3 сек. 
;Предусмотреть выход из программы.


          %TITLE "BIOS_DEM.asm"


                IDEAL
                P386N
                MODEL small
                STACK 256
		DATASEG
i		DW	?
place	DB 	?
word1	DB 'True'
word1len	=	$-word1
word2	DB 'Lie'
word2len	=	$-word2

		CODESEG

Start: 	
		mov ax,0B800h
		mov es,ax
		mov ax,@data    
             	mov ds,ax        
        	mov es,ax
		mov [place],4h
wind1:	mov ah,06h
		mov al,0
		mov bh,0B0h
		mov ch,2
		mov cl,2
		mov dh,14
		mov dl,14
		int 10h
wind2:	mov ax,0B800h
		mov es,ax
		mov ah,06h
		mov al,0
		mov bh,0B0h
		mov ch,2
		mov cl,16
		mov dh,14
		mov dl,28
		int 10h
		mov [i],0h
place1:	mov ah,02h
		mov bh,0h
		mov dh,4h
		mov dl,[place]
		int 10h
write1: 	mov ah,09h
		mov bx,[i]
		mov al,[word1+bx]
		mov bl,0B0h
		mov cx,1
		int 10h
		inc [i]
		inc [place]
		cmp [i],word1len
		je next
		jmp	place1
place2:	mov ah,02h
		mov bh,0h
		mov dh,4h
		mov dl,[place]
		int 10h
write2: 	mov ah,09h
		mov bx,[i]
		mov al,[word2+bx]
		mov bl,0B0h
		mov cx,1
		int 10h
		inc [i]
		inc [place]
		cmp [i],word2len
		je stoop
		jmp	place2
next:	mov [place],17h
		mov [i],0
		jmp place2
stoop: 	mov ah,08h
		int 21h
exit:      	mov ax,4C00h	                        
         	int 21h
END  start
все хорошо все работает, но как видите для каждого слова (word1, word2) приходиться создавать свой блок кода, что крайне неудобно, тк мне надо добавить еще несколько слов.

Решение придумано, надо создать переменные которые будут работать с ТЕКУЩИМ словом(строчкой).

в датасег добавляю
item DB ?
itemlen DB ?

тогда в кодсегменте
Код:
mov item,word1
не работает никак, перебирал варианты беря выражения в квадратные скобки, скидывая одно в регистр а потом из регистра перекидывая в item
но в конце концов ничего так и не сработало,
может подскажите как сделать такую вот текущую переменную?
pinkiller вне форума Ответить с цитированием
Старый 25.03.2012, 18:58   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Код:
		DATASEG
i		DW	?
place	DB 	?
word1	DB 'True'
word2	DB 'Lie'
...
wordn	DB 'end'
words	DW word1, word 2,..., wordn
можете массив ссылок на строки сделать и циклом их обрабатывать.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
база данных новичек cargo29 PHP 10 04.10.2011 10:53
Регистры и команды i486 i586 i686 SSE MMX SSE2 etc в качестве альтернативы памяти. Ivan_32 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 02.06.2009 00:30