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

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

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

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


Новичок
*

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

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


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


Гость






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


Новичок
*

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

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


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

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

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


Гость






Цитата
Массив чисел у меня формируется
Код - в студию
 К началу страницы 
+ Ответить 
Tanchik
сообщение 14.01.2009 17:16
Сообщение #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 
 К началу страницы 
+ Ответить 
Archon
сообщение 14.01.2009 17:29
Сообщение #6


Профи
****

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

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


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


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


Новичок
*

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

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


А как это исправить? чтоб метку он видел?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 15.01.2009 12:11
Сообщение #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
сообщение 15.01.2009 12:18
Сообщение #9


Новичок
*

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

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


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


Новичок
*

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

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


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


Гость






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

Сообщение отредактировано: volvo - 15.01.2009 13:21
 К началу страницы 
+ Ответить 
volvo
сообщение 15.01.2009 13:56
Сообщение #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
сообщение 16.01.2009 16:32
Сообщение #13


Новичок
*

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

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


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

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

 

- Текстовая версия 28.07.2025 5:23
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"