Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 23.11.2014
Сообщений: 73
1

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

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

Author24 — интернет-сервис помощи студентам
Помогите, пожалуйста, решить задачу, во встроенном в 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.05.2015, 12:39
Ответы с готовыми решениями:

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

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

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

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

8
539 / 399 / 99
Регистрация: 18.08.2012
Сообщений: 1,024
15.05.2015, 13:09 2
Вы полагаете, что массив Massiv размещается в сегменте данных с нулевого смещения? Увы, это не так. В начало сегмента помещаются данные, создаваемые самим транслятором.
0
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
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
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
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
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
15.05.2015, 14:38 6
АндрейСелифанов
Цитата Сообщение от АндрейСелифанов Посмотреть сообщение
(если тогда начинать с регистра ds:0010h)?
Массив начинается с адреса 52Н
0
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
15.05.2015, 14:44 7
Constantin Cat, всё то, что объявлено константами, начинается с DS:0002. Паскакаль не проверяет, что делается в ассемблере, так что допустимо.
0
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
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
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,047
15.05.2015, 15:26 9
Да некорректно поставленное преподавателем условие задачи. Записать по адресу DS:10h не вопрос. Вопрос попасть при этом куда-нибудь.
0
15.05.2015, 15:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.05.2015, 15:26
Помогаю со студенческими работами здесь

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

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

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

Вычислить сумму квадратов чисел от 1 до 30 (квадраты чисел записаны в файле)
Помогите пожалуйста!!!Не знаю как сделать эту программу.


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru