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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2010, 16:46   #1
Rikki-Tikki
Пользователь
 
Аватар для Rikki-Tikki
 
Регистрация: 02.10.2009
Сообщений: 15
По умолчанию assembler вычислить формулу, содержащую 4 действия , цифры, переменные

здравствуйте!

задача: написать код ассемблера, который вычисляет значение выражения, к примеру c+((a*7)/(k-8))

вот я написала такой код:

;formula.asm
.model tiny
.data
a dw 1
c dw 3
k dw 9
y dw 0
.code
org 100h ;начало СОМ-файла
start:

;умножение
mov ax,7
imul a
push ax
mov y,ax

;вычитание
sub k,8
push k
mov dx,k
mov y,dx

;деление
pop bx
pop ax
xor dx,dx
idiv bx
push dx
mov y,dx


;сложение
pop dx
add c,dx
mov bx,c --- вот тут
mov y,bx


mov ah,4ch;
int 21h;

ret

end start




получается, что при просмотре регистров в программе td.exe я доложна видеть --- вот тут значение 10, лежащее в регистре bx.
я же вижу FFF8, что явано побольше, чем 10.

помогите, пожалуйста.
Rikki-Tikki вне форума Ответить с цитированием
Старый 28.04.2010, 17:02   #2
nuevegramodelamor
Пользователь
 
Регистрация: 13.09.2009
Сообщений: 75
По умолчанию

mov ax,6
mov bx,7
mul bx ;ax=42 a*7
mov bx,10
sub bx,8 ;bx=2 k-8
div bx ;ax=21
add ax,11 ;ax=32 c+(()/())
nuevegramodelamor вне форума Ответить с цитированием
Старый 28.04.2010, 17:04   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Rikki-Tikki
У меня твой код в результате дал трешку а не FFF8.
То ты либо не туда смотришь либо...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.04.2010, 17:10   #4
nuevegramodelamor
Пользователь
 
Регистрация: 13.09.2009
Сообщений: 75
По умолчанию

Цитата:
Rikki-Tikki
http://freespace.by/download/6cfc7a75e4 попробуй скачать эту прогу,очень удобна для новичков в плане посмотреть пошагово состояние регистров,флагов
nuevegramodelamor вне форума Ответить с цитированием
Старый 29.04.2010, 17:38   #5
Rikki-Tikki
Пользователь
 
Аватар для Rikki-Tikki
 
Регистрация: 02.10.2009
Сообщений: 15
По умолчанию

Цитата:
Сообщение от nuevegramodelamor Посмотреть сообщение
mov ax,6
mov bx,7
mul bx ;ax=42 a*7
mov bx,10
sub bx,8 ;bx=2 k-8
div bx ;ax=21
add ax,11 ;ax=32 c+(()/())

спасибо большое, но мне нужно использовать переменные. по заданию.
и цифры, и буквы.

http://freespace.by/download/6cfc7a75e4 : не скачивается, т.к. я в России, а этот ресурс, как написано, только для Белоруссии.

у меня при компиляции tasm никаких трешек нет.
Rikki-Tikki вне форума Ответить с цитированием
Старый 04.05.2010, 17:28   #6
Rikki-Tikki
Пользователь
 
Аватар для Rikki-Tikki
 
Регистрация: 02.10.2009
Сообщений: 15
По умолчанию

Пожалуйста, помогите...
Rikki-Tikki вне форума Ответить с цитированием
Старый 04.05.2010, 18:18   #7
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Код:
;деление
pop bx
pop ax
xor dx,dx
idiv bx ; !
push dx ;!
mov y,dx ;!
поменяйте тут dx на ax
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 04.05.2010 в 18:31.
Goodwin98 вне форума Ответить с цитированием
Старый 05.05.2010, 18:20   #8
Rikki-Tikki
Пользователь
 
Аватар для Rikki-Tikki
 
Регистрация: 02.10.2009
Сообщений: 15
По умолчанию

я поменяла в делении регистр делимого на ах.
удалила все действия, содержащие у, т.к. он мне не нужен просто.

код выглядит так:

;c+((a*7)/(k-8))
.model tiny
.data
a dw 1
c dw 3
k dw 9
y dw 0
.code
org 100h ;начало СОМ-файла
start:

;умножение
mov ax,7
imul a
push ax


;вычитание
sub k,8
push k
mov dx,k

;деление
pop bx
pop ax
xor dx,dx
idiv ax
push ax


;сложение
pop dx
add c,dx
mov bx,c



mov ah,4ch;
int 21h;

ret

end start

При открытии моей программы в td.exe выдается сообщение: "program has no symbol table". что бы это могло значить?

затем я иду по коду. после операций
;умножение
mov ax,7
imul a
значение регистра ах не изменяется, хотя в учебнике написано, что именно в этом регистре хранится результат умножения.
(IMUL источник: источник (регистр или переменная) умножается на AL, АХ или ЕАХ (в зависимости от размера операнда), и результат располагается в АХ, DX:AX или EDX:EAX соответственно.
)
- или я не правильно поняла?

после прохождения строки
idiv ax
мне выдается сообщение: "terminated. exit code 256"

помогите, помогите...пожалуйста!!!
Rikki-Tikki вне форума Ответить с цитированием
Старый 05.05.2010, 20:18   #9
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Цитата:
При открытии моей программы в td.exe выдается сообщение: "program has no symbol table". что бы это могло значить?
Не обращайте внимания. Просто отсутствует отладочная информация для этого файла.
Цитата:
затем я иду по коду. после операций
;умножение
mov ax,7
imul a
значение регистра ах не изменяется, хотя в учебнике написано, что именно в этом регистре хранится результат умножения.
a=1
ax=7

a*ax == 1*7 = 7

Цитата:
idiv bx ; !
Вот тут у меня, видимо рука дрогнула... Вобщем тут и должен быть bx.
Цитата:
после прохождения строки
idiv ax
мне выдается сообщение: "terminated. exit code 256"
Вот этого не знаю, у меня нормально работает.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 05.05.2010, 23:11   #10
Rikki-Tikki
Пользователь
 
Аватар для Rikki-Tikki
 
Регистрация: 02.10.2009
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Goodwin98 Посмотреть сообщение

Код:
;умножение
mov ax,7
imul a
push ax
a=1
ax=7
a*ax == 1*7 = 7


это понятно, вот только при пошаговом проходе этот результат - 7 - должен отражаться в регистре ах. у меня же этот результат умножения 7 ни в каком из регистров не отобразился.

идем дальше.
после выполнения действий
Код:
;вычитание
sub k,8
push k
mov dx,k
я вижу в dx FFF8

может, мои числа, записанные в десятичной форме, воспринимаются не как десятичные? откуда может взяться dx FFF8 в результате вычитания из к=9 восьмерки?
Rikki-Tikki вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дано n. Вычислить формулу ArcaN0id Помощь студентам 2 02.12.2009 13:43
Не могу вычислить формулу для расчёта координат камеры anyx Gamedev - cоздание игр: Unity, OpenGL, DirectX 6 16.09.2009 16:44
Вычислить х в системе (assembler) JaZZ_XVIII Помощь студентам 1 10.06.2009 08:08
как вычислить формулу? Sergeus Microsoft Office Excel 2 26.02.2008 23:56