![]() |
1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!
![]() ![]() |
![]() |
Tanchik |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Женский Реальное имя: Tanya Репутация: ![]() ![]() ![]() |
Как написать вывод одномерного массива на встроенном ассемблере в Паскале
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
1) массив чего (Целых? Вещественных? Строк?) ?
2) тебе надо процедуру, которая напечатает глобальный массив, или переданный как параметр? Или это вообще должно быть без процедур? |
Tanchik |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Женский Реальное имя: Tanya Репутация: ![]() ![]() ![]() |
1) массив чего (Целых? Вещественных? Строк?) ? 2) тебе надо процедуру, которая напечатает глобальный массив, или переданный как параметр? Или это вообще должно быть без процедур? массив целых чисел формируется в ассемблере, мне надо вывести этот массив на экран но не при помощи паскаля а циклов с метками на встроенном ассемблере через asm/ Массив чисел у меня формируется проблема с выводом |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата Массив чисел у меня формируется Код - в студию |
Tanchik |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Женский Реальное имя: Tanya Репутация: ![]() ![]() ![]() |
|
Archon |
![]()
Сообщение
#6
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: ![]() ![]() ![]() |
Она немножко из другого блока. То есть метка @M не видима из точки, где ты вызываешь loop. Вот и ругается.
-------------------- Close the World...txeN eht nepO
|
Tanchik |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Женский Реальное имя: Tanya Репутация: ![]() ![]() ![]() |
А как это исправить? чтоб метку он видел?
|
volvo |
![]()
Сообщение
#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. |
Tanchik |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Женский Реальное имя: Tanya Репутация: ![]() ![]() ![]() |
Спасибо огромное за помощь!
|
Tanchik |
![]()
Сообщение
#10
|
Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Женский Реальное имя: Tanya Репутация: ![]() ![]() ![]() |
теперь другой прикол он выводит цифры както странно
![]() |
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
А я тебе давно говорил:
Цитата Код - в студию Понимаешь, КОД, а не ОБРЫВКИ. Ты выбрала для себя дать обрывки, получила - то, что получила... Я ж не знаю НИ описания твоих массивов, НИ того, заполняется ли массив действительно правильно, или это только ДОЛЖНО происходить, а ты выдаешь желаемое за действительное... Я не телепат...Сообщение отредактировано: volvo - 15.01.2009 13:21 |
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.
|
Tanchik |
![]()
Сообщение
#13
|
Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Женский Реальное имя: Tanya Репутация: ![]() ![]() ![]() |
Спасибо за задачку. Я сделала программу, только псле вывода массива еще выдает зачем то нули, хотя массив считает правильно. А почему нули выдает не понятно
|
![]() ![]() |
![]() |
Текстовая версия | 28.07.2025 5:23 |