Работа со стеком - Assembler
Формулировка задачи:
Приветствую всех! Я новичок в Ассемблере и столкнулся с проблемой, решение которой не могу найти. Суть вот в чём. Есть сегмент стека:
Есть сегмент данных с массивом тип байт: Tabl DB 10 DUP (4 DUP (?)) (Естественно, в сегменте данных).
Этот массив я заполнил целочисленными положительными значениями. Хочу теперь поместить его в стек (помещаю поэлементно):
Но так не работает. Пишет, что аргумент имеет неправильный размер. Я пробовал разобраться и понял, что надо загонять в стек элементы, только типа DW. Но в моём случае, массив типа Байт. Как быть то? Пробовал крутить с регистрами (расширение и т. д.). Не помогло. Поэтому, прошу помощи! Как мне Запихнуть этот массив в стек (поэлементно)?
SSeg SEGMENT para stack 'stack'
DB 256 DUP(?)
SSeg ENDSMOV 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 и сохраняет результат вspmov bx,sp- переменнойbxприсваивается значениеspxor dx,dx- переменнаяdxинициализируется значением 0mov al,tabl[di]- вalзаписывается значение из памяти по адресуdi(в данном случае из таблицыtabl)mov es:[bx+di],al- в память по адресуbx+diзаписывается значение изalinc di- значениеdiувеличивается на 1loop- выполнение команд с 5 по 7 повторяется до тех пор, покаdiне станет равным 0 (это означает, что мы прошлись по всей таблице)