14 / 14 / 6
Регистрация: 23.02.2010
Сообщений: 221
1

Передача массива в процедуру

16.04.2015, 15:20. Показов 7316. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Помогите пожалуйста разобраться с передачей массива в процедуру через регистр. В программе имеется массив
Assembler
1
result db 10 DUP(?) '$'
Передача его в процедуру производится путем помещения адреса массива в регистр bp
Assembler
1
2
lea bp, result
call myProc
В myProc производится обработка массива в цикле
Assembler
1
2
3
4
5
6
7
mov di, 0
mov dl, '0'
myLoop: mov BYTE PTR[bp][di], dl
inc dl
inc di
cmp di, 10
jne myLoop
По моему мнению теперь result должен содержать строку "0123456789", но при выводе строки result в основной программе выводятся лишь пробелы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.04.2015, 15:20
Ответы с готовыми решениями:

Передача массива в процедуру
В модуле храняться константные массивы например Tmymass : array of Extended = (...

Передача массива в процедуру
В функции заполняю массив, как потом передать его в процидуру, не обьявляя массив как Public Type.

Передача массива в процедуру
Проблема такова: в проекте необходимо передать в процедуру массив. Его размер заранее неизвестен....

Передача массива в процедуру
Ребят, подскажите пожалуйста, подзабыл Есть на листе Excel произвольный массив. Как его передать в...

4
Заблокирован
16.04.2015, 15:44 2
у ВР разве не SS базовый?
1
600 / 548 / 210
Регистрация: 24.01.2012
Сообщений: 1,348
16.04.2015, 16:17 3
обычно адреса переменных передают через стек
Assembler
1
2
3
4
    push ds
    mov dx,offset result
    push dx
    call myproc
а в самой процедуре из стека нужно взять адрес переменной
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
myproc proc near
    push bp
    mov bp,sp
    mov sp,bp
    push ds
    push bx
    push ax
    push dx
    mov bx,ss:[bp+4]
    mov ax,ss:[bp+6]
    mov ds,ax
    mov dl,'0'
l1:
    mov ds:[bx], dl
    inc dl
    inc bx
    cmp dl,'9'
    jle l1
    pop dx
    pop ax
    pop bx
    pop ds
    pop bp
    ret  4
myproc endp
0
14 / 14 / 6
Регистрация: 23.02.2010
Сообщений: 221
16.04.2015, 17:21  [ТС] 4
[
Цитата Сообщение от MansMI Посмотреть сообщение
у ВР разве не SS базовый?
Точно, не учел этого. Поменял BP на BX.Все работает))
0
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
16.04.2015, 17:36 5
Может, всё немного проще?
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
;MASM/TASM
.model compact
.286
.stack
.data
result db 10 DUP(?), '$'
.code
start:  mov ax, @data
    mov ds, ax
    push    ds
    push    offset result
    call    myProc
    mov dx, offset result
    mov ah, 9
    int 21h
    xor ax, ax
    int 16h
    mov ax, 4C00h
    int 21h
 
myProc: mov bp, sp
    les di, dword ptr ss:[bp+2]
    mov cx, 10
    mov al, '0'
@l: stosb
    inc al
    loop    @l
    ret
end start
0
16.04.2015, 17:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.04.2015, 17:36
Помогаю со студенческими работами здесь

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

Передача значения массива в процедуру
такой вот код var Form1: TForm1; ArrOfsteps: array of integer; PROVERKA,masI:...

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

Передача массива в другую процедуру
Как передать массив в другую процедуру вот мой код выбивает ошибку Type mistmach Public Sub...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru