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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2011, 21:50   #1
gra-iro
Новичок
Джуниор
 
Регистрация: 30.12.2011
Сообщений: 4
Вопрос Проблема с остановкой цикла.

PHP код:
       .model   tiny
        .386
        
.code
        org      100h
        
start
:

        
mov ax,установить текущей нулевую  видео страницу
        int 10h
        
        mov ax
,0b800h номер видео страницы
        mov es
,ax     загрузка 0b800h в сегментный регистр es
 
        
xor si,si               ;копирование
        
        
доска 8x8
        mov dx
,8
        mov cx
,8

stolb
:
        
push cx 
        
;1-а  строка
                mov cx
,8
        line
:
                
push cx
                mov cx
,2
;color
                cmp ah
,dl               
                je nx
                mov ah
,dl               ;
                
jmp kub
        nx
:
                
mov ah,dh               
                kub
:
                        
mov byte ptr es:[si],0dbh
                        inc si
                        mov byte ptr es
:[si],ah
                        inc si
                loop kub
                pop cx  
                loop line
                
        pop cx                
;
        
xchg dh,dl      
        mov ah
,1                ;sboi
        add si
,128
        loop stolb
        
        call TIMER
        
xor si,si
        mov cx
,8
        xchg dl
,dh              dh dl
        add ah
,7                ;определение цвета для нового кадра

        jmp  stolb
        
;цикл бесконечныйпоэтому нет выхода из программы
        
 TIMER proc
        push es
        mov ax
,40h
        mov es
,ax        
mf
:
        
mov al,byte ptr es:[40h]
        
sub al,50                               ;чем больше значение тем дольше (не более 0ffh или 255d)
ms:
        
cmp al,byte ptr es:[40h]
        
jle ms        
        pop es
        
        mov ah
,01h
        int 16h
        cmp ah
,39h
        
        je finish
ret

finish
:
mov ah,1
int 21h

mov ah
,09               фyнкция N9 вывод текста на экpан
mov dx
,offset msg     в dx заносим адpес сообщения msg
int 21h                
                             
msg     db 
'Программа завершена успешно! $'  

TIMER endp
end start 
Программа рисует на экране шахматную доску и по таймеру инвертирует цвета клеток. По окончанию программы нужно вывести сообщение о завершении программы и ее размер..
Обработку выхода из цикла сделал, но сообщение на экран не выводится, не работает задержка..

Помогите пожалуйста..
gra-iro вне форума Ответить с цитированием
Старый 30.12.2011, 22:37   #2
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

gra-iro, куда-то Вы не туда влепили финиш. Здесь по нажатию ESC программа будет завершаться.
Код:
       .model   tiny
        .386
        .code
        org      100h
        
start:

        mov ax,3 ; установить текущей нулевую  видео страницу
        int 10h
        
        mov ax,0b800h ; номер видео страницы
        mov es,ax     ; загрузка 0b800h в сегментный регистр es
 
        xor si,si               ;копирование
        
        ; доска 8x8
        mov dx,8
        mov cx,8

stolb:
        push cx 
        
;1-а  строка
                mov cx,8
        line:
                push cx
                mov cx,2
;color
                cmp ah,dl               
                je nx
                mov ah,dl               ;
                jmp kub
        nx:
                mov ah,dh               
                kub:
                        mov byte ptr es:[si],0dbh
                        inc si
                        mov byte ptr es:[si],ah
                        inc si
                loop kub
                pop cx  
                loop line
                
        pop cx                ;
        xchg dh,dl      
        mov ah,1                ;sboi
        add si,128
        loop stolb
        
        call TIMER
mov ah,1
int 16h
dec ah
jnz next

mov ah,09               ; фyнкция N9 - вывод текста на экpан
mov dx,offset msg     ; в dx заносим адpес сообщения msg
int 21h                

mov ah,1
int 21h

ret

next:
        xor si,si
        mov cx,8
        xchg dl,dh              ; dh = dl
        add ah,7                ;определение цвета для нового кадра

        jmp  stolb
        ;цикл бесконечный, поэтому нет выхода из программы
        
 TIMER proc
        push es
        mov ax,40h
        mov es,ax        
mf:
        mov al,byte ptr es:[40h]
        sub al,50                               ;чем больше значение тем дольше (не более 0ffh или 255d)
ms:
        cmp al,byte ptr es:[40h]
        jle ms        
        pop es
        
  ret
      
                             
msg     db 'Программа завершена успешно! $'  

TIMER endp
end start
vadimych вне форума Ответить с цитированием
Старый 30.12.2011, 23:00   #3
gra-iro
Новичок
Джуниор
 
Регистрация: 30.12.2011
Сообщений: 4
По умолчанию

спасибо большое за помощь!!! вы мне очень помогли!
gra-iro вне форума Ответить с цитированием
Старый 31.12.2011, 00:50   #4
gra-iro
Новичок
Джуниор
 
Регистрация: 30.12.2011
Сообщений: 4
По умолчанию

Код:
 .model   tiny
        .386
        .code
        org      100h
        
start:

        mov ax,3 ; установить текущей нулевую  видео страницу
        int 10h
        
        mov ax,0b800h ; номер видео страницы
        mov es,ax     ; загрузка 0b800h в сегментный регистр es
 
        xor si,si               ;копирование
        
        ; доска 8x8
        mov dx,8
        mov cx,8
		
		

stolb:
        push cx 
        
;1-а  строка
                mov cx,8
        line:
                push cx
                mov cx,2
;color
                cmp ah,dl               
                je nx
                mov ah,dl               ;
                jmp kub
        nx:
                mov ah,dh               
                kub:
                        mov byte ptr es:[si],0dbh
                        inc si
                        mov byte ptr es:[si],ah
                        inc si
                loop kub
                pop cx  
                loop line
                
        pop cx                ;
        xchg dh,dl      
        mov ah,1                ;sboi
        add si,128
        loop stolb
        
        call TIMER
mov ah,1
int 16h
dec ah
jnz next

mov ax,3 ; установить текущей нулевую  видео страницу
int 10h

mov ah,09               ; фyнкция N9 - вывод текста на экpан
mov dx,offset msg     ; в dx заносим адpес сообщения msg
int 21h

; задержка экрана
xor ah,ah
int 16h              

mov ah,1
int 21h
jmp fin
ret

next:
        xor si,si
        mov cx,8
        xchg dl,dh              ; dh = dl
        add ah,7                ;определение цвета для нового кадра

        jmp  stolb
        ;цикл бесконечный, поэтому нет выхода из программы
        
 TIMER proc
        push es
        mov ax,40h
        mov es,ax        
mf:
        mov al,byte ptr es:[40h]
        sub al,50                               ;чем больше значение тем дольше (не более 0ffh или 255d)
ms:
        cmp al,byte ptr es:[40h]
        jle ms        
        pop es
        
  ret
	 
fin:

sizeProg=fin-start	 
msg     db 'Size program $'  

TIMER endp
end start
А чтобы вывести размер программы, как мне правильно вывести sizeProg на экран? можете помочь?

Последний раз редактировалось gra-iro; 31.12.2011 в 01:08.
gra-iro вне форума Ответить с цитированием
Старый 31.12.2011, 07:55   #5
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

gra-iro, ни метка fin,ни jmp на неё не нужны. Инструкция ret после ожидания нажатия клавиши обеспечивает завершение программы. А Ваш джамп гарантирует зависание. Про вывод почитайте там, где Вы отрапортовали о решении задачи. Первая тема в разделе.

Код:
TIMER endp
sizeProg=$-start
end start

Последний раз редактировалось vadimych; 31.12.2011 в 08:41.
vadimych вне форума Ответить с цитированием
Старый 31.12.2011, 12:30   #6
gra-iro
Новичок
Джуниор
 
Регистрация: 30.12.2011
Сообщений: 4
По умолчанию

спасибо большое!!! очень благодарен вам за помощь!
gra-iro вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
1.Проблема при решении задания с использыванием цикла repeat. 1man Паскаль, Turbo Pascal, PascalABC.NET 2 20.12.2011 22:42
проблема итерации цикла dancer1 Общие вопросы C/C++ 23 29.12.2010 02:55
Проблема с составлением цикла artemavd БД в Delphi 12 16.08.2009 14:55
Проблема в программе на С++, множественное исполнение цикла Vikelf Помощь студентам 1 25.05.2009 09:31
Переход от цикла к циклу не выходя из цикла (без multithreading) Qousio Общие вопросы C/C++ 2 16.05.2009 09:27