Работа со стеком - Assembler
Формулировка задачи:
Приветствую всех! Я новичок в Ассемблере и столкнулся с проблемой, решение которой не могу найти. Суть вот в чём. Есть сегмент стека:
Есть сегмент данных с массивом тип байт: Tabl DB 10 DUP (4 DUP (?)) (Естественно, в сегменте данных).
Этот массив я заполнил целочисленными положительными значениями. Хочу теперь поместить его в стек (помещаю поэлементно):
Но так не работает. Пишет, что аргумент имеет неправильный размер. Я пробовал разобраться и понял, что надо загонять в стек элементы, только типа DW. Но в моём случае, массив типа Байт. Как быть то? Пробовал крутить с регистрами (расширение и т. д.). Не помогло. Поэтому, прошу помощи! Как мне Запихнуть этот массив в стек (поэлементно)?
SSeg SEGMENT para stack 'stack' DB 256 DUP(?) SSeg ENDS
MOV BX, 0 MOV CX, 40 M10: PUSH [Tabl+BX] INC BX LOOP M10
Решение задачи: «Работа со стеком»
textual
Листинг программы
mov cx,40 sub sp,cx mov bx,sp xor dx,dx @@01:mov al,tabl[di] mov es:[bx+di],al inc di loop @@01
Объяснение кода листинга программы
mov cx,40
- переменнойcx
присваивается значение 40sub sp,cx
- отнимает отsp
значение 40 и сохраняет результат вsp
mov bx,sp
- переменнойbx
присваивается значениеsp
xor dx,dx
- переменнаяdx
инициализируется значением 0mov al,tabl[di]
- вal
записывается значение из памяти по адресуdi
(в данном случае из таблицыtabl
)mov es:[bx+di],al
- в память по адресуbx+di
записывается значение изal
inc di
- значениеdi
увеличивается на 1loop
- выполнение команд с 5 по 7 повторяется до тех пор, покаdi
не станет равным 0 (это означает, что мы прошлись по всей таблице)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д