Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите написать решение функции на ассемблере 
:(
    Опции темы
Rurir
Дата 29.11.2011, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 20.12.2008

Репутация: нет
Всего: нет



Привет всем. Есть функция

Y = (A-D*C/A+E) + (A*B+C/D-E) – (A-B/C+D*E)

Напишите пожалуйста код программы для её решения. Буду благодарен. Что-то у меня не получается, не знаю какие именно можно регистры использовать...
PM MAIL   Вверх
500mhz
Дата 29.11.2011, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



ну так исходник показывай


--------------------

PM MAIL ICQ   Вверх
Rurir
Дата 30.11.2011, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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)


Что неправильно? Как связать её с другими двумя членами функции?

PM MAIL   Вверх
500mhz
Дата 30.11.2011, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



многа букф

Код

.code

  start:
        stdcall Func1,0x25,0x34,0x56,0x90
        invoke ExitProcess,0

proc Func1 A,D,C,E ;(A-D*C/A+E)
     ;D*C
     mov eax,[D]
     mul [C]
     ;((D*C)/A)
     div [A]
     ;A-((D*C)/A)
     sub [A],eax
     mov eax,[A]
     ;A+E
     add eax,[E]
     ret
endp                      



--------------------

PM MAIL ICQ   Вверх
Rurir
Дата 30.11.2011, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 20.12.2008

Репутация: нет
Всего: нет



Ясно! А как связать эти три многочлена в один код, напишите если не трудно,а то я только учусь)
PM MAIL   Вверх
500mhz
Дата 30.11.2011, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



ну можно все в одной функции сделать а можно разбить на 3 и вызывать из 1 функ вторую из второй третью


--------------------

PM MAIL ICQ   Вверх
Rurir
Дата 30.11.2011, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 20.12.2008

Репутация: нет
Всего: нет



Понял. а какой регистр кроме eax можно использовать? ведь нужно сохранить значение первой функции для дальнейших расчётов
PM MAIL   Вверх
500mhz
Дата 30.11.2011, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



Код

.code

  start:
        stdcall MegaFunc,0x45,0x25,0x34,0x56,0x90
        invoke ExitProcess,0

proc MegaFunc A,B,D,C,E ;(A-D*C/A+E)
     ;D*C
     mov eax,[D]
     mul [C]
     ;((D*C)/A)
     div [A]
     ;A-((D*C)/A)
     mov ebx,[A]
     sub ebx,eax
     ;A+E
     add ebx,[E]
     push ebx

     ;(A*B+C/D-E)
     mov eax,[A]
     mul [B]
     push eax
     mov eax,[C]
     div [D]
     pop ebx
     add eax,ebx
     sub eax,[E]
     push eax

     ;(A-B/C+D*E)
     mov eax,[D]
     mul [E]
     push eax
     mov eax,[B]
     div [C]
     mov ebx,[A]
     sub ebx,eax
     pop eax
     add eax,ebx

     pop ebx
     pop ecx
     add ebx,ecx
     sub ecx,eax
     xchg eax,ecx  ;в еах возвращаем результат
     ret
endp

.end start
                                     


вроде правильно все )


--------------------

PM MAIL ICQ   Вверх
Rurir
Дата 30.11.2011, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 20.12.2008

Репутация: нет
Всего: нет



Спасибо огромное!!!
PM MAIL   Вверх
Rurir
Дата 2.12.2011, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
iff
Дата 3.12.2011, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



1. где метка next?
2. исходный файл должен иметь кодировку DOS.


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
Rurir
Дата 3.12.2011, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 20.12.2008

Репутация: нет
Всего: нет



1. метка NEXT идёт после JMP AGAIN. там прост опрога большая..
я вот думаю тот ли я условный переход написал?

2. и как изменить на кодировку ДОС?


PM MAIL   Вверх
iff
Дата 3.12.2011, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



1. ошибка либо в процедуре ERR, либо в том, что в этом месте нельзя использовать bx.
2. в редакторе, который поддерживает эту кодировку.


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
500mhz
Дата 3.12.2011, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: 1
Всего: 14



а может все таки
MOV BX,[DBIN]
CMP [EBIN],BX


--------------------

PM MAIL ICQ   Вверх
iff
Дата 3.12.2011, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



Цитата(Rurir @  30.11.2011,  11:18 Найти цитируемый пост)
написал код для первой функции, т.е. для (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)


Что неправильно? Как связать её с другими двумя членами функции?

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


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.1558 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.