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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2009, 13:20   #1
Morgusha
Форумчанин
 
Регистрация: 30.09.2009
Сообщений: 166
Печаль Assembler

Есть такое вот условие! (a^2-b)/3c нужно реализовать на ассемблере!
вот что у меня получилось:
Код:
.model small
.stack 100h
.386
.data
a db ?
b db ?
с db ?
cc dw 3
.code
        mov     ax,@DATA   
        mov     ds,ax  
mov al,a
imul a
mov a,ax

mov bl,b
cbw 
sub ax,bx
а дальше я что то не могу сообразить как делать то? ((( подскажите плиииз!

Последний раз редактировалось Stilet; 02.10.2009 в 09:59.
Morgusha вне форума Ответить с цитированием
Старый 30.09.2009, 13:31   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не проверял, но с потолка:
Код:
.data
;_______________
 a dw 10
 b dw 2
 ccww dw 4
;_______________
.code
start:
 xor eax,eax
 mov ax,word ptr [a]
  mov bx,ax
 mul bx
  mov bx, word ptr [b]
 sub ax,bx

 push eax
 mov ebx,3
 mov ax, word ptr [ccww]
 mul bx
 pop ebx
 div bx
ret
end start
В регистре eax будет результат
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.09.2009, 13:45   #3
Morgusha
Форумчанин
 
Регистрация: 30.09.2009
Сообщений: 166
По умолчанию

неее,а можно это сделать примитивным методом без push и всё такое ! это только ведь первая лабораторная.....и я ещё не выучил ничего кроме регистров общего назначения и команд сложения,деления,умножения,вычитани я)

а зачем задействовать eax если там всё и в Ax поместится???

мой код верен??? там не до конца ну хоть идея и часть его?

Скажите в чём разница:
Код:
mov al,a
imul a
mov a,ax
это я возвёл в квадрат a и сохранил её в регистре ax ! ИЛИ:
mov al,a
imul a
mov ax,a
так что значит и как правильно ? и когда нужно делать cwb ?
изначально я "a" объявил как:
a db ?

Последний раз редактировалось Stilet; 30.09.2009 в 17:12.
Morgusha вне форума Ответить с цитированием
Старый 30.09.2009, 17:14   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Скажите в чём разница:
Если не ошибаюсь (и кстати говорю только за MASM)
mov al,a поместит в al адрес переменной
А помещать значение:
Код:
 mov al,byte ptr [a]
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.09.2009, 18:01   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Если не ошибаюсь (и кстати говорю только за MASM)
mov al,a поместит в al адрес переменной
А помещать значение:
Код:
 mov al,byte ptr [a]
Как раз в MASM он попытается поместить значение) но так как al один байт, а переменная a,исходя из Вашего кода - два, то в этом случае и нужно
Код:
 mov al,byte ptr [a]
2Morgusha
Код:
mov al, a
imul a
mov bh, 0
mov bl, b
sub ax, bx
div c
mov bl, 3
div bl
Вроде так, хотя может ошибся где - не проверял
netrino вне форума Ответить с цитированием
Старый 30.09.2009, 21:23   #6
Morgusha
Форумчанин
 
Регистрация: 30.09.2009
Сообщений: 166
По умолчанию

А что такое:
mov bh, 0 ?????????
Morgusha вне форума Ответить с цитированием
Старый 30.09.2009, 21:28   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

таким образом я очищаю верхний байт регистра bx... ведь если в нём будет что-то отличное от нуля, то потом, если я положу b в bl, в bx будет не b, а другое число ) словом, почитайте об этом, можно Питера Абеля или ещё кого-нибудь )
netrino вне форума Ответить с цитированием
Старый 30.09.2009, 21:42   #8
Morgusha
Форумчанин
 
Регистрация: 30.09.2009
Сообщений: 166
По умолчанию

тоесть получается тогда что перед тем как занести значение в регист нужно этот регист очистить перед этим ???
И ещё ....если я заношу в регистр например Al значение 3 и потом делаю расширение регистра до слова тоесть пишу:
a db 3
mov al,a
cbw - это ведь делает из al Ax и все не занятые байты заполняет нулями !!!

тоесть будет чистая тройка записана в Ax

Последний раз редактировалось Stilet; 02.10.2009 в 10:00.
Morgusha вне форума Ответить с цитированием
Старый 30.09.2009, 21:53   #9
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Не обязательно его очищать, то есть, если бы было:
Код:
mov ax, 3
то всё нормально, но если
Код:
mov al, 3
, то мы не можем утверждать, что в и ax будет 3, ведь в ah тоже что-то может быть.
Про cbw это так, более того, если Вы запишите -3, то и это он нормально расширит до ax(в ah будут единицы). но cbw только с ax работает
netrino вне форума Ответить с цитированием
Старый 02.10.2009, 10:02   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
то в этом случае и нужно
Ну я про код Моргуши говорил, а не про свой )
Цитата:
Как раз в MASM он попытается поместить значение)
Ну а я как написал?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Assembler Almost_Famous Помощь студентам 4 29.02.2008 21:54