вращение слеша (резидент)

Тема в разделе "WASM.DOS", создана пользователем proc3nt, 5 апр 2018.

  1. proc3nt

    proc3nt New Member

    Публикаций:
    0
    Регистрация:
    12 янв 2017
    Сообщения:
    19
    здр. нашел на просторах инета резидентную программу вращения символа слеша на экране. не совсем ясно, зачем автор считывает с видеостраницы что-то, если ранее туда ничего не записывалось. а затем еще полученное сравнивается с одной из позиций вращающегося слеша? да и вообще слеш должен на одном месте крутиться, а смещение (получения какого-то символа и записи одного из позиций вращающегося слеша) постоянно удаляется от начала видеостраницы с помощью lodsw..
    пжл, просветите меня..

    Код (ASM):
    1. CODE SEGMENT USE16
    2. ASSUME CS:CODE
    3. ORG 100H
    4. START:
    5. MOV AX,251CH        
    6. MOV DX,SLASHROTATOR          
    7. INT 21H
    8.            
    9. INC DH              
    10. INT 27H
    11. SLASHROTATOR:        
    12. PUSHA
    13.            
    14. PUSH 0B800H          
    15. POP DS            
    16. XOR SI,SI
    17.          
    18. MOV CH,8    
    19. ONE:
    20.     LODSW
    21.                        
    22.     MOV EDX,7C5C2D2FH
    23.  
    24.     THREE:
    25.         ROL EDX,8      
    26.      
    27.         CMP AL,DH        
    28.         JNE SHORT FOUR      
    29.  
    30.         MOV DS:[SI-2],DL
    31.        
    32.         FOUR:
    33.         CMP DL,2FH        
    34.         JNZ THREE            
    35. LOOP ONE
    36.              
    37. POPA
    38.            
    39. IRET                    
    40. CODE ENDS
    41. END START          
     
  2. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.449
    Адрес:
    Россия
    Всплакнул.
     
  3. _edge

    _edge Well-Known Member

    Публикаций:
    1
    Регистрация:
    29 окт 2004
    Сообщения:
    631
    Адрес:
    Russia
    Это "илитная" оптимизация такая. Лучше переписать код с нуля, чем разбираться в 0птNми3ациях.
     
  4. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Чёт какое-то гуано. Если символ кто-то перепишет извне, то ему может башню снести (гипотеза). Весь код должен сводиться к чтению состояния из ячейки памяти, записи в видеобуфер, и сохранению нового состояния.

    Код (ASM):
    1.  
    2. state:
    3.   dd 7C5C2D2FH
    4.  
    5. rotator:
    6.   pusha
    7.  
    8.   ; Инициализируем адрес записи в буфер
    9.   mov ax, 0b800h
    10.   xor bx, bx
    11.   mov es, ax
    12.  
    13.   ; Выводим текущее состояние на экран
    14.   mov eax, state
    15.   mov es:[bx], al
    16.  
    17.   ; Запоминаем новое состояние
    18.   rol eax, 8
    19.   mov state, eax
    20.  
    21.   popa
    22.   iret
    23.  
    24.  
     
  5. vadimych

    vadimych Member

    Публикаций:
    0
    Регистрация:
    20 июн 2011
    Сообщения:
    55
    proc3nt, вращаться будут все слеши, записанные в нулевой странице видеопамяти. В названии текущей директории, например.
     
  6. proc3nt

    proc3nt New Member

    Публикаций:
    0
    Регистрация:
    12 янв 2017
    Сообщения:
    19
    _edge, ты прав.. программа сокращалась автором ровно в два раза от первоначального варианта..
     
  7. proc3nt

    proc3nt New Member

    Публикаций:
    0
    Регистрация:
    12 янв 2017
    Сообщения:
    19
    вобщем написал автору по этому поводу и недавно получил ответ.. вроде, все становится на свои места.. оказывается я не совсем правильно понял техническое задание.. нужно было написать программу, которая бы крутила уже имеющиеся слэши на экране, а не записывала бы в первую ячейку видеопамяти (левый верхний угол) один вращающийся слэш..