1 / 1 / 1
Регистрация: 27.01.2012
Сообщений: 29
1

Разработать вычислительное устройство для выполнения операции умножения двоичных чисел

19.06.2012, 21:54. Показов 2984. Ответов 1
Метки нет (Все метки)

писать ничег не прошу, ибо есть похожая тема на форуме, код как нибудь подправлю, прошу подробнее вдолбить в мой мозг , то что я не понимаю)


1. Числа с фиксированной запятой со знаком, представленные в прямом коде.
2. Количество разрядов: 4
3. Алгоритм умножения: на два разряда множителя одновременно, начиная со старших разрядов множителя со сдвигом частной суммы влево.


1 . это понятно
2. количество разрядов - это 0011??то есть тетрада?
3. как понять на два разряда множителя?
начиная со старших это с 1 к 0 со сдвигом влево?

мб кто подскажет , буду рад)


вот похожий код тут нашел, подходит ли он , если сделать умножение , а не сложение, сдвиг на 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
85
86
87
88
89
.model small
.stack 100h
.data
msgA    db 'A = $'
msgB    db 'B = $'
crlf    db 0dh,0ah,'$'
.code
msg macro m
    mov ah,9
    lea dx,m
    int 21h
    endm
start:
    mov ax,@data
    mov ds,ax
 
    msg msgA    ;Ввод чисел
    call hexin  
    msg crlf
    mov si,bx
    msg msgB
    call hexin
    msg crlf
    
    shr si,1    ;Вычисление C.
    mul bx,si
 
    mov cl,3    ;С * 8
    shl bx,cl
.386
    bsr cx,bx   
    inc cx
    push cx
    neg cx
    add cx,16
    shl bx,cl
    pop cx
    mov ah,2
output:
    xor dx,dx
    shl bx,1
    adc dl,0
    or dl,30h
    int 21h
    loop output
 
    xor ax,ax
    int 16h     
 
    mov ax,4c00h
    int 21h
 
hexin proc  ;Подпрограмма ввода 16-ричного числа(стырена из книжки).
    mov bx,0
inpt:
    mov ah,8    ;Ввод символа.
    int 21h
    cmp al,13   ;<Enter>?
    je done
    cmp al,'0'
    jb inpt
    cmp al,'9'
    jbe ok      
    sub al,20h
    cmp al,'F'
    ja inpt
    cmp al,'A'
    jb inpt
ok: ;Введена 16-ричная цифра.
    mov ah,2
    mov dl,al
    int 21h
    cmp al,'9'
    ja letter
    sub al,'0'
    and ax,0fh
    jmp addd
letter:
    sub al,55
    and ax,0fh
addd:
    mov cl,4
    shl bx,cl
    or bx,ax
    jmp inpt
done:
    ret
hexin endp
end start
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.06.2012, 21:54
Ответы с готовыми решениями:

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

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

Разработать класс "Матрица" (перегрузить операции сложения, умножения, умножения на число)
Разработать класс матрица. Определить в нем конструктор перегрузить арифметические операции...

Устройство сложения 4-х разрядных двоичных чисел
Здравствуйте, проблема следующая Необходимо разработать устройство, позволяющее производить...

1
Нарушитель
Автор FAQ
15518 / 7340 / 960
Регистрация: 11.11.2010
Сообщений: 13,244
20.06.2012, 11:55 2
Цитата Сообщение от xcomx Посмотреть сообщение
3. Алгоритм умножения: на два разряда множителя одновременно, начиная со старших разрядов множителя со сдвигом частной суммы влево.
xcomx, для того чтобы понять ЧТО от тебя требует преподаватель нужно поискать в Google, Yandex'e "Алгоритм Бутса (Booth)" смысл в двух словах следующий:
Анализируешь два последних бита множимого Х и каждый раз сдвигаешь Х на 1 разряд
X(i) X(i-1) действие
0 0 делаем сдвиг Х на 1 разряд влево
0 1 складываем Х с частичным произведением и делаем сдвиг Х на 1 разряд влево
1 0 вычитаем Х из частичного произведения и делаем сдвиг Х на 1 разряд влево
1 1 делаем сдвиг Х на 1 разряд влево
При использовании алгоритма Бутса операции сложения и вычитания требуются только когда во множимом не совпадают значения в соседних разрядах, то есть, имеется переход от 0 к 1 или от 1 к 0. Процесс продолжается, пока не будут выполнены n сравнений.
Алгоритм Бутса применим также к двоичным числам X и Y в дополнительном коде: для Y это справедливо потому, что логика сложения и вычитания чисел без знака и чисел в дополнительном коде одинакова; для X утверждение справедливо потому, что в случае, если X заканчивается рядом единиц, последней операцией будет вычитание числа https://www.cyberforum.ru/cgi-bin/latex.cgi?2^{n-1}, которое компенсирует операцию взятия двоичного дополнения.
Далее пример, где перемножаются два 8-разрядных числа Х и Y. (у тебя 4-разрядные, но переделывай под себя САМ)
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
.data
X db 56
Y db 99
result dw ?
.code
   xor ax,ax; место под результат
   mov dh,0
   mov dl,Y; занести множитель в регистр DX
   mov cx,8; установить счетчик числа разрядов
   clc; очистить флаг переноса X(-1)=0
a0: jnc a1; проверить разряд X(i-1)
   ror X,1; X(i-1)=1 занести разряд X(i) в CF
   jnc a2; проверить разряд X(i)
   sub ax,dx;   X(i)=0 и X(i-1)=1 вычесть множимое
   jmp a2; продолжить
a1: ror X,1;       X(i-1)=0 занести разряд X(i) в CF
   jnc a2; проверить разряд X(i)
   add ax,dx;    X(i)=1 и X(i-1)=0 прибавить множимое
a2: shl dx,1;      новый X(i-1) в CF 
   loop a0;        пока не обработаем все 8 разрядов
   mov result,ax; AX=56*99=5544
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.06.2012, 11:55
Помогаю со студенческими работами здесь

Схема умножения двоичных чисел
помогите плиз кто чем может. вопрос в билетах: схема для умножения двоичных чисел.

Класс для выполнения операций сложения, вычитания и умножения комплексных чисел
Условие: Составить описание класса для представления комплексных чисел. Обеспечить выполнение...

Для заданных двух чисел произвести операции деления, сложения, умножения, вычитание
Для заданных двух чисел произвести операции деления, сложения, умножения, вычитание

Нужен алгоритм сложения и умножения двоичных чисел
Необходимо написать программу с описанием простейшего класса со следующими элементами: полями,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru