Консультация № 165255
18.04.2009, 03:32
0.00 руб.
0 3 0
Здравствуйте, уважаемые эксперты! Не могли бы подсказать, где у меня ошибка в программе, фрагмент которой взят из одной книги по ассемблеру. В книге дан только фрагмент программы и массив переменной x dw 100 dup(?) ;X[0...99]. В приведённой ниже моей программе я только прибавил к фрагменту переменную. По условиям требуется записать в регистр AX сумму элементов массива. Но у меня ничего не заносится в АХ, и это понятно: в памяти сто слов нулей из-за операнда (?). Не думаю, что нужно вместо (?) вручную прописывать все числа, должен же быть какой-то другой способ. Заранее спасибо.

Приложение:
CSEG segment
org 100h
Start:
mov ax,0 ;начальное значение суммы
mov cx,100 ;счётчик цикла
mov si,0 ;начальное значение (удвоенного) индекса
L:
add ax,x[si]
add si,2
loop L
x dw 100 dup(?) ;X[0...99] ;Поставил в конец программы, но, наверное, можно и в начало

CSEG ends
end Start

Обсуждение

Неизвестный
18.04.2009, 22:54
общий
программа не рабочая нет кода завершения, будут выполнятся данные
в начало COM программы это не получится, если только после команды jmp
1. воспользоваться макро определением
2. воспользоваться MS Excel для формирования строк с данными
(например первый столбец число, а второй формула ="dw " & A1 , скопировать столбец 2 в программу или
прямо в одном столбце формулу =" dw "& СЛУЧМЕЖДУ(0;100))
Неизвестный
19.04.2009, 05:00
общий
MS Excel не нужен, сумма элементов только в регистре должно быть. А при чём код завершения, в памяти же сто слов нулей, как их ни складывай, больше нуля ничего не будет. Как мне быстро занести туда числа от 0 до 99, каким приёмом? Не буду же я все сто чисел прописывать вручную, а если их 10 000, это несколько дней нужно для ручной работы.
Неизвестный
19.04.2009, 21:51
общий
Если их заполнять автоматически, например из счетчика времени, или любым похожим способом, то массив вообще не нужен.
На примере MS Excel показано как получить инициализированый массив из любого (разумного) кол-во элементом.
Форма ответа