IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Нужно переделать программу, Ассемблер
Nastua
сообщение 28.12.2009, 12:53
Сообщение #1


Пользователь


Группа: Пользователи
Сообщений: 2
Регистрация: 22.12.2009
Пользователь №: 22 522



Очень нужна помощь! Надо было сформировать одномерный массив A = {ai} (i = 1..30), где ai вычисляется по формулам: ai = (i + i/3)*i; 0< i < 31

Вот что у меня получилось

.model small ; выбираем модель памяти
.stack 100h ; настраиваем положение стека в памяти

; сегмент данных
.data
A db 30 dup(0) ; выделяем память под хранение значения вычисленной функции A (на каждое значение 1 байт)

; сегмент кода
.code
start:
mov ax, @data ; получаем адреc сегмента данных
mov ds, ax ; заносим этот адрес в регистор ds (выставляем сегмент данных вручную)

lea bx, A ; заносим в регистр bx адрес первой ячейки памяти данных
mov dl, 3 ; заносим в регистр dl делитель
xor ax, ax ; обнуляем ax
xor cx, cx ; инициализируем счётчик (обнуляем)

; организация цикла от 1 до 30
calc:
inc cl; ; инкрементируем счётчик
mov al, cl ; помещаем в регистр ax текущее значение счётчика
div dl ; делим ax на dl так как нельзя делить на константу (i/3)
xor ah, ah ; обнуляем остаток от деления, потому что работаем с целыми числами
add al, cl ; складываем al с текущем значением счетчика (i+i/3)
mul cl ; умножаем al на cl (i+i/3)*i

mov [bx], al ; заносим в текущую ячейку памяти вычисленное значение функции для текущего i
inc bx ; инкрементируем bx, чтобы в следующий раз записать значение в следующую ячейку памяти

cmp cl, 30 ; сравниваем содержимое регистра cl c 30
jz continue ; если равно 30 то выходим из цикла
jmp calc ; если не равно 30 то продолжаем цикл и вычисления

continue:
mov ax, 4C00h ; функция выхода, в ax передаётся код возврата [4C+no error (00)]
int 21h ; выходим из программы через прерывание DOS

end start

А теперь надо переделать программу. Надо сделать вывод на экран результатов вычисления массива.
Кто разбирается в ассемблере-помогите, пожайлуста!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 20.5.2012, 23:11