Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/10: Рейтинг темы: голосов - 10, средняя оценка - 4.60
Lola13666
0 / 0 / 1
Регистрация: 10.11.2010
Сообщений: 15
1

Рассматривая массив из 8 пятиразрядных слов, найти "исключающее или" всех 8 слов для выражения "10101"

12.10.2011, 20:43. Просмотров 1857. Ответов 11
Метки нет (Все метки)

У меня дан массив из 5 байт. Рассматривая его как массив из 8 пятиразрядных слов, найти "исключающее или" всех 8 слов для выражения "10101"..Пишу на TASM...вот код,но он почему то не работает, что не так?
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
85
86
87
88
89
90
91
92
93
94
data segment
x1 db ?
x2 db ?
x3 db ?
x4 db ?
x5 db ?
x6 db ?
x7 db ?
x8 db ?
mass db 11001100b,10101011b,00011101b,11101000b,11100011b
wrd db 8 dup(0)
wrdx db 8 dup(0)
data ends
code segment
assume cs: code, ds:data
start:
mov ax,data
mov ds,ax
 
;===============Разбиение массива mass на слова и выполнение операции XOR
mov bx,mass
 
mov al,[bx]
shr al,3
mov [wrd],al
mov [wrdx],al ;Перезапись значения в массив с ответами (wrdx)
xor [wrdx],10101b ;Выполнение операции XOR
 
mov al,[bx]
shl al,2
and al,00011100b
inc bx
mov ah,[bx]
shr ah,6
or al,ah
mov [wrd+1],al
mov [wrdx+1],al
xor [wrdx+1],10101b
 
mov al,[bx]
and al,00111110b
shr al,1
mov [wrd+2],al
mov [wrdx+2],al
xor [wrdx+2],10101b
 
mov al,[bx]
and al,00000001b
shl al,4
inc bx
mov ah,[bx]
shr ah,4
or al,ah
mov [wrd+3],al
mov [wrdx+3],al
xor [wrdx+3],10101b
 
mov al,[bx]
and al,00001111b
shl al,1
inc bx
mov ah,[bx]
shr ah,7
or al,ah
mov [wrd+4],al
mov [wrdx+4],al
xor [wrdx+4],10101b
 
mov al,[bx]
and al,01111100b
shr al,2
mov [wrd+5],al
mov [wrdx+5],al
xor [wrdx+5],10101b
 
mov al,[bx]
and al,00000011b
shl al,3
inc bx
mov ah,[bx]
shr ah,5
or al,ah
mov [wrd+6],al
mov [wrdx+6],al
xor [wrdx+6],10101b
 
mov al,[bx]
and al,00011111b
mov [wrd+7],al
mov [wrdx+7],al
xor [wrdx+7],10101b
 
mov ax,4C00h ; Код завершения 0
int 21h ;Выход в DOS
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2011, 20:43
Ответы с готовыми решениями:

Есть строка. Нужно сделать так, чтобы "re" и "not" заменялись на "***".
Есть строка. Нужно сделать так, чтобы "re" и "not" заменялись на "***". Data...

Изъять слова, которые имеют префикс "re", "not", "be"
Заданы символьная строка. Слова и идентификаторы разделяются хотя бы одним...

Необходимо строку тип ""str1" "str2"",0 преобразовать в строку типа
Необходимо строку тип ""str1" "str2"",0 преобразовать в строку типа "str2",0...

Есть такие приколы, в которых задаётся вопрос, требующий ответ "ДА" или "НЕТ" (нет убегает).
Есть такие приколы, в которых задаётся вопрос, требующий ответ "ДА" или "НЕТ"....

Обработка прерывания "ошибочная команда" или "неверная команда"
Привет форумчани! Очень нужна ваша помощь... Нужно написать программу,...

11
Mikl___
Автор FAQ
13304 / 6377 / 629
Регистрация: 11.11.2010
Сообщений: 11,536
13.10.2011, 05:56 2
Lola13666,
Над твоим сообщением строка поиска, достаточно было вбить туда "как массив из 8 пятиразрядных слов" и всплыла задача, которую с моей помощью 12.05.2011 решала Toria, причем эта задача один в один совпадает с твоей
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
;Дан массив из 5 байт. Рассматривая его как массив из 8 пятиразрядных слов, 
;найти "исключающее или" всех 8 слов для выражения "10101".
.286
.model tiny
.code
org 100h
start:  mov bx,4; максимальный индекс в массивах mass1 и mass2
        mov cl,8
a0:     mov al,mass1[bx]
        mov ah,00010101b
        sub cl,8
        neg cl;CL := 8 - CL
        cmp cl,5
        jb a1
        sub cl,5
a1:     shr ah,cl
        sub cl,5
        neg cl;CL := 5 - CL
        xor al,ah
        mov ah,00010101b
        shl ah,cl
        xor al,ah
        shl ah,5
        xor al,ah
        mov mass2[bx],al; возвращаю результат
        dec bx; перехожу к следующему байту
        jns a0; если BX<0 выхожу из цикла
        retn
mass1 db 11001100b, 10101011b, 00011101b, 11101000b, 11100011b
mass2 db 5 dup(0); место под результат
end start
1
o-user
245 / 202 / 26
Регистрация: 03.02.2009
Сообщений: 786
13.10.2011, 06:21 3
Проще будет работать с младшими 5-тью разрядами младшего байта.
0
Mikl___
Автор FAQ
13304 / 6377 / 629
Регистрация: 11.11.2010
Сообщений: 11,536
13.10.2011, 06:24 4
o-user,

Не по теме:

у Lola13666 вариант решения "в лоб", мой вариант идет от такого же решения, но за счет оптимизации получился более коротким -- в ассемблере много путей ведут к одной цели :)

0
o-user
245 / 202 / 26
Регистрация: 03.02.2009
Сообщений: 786
13.10.2011, 06:26 5
Цитата Сообщение от Mikl___ Посмотреть сообщение
o-user,

Не по теме:

я привел один из вариантов, в ассемблере много путей ведут к одной цели :)

Не по теме:

просто получилось ну очень наворочено...

0
Mikl___
Автор FAQ
13304 / 6377 / 629
Регистрация: 11.11.2010
Сообщений: 11,536
13.10.2011, 06:33 6
o-user,

Не по теме:

А мне кажется, что получилось красиво

0
o-user
245 / 202 / 26
Регистрация: 03.02.2009
Сообщений: 786
13.10.2011, 07:26 7
По-моему так программа будет проще, меньше и понятнее:

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
.286
.model tiny
.code
org 100h
 
start:
 
    mov cx,8
    mov bl,10101b
    mov si,offset mass1+4
 
m1: xor [si],bl
 
    ;--------
    push cx
 
    mov cx,5
 
m2: shl byte ptr [offset mass1+4],1
    pushf
    shr byte ptr [offset mass1+4],1
    popf
 
    rcl byte ptr [offset mass1+3],1
    rcl byte ptr [offset mass1+2],1
    rcl byte ptr [offset mass1+1],1
    rcl byte ptr [offset mass1],1
 
    rcl byte ptr[offset mass1+4],1
 
    loop m2
    pop cx
    ;--------
 
    loop m1
 
        retn
mass1 db 11001100b, 10101011b, 00011101b, 11101000b, 11100011b
end start
1
Vadimych
635 / 478 / 12
Регистрация: 10.01.2011
Сообщений: 1,047
13.10.2011, 09:06 8
А так вот можно?
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
.model tiny
.386
.code
org 100h
 
start:
 
xor dword ptr mass,10101101011010110101101011010110b
xor byte ptr mass+4,10110101b
 
ret
 
mass db 11001100b, 10101011b, 00011101b, 11101000b, 11100011b
end start
0
o-user
245 / 202 / 26
Регистрация: 03.02.2009
Сообщений: 786
13.10.2011, 12:34 9
Работать будет.
Но в задании указано, что надо работать с 5-ти разрядными словами...
0
Lola13666
0 / 0 / 1
Регистрация: 10.11.2010
Сообщений: 15
13.10.2011, 21:51  [ТС] 10
Спасибо, я воспользовалась кодом
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
.286
.model tiny
.code
org 100h
start:  mov bx,4; 
        mov cl,8
a0:     mov al,mass1[bx]
        mov ah,00010101b
        sub cl,8
        neg cl;CL := 8 - CL
        cmp cl,5
        jb a1
        sub cl,5
a1:     shr ah,cl
        sub cl,5
        neg cl;CL := 5 - CL
        xor al,ah
        mov ah,00010101b
        shl ah,cl
        xor al,ah
        shl ah,5
        xor al,ah
        mov mass2[bx],al; 
        dec bx;  
        jns a0;  
        retn
mass1 db 11001100b, 10101011b, 00011101b, 11101000b, 11100011b
mass2 db 5 dup(0); место под результат
end start
это будет работать если я допустим mass1 задам как 1)все нули. 2) все единицы ?
и результат записывается как я понимаю в mass2? у меня ведь должно быть восемь ответов или я не так поняла условие?(
0
Mikl___
Автор FAQ
13304 / 6377 / 629
Регистрация: 11.11.2010
Сообщений: 11,536
14.10.2011, 03:40 11
Lola13666, программа работает при любом значении в mass1, результат преобразования записывается в mass2. В качестве ответа используй содержимое mass2, хочешь как 5 байт, а хочешь -- рассматривай mass2 как массив из 8 пятиразрядных слов...
0
Lava-Girl
0 / 0 / 0
Регистрация: 17.02.2012
Сообщений: 5
26.02.2012, 19:41 12
Можно комментарии к этой программе???
0
26.02.2012, 19:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2012, 19:41

Дана строка "ababab", из этого слова надо получить "aaa"
Собственно сабж. Дана строка &quot;ababab&quot;, надо удалить буквы &quot;b&quot; и получить слово...

Заменить во вводимом тексте каждое слово "ЭВМ" словом "машина"
Здравствуйте. Поможете разобраться с ниже приведенной задачей: Заменить во...

Как реализовать рекурсию через "call" и "ret"?
kak realizovat rekursiu 4erez &quot;call&quot; i &quot;ret&quot;? nujno predstavit naturalnoe...


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

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

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