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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2011, 20:17   #1
Matadora
Пользователь
 
Аватар для Matadora
 
Регистрация: 04.09.2010
Сообщений: 25
Печаль Бегающая буква в .com формате (и резидентная)

Привет всем
Возникла проблема в лице программы (
Задали сделать резидентную программу в формате .com (ранее с ним никогда не работала , потому ступор), в которой буква s будет перемещаться по прямой линии слева направо.
Подскажите пожалуйста как ее сделать?! Я пробовала сделать нечто подобное хотя бы в .exe , но кусок что я родила не выводится на монитор, а тупо вылетает.
Код:
mov cx,80 ; длиня строки , по которой будет перемещаться буква
    text: call pozition ;установка курсора
            
    lea dx, x
    mov ah, 9
    int 21h
     
    call pozition
     
    lea dx,y
    mov ah,9
    int 21h
    inc pozx
    loop text
    
    pozition:
    mov ah,02
    mov bh,00
    mov dh,pozy
    mov dl,pozx
    int 10h
    ret
Matadora вне форума Ответить с цитированием
Старый 30.09.2011, 21:01   #2
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Чем com формат так страшно отличается от exe, что вы его испугались ?
А посмотреть в отладчике в каком месте вылетает, а заодно выяснить то ли делает программа, что вы задумали?
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 30.09.2011, 21:16   #3
Matadora
Пользователь
 
Аватар для Matadora
 
Регистрация: 04.09.2010
Сообщений: 25
По умолчанию

в отладчике все прекрасно работает - буква перемещается по строке. но стоит програму запустить - просто вылетает (ничего не выводит

вы правы, я уже почитала в книжках про com формат, вроде-бы ничего сложного. но как быть с резидентными программами? что добавить в код, чтобы программа стала резидентной?
Matadora вне форума Ответить с цитированием
Старый 30.09.2011, 21:23   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
что добавить в код, чтобы программа стала резидентной?
Код:
 mov dx, А вот тут я забыл как правильно, ибо давно не использовал резидетны
 int 27h;
 ret
http://www.codenet.ru/progr/dos/int_0028.php
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.09.2011, 21:38   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

резидентная - это программа, которая находится в памяти компьютера и выполняется вне зависимости от других программ.
Ещё такие программы называли TSR - Terminate and Stay Resident (погуглите, будет много ссылок, включая статью на википедии).
Для того, чтобы программа под MS DOS выполнялась после того, как она оставлена в памяти, эта программа обязательно должна "цепляться" ("вешаться") на какие-нибудь прерывания.
Для этого программа должна содержать новый обработчик прерывания и, перед тем как остаться в памяти, она должна назначить свой обработчик прерывания вместо старого. Для того, чтобы при этом не порушить работу системы (и других программ) принято запоминать адрес старого обработчика (перед тем как его перехватила наша программа) и в обработчике нового прерывания вызывать старый обработчик.
Т.к. Вам нужно анимация, тогда Вам нужно перехватить вектор прерывания от системного таймера (1C, если мне не изменяет память).

Написать такое с нуля - ОЧЕНЬ сложно. Поэтому мой Вам совет. Найдите готовую резидентную программу (исходник, разумеется) и переделайте под себя. Исходников - пруд пруди. Вам нужно только немножко поискать и выбрать подходящий (наиболее близкий к Вашему заданию, наиболее простой, наиболее понятный и т.д.).

Ну, ежели будут вопросы — милости прошу на форум..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.10.2011, 18:43   #6
Matadora
Пользователь
 
Аватар для Matadora
 
Регистрация: 04.09.2010
Сообщений: 25
По умолчанию

За єто время смогла заставить букву бегать в ексе, осталось только переделать в ком и сделать резидентной

Код:
data segment
    x db "s$" 
    y db " $"
    pozx db 0
    pozy db 0
ends

stack segment
    dw   128  dup(0)
ends

code segment
start:
; set segment registers:
    mov ax, data
    mov ds, ax
    mov es, ax
                         
    ; add your code here 
    mov cx,80
    text: call pozition
            
    lea dx, x
    mov ah, 9
    int 21h 
    
    mov bx,18
        mov ah,0
        int 1ah
        mov si,cx
        mov di,dx
pm2:    mov ah,0
        int 1ah
        sub dx,di
        sbb cx,si
        cmp dx,bx
        jnz pm2
     
    call pozition
     
    lea dx,y
    mov ah,9
    int 21h
    inc pozx
    
    mov bx,18
        mov ah,0
        int 1ah
        mov si,cx
        mov di,dx
pm1:    mov ah,0
        int 1ah
        sub dx,di
        sbb cx,si
        cmp dx,bx
        jnz pm1
    
    loop text
    
    pozition:
    mov ah,02
    mov bh,00
    mov dh,pozy
    mov dl,pozx
    int 10h
    ret  
    
    
    ; output string at ds:dx
    
    ; wait for any key....    
    mov ah, 1
    int 21h
    
    mov ax, 4c00h ; exit to operating system.
    int 21h    
ends

end start
попробую что-то сделать по вашим советам, спасибо всем
но если у кого-то будут соображения по поводу переделки етого кода в сторону сома и так далее, буду рада
Matadora вне форума Ответить с цитированием
Старый 08.10.2011, 15:45   #7
Matadora
Пользователь
 
Аватар для Matadora
 
Регистрация: 04.09.2010
Сообщений: 25
По умолчанию

Сделала ее в нужном формате
ЛЮДИ КАК ТЕПЕРЬ ПЕРЕДЕЛАТЬ В РЕЗИДЕНТНУЮ?!?!?! я искала исходники но ничего подходящего не нашла Т_Т

Код:
org  100h	; set location counter to 100h

; you may customize this and other start-up templates 
; the location of this template is c:\emu8086\inc\0_com_template.txt

; disable blinking (for DOS/BIOS compatibility).
mov ax, 1003h  
mov bx, 0        
int 10h

begin: jmp start

 pozx db 0
 pozy db 0 
 x db "s$" 
 y db " $"
 
 start:  
 mov cx,80
    text: call pozition
            
    lea dx, x
    mov ah, 9
    int 21h 
    
    push dx
    mov bx,18
        mov ah,0
        int 1ah
        mov si,cx
        mov di,dx
pm2:    mov ah,0
        int 1ah
        sub dx,di
        sbb cx,si
        cmp dx,bx
        jnz pm2 
        pop dx
     
    call pozition
     
    lea dx,y
    mov ah,9
    int 21h
    inc pozx
            
    push dx        
    mov bx,18
        mov ah,0
        int 1ah
        mov si,cx
        mov di,dx
pm1:    mov ah,0
        int 1ah
        sub dx,di
        sbb cx,si
        cmp dx,bx
        jnz pm1  
        pop dx
    
    loop text
    
    pozition:
    mov ah,02
    mov bh,00
    mov dh,pozy
    mov dl,pozx
    int 10h
    ret  
    


mov ah, 0          ; wait for any key....
int 10110b         ; same as int 16h or int 22.

ret   ; return to the operating system.

msg         db "press any key..."
msg_size =  $ - offset msg
Matadora вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа, выполняющая поиск отказов в выписках (в формате RTF) и формирующая реестр отказников в формате XLS (на делфи) avtoritetbikov@mai Фриланс 5 08.11.2011 00:20
как текстовый файл в формате word 2007 переделать в файл в формате ZAY JULIA Microsoft Office Word 13 09.06.2010 19:43
Резидентная программа lilufonel Паскаль, Turbo Pascal, PascalABC.NET 0 25.05.2010 01:27
Резидентная программа! Nemesisking Общие вопросы C/C++ 8 29.09.2007 08:46
как вывести строку поочередно сначала первая буква первой строки потом первая буква второй строки и т.д. vitalik007 Помощь студентам 1 25.09.2007 20:45