Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler: математика, вычисления
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Kirillgr
1 / 1 / 0
Регистрация: 12.10.2013
Сообщений: 31
1

Вычисление выражения

29.04.2014, 22:13. Просмотров 1738. Ответов 17
Метки нет (Все метки)

Добрый день. Помогите разобраться с ошибкой при вычислении выражения
A=13D-4C+3B-6A
Вот код:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
MOV AX, 1
MOV BX, 3
MOV CX, 8
MOV DX, 5
SHL CX, 2
SUB CX, BX
SHL BX, 2
SUB BX, CX
ADD BX, DX
SHL DX, 2
ADD BX, DX
SHL DX, 1
ADD DX, BX
SHL AX, 3
SUB DX, AX
SHR AX, 2
ADD AX, DX
Должен вывести 24 (в 16-ной), но выводит 2A. Уже больше недели не могу разобраться.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2014, 22:13
Ответы с готовыми решениями:

Вычисление выражения по формуле
Входные данные необходимо вводить с клавиатуры; результат должен быть выведен...

Вычисление арифметического выражения
Разработать программу вычисления арифметического выражение...

Вычисление выражения по формуле
Нужно решить задачу на ассемблере, самую простую.. а я в нем не жу жу....

Вычисление выражения по формуле
Помогите изменить код для формулы. Z=\frac{X \cdot Y}{X+Y} st_k...

Вычисление выражения по формуле
Составить программу вычисления y=(10*sin({x}_{1})+20*cos({x}_{2}))/x_3^3. Числа...

17
skaa
Хочу в Исландию
1035 / 834 / 119
Регистрация: 10.11.2010
Сообщений: 1,629
30.04.2014, 18:15 2
Чтобы вычислить 13D-4A, надо сделать вот что:
Assembler
1
2
3
        mov     ax,13Dh
        mov     bx,4Ah
        sub     ax,bx
. Результат будет в ax.
0
Kirillgr
1 / 1 / 0
Регистрация: 12.10.2013
Сообщений: 31
01.05.2014, 21:58  [ТС] 3
По моему заданию лишние mov добавлять нельзя.
0
skaa
Хочу в Исландию
1035 / 834 / 119
Регистрация: 10.11.2010
Сообщений: 1,629
01.05.2014, 22:27 4
Хорошо. Тогда так:
Assembler
1
2
        mov     ax,13Dh
        sub     ax,4Ah
, тут на один mov меньше. Результат по-прежнему будет в ax.
0
Kirillgr
1 / 1 / 0
Регистрация: 12.10.2013
Сообщений: 31
01.05.2014, 23:30  [ТС] 5
Вот что написано в моем задании:
"Должно быть 4 команды MOV в самом начале, если будут еще MOV – это неоптимальное решение!"
Вообще можно решить эту задачу без введения дополнительных MOV?
0
Thread
programmer
1871 / 343 / 27
Регистрация: 01.06.2011
Сообщений: 3,047
Записей в блоге: 1
02.05.2014, 06:24 6
Цитата Сообщение от Kirillgr Посмотреть сообщение
A=13D-4C+3B-6A
Assembler
1
2
3
4
mov ax,13Dh
sub ax,4Ch
add ax,3Bh
sub ax,6Ah ;AX<=результат.
Так подходит?

Добавлено через 3 минуты
Цитата Сообщение от Kirillgr Посмотреть сообщение
Вообще можно решить эту задачу без введения дополнительных MOV?
у каждого препода свои заморочки.Попался один,запретил использовать стек.Не оптимально.Здесь согласен.
Но блин комманды пересылки данных,что-то новое.
0
Mikl___
Автор FAQ
13304 / 6377 / 629
Регистрация: 11.11.2010
Сообщений: 11,536
02.05.2014, 14:40 7
А вот так?
Assembler
1
mov ax,(13Dh-4Ch+3Bh-6Ah)
компилятор сам всё вычислит, для чего процессор напрягать?
0
skaa
Хочу в Исландию
1035 / 834 / 119
Регистрация: 10.11.2010
Сообщений: 1,629
02.05.2014, 20:41 8
Ни одного MOVа:
Assembler
1
2
        xor     ax,ax
        add     ax,(13Dh-4Ch+3Bh-6Ah)
0
Kirillgr
1 / 1 / 0
Регистрация: 12.10.2013
Сообщений: 31
02.05.2014, 21:15  [ТС] 9
Спасибо за попытки, но это все не то. Программа должна состоять из MOV, ADD, SUB, SHL, SHR, XOR.
0
skaa
Хочу в Исландию
1035 / 834 / 119
Регистрация: 10.11.2010
Сообщений: 1,629
02.05.2014, 22:04 10
MOV и XOR тут есть, ADD и SUB можно применить если вычислять значение выражения по одному слагаемому и вычитаемому. А вот куда тут всунуть SHL и SHR - это загадка... можно правда сдвинуть влево, а потом вправо - числа маленькие, ничего не изменится, но это будут просто лишние строки .
0
Kirillgr
1 / 1 / 0
Регистрация: 12.10.2013
Сообщений: 31
02.05.2014, 22:42  [ТС] 11
Мне бы понять, где ошибка. Потому что выражение при этих преобразованиях получается такое: 2A+13D+3B-4C-8A, что соответствует выражению, которое выше написано. Но непонятно, почему ответ неверный.
0
Somebody
2807 / 1618 / 251
Регистрация: 03.12.2007
Сообщений: 4,223
Завершенные тесты: 3
02.05.2014, 23:03 12
Для Тьюринг-полноты хватит даже одних sub и jnz. А когда можно использовать так много инструкций - это даже неинтересно... Какие всё-таки ограничения и критерии оптимальности по заданию?
0
skaa
Хочу в Исландию
1035 / 834 / 119
Регистрация: 10.11.2010
Сообщений: 1,629
02.05.2014, 23:07 13
Что такое 13D? Это шестнадцатиричное представление числа 31710 или "тринадцать умножить на D"?
0
Somebody
2807 / 1618 / 251
Регистрация: 03.12.2007
Сообщений: 4,223
Завершенные тесты: 3
02.05.2014, 23:18 14
Цитата Сообщение от Kirillgr Посмотреть сообщение
Мне бы понять, где ошибка.
Тогда разворачивай всё это с конца, типа
Assembler
1
2
3
4
5
ADD AX, DX      ; a = a + d
SHR AX, 2       ; a = a*4 + d
SUB DX, AX      ; a = a*3 + d
SHL AX, 3       ; a = a*24 + d
...
0
Mikl___
Автор FAQ
13304 / 6377 / 629
Регистрация: 11.11.2010
Сообщений: 11,536
03.05.2014, 13:43 15
похоже, что A, B, C, D это не 16-ричные цифры а названия переменных и задание выглядит вот так
A=13*D-4*C+3*B-6*A, но вместо умножения нужно использовать сдвиги и сложения пусть АХ=А ВХ=В СХ=С DX=D
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SHL AX,1; AX=2*A
MOV SI,AX; SI=2*A
SHL AX,1; AX=4*A
ADD AX,SI; AX=4*A+2*A=6*A
MOV SI,BX; SI=B
SHL BX,2; BX=4*B
SUB BX,SI; BX=4*B-B=3*B
SHL CX,2; CX=4*C
MOV SI,DX; SI=D
SHL DX,3; DX=8*D 
SUB DX,SI; DX=8*D-D=7*D
SHL DX, 1; DX=2*7*D=14*D
SUB DX,SI; DX=14*D-D=13*D
SUB DX,CX; DX=13*D-4*C
ADD DX,BX; DX=13*D-4*C+3*B
SUB DX,AX; DX=13*D-4*C+3*B-6*A
MOV A,DX; A=13*D-4*C+3*B-6*A
0
Kirillgr
1 / 1 / 0
Регистрация: 12.10.2013
Сообщений: 31
03.05.2014, 20:24  [ТС] 16
Ответ пользователю Somebody:
(Сперва присвоить в регистры начальные значения, например 1,2,3,4 – на них и проверить ответ)
(Требуется получить минимальное кол-во команд в программе – обязательно оптимизировать решение!!!)
(Т.е. должно быть 4 команды MOV в самом начале, если будут еще MOV – это неоптимальное решение!)
(Запрещено заменять умножение многократным сложением/вычитанием, если разложение по степеням короче)

Добавлено через 11 минут
Выражение, составленное пользователем Mikl дает неверный ответ D6EF. При компиляции выводит "error: symbol 'A' undefined".

Добавлено через 6 минут
"Начинать с конца" - тоже не решается.
0
Mikl___
Автор FAQ
13304 / 6377 / 629
Регистрация: 11.11.2010
Сообщений: 11,536
04.05.2014, 08:57 17
Лучший ответ Сообщение было отмечено Taatshi как решение

Решение

Kirillgr,
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
; masm dos com #
.286
.model tiny
.code
org 100h
main:   MOV AX, 1
    MOV BX, 2
    MOV CX, 3
    MOV DX, 4
    SHL AX,1; AX=2*A
    push ax
    pop SI; SI=2*A
    SHL AX,1; AX=4*A
    ADD AX,SI; AX=4*A+2*A=6*A
    push bx
    pop SI; SI=B
    SHL BX,2; BX=4*B
    SUB BX,SI; BX=4*B-B=3*B
    SHL CX,2; CX=4*C
    push dx
    pop SI; SI=D
    SHL DX,3; DX=8*D 
    SUB DX,SI; DX=8*D-D=7*D
    SHL DX, 1; DX=2*7*D=14*D
    SUB DX,SI; DX=14*D-D=13*D
    SUB DX,CX; DX=13*D-4*C
    ADD DX,BX; DX=13*D-4*C+3*B
    SUB DX,AX; DX=13*D-4*C+3*B-6*A
    push dx
    pop A; A=13*D-4*C+3*B-6*A=52-12+6-6=40=28h
    ret
A dw ?
end main
1
Kirillgr
1 / 1 / 0
Регистрация: 12.10.2013
Сообщений: 31
04.05.2014, 21:28  [ТС] 18
Большое спасибо, все работает.
0
04.05.2014, 21:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2014, 21:28

Вычисление выражения по формуле
Входные данные необходимо вводить с клавиатуры; результат должен быть выведен...

Вычисление выражения по формуле
Вычислите, используя FPU, следующее выражение, входные данные необходимо...

Вычисление выражения по формуле.
Уважаемые программисты, помогите пожалуйста с решением примера на ассемблере ...


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

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

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