Консультация № 193540
11.09.2018, 22:53
0.00 руб.
12.09.2018, 09:46
0 15 1
Здравствуйте! У меня возникли сложности с таким вопросом:
- по ассемблеру. Я только сейчас зарегистрировался тут и еще не знаю куда писать. Быть может Вы мне поможете.

Мне нужно понять как решать задачу.
____
Дан массив из 8 байт. Рассматривая его как массив логических значений х0
х1 х2 х3 х4 х5 х6 х7 (true-есть ненулевые биты в байте, false-все биты нулевые),
вычислить логическую формулу
f=(x7 & x6 & x1) V (x6 & x4 & x2 & x1 & x0) V (x7 & x6 & x3 & x1).
____

Как я понимаю создаю переменные. Вношу значения произвольные. А вот дальше не знаю уже..что и как.
Связь со мной, если что, то можно и через email, вконтакте.
Strastar@yandex.ru https://vk.com/strastar

Обсуждение

давно
Старший Модератор
312929
1973
12.09.2018, 07:30
общий
Адресаты:
То есть Вам нужно написать программу на ассемблере, реализующую эту формулу?
давно
Мастер-Эксперт
17387
18345
12.09.2018, 09:46
общий
Обратите внимание на данную консультацию, перенесённую из другого раздела.
Об авторе:
Facta loquuntur.
давно
Академик
20764
1861
12.09.2018, 09:54
общий
Точно на ассемблере? Там и без этого есть что оптимизировать.
давно
Мастер-Эксперт
17387
18345
12.09.2018, 10:07
общий
Адресаты:
В Интернете аналогичные задания содержатся в пособиях по изучению Ассемблера.
Об авторе:
Facta loquuntur.
давно
Посетитель
402280
7
12.09.2018, 10:23
общий
12.09.2018, 10:28
Здравствуйте. Пишем код и затем запускаем его в Turbo Debugger -е.
давно
Мастер-Эксперт
17387
18345
12.09.2018, 10:29
общий
Адресаты:
Предыдущее сообщение автор вопроса, судя по всему, хотел адресовать Вам.
Об авторе:
Facta loquuntur.
давно
Академик
20764
1861
12.09.2018, 10:32
общий
Адресаты:
ещё до реализации есть о чём подумать. Да и в процессе тоже. Тем более, что изначально вопрос был в другом разделе.
давно
Мастер-Эксперт
17387
18345
12.09.2018, 10:34
общий
Адресаты:
Что Вам мешает думать? Но к разделу "Исследование операций" этот вопрос не относится в любом случае.
Об авторе:
Facta loquuntur.
давно
Мастер-Эксперт
17387
18345
12.09.2018, 10:36
общий
Адресаты:
Во избежание лишних вопросов ответьте на этот:
Цитата: Коцюрбенко Алексей Владимирович
То есть Вам нужно написать программу на ассемблере, реализующую эту формулу?
Об авторе:
Facta loquuntur.
давно
Посетитель
402280
7
12.09.2018, 10:41
общий
Адресаты:
Да, мне нужно написать программу на ассемблере реализовав эту формулу..
В данной методичке прикрепленной это 4 лабораторная, третий вариант.
Прикрепленные файлы:
f65c1b89aef36ec31b1dc4beee32c79a.pdf
давно
Посетитель
402280
7
12.09.2018, 10:42
общий
Адресаты:
Все правильно.
давно
Мастер-Эксперт
17387
18345
12.09.2018, 10:46
общий
Адресаты:
В двух предыдущих сообщениях автор вопроса подтвердил, что требуется написать программу на Ассемблере. Теперь Вы можете со спокойной совестью думать и творить.
Об авторе:
Facta loquuntur.
давно
Посетитель
402280
7
12.09.2018, 11:10
общий
Адресаты:
На данный момент у меня есть такой код. Это 5 вариант. Не факт, что код правильно написан.

[code lang=asm]data segment
NB db 10110100b
data ends

code segment
assume cs: code, ds: data
start:
mov ax, data
mov ds, ax
mov ax,0
mov al,NB
mov ah,al
mov bx,ax
mov dx,ax
mov cx,ax

shr al,1 ;x7-5A
shr ah,2 ;x6-2D
shr bl,5 ;x3-05

shr bh,4 ;x4-0B
shr cl,6 ;x2-02
shr ch,7 ;x1-01

shr dl,8 ;x0-00

mov dh,11111111b
and dh,al
and dh,ah
and dh,bl ;x7*x6*x3

mov bl,11111111b
and bl,ah
and bl,bh
and bl,cl
and bl,ch ;x6*x4*x2*x1

mov bh,11111111b
and bh,al
and bh,ah
and bh,cl
and bh,dl ;x7*x6*x2*x0

mov ax,0
mov al,dh

mov dx,0
mov dl,bl

mov cx,0
mov cl,bh

add al,dl
add al,cl
quit:
mov ax,4Ch ; Код завершения - младший байт суммы
int 21h ; Выход в DOS
code ends

end start[/code]
Прикрепленные файлы:
b7504ea73fea7b8d56db4e920831859f.rar
давно
Посетитель
7438
7205
12.09.2018, 11:27
общий
Адресаты:
Хорошо, что есть кое-какой код. Посмотрим. Поможем...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
12.09.2018, 12:18
общий
это ответ
Здравствуйте, Strastar!
Немного упростим формулу:
f = (x7 & x6 & x1) V (x6 & x4 & x2 & x1 & x0) V (x7 & x6 & x3 & x1) =
= x6 & x1 & (x7 V (x4 & x2 & x0) V (x7 & x3 )) =
= x6 & x1 & ((x7 V (x7 & x3 )) V (x4 & x2 & x0)) =
= x6 & x1 & (x7 V (x4 & x2 & x0))
Вот последнюю формулу и закодируем:
[code lang=asm h=200]data segment
x0 db 0
x1 db 66
x2 db 5
x3 db 0
x4 db 0ffh
x5 db 0
x6 db 10
x7 db 1
data ends

code segment
assume cs:code, ds:data
start:
mov ax, data
mov ds, ax

cmp x6, 0
jz return_false
cmp x1, 0
jz return_false
cmp x7, 0
jnz return_true
cmp x4, 0
jz return_false
cmp x2, 0
jz return_false
cmp x0, 0
jz return_false

return_true:
mov al, 1
jmp quit

return_false:
mov al, 0

quit:
mov ah, 4Ch ; Код завершения - значение f
int 21h ; Выход в DOS
code ends

end start
[/code]
5
Спасибо Вам большое))
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа