Как написать вывод одномерного массива на встроенном ассемблере в Паскале
1) массив чего (Целых? Вещественных? Строк?) ?
2) тебе надо процедуру, которая напечатает глобальный массив, или переданный как параметр? Или это вообще должно быть без процедур?
Она немножко из другого блока. То есть метка @M не видима из точки, где ты вызываешь loop. Вот и ругается.
А как это исправить? чтоб метку он видел?
label M;
begin
...
asm
M:
mov ah,[si]
mov t,ah
push si
end;
write(t);
asm
pop si
loop M
end;
...
Спасибо огромное за помощь!
теперь другой прикол он выводит цифры както странно
А я тебе давно говорил:
Вот тебе пример вывода массива байт. Все прокомментировано, читай, разбирайся, ищи ошибки в своей реализации. Что непонятно - спрашивай.
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.
Спасибо за задачку. Я сделала программу, только псле вывода массива еще выдает зачем то нули, хотя массив считает правильно. А почему нули выдает не понятно