С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
15 / 15 / 8
Регистрация: 14.01.2013
Сообщений: 545
Записей в блоге: 2
1

Извлечь элемент из адресса массива (MASM32)

16.03.2016, 17:40. Показов 1448. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет, что-то я очень жёстко туплю.

Есть массив.
Assembler
1
mas     dd    50 dup (0)
я передаю ссылку на массив в функцию.
Assembler
1
invoke GetSet, addr mas
В функции мне нужно извлечь значение по индексу из этого массива.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
GetSet proc vAddr :DWORD
    ; Делал так.
    xor eax, eax
    mov eax, vAddr[0]
    
   .if eax == 0
     invoke Sleep, 100000
   .endif
    ; Даже так.
    xor eax, eax
    mov eax, DWORD PTR vAddr[0]
    
   .if eax == 0
     invoke Sleep, 100000
   .endif
Подскажите, как мне извлечь значение по индексу из массива имея только адрес массива?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2016, 17:40
Ответы с готовыми решениями:

Извлечь элемент из массива рандомным индексом
Привет. Есть массив, задача в том, чтобы извлечь из массива элемент рандомным индексом, но чтобы...

Извлечь последний элемент массива, не зная индекса
у меня есть массив, с числовыми индексами, которые идут не по порядку и не последовательно (с...

masm32 стандартный элемент ListBox
Приветствую всех решивших помочь мне в решении крайне простых вопросов:)! 1) Как написать условие...

Несмотря на подключение masm32.inc и masm32.lib не подтягиваются функции stdin и stdout
Собственно скрин.

5
3408 / 1827 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
16.03.2016, 18:08 2
Лучший ответ Сообщение было отмечено updaite как решение

Решение

updaite,
адресация с маштабированием

mov eax,ddMas[esi*4]
1
15 / 15 / 8
Регистрация: 14.01.2013
Сообщений: 545
Записей в блоге: 2
16.03.2016, 18:21  [ТС] 3
Constantin Cat,
Сделал вот так.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
mas     dd    50 dup (0)
 
invoke GetSet, addr mas
 
GetSet proc vAddr :DWORD
    ; Делал так.
    xor eax, eax
    xor esi, esi
    mov esi, 2
    mov eax, vAddr[esi * 4]
    
   .if eax == 0
     invoke Sleep, 100000
   .endif
По идее должно сработать условие.
Assembler
1
2
3
   .if eax == 0
     invoke Sleep, 100000
   .endif
Ведь массив заполнен нулями, мы берем второй элемент массива, он равен нулю.
Но условие не срабатывает, почему?
0
3408 / 1827 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
16.03.2016, 19:15 4
У меня срабатывает:
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
              format PE GUI 4.0
entry start
        include 'win32a.inc'
section '.data' data readable writeable
 dbYes  db      'yes',0
 dbNo   db      'no',0
 ddMas  dd      1,2,3,4,5,0,7
section '.code' code readable executable
start:  mov     esi,ddMas
        mov     edi,3
        call    myproc
        mov     edi,5
        call    myproc
        invoke  ExitProcess,0
myproc:
        mov     eax,[edi*4+esi]
        mov     edx,dbYes
        or      eax,eax
        jnz     mpr
        mov     edx,dbNo
mpr:    invoke  MessageBox,0,edx,0,MB_OK
        ret
section '.idata' import data readable writeable
 
        library kernel32,'KERNEL32.DLL',\
                user32,'USER32.DLL'
 
        include 'api\kernel32.inc'
        include 'api\user32.inc'
1
15 / 15 / 8
Регистрация: 14.01.2013
Сообщений: 545
Записей в блоге: 2
16.03.2016, 19:20  [ТС] 5
Вкурил))))

Добавлено через 1 минуту
Constantin Cat,
Assembler
1
2
    mov ebx, vAddr
    mov eax, [ebx + esi * 4]
Нужно задавать в качестве базы, базовые регистры.
0
3408 / 1827 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
16.03.2016, 19:31 6
точнее так:
Миниатюры
Извлечь элемент из адресса массива (MASM32)  
1
16.03.2016, 19:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2016, 19:31
Помогаю со студенческими работами здесь

Ошибки MASM32 - cannot open file : .\masm32\include\windows.inc
установил MASM32, прописал в патче путь, выдаёт ошибки при компиляции такого рода : Microsoft...

[masm32] В массиве найти максимальный элемент среди отрицательных
Найти максимальный элемент среди отрицательных

Добавить элемент со значением D в конец очереди и извлечь из очереди первый (начальный) элемент
Дано число D и указатели P1 и P2 на начало и конец очереди, содержащей не менее двух элементов. ...

Вывод массива на экран в MASM32
Программа должна реализовать вывод массива поэлементно на консоль.В результате консоль остается...

[MASM32] Запись в файл массива структур
Всем привет! Есть такая задача. Есть массив структур с данными о домашней библиотеке. Посчитать...

Извлечь элемент из очереди
Необходимо извлечь элемент из динамической структуры данных очередь. К примеру у нас есть список...


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

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