CyberForum.ru - Форум программистов и сисадминов
Вернуться   Форум программистов и сисадминов CyberForum.ru > Форум программистов > Форум Низкоуровневое программирование > Форум Assembler, MASM, TASM

Ответ Создать новую тему
 
Старый 03.02.2012, 18:19   #1
phx
Новичок
 
Регистрация: 21.02.2011
Сообщений: 13
Репутация: 0 (0)
По умолчанию Отмена выделения цветом последующих символа

Здравствуйте. Написал такую программу, выделяет вводимые цифры цветом, другие символы показывает без изменений
Код ASM
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
.MODEL Tiny
.CODE
ORG 100h
 
Start:
; получение размера программы
    lea di, p_size_str[16]                        
    mov ax, prog_size
    call    getsize
; вывод приветствия
    mov ah, 09h
    lea dx, separator
    int 21h
 
    mov ah, 09h
    lea dx, wellcome
    int 21h
 
    mov ah, 09h
    lea dx, separator
    int 21h
; обработка нажатия клавиши
check:
    xor bl, bl
    mov ah, 8
    int 21h
    cmp al, 27
    je  exit
; проверка нижней границы цифр (0)
    cmp al, 48
    jge isnum
    jmp issym
 
isnum:
    cmp al, 57
    jg  issym
    xor ah, ah
    mov [buf], ax
; Получить видеостраницу
    mov ah, 0Fh
    int 10h
 
    mov ah, 3
    int 10h
; Выделение цветом  
    mov ax, 1301h
    mov bl, 2Ch
    mov cx, 1
    lea bp, buf
    int 10h
 
    jmp check
issym:
    mov [symb], al
    mov ah, 09h
    lea dx, symb
    int 21h
    jmp check
 
; выход
exit:
    int 20h
 
; функция получения строкового значения объема программы
getsize proc
    mov cx, 0010
cycle:
    cmp ax, 0010    ; если <10 - выход
    jb  ext
    xor dx, dx      ; Очистить часть частного
    div cx      ; деление на 10
    or  dl, 30h
    mov [di], dl    ; Записать ASCII-символ
    dec DI
    jmp cycle
ext:
    or  al, 30h     ; 3аписать поcледнее частное    
    mov [di], al   
    ret
getsize endp 
 
; приветственное сообщение
wellcome    db        'Press <Esc> to exit$'
; разделитель
separator   db  10, 13, '===============================================================================', 10, 13, '$'
p_size_str  db  'Program size:     bytes.$' ; строка с размером программы
prog_size   =   $-start             ; вычисляем размер программы
symb        db  1 dup(0)
        db  '$'
buf     dw  1 dup(0)
buf_len     =   $-buf
END     Start
но если после ввода одних только цифр выйти из программы (нажать esc) или при переходе со строки на строку вводить цифры, то выделение сохранится до выхода из консоли. Насколько понимаю, сразу после выделения цифры нужно восстанавливать цветовую схему. Можете подсказать, как? И можно ли сделать вывод цифр (с изменением цвета) как-то рациональнее? А то у меня совсем уж через ж.., но ничего лучше не смог придумать. Спасибо
phx вне форума
Другие темы раздела
Assembler, MASM, TASM Время и звук
Здарвствуйте, форумчане! Есть пара вопросов по данной программе: Программа выводит текущее время и вызывает звуки из системного динамика:) PROGRAM VR; USES crt; var god,c,as,sc1,ch1:integer; chiz,mes,chi,cha,min,sec:byte; cycles, frequency:integer; procedure gettime; begin. Время и звук
меню в ассемблере ??? Assembler, MASM, TASM
мне надо чтобы я мог выбрать 1) сложение 2)вычитание 3)умножение 4)деление 5) всё одновременно так чтобы при выборе 5 он выдовал в ответе: сложение (и число) вычитание (и число) умножение (и число). меню в ассемблере ???
Старый 03.02.2012, 23:59   #2
zzzyyyxxx
Форумчанин
 
Аватар для zzzyyyxxx
 
Регистрация: 27.05.2011
Сообщений: 595
Репутация: 445 (241)
По умолчанию Re: Отмена выделения цветом последующих символа

при стандартной ширине окна - 80 символов:
Код ASM
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
.MODEL Tiny
.CODE
ORG     100h
start:
    mov ah,9
    lea dx,separator
    int 21h
    lea dx,wellcome
    int 21h
    lea dx,separator
    int 21h
    
    push 40h            ;задержка для прорисовки
    pop es
    mov al,byte ptr es:[40h]
    sub al,5
ms: cmp al,byte ptr es:[40h]
    jle ms
    
    push 0b800h
    pop es
        
    mov ah,3
    int 10h
    mov ax,dx
    sar ax,8
    mov bx,160
    mul bx
    mov si,ax
    mov di,ax
 
    mov al,byte ptr es:[1]  ;получим основной цвет
    mov color,al
    
    mov ah,1
n1: int 21h 
    cmp al,1bh
    je exit
    cmp al,0dh
    jne n0      
        mov si,di
        jmp n1
        
n0:     cmp al,'0'
        jl n2
        cmp al,'9'
        ja n2
        mov al,3
        jmp n3
                    
n2:     mov al,color
 
n3: inc si
    mov byte ptr es:[si],al
    inc si
    jmp n1
 
exit:   ret
    wellcome    db  'Press <Esc> to exit',0ah,'$'
    separator   db   '================================================================================$'
    color       db  0
end start
zzzyyyxxx вне форума
Старый 04.02.2012, 01:59  [ТС]   #3
phx
Новичок
 
Регистрация: 21.02.2011
Сообщений: 13
Репутация: 0 (0)
По умолчанию Re: Отмена выделения цветом последующих символа

Спасибо, конечно, но мне хотелось бы все таки узначть способ отменить форматирование в моем коде при выходе. Кстати, у вас при переходе на новую строчку программа тоже начинает некорректно работать.
phx вне форума
После регистрации реклама в сообщениях будет скрыта
Старый 04.02.2012, 06:49   #4
zzzyyyxxx
Форумчанин
 
Аватар для zzzyyyxxx
 
Регистрация: 27.05.2011
Сообщений: 595
Репутация: 445 (241)
По умолчанию Re: Отмена выделения цветом последующих символа

Цитата Сообщение от phx Посмотреть сообщение
И можно ли сделать вывод цифр (с изменением цвета) как-то рациональнее?
твои слова, вот я и предложил..

Цитата Сообщение от phx Посмотреть сообщение
тоже начинает некорректно работать.
хотелось бы точнее, что не так?
то что не переваливает на новую строку?
тогда вот:
Код ASM
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
.MODEL Tiny
.CODE
ORG     100h
start:
        mov ah,9
        lea dx,separator
        int 21h
        lea dx,wellcome
        int 21h
        lea dx,separator
        int 21h
        
        push 40h                        ;задержка для прорисовки
        pop es
        mov al,byte ptr es:[40h]
        sub al,5
ms:     cmp al,byte ptr es:[40h]
        jle ms
        
        push 0b800h
        pop es
                
        mov ah,3
        int 10h
        mov ax,dx
        sar ax,8
        mov bx,160
        mul bx
        mov X,ax 
 
        mov al,byte ptr es:[1]  ;получим основной цвет
        mov color,al
        
n4:     mov ah,1
    xor si,si
n1:     int 21h 
    cmp al,1bh
    je exit
    cmp al,0dh
    jne n0          
        mov ah,2
        mov dl,0ah
        int 21h
        add X,160
        jmp n4
                
n0:     cmp al,'0'
        jl n2
        cmp al,'9'
        ja n2
        mov al,3
        jmp n3
                                        
n2:     mov al,color
 
n3: inc si
    mov bx,X
    mov byte ptr es:[bx+si],al
    inc si
    cmp si,160
    jne n1
        xor si,si
        add X,160
    jmp n1
 
exit:   ret
        wellcome        db      'Press <Esc> to exit',0ah,'$'
        separator       db       '================================================================================$'
        color           db      0
        X       dw 0
end start
просто я думал, что программа должна действовать в области одной строки...
если не в этом дело, то опиши подробно.
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок.JPG
Просмотров: 11
Размер:	50.9 Кб
ID:	125024  
zzzyyyxxx вне форума
Ответ Создать новую тему

Похожие темы
Тема Автор
.NET Windows Forms richTextBox отмена выделения текста
Доброго времени суток ! Подскажите пожалуйста у richTextBox есть какое - нибудь свойство или еще может быть что - нибудь , что позволяет запретить пользователю выделять текст внутри этого контрола.
billyboy_84
С++ для начинающих Удаление элемента массива сдвигом последующих
Всем добрый день Задача Дан массив чисел, необходимо удалить из данного массива элементы, чтобы массив стал упорядочен по-возрастанию. Допустим задан следующий массив 1 2 5 6 3 4 4 5 9 по условию задачи в массиве должно остаться 1 2 5 6 9
beregok
MS Access Вывод в календаре рабочих дней одним цветом, а нерабочих другим цветом.
В Access есть форма в которую вставлен элемент ActiveX Календарь и есть таблица, имеющая два поля Date - тип дата и Flag - тип логический. Каждой дате в таблице проставляется Flag в положение True, если дата является рабочим днем и False в противном случае. Нужно сделать так, что бы в форме...
Кулич
VBA Вывод в календаре рабочих дней одним цветом, а нерабочих другим цветом.
В Access есть форма в которую вставлен элемент ActiveX Календарь и есть таблица, имеющая два поля Date - тип дата и Flag - тип логический. Каждой дате в таблице проставляется Flag в положение True, если дата является рабочим днем и False в противном случае. Нужно сделать так, что бы в форме...
Кулич
Visual Basic Свойства DBGrid для выделения цветом определенных значений.
Использую в приложении элемент управления DBGrid. Каким образом можно сделать так, чтобы строки в сетке с отрицательными значениями выделялись к примеру синим цветом, а с положительным - красным. Возможно существует другой похожий элемент управления с такими свойствами? Жду помощи...
DimonK
Опции темы

Текущее время: 23:41. Часовой пояс GMT +4.

Компьютерный форум программистов и сисадминов
Powered by vBulletin® Version 3.8.7 PL2
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Рейтинг@Mail.ru Яндекс.Метрика