Доброго времени суток, уважаемые! Пытаюсь освоить assembler, знакомый гуру посоветовал начать с tasm. Хочу понять такую простую вещ, в языках высокого уровня, как массив. Я так понимаю в ассемблере вообще нет такого понятия массив? Но в различной литератури я все же встречаю его. Покажите пожалуйста на примерах как с ними работать, к примеру такие классические случаи как нахождение максимального элемента в двух массивах, вычитание из элементов массива, ввод данных в массив и удаление их. Буду очень благодарен!
да, в ассемблере нету как такового понятия массива. есть некий участок памяти, не более. все что нужно для работы с ним - знать адрес этого участка памяти, количество элементов которые там размещены, или будут размещены и размерность этих элементов. допустим адрес нашего массива(его первого элемента) равен 1. мы знаем, что у нас в массиве 10 элементов типа DWORD. таким образом наш массив будет иметь размерность 10 * sizeof(DWORD) байтов. как с этим работать. берешь адрес первого элемента массива(обозначим его как A). делаешь цикл от 0 до количества элементов массива. и на каждой итерации увеличиваешь А на sizeof(тип) получая таким образом адрес следующей ячейки памяти где находится(или будет находиться если ты записываешь в массив) следующий элемент. надеюсь, доступно объяснил. и да, тасм - плохой выбор. он мертв. бери fasm или masm.
Объяснили очень понятно, но было бы не плохо увидеть как это выглядит в коде. Я понимаю, что он мертв но вроде как на нем учатся в институтах ))) Я бы для начала хотел бы понять общий принцип, а потом уже определиться какой именно выбрать, я думал попробовать nasm или gas они вроде как крос платформенные и nasm поддерживает inetl' овский синтаксис да и gas вроде как при наличии в коде соответствующей директивы.
как пример: сумма элементов массива Code: .model small .stack 100h .data mas dw 0,1,2,3,4,5,6,7,8,9 .code start: mov ax, @data mov ds, ax mov cx,10 xor ax,ax xor si,si sum: add ax,mas[si] add si,2 loop sum mov ax,4c00h int 21h end start
Большое спасибо! Подскажите пожалуйста, я так понима, что это обозначает Code: .stack 100h стек размером в 256 байт? Я иногда встречаю запись .stack 256, в чем различия? Не совсем понятно данное действия: Code: add ax,mas[si] Что означает mas[si]? Вообще было бы не плохо если бы вы рассказали как работает вот эта часть кода: Code: add ax,mas[si] add si,2 loop sum
разница в том что 100h=256 то есть нет разницы=) смысл прост:берем 1-й элемент по определенному адресу с к нему в цикле cx раз добавляем второй,третий и т.д.
например функция 01h прерывание int 21h. а вообще есть несколько прерываний для ввода данных,подробнее погугли.