Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
1 / 1 / 0
Регистрация: 12.10.2013
Сообщений: 31
1

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

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

Author24 — интернет-сервис помощи студентам
Добрый день. Помогите разобраться с ошибкой при вычислении выражения
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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.04.2014, 22:13
Ответы с готовыми решениями:

Вычисление выражения
помогите пожалуйста сделать a+x, если x>a y1= 2a-x, если x<=a ...

Вычисление выражения F=(a+b)*c/2+a
Помогите. Надо написать на языке асемблер.написать программу вычмсления вырожения F=(a+b)*c/2+a

Вычисление выражения
Здравствуйте, мне нужно составить программу, которая посчитает выражение r3 = b + c * a^2. Есть...

Вычисление выражения -(4*a+b/16)+9
Доброго времени суток. Помогите с поиском решения выражения: -(4*a+b/16)+9 а и b-константы.

17
Хочу в Исландию
1041 / 840 / 119
Регистрация: 10.11.2010
Сообщений: 1,630
30.04.2014, 18:15 2
Чтобы вычислить 13D-4A, надо сделать вот что:
Assembler
1
2
3
        mov     ax,13Dh
        mov     bx,4Ah
        sub     ax,bx
. Результат будет в ax.
0
1 / 1 / 0
Регистрация: 12.10.2013
Сообщений: 31
01.05.2014, 21:58  [ТС] 3
По моему заданию лишние mov добавлять нельзя.
0
Хочу в Исландию
1041 / 840 / 119
Регистрация: 10.11.2010
Сообщений: 1,630
01.05.2014, 22:27 4
Хорошо. Тогда так:
Assembler
1
2
        mov     ax,13Dh
        sub     ax,4Ah
, тут на один mov меньше. Результат по-прежнему будет в ax.
0
1 / 1 / 0
Регистрация: 12.10.2013
Сообщений: 31
01.05.2014, 23:30  [ТС] 5
Вот что написано в моем задании:
"Должно быть 4 команды MOV в самом начале, если будут еще MOV – это неоптимальное решение!"
Вообще можно решить эту задачу без введения дополнительных MOV?
0
programmer
2391 / 525 / 69
Регистрация: 01.06.2011
Сообщений: 3,639
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
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
02.05.2014, 14:40 7
А вот так?
Assembler
1
mov ax,(13Dh-4Ch+3Bh-6Ah)
компилятор сам всё вычислит, для чего процессор напрягать?
0
Хочу в Исландию
1041 / 840 / 119
Регистрация: 10.11.2010
Сообщений: 1,630
02.05.2014, 20:41 8
Ни одного MOVа:
Assembler
1
2
        xor     ax,ax
        add     ax,(13Dh-4Ch+3Bh-6Ah)
0
1 / 1 / 0
Регистрация: 12.10.2013
Сообщений: 31
02.05.2014, 21:15  [ТС] 9
Спасибо за попытки, но это все не то. Программа должна состоять из MOV, ADD, SUB, SHL, SHR, XOR.
0
Хочу в Исландию
1041 / 840 / 119
Регистрация: 10.11.2010
Сообщений: 1,630
02.05.2014, 22:04 10
MOV и XOR тут есть, ADD и SUB можно применить если вычислять значение выражения по одному слагаемому и вычитаемому. А вот куда тут всунуть SHL и SHR - это загадка... можно правда сдвинуть влево, а потом вправо - числа маленькие, ничего не изменится, но это будут просто лишние строки .
0
1 / 1 / 0
Регистрация: 12.10.2013
Сообщений: 31
02.05.2014, 22:42  [ТС] 11
Мне бы понять, где ошибка. Потому что выражение при этих преобразованиях получается такое: 2A+13D+3B-4C-8A, что соответствует выражению, которое выше написано. Но непонятно, почему ответ неверный.
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
02.05.2014, 23:03 12
Для Тьюринг-полноты хватит даже одних sub и jnz. А когда можно использовать так много инструкций - это даже неинтересно... Какие всё-таки ограничения и критерии оптимальности по заданию?
0
Хочу в Исландию
1041 / 840 / 119
Регистрация: 10.11.2010
Сообщений: 1,630
02.05.2014, 23:07 13
Что такое 13D? Это шестнадцатиричное представление числа 31710 или "тринадцать умножить на D"?
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
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
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
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
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
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
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
1 / 1 / 0
Регистрация: 12.10.2013
Сообщений: 31
04.05.2014, 21:28  [ТС] 18
Большое спасибо, все работает.
0
04.05.2014, 21:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.05.2014, 21:28
Помогаю со студенческими работами здесь

Вычисление выражения A*B/C
Выручайте, напишите плиз программу -&gt; Вычисление выражения D=A*B/C, где A=6, В=3, С=2

вычисление выражения 2A+2B
Задачку надо решить для зачета... пробовала сама решить... ничего не получается... минимум 3 ошибки...

Вычисление выражения
Здравствуйте, мне нужно составить программу, которая посчитает выражениe: r8 = c^4 - a^3 - c^2...

Вычисление выражения
Всем доброго времени суток. Учу сам ассемблер,так как в универе,ничему толковому не научат. Мне...

Вычисление выражения
вычислить выражение (с / 4-d / 62) / (a * a + 1)

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru