Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
11 / 11 / 5
Регистрация: 25.11.2011
Сообщений: 147
1

Сравнить, выполнить, перейти

10.06.2015, 23:14. Показов 274. Ответов 5
Метки нет (Все метки)

Мне надо выводить буквы от 'A' до 'Z' и '!','?' , при чем QWE ASD ZXC IO заменить на псевдографику и вывести.
Кликните здесь для просмотра всего текста
Assembler
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
    .model  small
 
ESC_    equ 1Bh
 
    .code
    .data
;----------------------------
start:
    mov ax,@data
    mov ds,ax
get:
    mov ah,08h
    int 21h
    
    jmp replace
cout:   
    mov dl,al
    mov ah,02h  
    int 21h
    
    jmp get
replace:
    cmp al, '!'
        je cout
    cmp al, '?'
        je cout
    cmp al,ESC_
        je  exit
    cmp al,'A'
        jb  get
    cmp al,'Z'
        ja  get
;----------------------------               
    cmp al,'Q'
        mov al, 0c9h
            je cout
    cmp al,'W'
        mov al, 0bbh
            je cout
    cmp al,'E'
        mov al, 0c8h
            je cout                
    cmp al,'A'
        mov al, 0bch
            je cout
    cmp al,'S'
        mov al, 0cch
            je cout        
    cmp al,'D'
        mov al, 0b9h
            je cout        
    cmp al,'Z'
        mov al, 0cbh
            je cout        
    cmp al,'X'
        mov al, 0cah
            je cout
    cmp al,'C'
        mov al, 0ceh
            je cout        
    cmp al,'I'
        mov al, 0bah
            je cout        
    cmp al,'O'
        mov al, 0cdh
            je cout
;----------------------------      
    jmp cout        
                      
exit:   
    mov ah,02h
    int 21h
    .exit
;----------------------------
    end start


Правильно ли я делаю когда после сравнения cmp al,'Q' помещаю в al псевдографику и пытаюсь ее вывести?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.06.2015, 23:14
Ответы с готовыми решениями:

Перейти по заданной ссылке, и сравнить значение с сайта со значением переменной
Доброе время суток, мне нужно что бы программа переходила по заданой ссылке и сравнивала значение...

Выполнить запрос к php-скрипту, а затем перейти на Webmoney Merchant.
Здравствуйте, застрял в отправке формы. Вот форма: <form id=pay name=pay method="POST"...

Сравнить 2 столбца, и для ячеек с совпадениями в столбце А перейти на 2 столбца вправо и вставить значение
Добрый день! Помогите пожалуйста решить одну проблему. Нужно сравнить 2 столбца, и для ячеек с...

Сравнить дату с текущей, если ДА, выполнить действие
Здравствуйте! Хочу сравнить дату, которая заносится в переменную datetime, с текущей (11.06.2013),...

5
1626 / 793 / 240
Регистрация: 26.05.2012
Сообщений: 2,888
11.06.2015, 03:30 2
нет, не правильно. допустим введется какая-нибудь прописная буква (кроме букв QWE ASD ZXC IO). после ввода она будет хранится в регистре al. вначале она будет сравниваться с 'Q'
Assembler
1
cmp al,'Q'
после при любых условиях она затерется
Assembler
1
mov al, 0c9h
и дальнейшие сравнения не будут иметь никакого смысла. решение этой проблемы я вижу в замене регистров al на dl для помещения в него символов псевдографики.
Assembler
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
cmp al,'Q'
        mov dl, 0c9h
            je cout
    cmp al,'W'
        mov dl, 0bbh
            je cout
    cmp al,'E'
        mov dl, 0c8h
            je cout                
    cmp al,'A'
        mov dl, 0bch
            je cout
    cmp al,'S'
        mov dl, 0cch
            je cout        
    cmp al,'D'
        mov dl, 0b9h
            je cout        
    cmp al,'Z'
        mov dl, 0cbh
            je cout        
    cmp al,'X'
        mov dl, 0cah
            je cout
    cmp al,'C'
        mov dl, 0ceh
            je cout        
    cmp al,'I'
        mov dl, 0bah
            je cout        
    cmp al,'O'
        mov dl, 0cdh
            je cout
далее сделать дополнительно метку cout2 для пропуска помещения в регистр dl символа, т.к. он нами уже будет задан до этого
Assembler
1
2
3
4
5
cout:   
    mov dl,al
cout2:
    mov ah,02h  
    int 21h
и если у нас введена прописная буква (QWE ASD ZXC IO), то прыгать уже на метку cout2

Assembler
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
cmp al,'Q'
        mov dl, 0c9h
            je cout2
    cmp al,'W'
        mov dl, 0bbh
            je cout2
    cmp al,'E'
        mov dl, 0c8h
            je cout2                
    cmp al,'A'
        mov dl, 0bch
            je cout2
    cmp al,'S'
        mov dl, 0cch
            je cout2        
    cmp al,'D'
        mov dl, 0b9h
            je cout2        
    cmp al,'Z'
        mov dl, 0cbh
            je cout2        
    cmp al,'X'
        mov dl, 0cah
            je cout2
    cmp al,'C'
        mov dl, 0ceh
            je cout2       
    cmp al,'I'
        mov dl, 0bah
            je cout2        
    cmp al,'O'
        mov dl, 0cdh
            je cout2
Добавлено через 15 минут
и еще одна ошибка. объявление начала кода должно быть прямо перед меткой start
Assembler
1
2
3
4
.data
 
.code
start:
1
11 / 11 / 5
Регистрация: 25.11.2011
Сообщений: 147
11.06.2015, 09:57  [ТС] 3
Спасибо. Но я сделал немножко по другому.
Assembler
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
.model  small
 
ESC_ equ 1Bh
 
.data
 
.code
;----------------------------
start:
    mov ax,@data
    mov ds,ax
get:
    mov ah,08h
    int 21h
    
    jmp replace
cout:   
    mov ah,02h  
    int 21h
    
    jmp get
cout2:
    mov dl,al
    mov ah,02h  
    int 21h
    
    jmp get
replace:
    cmp al, '!'
        je cout2
    cmp al, '?'
        je cout2
    cmp al,ESC_
        je  exit
    cmp al,'A'
        jnb replace2
    jmp get    
replace2:       
    cmp al,'Z'
        jna replace3
    jmp get    
replace3:               
    cmp al,'Q'
        mov dl, 0c9h
            je cout
    cmp al,'W'
        mov dl, 0cbh
            je cout
    cmp al,'E'
        mov dl, 0bbh
            je cout                
    cmp al,'A'
        mov dl, 0cch
            je cout
    cmp al,'S'
        mov dl, 0ceh
            je cout        
    cmp al,'D'
        mov dl, 0b9h
            je cout        
    cmp al,'Z'
        mov dl, 0c8h
            je cout        
    cmp al,'X'
        mov dl, 0cah
            je cout
    cmp al,'C'
        mov dl, 0bch
            je cout       
    cmp al,'I'
        mov dl, 0bah
            je cout        
    cmp al,'O'
        mov dl, 0cdh
            je cout
;----------------------------      
    jmp cout2        
                      
exit:   
    mov ah,02h
    int 21h
    .exit
;----------------------------
    end start
0
1626 / 793 / 240
Регистрация: 26.05.2012
Сообщений: 2,888
11.06.2015, 13:08 4
возможен и твой вариант. но в твоем случае получается трата лишних байт памяти в пустую. а в ассемблере идет борьба за каждый байт.
0
11 / 11 / 5
Регистрация: 25.11.2011
Сообщений: 147
11.06.2015, 14:12  [ТС] 5
Знаю. Но меня особо к нему и не тянет. Я еще думал сделать массив, и в цикле все проверять, но больно все как то запутано. Особенно с регистрами. Я так и не понял как вообще все в асме выполняется) например
Assembler
1
2
3
4
cmp al,'O'
        mov dl, 0cdh
            je cout
jmp cout2
в моем представлении это
C++
1
2
3
4
5
if(al == 'O')
{
//что то делаем
}
else cout2();
А тут не пойму что будет выполняться, а что пропустит. Без меток я сильно путаюсь) мне привычней код на метки(отдельные функции) разбивать.
0
6558 / 2653 / 365
Регистрация: 17.02.2013
Сообщений: 3,884
11.06.2015, 16:59 6
C
1
2
3
4
dl = 0xCD ;
if (al == 'O')
      goto cout ;
   else goto cout2 ;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.06.2015, 16:59

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Создать новый каталог, перейти в него, создать в нем два текстовых файла, вывести его листинг и сравнить файлы
добрый день. не знаю правильно ли выбрала тему форума. такое задание по операционным системам: 1....

Методами Мамдани и Ларсена выполнить нечеткий вывод и сравнить
Привет.Задание такое 2мя методами Мамдани и Ларсена выполнить нечеткий вывод и сравнить. Как...

Методами Мамдани и Ларсена выполнить нечеткий вывод и сравнить
Всем привет. Задача: Скорость движения => вероятность ДТП Как реализовать в маткаде. С...

Сравнить даты в поле с текущей датой, и выполнить при совпадении перерасчет
Здравствуйте.В БД имеется текстовое поле, в котором, через запятую перечислены даты. Необходимо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.