IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

 
 Ответить  Открыть новую тему 
> вывод массива на встроенном ассемблере в паскале
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Женский
Реальное имя: Tanya

Репутация: -  0  +


Как написать вывод одномерного массива на встроенном ассемблере в Паскале
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






1) массив чего (Целых? Вещественных? Строк?) ?
2) тебе надо процедуру, которая напечатает глобальный массив, или переданный как параметр? Или это вообще должно быть без процедур?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Женский
Реальное имя: Tanya

Репутация: -  0  +


Цитата(volvo @ 14.01.2009 20:28) *

1) массив чего (Целых? Вещественных? Строк?) ?
2) тебе надо процедуру, которая напечатает глобальный массив, или переданный как параметр? Или это вообще должно быть без процедур?

массив целых чисел формируется в ассемблере, мне надо вывести этот массив на экран но не при помощи паскаля а циклов с метками на встроенном ассемблере через asm/ Массив чисел у меня формируется проблема с выводом
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
Массив чисел у меня формируется
Код - в студию
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Женский
Реальное имя: Tanya

Репутация: -  0  +


Цитата(volvo @ 14.01.2009 21:09) *

Код - в студию

короче касяк вот в чем
@M:
mov ah,[si]
mov t,ah
push si
end;
write(t);
asm
pop si
loop @M
end;
паскаль ругается на строчку loop
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Она немножко из другого блока. То есть метка @M не видима из точки, где ты вызываешь loop. Вот и ругается.


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Женский
Реальное имя: Tanya

Репутация: -  0  +


А как это исправить? чтоб метку он видел?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата
А как это исправить?
Или описывать глобальную метку:
label M;
begin
...
asm
M:
mov ah,[si]
mov t,ah
push si
end;
write(t);
asm
pop si
loop M
end;
...

или выводить элемент T на экран средствами ассемблера, а не Паскаля, тогда и метка и переход на нее будут в одном и том же блоке asm ... end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Женский
Реальное имя: Tanya

Репутация: -  0  +


Спасибо огромное за помощь!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Женский
Реальное имя: Tanya

Репутация: -  0  +


теперь другой прикол он выводит цифры както странно mad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






А я тебе давно говорил:
Цитата
Код - в студию
Понимаешь, КОД, а не ОБРЫВКИ. Ты выбрала для себя дать обрывки, получила - то, что получила... Я ж не знаю НИ описания твоих массивов, НИ того, заполняется ли массив действительно правильно, или это только ДОЛЖНО происходить, а ты выдаешь желаемое за действительное... Я не телепат...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Вот тебе пример вывода массива байт. Все прокомментировано, читай, разбирайся, ищи ошибки в своей реализации. Что непонятно - спрашивай.

const size = 10;
var
a: array[1 .. size] of byte;
i: integer;

begin
{ заполняем массив значениями 101, 102, 103, ..., 110 }
for i := 1 to size do a[i] := 100 + i;

asm
mov cx, size { размер массива }
lea si, a { начало массива }

{ основной цикл, перебор всех элементов массива }
@@m:
xor ax, ax { обнуляем AX }
mov al, [si] { берем байт, чье содержимое будем печатать }
push cx { сохраняем кол-во элементов, которые осталось напечатать }

{ это - дополнительные движения, для того, чтобы разбить AL на цифры }
xor cx, cx
mov bx, 10
@@next:
xor dx, dx { обнуляем DX , чтобы можно было делить DX:AX на BX }
div bx
push dx { запоминаем остаток, это цифра, которую надо напечатать }
inc cx { число цифр в числе, хранящемся в AL }
or ax, ax { AX = 0? Нет? Продолжаем }
jnz @@next

{ Здесь, собственно, печатаем все сохраненные в стеке цифры }
@@digits:
pop ax
add al, '0' { преобразование цифры в символ }
int 29h { вывод на консоль }
loop @@digits
{ Все, со второстепенной задачей закончили, продолжаем основную }

pop cx { прежде всего - восстановим количество печатаемых элементов }

mov al, ' ' { напечатаем пробел, чтоб числа не сливались }
int 29h
inc si { переходим к следующему элементу массива }
loop @@m
end;
end.

 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Женский
Реальное имя: Tanya

Репутация: -  0  +


Спасибо за задачку. Я сделала программу, только псле вывода массива еще выдает зачем то нули, хотя массив считает правильно. А почему нули выдает не понятно
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 12.11.2019 7:30
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name