![]() |
|
|
![]()
|
|
| Rurir |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 20.12.2008 Репутация: нет Всего: нет |
Привет всем. Есть функция
Y = (A-D*C/A+E) + (A*B+C/D-E) – (A-B/C+D*E) Напишите пожалуйста код программы для её решения. Буду благодарен. Что-то у меня не получается, не знаю какие именно можно регистры использовать... |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
ну так исходник показывай
-------------------- |
|||
|
||||
| Rurir |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 20.12.2008 Репутация: нет Всего: нет |
написал код для первой функции, т.е. для (A-D*C/A+E)
переменная а тут изменяется с шагом h, поэтому и вводится An SUB BX,BX ; обнуление (BX) SUB DX,DX ; обнуление (DX) SUB DI,DI ; обнуление (DI) MOV BX,ABIN ; A->(BX) MOV DI,DBIN ; D->(DI) MOV CL,ANBIN ; An->(CL) M1: XOR AX,AX MOV AX,СBIN ; C->(AX) MUL DI ; (D*C) -> (AX) SUB AX,DX ;A-(D*C) PUSH BX MOV BX,ABIN SUB AX,AX MOV AX,EBIN ADD AX,BX ; (A+E) POP BX DIV AX ; (A-D*C/A+E) MOV DX,AX ; результат в (DX) Что неправильно? Как связать её с другими двумя членами функции? |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
многа букф
-------------------- |
|||
|
||||
| Rurir |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 20.12.2008 Репутация: нет Всего: нет |
Ясно! А как связать эти три многочлена в один код, напишите если не трудно,а то я только учусь)
|
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
ну можно все в одной функции сделать а можно разбить на 3 и вызывать из 1 функ вторую из второй третью
-------------------- |
|||
|
||||
| Rurir |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 20.12.2008 Репутация: нет Всего: нет |
Понял. а какой регистр кроме eax можно использовать? ведь нужно сохранить значение первой функции для дальнейших расчётов
|
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
вроде правильно все ) -------------------- |
|||
|
||||
| Rurir |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 20.12.2008 Репутация: нет Всего: нет |
Спасибо огромное!!!
|
|||
|
||||
| Rurir |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 20.12.2008 Репутация: нет Всего: нет |
У меня ещё пара вопросов.
1. Как сделать, чтобы процедура сравнивала два числа(D и E) и если они равны то вызывалась процедура ошибки,а если не равны то ничего бы не происходило? Я сделал так,но не получается, всегда выводится ошибка: ----------- Проверка на допустимые значения D=E -------------- MOV BX,DBIN CMP EBIN,BX ; сравнение D с E JNE NEXT ; переход к вычислению функции CALL ERR ; вызов процедуры выдачи сообщения об ошибке JMP AGAIN ; возврат к вводу данных 2. После того как я сделал из файла *.asm файлы *.obj и *.exe и после запуска экзешника русский язык не распознаётся: прога TASM http://s1.ipicture.ru/uploads/20111202/yMw96f3F.png |
|||
|
||||
| iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 4 Всего: 16 |
1. где метка next?
2. исходный файл должен иметь кодировку DOS. -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
| Rurir |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 20.12.2008 Репутация: нет Всего: нет |
1. метка NEXT идёт после JMP AGAIN. там прост опрога большая..
я вот думаю тот ли я условный переход написал? 2. и как изменить на кодировку ДОС? |
|||
|
||||
| iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 4 Всего: 16 |
1. ошибка либо в процедуре ERR, либо в том, что в этом месте нельзя использовать bx.
2. в редакторе, который поддерживает эту кодировку. -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
а может все таки
MOV BX,[DBIN] CMP [EBIN],BX -------------------- |
|||
|
||||
| iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 4 Всего: 16 |
Поскольку здесь автор ко всем переменным обращается без квадратных скобок, подумал, что компилятор поддерживает именно такой синтаксис. -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
| Rurir |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 20.12.2008 Репутация: нет Всего: нет |
В общем с кодировкой и со сравниванием чисел я разобрался. Всё работает.
Но теперь функция неправильно считает. Пробовал вставлять код который писал 500mhz, но пишет что эти регистры "undefined symbol". Не знаю что делать. Помогите кто сможет, пожалуйста! Выкладываю свой полный код для решения функции Y = (A-D*C/A+E) + (A*B+C/D-E) – (A-B/C+D*E). Надо чтобы на экране я ммог вводить перменные, но и текст должен выводиться. Также тут есть An-это верхний предел А, h-шаг изменения перменной А.
После вполнения вычислений происходит вот что: http://s2.ipicture.ru/uploads/20111203/CDUw8bnk.png и так бесконечно... Добавлено через 7 минут и 8 секунд Ну да, поддерживает. Я делаю эту работу с похожей работы, там всё работает, только функция другая... И в чём отличие стоят квадратные скобки или нет? |
|||
|
||||
| iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 4 Всего: 16 |
в одной из недавних тем был такой вопрос. в intel-синтаксисе это означает адрес элемента данных или его значение (если скобки есть). Добавлено через 5 минут и 1 секунду И ещё, вы правильно написали выражение? У вас написано: A*B+C/D-E А вы говорите, что значение D и E не должны быть равны, да и у вас в коде вычисляется A*B+C/(D-E) (по-моему, тщательно не разбирался) Так A*B+C/D-E или A*B+C/(D-E)? -------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
| Rurir |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 20.12.2008 Репутация: нет Всего: нет |
Да,извиняюсь что запутал вас. Да и себя) Тут второй вариант,т.е. (A*B+C)/(D-E)
Поэтому D и E не должны быть равны..На ноль делить нельзя. Но дело то не в цикле определения значений функции... Это сообщение отредактировал(а) Rurir - 3.12.2011, 21:54 |
|||
|
||||
| Rurir |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 20.12.2008 Репутация: нет Всего: нет |
Ребят,ну что, кто-нибудь поможет разобраться?
|
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
какие регистры? измени еах на ах -------------------- |
|||
|
||||
| Rurir |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 20.12.2008 Репутация: нет Всего: нет |
Попробовал и с вашим кодом,в котором поменял регистры...Всё равно также: http://s2.ipicture.ru/uploads/20111203/CDUw8bnk.png Думаю тут проблема в определении цикла перменной А, программа считает бесконечно, а нужно до An с шагом h изменения переменной A. То есть если А=1, Аn=7, а шаг h=1, то должно быть только 7 результатов. Да и при выводе результатов А совсем другая,чем вводишь... |
||||
|
|||||
| iff |
|
|||
![]() Администратор ![]() ![]() Профиль Группа: Участник Сообщений: 949 Регистрация: 23.3.2007 Репутация: 4 Всего: 16 |
Попробуйте использовать отладчик, что-бы выяснить на каком шаге программа ведёт себя неправильно.
-------------------- DOS... Синей пеленой экран заполнил чистый DOS Мышь... Стала вдруг квадратной, потеряла форму мышь... Я разбил окно, девяностопятое мастдайное окно, И поставил DOS, и тогда увидел: Это счастье, — вот оно. |
|||
|
||||
| Rurir |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 20.12.2008 Репутация: нет Всего: нет |
Вот в чём ошибка:
http://s1.ipicture.ru/uploads/20111207/mlA1e7ql.png Кто знает как от такого избавиться? |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
ну так ты вылитаеш куда то вообще, где то call или jmp не пральный
-------------------- |
|||
|
||||
| Rurir |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 20.12.2008 Репутация: нет Всего: нет |
В оющем,я избавился от вылетания, теперь другая проблема-после ввода всех переменных выодится "Переполнение деления". Что может быть неправильно? И вообще посмотрите пожалуйста на код,может где есть ошибки?
Заранее спасибо!
|
|||
|
||||
| Rurir |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 20.12.2008 Репутация: нет Всего: нет |
С переполнением деления тоже разобрался!
Теперь новая проблема: после ввода всех данных результат выводится не цифрами а символами..Как решить проблему? ![]()
Это сообщение отредактировал(а) Rurir - 18.1.2012, 22:31 |
|||
|
||||
![]()
|
| Правила форума "Asm для начинающих" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm для начинающих | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |