Unnamed
 Аватар для kingzfate
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852

Арифметическое выражение, исправить код

15.10.2012, 16:37. Показов 1370. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
;(3*a+5)/(b-1) Необходимо решить выражение. Ответ в выводится в С++, но почему то 0.0
Покажите где ошибки, не могу разобраться, только начал осваивать ассемблер

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
.586P
.MODEL FLAT,C
 
DATA SEGMENT 
 
PUBLIC a,b,x,y
a DW ?
b DW ?
x DW ?
y DW ?
DATA ENDS
 
CODE SEGMENT
 
PUBLIC arifm_oper
 
arifm_oper PROC
;(3*a+5)/(b-1).
MOV AX,  a ; AX=A
 
MOV BX,  b ;BX=b
MOV CX, 3
IMUL CX ; DX:AX=AX*3
ADD AX, 5
ADC DX, 0
DEC BX ; BX=BX-1
CWD
div BX
MOV x, AX  ; x=ax
MOV y, DX  ; y=dx
ret
arifm_oper ENDP
 
CODE ENDS
 
END
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.10.2012, 16:37
Ответы с готовыми решениями:

Вычислить целочисленное арифметическое выражение, исправить код
;laboratornaya rabota #1 ;(a-b)/3 + (a*a*a-c)/4 ;pri a=5,b=3,c=5 .model small .stack 100h .data a dw 5 b dw 3

Арифметическое выражение
Необходимо переписать кусок кода ниже, чтобы вычислить это выражение: x=(a*b)/(c-3)*(d+2) Почти ничего не понимаю в ассемблере, но...

Арифметическое выражение
Есть такое выражение: X=A/B+C*(D+E-K) Где E и К - двухбайтные числа, все остальные однобайтовые. Чисто теоретически, правильно все...

11
Хочу в Исландию
 Аватар для skaa
1041 / 840 / 119
Регистрация: 10.11.2010
Сообщений: 1,630
15.10.2012, 18:00
Замени div BX на idiv BX потому что div - это беззнаковое деление, а делить в данном случае приходится на -1.
1
Unnamed
 Аватар для kingzfate
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
15.10.2012, 19:27  [ТС]
Цитата Сообщение от skaa Посмотреть сообщение
Замени div BX на idiv BX потому что div - это беззнаковое деление, а делить в данном случае приходится на -1.
Спасибо, заменил, но по прежнему 0.0 выводит, видимо ошибка в сложении или еще выше. Буду копать дальше
0
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,938
16.10.2012, 08:39
ADC DX, 0 - это лишнее.
Если заменил mul на imul, то нужно менять и div на idiv
При каких a и b выдает неправильный результат?
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16355 / 7671 / 1078
Регистрация: 11.11.2010
Сообщений: 13,736
16.10.2012, 08:41
kingzfate, CWD лишняя
0
Unnamed
 Аватар для kingzfate
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
16.10.2012, 09:51  [ТС]
Цитата Сообщение от alexcoder Посмотреть сообщение
ADC DX, 0 - это лишнее.
Если заменил mul на imul, то нужно менять и div на idiv
При каких a и b выдает неправильный результат?
А флаг же остается, его получается не нужно использовать?
Например при a=10 b=3
0
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,938
16.10.2012, 10:00
умножение и деление его не используют, а cwd перезаписывает dx
В таком варианте все работает.
Assembler
1
2
3
4
5
6
7
8
9
10
11
MOV AX,  a ; AX=A
 
MOV BX,  b ;BX=b
MOV CX, 3
IMUL CX ; DX:AX=AX*3
ADD AX, 5
DEC BX ; BX=BX-1
CWD
idiv BX
MOV x, AX  ; x=ax
MOV y, DX  ; y=dx
x=17,y=1
если не получается, значит ошибка в программе на ЯВУ.
По идее и первоначальный вариант худо-бедно должен был посчитать.
1
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16355 / 7671 / 1078
Регистрация: 11.11.2010
Сообщений: 13,736
16.10.2012, 10:03
kingzfate,
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
; masm dos exe #
.286
.model small
.data
a DW 10
b DW 3
x DW ?
.CODE
start:  mov ax,@data
    mov ds,ax
;(3*a+5)/(b-1).
    MOV AX,a ;AX=0Ah
    MOV BX,b ;BX=3
    MOV CX,3
    IMUL CX ; DX:AX=00:1Eh
    ADD AX,5 ; AX=23h
    ADC DX,0 ; DX=0
    DEC BX ; BX=2
    idiv BX
    MOV x, AX  ; [x]=11h
    mov ah,4Ch
    int 21h
end start
1
Unnamed
 Аватар для kingzfate
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
16.10.2012, 15:01  [ТС]
Цитата Сообщение от alexcoder Посмотреть сообщение
умножение и деление его не используют, а cwd перезаписывает dx
В таком варианте все работает.
Assembler
1
2
3
4
5
6
7
8
9
10
11
MOV AX,  a ; AX=A
 
MOV BX,  b ;BX=b
MOV CX, 3
IMUL CX ; DX:AX=AX*3
ADD AX, 5
DEC BX ; BX=BX-1
CWD
idiv BX
MOV x, AX  ; x=ax
MOV y, DX  ; y=dx
x=17,y=1
если не получается, значит ошибка в программе на ЯВУ.
По идее и первоначальный вариант худо-бедно должен был посчитать.
Все более - менее заработало, но остаток от деления выводит как то криво, например при a = 10 и b = 3 , должно быть 17,5 а выводит 17,1. Это можно как то исправить? Или так и должно быть?
0
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,938
16.10.2012, 15:09
Так и должно быть. 35/2=17 остаток 1. Остаток - это не дробная часть!!!
1
Unnamed
 Аватар для kingzfate
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
16.10.2012, 15:15  [ТС]
Цитата Сообщение от alexcoder Посмотреть сообщение
Так и должно быть. 35/2=17 остаток 1. Остаток - это не дробная часть!!!
Тооочно, совсем уже позабыл всё . . . Дробную часть там проблематично для меня будет вывести. Благодарю за помощь
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16355 / 7671 / 1078
Регистрация: 11.11.2010
Сообщений: 13,736
17.10.2012, 03:41
kingzfate, почему? перед делением домножь результат на 100 и получишь остаток с точностью до сотой
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.10.2012, 03:41
Помогаю со студенческими работами здесь

Арифметическое выражение
Есть выражение X = A/B + C - D*E + K, где A - 4-байтовое; B,C - 2-байтовые; D,E - однобайтовые, К - константа 616h. Прошу подсказать где...

Вычислить арифметическое выражение
Уравнение: c=a*a/2+b/2 И задание 2: умножить 16 на 5, используя команду сложения

Вычислить арифметическое выражение
помогите написать программу,которая выполнят сложение,умножения,деление и вычитание, при том действия и ответ выводятся на экран

Вычислить арифметическое выражение
Добрый день Помогите,пожалуйста, нужно срочно написать программу в Ассемблере, которая находить арифметическое выражение: y=a-x*(b+c) ...

Вычислить арифметическое выражение
Функция Y= 3x3+5x2+7 Область определения функции x . ; multi-segment executable file template. include 'emu8086.inc' data...


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

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

Новые блоги и статьи
Динамические массивы в C++ - создание и использование
NullReferenced 27.04.2025
Динамические массивы представляют собой один из фундаментальных инструментов программирования на C++, позволяющий создавать структуры данных, размер которых определяется во время выполнения. . .
Асинхронный JavaScript: Промисы, Async/Await и Fetch API
Reangularity 27.04.2025
Пользователь заходит на веб-страницу, нажимает кнопку и. . . ничего не происходит. Сайт словно замер. Через несколько секунд всё внезапно оживает, но пользователь уже успел закрыть вкладку. Знакомая. . .
Management on GitLab and repository management in Visual Studio code
jigi33 27.04.2025
- repo management on GitLab - CI/ CD in GitLab - VCS repository management in Visual Studio code (see attachments)
Kanban или Scrum - что выбрать?
EggHead 27.04.2025
Kanban и Scrum — уже много лет удерживают лидирующие позиции среди гибких подходов. Руководители проектов и команды разработчиков то и дело сталкиваются с дилеммой: какой из этих двух методов выбрать. . .
Кастомные Middleware на C# в ASP.NET Core
UnmanagedCoder 27.04.2025
Разработка веб-приложений сегодня мало напоминает монолитное программирование прошлых лет. На смену громоздким блокам кода пришла модульная архитектура, где каждый компонент выполняет строго. . .
Анализ и линтинг кода JavaScript: ESLint, Prettier и JSHint
run.dev 26.04.2025
JavaScript прошёл долгий путь от простого языка для анимации веб-страниц до основы современной веб-разработки. С ростом сложности приложений, увеличением кодовых баз и масштабированием команд. . .
Паттерны в Python: Singleton, Factory и Observer
py-thonny 26.04.2025
Паттерны проектирования — это проверенные временем решения типовых проблем разработки программного обеспечения. Их история берёт начало с книги "Приёмы объектно-ориентированного проектирования. . . .
Исключения в C#: Stack Overflow, Access Violation и Out of memory
stackOverflow 26.04.2025
Исключения в C# — это не только механизм оповещения о проблемах, а целое искусство управления потоком выполнения программы в экстремальных ситуациях. Обычное исключение, например,. . .
Логирование в C# ASP.NET Core с помощью Serilog, ElasticSearch, Kibana
stackOverflow 25.04.2025
Помните те времена, когда для анализа проблемы приходилось подключаться к серверу, искать нужный лог-файл среди десятков других и вручную фильтровать тысячи строк в поисках ошибки? К счастью, эти дни. . .
Структура "железный OnKeyUp" вместо антидребезга. Полностью асинхронный счётчик.
Hrethgir 25.04.2025
Программа для симуляции схемы - Logisim Evolution В общем какое-то время отвлёкся, так было надо, теперь когда запилю это на verilog и FPGA , досоставлю заявку в ФИПС на полезную модель - не готов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru