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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2012, 23:54   #1
galaxyblazer
Пользователь
 
Регистрация: 16.03.2012
Сообщений: 16
По умолчанию Передача параметров : как указатель на масив и через стек.

Дали задание сделать програму которая будет местить в себе две процедуры которые будут что-то делать с массивом(в моем случае нужно найти минимальный елемент) (масив целых чисел без знака) . заковыка в том что в одну процедуру данные нужно передавать как указатель на масив , а в другую через стек ( как копию данных). програму которая находит минимальный елемент я сделал , и вроде бы нашел способ передавать данные через стек но чет склеть все в кучу не получеться...
Код:
.model small 
.data 
array db 15,2,50,1,65,12,44; и т.д. элементы массива 
len equ $ - array; кол-во элементов 
min db ?; значение минимального элемента 
imin dw ?; индекс минимального элемента 
.stack 100h 
.code 
start: 
    mov ax,@data 
    mov ds,ax 
    mov cx,len 
    dec cx 
    xor di,di; указатель на 1-й элемент, принятый за начальный минимум 
    mov si,1; указатель на 2 элемент (его индекс 1) 
cycle: 
    mov al,array[si] 
    cmp al,array[di] 
    jge next 
    mov di,si 
next: 
    inc si 
    loop cycle 
    mov imin,di; запись индекса минимального элемента 
    mov al,array[di] 
    mov min,al; запись значения минимального элемента 
;   ...
    mov ah,4ch 
    int 21h 
    end start
и вот возможно верный способ передачи параметров через стек:
Код:
push bp
sub sp, sizeof(array)
mov bp, sp
push es
push ss
pop es
mov di,bp
mov si, offset array
mov cx, sizeof(array)
rep movsb
pop es
еще и с указателем на масив проблемы , но думаю с нм сам разберусь..... помогите склить ето в одну процедуру в которую будут передаваться даные через стек...
galaxyblazer вне форума Ответить с цитированием
Старый 20.04.2012, 09:26   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

правильнее через стек передаваться так:
Цитата:
mov cx, len
lea si, min
dec si
a:
push byte ptr [si]
dec si
loop a
push len
call myproc
тогда в процедуре получаем массив так:
Цитата:
myproc proc
mov si, sp
sub si ,2
mov cx, [si]
inc si
b:
mov ..., [si]
inc si
loop b
endp
но самое главное - не забыть очистить передаваемый массив из стека) иначе после нескольких вызовов процедуры начнут проявляться жуткие проблемы.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 20.04.2012, 13:14   #3
galaxyblazer
Пользователь
 
Регистрация: 16.03.2012
Сообщений: 16
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
правильнее через стек передаваться так:


тогда в процедуре получаем массив так:

но самое главное - не забыть очистить передаваемый массив из стека) иначе после нескольких вызовов процедуры начнут проявляться жуткие проблемы.
Командой ret ?
в данном случае ето будет ret 6?
galaxyblazer вне форума Ответить с цитированием
Старый 20.04.2012, 14:20   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
в данном случае ето будет ret 6?
боюсь, что это будет команда ret 6+длина массива. Нужно же вычистить весь массив из стека. и опять же - если com-файл, то логичнее использовать ближний вызов процедур, а это ret 4+длина массива.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПЕРЕДАЧА МАССИВА В ПРОЦЕДУРУ ЧЕРЕЗ СПИСОК ФОРМАЛЬНЫХ ПАРАМЕТРОВ. sifa Помощь студентам 1 29.11.2011 22:13
Ассемблер. Лаба по процедурам с передачей параметров через стек Poprigun777 Помощь студентам 0 14.03.2011 19:13
Указатель на масив строк Syltan Общие вопросы по Java, Java SE, Kotlin 7 23.05.2010 15:57
Передача параметров через ссылку xxxsas PHP 6 10.08.2009 21:09
Передача параметров в функцию через ссылку Vistar Общие вопросы C/C++ 1 07.05.2009 02:27