Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
5 / 5 / 0
Регистрация: 14.08.2012
Сообщений: 24
1

masm. Работа с массивом

03.12.2013, 19:46. Показов 1487. Ответов 12
Метки нет (Все метки)

Вечер добрый. Нужно вывести максимальный элемент массива. Загвоздка в том, что не могу определенный элемент массива внести в переменную. Грубо говоря мне нужно: mov max, array[SI]. При ассемблировании выдает ошибку. Помогите разобраться. Буду благодарен
PS: комментарии типа "кури мануалы", пожалуйста, не публикуйте
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.12.2013, 19:46
Ответы с готовыми решениями:

работа с memset в masm
Всем привет. Пытаюсь написать программу, работающую в режиме ядра - выделяю блок памяти, потом...

Работа с массивом
Задан нулевой массив из 5 столбцов и 5 строк. Необходимо присвоить каждому элементу массива своё...

Работа с БД и массивом
Всем привет! Опять я обращаюсь к форуму. Никак не могу совладать с выводом данных из БД и обработки...

Работа с массивом
Есть массив допустим состоящий из элементов 1 2 3 4 5 6 7 8 9 10 надо начиная с 6 элемента по 10...

12
193 / 189 / 18
Регистрация: 06.10.2013
Сообщений: 358
03.12.2013, 20:00 2
arena55, через регистр или через стек пересылайте данные. А мануалы всё-таки не помешает курнуть.
0
5 / 5 / 0
Регистрация: 14.08.2012
Сообщений: 24
03.12.2013, 20:11  [ТС] 3
Not at all!, либо мануалы не качественный, либо я курильщик не очень. Можешь катнуть пример? Думаю так удобней будет. PS с регистрами тоже самое
0
193 / 189 / 18
Регистрация: 06.10.2013
Сообщений: 358
03.12.2013, 20:18 4
Assembler
1
2
3
4
5
6
7
8
push array[SI]
pop max
;;;;;;
mov ax,array[si]
mov max,ax
; если переменная размером байт
mov al,array[si]
mov max,al
Да, есть ещё команда movs.
0
5 / 5 / 0
Регистрация: 14.08.2012
Сообщений: 24
03.12.2013, 20:51  [ТС] 5
Not at all!, не помогли способы. Может в коде где косяк?
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
30
31
32
33
34
.586
.model flat,stdcall
OPTION CASEMAP:NONE
Include kernel32.inc
Include masm32.inc
IncludeLib kernel32.lib
IncludeLib masm32.lib
.data
Mas db -1,0,3,-8,0,9,-6,1,2,-5; ob'9vlenie massiva
len_mas  = $ -Mas; vb|9dktnie dDlinb| massiva
MsgExit DB  13,10, "Press ENTER to exit",0Ah,0Dh,0; soobwenie o vb|xode
MAX db 'Max element'
ResStr DB 16 DUP (' '),0
.data?
Buffer DB 10 DUP (?)
inbuf DB 100 DUP (?)
max dword ?
 
.code
start: 
                      ;все операции пропущены
   
Invoke atol,ADDR Buffer;perevod stroki v 4islo
Invoke dwtoa,max,ADDR ResStr ;preobrazovanie stroki v dword
Invoke StdOut,ADDR MAX; vvb|vod rezulbtata
XOR EAX, EAX; obnulenie registra EAX
Invoke StdOut,ADDR MsgExit; vvb|vod soobweni9 o exit
Invoke StdIn,ADDR inbuf,LengthOf inbuf; zaderjka ekrana do najati9 klaviwi
Invoke ExitProcess,0; zakrb|tie processa
 
 
 
end start
End
0
193 / 189 / 18
Регистрация: 06.10.2013
Сообщений: 358
03.12.2013, 20:53 6
Цитата Сообщение от arena55 Посмотреть сообщение
Может в коде где косяк?
Может. Что-то я не увидел применения способов в коде.
0
5 / 5 / 0
Регистрация: 14.08.2012
Сообщений: 24
03.12.2013, 21:02  [ТС] 7
Цитата Сообщение от Not at all! Посмотреть сообщение
Может. Что-то я не увидел применения способов в коде.
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
.586
.model flat,stdcall
OPTION CASEMAP:NONE
Include kernel32.inc
Include masm32.inc
IncludeLib kernel32.lib
IncludeLib masm32.lib
.data
Mas db -1,0,3,-8,0,9,-6,1,2,-5; ob'9vlenie massiva
len_mas  = $ -Mas; vb|9dktnie dDlinb| massiva
MsgExit DB  13,10, "Press ENTER to exit",0Ah,0Dh,0; soobwenie o vb|xode
MAX db 'Max element'
ResStr DB 16 DUP (' '),0
.data?
Buffer DB 10 DUP (?)
inbuf DB 100 DUP (?)
max sword ?
 
.code
start:
mov SI, 4
      metod1: 
             mov max, Mas[SI]
      metod2:
             push Mas[SI]
             pop max
      metod3:
             mov ax, Mas[SI]
             mov max, ax
      metod4:
             movs max, Mas[SI]
      metod5:
             movs AX, Mas[SI]
             
 
Invoke atol,ADDR Buffer;perevod stroki v 4islo
Invoke dwtoa,max,ADDR ResStr ;preobrazovanie stroki v dword
Invoke StdOut,ADDR MAX; vvb|vod rezulbtata
XOR EAX, EAX; obnulenie registra EAX
Invoke StdOut,ADDR MsgExit; vvb|vod soobweni9 o exit
Invoke StdIn,ADDR inbuf,LengthOf inbuf; zaderjka ekrana do najati9 klaviwi
Invoke ExitProcess,0; zakrb|tie processa
 
 
 
end start
End
5 методов - 5 ошибок
0
193 / 189 / 18
Регистрация: 06.10.2013
Сообщений: 358
03.12.2013, 21:39 8
arena55, я для кого писал:
Цитата Сообщение от Not at all! Посмотреть сообщение
; если переменная размером байт
?
И si здесь не годится. ESI используйте.
0
5 / 5 / 0
Регистрация: 14.08.2012
Сообщений: 24
03.12.2013, 21:47  [ТС] 9
Цитата Сообщение от Not at all! Посмотреть сообщение
arena55, я для кого писал:

?
И si здесь не годится. ESI используйте.
тогда ошибка в mov max, al
0
193 / 189 / 18
Регистрация: 06.10.2013
Сообщений: 358
03.12.2013, 22:03 10
Assembler
1
2
movzx (movsx) eax,mas[esi]
mov max,eax.
У Вас может нет мануала? Так я могу прислать.
1
5 / 5 / 0
Регистрация: 14.08.2012
Сообщений: 24
03.12.2013, 22:08  [ТС] 11
Цитата Сообщение от Not at all! Посмотреть сообщение
Assembler
1
2
movzx (movsx) eax,mas[esi]
mov max,eax.
не было такого в моем мануале. Жду ваш. Спасибо за помощь
0
193 / 189 / 18
Регистрация: 06.10.2013
Сообщений: 358
03.12.2013, 22:20 12
Не за что. А мануал есть здесь. Курите. Только не в затяжку.
0
765 / 309 / 11
Регистрация: 27.05.2011
Сообщений: 703
03.12.2013, 22:59 13
arena55, ты же по нормальному напиши, горбатого слепил и хочешь добиться работоспособности..
элемент массива размером - 1 байт, а ты пишешь - mov ax, Mas[SI] т.е. выбираешь 2 байта и думаешь что из массива, на самом деле, хрен знает откуда, но
явно не из своего массива, т.е. смещение у тебя - xxxx0004h (как было подмечено выше, используй esi и в начале - mov esi,4)
далее, пытаешся впихнуть это дело в max, но! вообще рекомендуется явно указывать размеры т.е. mov byte ptr [max],al
да и вообще, у тебя в MAX текст, выбирая 4-ый элемент, а у тебя там 0, ты при выводе той строки ничего не увидишь..
используй отладчик, там много интересного увидишь.. конечно если хочешь разобраться..
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.12.2013, 22:59

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

Работа с массивом
Здравствуйте. Хочу обнулить нечетные элементы массива. Обнуляет все.. Подскажите, в чем ошибка?...

Работа с массивом
<!DOCTYPE html> <head> <meta charset="UTF-8"><title>персональное задание по...

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

Работа с массивом
задание:Реализовать функцию, которая возвращает массив строк с целочисленными значениями,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.