Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
| 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 А теперь надо переделать программу. Надо сделать вывод на экран результатов вычисления массива. Кто разбирается в ассемблере-помогите, пожайлуста! |
![]() ![]() |
|
Текстовая версия | Сейчас: 20.5.2012, 23:11 |