Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 22.02.2012, 19:13   #1
viktor92
Новичок
Джуниор
 
Регистрация: 22.02.2012
Сообщений: 3
По умолчанию Решение задач на ассемблере

Доброго времени суток всем, нужна очень ваша помощь в решении для вас (я думаю ) простых задач, вызубрил всю теорию, но ассемблер мне ни как не поддается...((( уже знаю паскаль и delphi)
Прошу вас помочь решить задачки..)

Задание 1. Вычислить выражение Z^3-T^3. В выражении используются однобайтовые величины. Если результат вычитания получится отрицательный, то выдать на экран кроме полученного результата сообщение: «Результат отрицательный».

для 1 задания я набросал вот так:
Код:


Код:
format	PE GUI 4.0
include 'include\WIN32AX.INC'
 
.data	    ; сегмент данных
formatd db "%d",0   ; Задание формата вывода в 10-ой форме
formath db "%lx",0   ; Задание формата вывода в 16-ой форме

result db 256 dup(?) ;В этой строке сохраняется результат                                                ;после его преобразования  


T   db 7
Z   db 8

.code	    ; сегмент кода


start:
mov eax,7
 Xor EAX,7

      Mov AL,[T]
      Mul [T]
      Mul [T]

 Xor EDX,8
      Mov AL,[Z]
      Mul [Z]
      Mul [Z]

sub eax,edx
cinvoke wsprintf, result, '8^3-7^3=%d', eax
invoke MessageBox,0,result,' Вычитание ',MB_OK

invoke ExitProcess,0	      ;Выход из программы
.end start
он только вычитает, но без степеней.

Задание 2. Даны 3 не равные между собой величины: X, Y, Z. Найти среди них максимум и минимум.

Задание 3
Пусть X, Y и Z – переменные размером в слово. Записать в переменную Q максимальное из чисел, в переменную R минимальное из чисел . Использовать разные команды перехода для чисел со знаком и без знака Результаты выдать на экран.

Задание 4
Вычислить выражение при разных значениях x, y, z:
F=-18*z*x*y+15*x*y*z-21+6*(x+y)
Если результат получится отрицательный, то получить его абсолютное значение. Результаты выдать в окно сообщений на экран.
на это у меня есть подобное;
Код:


Код:
format	PE GUI 4.0
 include 'include\WIN32AX.INC'
 
.data
formath db "%0lx",0   ; Задание формата вывода 16
formatd  db "%0d",0  ; Задание формата вывода 10
result db 256 dup(?) ;В этой строке сохраняется результат
;после его преобразования
x	 db  2	 ; 20h
y	 db  2	 ; 40h
z	 db  2	 ; 50h    ; 18*z*x*y-15*x*y*z+30+19*(x-y)=33 , если ;x=y=z=1
c	 db  7		      
.code
start:
xor	AX,AX
xor	dX,dX
MOV	AL,18
MUL	[x]
MUL	[y]
MUL	[z]
mov	bx,ax
MOV	AL,15
MUL	[x]
MUL	[y]
MUL	[z]
sub	bx,ax
add	bx,30
MOV	CL,19
MOV	al,[x]
sub	al,[y]
MUL	cl
add	ax,bx
invoke wsprintf,result,formatd,ax,dx		;Преобразуем число в строку
invoke MessageBox,0,result,"перемнож,слож и вычит байт",MB_OK  ;Вывод

invoke ExitProcess,0	      ;Выход из программы
.end start
Задание 5. Вычислить выражение W=a/b*(c+d)-(a-b)/b/c+1E-8.
В выражении используются однобайтовые величины. Если результат вычитания получится отрицательный, то выдать на экран кроме полученного результата сообщение: «Результат отрицательный».

Задание 6
Пусть X, Y и Z – переменные размером в слово. Записать в Z максимальное из чисел. Использовать разные команды перехода для чисел со знаком и без знака Результаты выдать на экран.

Задание 7
Выполнить умножение для байтов, слов, двойных слов. Если результат умножения не умещается в формат сомножителей, то анализируя флаги переноса и переполнения, выдать сообщение на экран.

Задание 8
Выполнить умножение для байтов, слов, двойных слов. Если результат умножения не умещается в формат сомножителей, то анализируя флаги переноса и переполнения, выдать сообщение на экран.
Вычислить
R=-18*z*x*y+15*x*y*z-21+6*(x+y), если x>y>z,
иначе
R=14x4 - 5x3 + 11x – 17z

Задание 9
Вычислить выражения:
1.Q=100+ z*x*y+x/y+45
2.T=(p+q)/(k+s)-p*q/(r*s);
3. K=1E3+beta/(x-gamma*delta);
4. y = x2 + 3x – 7
5. a = x3 + |x2 - 13x + 5| - 11
6. s =|3x4 + 12x3 - 4x + 7| - 13x
видимо у меня совсем логика отсутствует, для понимания этого языка, если у кого есть время, то помогите пожалуйста)
viktor92 вне форума
Старый 23.02.2012, 01:35   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
mov eax,7
Xor EAX,7

Mov AL,[T]
Mul [T]
Mul [T]

Xor EDX,8
Mov AL,[Z]
Mul [Z]
Mul [Z]
правильнее было сделать так:
Код:
xor eax,eax; чистим регистр
mov al,[T]; заносим значение в
mul [T] ; умножаем al на ячейку памяти [T] и результат умножения остаётся в ax
xor bx,bx; чистим регистр
mov bl,[T] ; заносим [T] в bl и в bx у нас хранится байт, расширенный до слова
mul bx; умножаем ax на bx и в eax у нас получается результат возведения в куб
mov edx, eax; сохраняем результат возведения в степень
... ;аналогично делаем вычисления для [Z], но в последней строчке:
sub eax, edx; получаем нашу разность
а вообще - изучайте команды: что делает, откуда берёт и куда сохраняет. вы явно не понимаете логику работы некоторых команд.
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 23.02.2012 в 01:39.
DiemonStar вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение задач imhotep Помощь студентам 18 20.02.2012 17:03
Решение задач на ассемблере Mihailo94 Помощь студентам 0 10.01.2012 18:25
Решение задач Patr1ck Паскаль, Turbo Pascal, PascalABC.NET 5 08.01.2012 10:51
Решение задачи на ассемблере netdel Помощь студентам 0 29.05.2011 22:04