Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
АндрейСелифанов
0 / 0 / 0
Регистрация: 23.11.2014
Сообщений: 73
1

Вычислить сумму квадратов чисел и записать результат по адресу DS:0010h

15.05.2015, 12:39. Просмотров 1207. Ответов 8
Метки нет (Все метки)

Помогите, пожалуйста, решить задачу, во встроенном в TURBO PASCAL ассемблере, чтобы она работала правильно:Дана последовательность из 5 чисел (байтов), размещённых в сегменте данных, начиная с адреса DS:0000h. Вычислить сумму квадратов этих чисел и записать результат по адресу DS:0010h.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
label aga;
Var Massiv : Array [0..$F] Of Byte;
Summa : Integer ;
begin
Massiv[0]:=1;
Massiv[1]:=2;
Massiv[2]:=3;
Massiv[3]:=4;
Massiv[4]:=5;
asm
xor si, si ;
xor bx, bx ;
mov cx, 5
cld
aga:
lodsb
mul al
add bx,ax
loop aga
mov ds:10h, bx
mov summa, bx
end;
writeln(summa);
readln
end.
Вроде массив инициализирован, помещается в регистр, но считает не правильно. Помогите, кто разбирается в ассемблере, пожалуйста
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2015, 12:39
Ответы с готовыми решениями:

Вычислить сумму с третьего по девятое число и записать результат по адресу
Добрый день, помогите пожалуйста решить задачу! Дана последовательность из 10 чисел (байтов),...

Вычислить сумму квадратов чисел от 1 до N. N≤100
Помогите немного, вроде все правильно сделал, но чего-то не хватает... %nolist include mac.lib...

Вычислить сумму квадратов чисел от 1 до 30. Квадраты чисел предварительно записать в файл
не умею с файлами работать, помогите пожалуйста

Для каждой строки файла вычислить сумму этих чисел и результат записать этой же строке
Файл состоит из строк, содержащих несколько целых чисел, записанных через запятую. Для каждой...

Сформировать в программе массив из целых чисел от 2 до N. Подсчитать сумму квадратов четных и сумму квадратов нечетных чисел
Сформировать в программе массив из целых чисел от 2 до N. Подсчитать сумму квадратов четных и сумму...

8
Dmitrinik
537 / 397 / 99
Регистрация: 18.08.2012
Сообщений: 1,024
15.05.2015, 13:09 2
Вы полагаете, что массив Massiv размещается в сегменте данных с нулевого смещения? Увы, это не так. В начало сегмента помещаются данные, создаваемые самим транслятором.
0
Charles Kludge
Клюг
7654 / 3169 / 383
Регистрация: 03.05.2011
Сообщений: 8,381
15.05.2015, 13:21 3
Лучший ответ Сообщение было отмечено АндрейСелифанов как решение

Решение

Цитата Сообщение от АндрейСелифанов Посмотреть сообщение
размещённых в сегменте данных, начиная с адреса DS:0000h.
Это невозможно в принципе. В DS:0 трупопасквиль хранит нечто внутреннее.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const
  Massiv: array [1..5]  of byte = (1,2,3,4,5);
var
  Summa: integer;
begin
asm
    mov cx, 5 {sizeof(Massiv)}
    lea si, Massiv
    xor bx, bx
@l: lodsb
    cbw
    imul    ax
    add bx, ax
    loop    @l
    mov Summa, bx
    end;
writeln('Sum of array squares=',Summa);
readln;
end.
1
АндрейСелифанов
0 / 0 / 0
Регистрация: 23.11.2014
Сообщений: 73
15.05.2015, 14:03  [ТС] 4
Charles Kludge, спасибо, про DS:0 спрошу, возможно опечатка, а за размещение насколько я понимаю отвечает 8 строчка, с какого адреса получается тут идет начало? не надо ли перед 9 строчкой вставить команду типа
Pascal
1
mov ds:10h,si
(если тогда начинать с регистра ds:0010h)?
0
15.05.2015, 14:03
Charles Kludge
Клюг
7654 / 3169 / 383
Регистрация: 03.05.2011
Сообщений: 8,381
15.05.2015, 14:17 5
Pascal
1
2
3
4
5
const
  Massiv: array [1..5]  of byte = (1,2,3,4,5);
dummy: array [1..4]  of word = (0,0,0,0);
  Summa: integer = 0;
begin
Если запустить паскакаль с ключиком -GD и посмотреть в .MAP-файл, то можно увидеть:
Код
 0099:0002       Massiv
 0099:0008       dummy
 0099:0010       Summa
и всё это в сегменте данных:
Код
 Start  Stop   Length Name               Class
 00990H 00C3DH 002AEH DATA               DATA
1
Constantin Cat
10547 / 1465 / 418
Регистрация: 28.02.2015
Сообщений: 2,975
Завершенные тесты: 1
15.05.2015, 14:38 6
АндрейСелифанов
Цитата Сообщение от АндрейСелифанов Посмотреть сообщение
(если тогда начинать с регистра ds:0010h)?
Массив начинается с адреса 52Н
0
Charles Kludge
Клюг
7654 / 3169 / 383
Регистрация: 03.05.2011
Сообщений: 8,381
15.05.2015, 14:44 7
Constantin Cat, всё то, что объявлено константами, начинается с DS:0002. Паскакаль не проверяет, что делается в ассемблере, так что допустимо.
0
Constantin Cat
10547 / 1465 / 418
Регистрация: 28.02.2015
Сообщений: 2,975
Завершенные тесты: 1
15.05.2015, 14:57 8
Charles Kludge
Я это знаю. Вполне возможно адресовать ВХ на массив, а SI использовать как индекс массива.
Assembler
1
2
3
4
lea bx,massiv
. . .
mov al,[bx+si]
. . .
но тогда прийдется отказатся от lodsb

Добавлено через 2 минуты
или персчитать DS, чтобы указывал на массив
0
Ethereal
8380 / 2347 / 317
Регистрация: 17.02.2013
Сообщений: 3,391
15.05.2015, 15:26 9
Да некорректно поставленное преподавателем условие задачи. Записать по адресу DS:10h не вопрос. Вопрос попасть при этом куда-нибудь.
0
15.05.2015, 15:26
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2015, 15:26

Вычислить сумму ряда и записать результат в файл
Вычислить сумму ряда результат должен выводиться в txt. Количество элементов N=5. задание выполнить...

Вычислить сумму ряда и записать результат в файл
1. Прежде чем писать файл сценария, составить для данного ряда рекуррентное соотношение,...

В ListBox вводится последовательность чисел. Вычислить сумму квадратов данных чисел.
В ListBox вводится последовательность чисел. Вычислить сумму квадратов данных чисел.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.