Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2013, 18:04   #1
Пиф
Пользователь
 
Регистрация: 05.03.2013
Сообщений: 10
По умолчанию Что делает данная программа? TASM

Код:
model small 
.stack 100h ;стэк 256 Кб
.data
	len2 dw 5 ;длина массива-результата
	len equ 5 ;длина исходных массивов
	mas2 db 2, 3, 6, 7, 8 ;массив откуда брать
	void dw ? ;раздел между массивами для удобного просмотра
	mas1 db 1, 2, 3, 4, 5 ;массив - результат
.code
	start: ;метка начала программы
		mov ax,@data ;инициализируем ds сегмнтом данных
		mov ds,ax       ; через регистр ах
		mov cx,len ;цикл по всему массиву
		xor si,si ;исключающее или - обнуление счетчика цикла
	cicl1: ;цикл по массиву для добавления
		mov al,mas2[si] ;берем поочередно каждый элемент
		push cx ;запоминаем сх в стэк для вложенных циклов
		mov cx, len2 ;вложенный цикл по всему результирующему массиву
		xor di,di ;обнуляем счетчик второго цикла
	cicl2: ;пробегаем по массиву результату.
		cmp al,mas1[di] ;если в массиве таких элементов нет
		je metka
		inc di
	loop cicl2 ;то добавим
		mov di,len2       ;добавление
		mov mas1[di],al ;элемента в массив
		inc len2            ;увеличение длины массива
	metka:
		pop cx              ;если есть, то следующая итерация
		inc si                ;переход к следующему элементу
	loop cicl1 ;все элементы добавлены
	exit: ;выход
		mov ax,4c00h ;4с - номер функции выхода, 0 - код ошибки
		int 21h ;вызов библиотеки прерываний DOS
end start ;вход в программу с метки start
Пиф вне форума Ответить с цитированием
Старый 11.03.2013, 22:22   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А комментарии почитать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.03.2013, 00:05   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Stilet
А комментарии почитать?

автор не ищет лёгких путей..

Если кратко, то беребираются все элементы массива mas2 и те из них, значения которых отсутствуют в массиве mas1 - добавляются в массив mas1
после выполнения данного кода в памяти по адресу mas1 будет
db 1, 2, 3, 4, 5, 6, 7, 8
ну и len2 станет равным 8, соответственно.


p.s. Обратите внимание, что массив под результат обязательно ПОСЛЕДНИЙ, его размер увеличивается, затирая память в области данных после mas1...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.03.2013, 10:32   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Вот занятный результат получится, если сегмент данных ненароком будет размещен перед обработчиком, например, мыши))) судя по коду, вылезти за предела сегмента данных проблем не составляет...
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 12.03.2013, 10:53   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
Вот занятный результат получится, если сегмент данных ненароком будет размещен перед обработчиком, например, мыши))) судя по коду, вылезти за предела сегмента данных проблем не составляет...
я сперва тоже об этом думал.
Потом вспомнил (хотя, конечно, я не Гуру, могу и ошибаться), что в MS DOS exe-файлах под сегмент выделялось 64 кб. Поэтому, скорее всего, никаких проблем при работе данного кода не будет.
Хотя, _БЕЗУСЛОВНО_ намного надёжнее, нагляднее и красивее было бы сразу определить место под массив с результатом.
Например, не мудруствуя лукаво, так:
Код:
        mas1 db 1, 2, 3, 4, 5,  ;массив - результат
        mas1free db len Dup (?) ; место ещё под 5 дополнительных элементов - если весь mas2 потребуется скопировать
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
что делает программа? Настёнка1512 Помощь студентам 1 19.12.2011 06:50
что делает программа& Chena Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 04.05.2011 12:40
Что делает программа (забыл) С\С++ Айдар Помощь студентам 6 27.06.2010 12:39
Как работает программа и что делает dragun4ik Помощь студентам 0 23.05.2010 15:51
Определить что выполняет данная программа anna_ Помощь студентам 2 17.12.2009 22:03