Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для zewer
2356 / 1774 / 212
Регистрация: 07.01.2011
Сообщений: 10,342

процедура поиска

05.05.2012, 23:55. Показов 1134. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте, у меня возникла проблема с таким заданием, не знаю как правильно пользоваться стеком
Вот задание :
Написать процедуру, которая осуществляет поиск нулевых элементов в массиве данных типа word. Передача аргументов, адреса начала и длины в байтах области памяти происходит через стек.
Подскажите чтото, или напишите, если сможете !
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.05.2012, 23:55
Ответы с готовыми решениями:

Хранимая процедура поиска
Мне нужна процедура поиска игроков по фамилии...Например,я ввожу букву М и показывает всех игроков на букву М. Вот моя процедура,что в ней...

Процедура поиска по ключу
Всем прива кому не трудно подправте процедуру поиска по ключу чтобы в случае если введеное наименование продукции будет найдено,...

Процедура поиска отличников
Помогите исправить процедуру так, чтобы она считала не студентов двоечников, а студентов отличников. Уже весь вечер не могу понять как и...

11
273 / 268 / 11
Регистрация: 24.12.2010
Сообщений: 328
06.05.2012, 12:56
Перед вызовом нужно положить в стек аргументы. В начале подпрограммы сохранить в стеке bp, а в bp скопировать sp(вершину стека). Теперь относительно bp можно найти в стеке аргументы. Если, к примеру, передается 2 параметра, то первый будет лежать в стеке по адресу bp+6, второй bp+4. При выходе нужно восстановить bp и очистить стек от переданных параметров.
1
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
06.05.2012, 14:47
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
nullelement proc len:word,adrst:word
mov si,adrst
mov cx,len
loopnullertw:
mov ax,[si]
cmp ax,0
jne iterw
iterw:
;здесь  делаешь что хочешь с элементами нулевыми
add si,2
loop loopnullertw
ret 
nullelement endp
И все. И без всяких указателей. Просто в шапке объявляешь переменные, компилятор сам Bp и Sp сделает что надо и восстановит. Без головной боли.
1
 Аватар для zewer
2356 / 1774 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
06.05.2012, 19:00  [ТС]
Цитата Сообщение от programmisto Посмотреть сообщение
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
nullelement proc len:word,adrst:word
mov si,adrst
mov cx,len
loopnullertw:
mov ax,[si]
cmp ax,0
jne iterw
iterw:
;здесь  делаешь что хочешь с элементами нулевыми
add si,2
loop loopnullertw
ret 
nullelement endp
И все. И без всяких указателей. Просто в шапке объявляешь переменные, компилятор сам Bp и Sp сделает что надо и восстановит. Без головной боли.
спасибо, но ведь ето не работа со стеком, или я чтото не понимаю?????(не вижу push и pop )
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
07.05.2012, 01:19
Цитата Сообщение от programmisto
adrst:word
Только для .сom-файлов. В остальноых случаях dword - seg:ofs или 32бит смещение для flat-модели.
1
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
07.05.2012, 07:23
Цитата Сообщение от zewer Посмотреть сообщение
спасибо, но ведь ето не работа со стеком, или я чтото не понимаю
Не понимаешь, как параметры процедурам передаются? Ответ, через стек. Ты смотрел в отладчике программу. Он заменяет эти указатели на записи типа [Bp+4]. То есть это работа со стеком. Кстати, чтобы вызвать процедуру параметры запихиваются в стек, например,
Assembler
1
2
3
push 80;длина
push offset stringa
call  nullement
Я запихиваю параметры в обратном порядке, потому что такая внутренняя организация стека. Теперь что-то понял?
1
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
07.05.2012, 09:56
Цитата Сообщение от programmisto Посмотреть сообщение
Я запихиваю параметры в обратном порядке, потому что такая внутренняя организация стека.
Я могу "запихнуть" в стек параметры в том порядке, который мне больше нравится или более удобен для последующего извлечения.
Теперь что-то понял?
1
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
07.05.2012, 13:42
Charles Kludge, нет, я имею ввиду, скажем, тебе надо задать первому параметру значение len, а второму address. Если ты запихнешь так:
Assembler
1
2
push address
push len
,
то если процедура будет вытаскивать, она вначале вытащит len, а потом уже address, понял?
1
 Аватар для zewer
2356 / 1774 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
07.05.2012, 16:16  [ТС]
Цитата Сообщение от programmisto Посмотреть сообщение
Я запихиваю параметры в обратном порядке, потому что такая внутренняя организация стека. Теперь что-то понял?
я знаю что такое стек в теории, и работал с ним на С++
но я не шарю, как работать со стеком в assembler, тоесть я понимаю, последний елемент, которий я запихну в стек будет первим, если я захочу его узять, а чтоб узять след. елемент, мне нужно удалить последний!
0
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
07.05.2012, 16:55
Не обязательно. Можно, скажем, хочешь взять второй элемент в стеке (первый - слово):
Assembler
1
2
3
sub sp,2 ; переходим назад
pop ax;извлекаем второй элемент
add sp,4;и возвращаем стек на исходную позицию
Четыре вычитаем, потому что когда вызвали pop, sp уменьшился на 2.
1
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
07.05.2012, 17:19
Цитата Сообщение от programmisto
push address
push len
call far myfunc
тогда в ss:[sp+4] будет len, а в ss:[sp+6] - address, и мне абсолютно в каком порядке их вытаскивать, т.к. стек - тоже массив. А ещё можно в ss:[sp] занести сегмент, а в ss:[sp+2] - смещение, и по retf вернуться совсем не туда, откуда вызывали. Understand?
1
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
08.05.2012, 06:41
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Understand
Да знаю я это, просто объясняю для zewer'а, что здесь есть работа со стеком.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.05.2012, 06:41
Помогаю со студенческими работами здесь

Процедура поиска файлов
Здравствуйте, есть процедура поиска файлов procedure FindIt(const aDir : String; aLog : TStrings); const N = 4; ArrExt :...

Процедура поиска из текстового поля
Здравствуйте, как реализовать command->CommandText = "SELECT * FROM contacts WHERE (name LIKE ?)"; ...

Процедура поиска в таблице Grid
Здравствуйте. Помогите написать процедуру, выводящую строку из таблицы Grid

Процедура поиска фамилии в DbGrid
Помогите организовать процедуру поиска для нахождения фамилии из таблицы Grid.

Процедура поиска в текстовом файле
Помогите, пожалуйста, найти ошибку. Процедура должна находить все фамилии на букву А и записывать их в новый текстовый файл, но у меня...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru