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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2016, 10:47   #1
greenblue
Пользователь
 
Регистрация: 02.02.2016
Сообщений: 10
По умолчанию Возможно ли "проинкрементировать" каждый элемент массива?

Здравствуйте, изучаю тему inc и dec. Задался вопросом: "Возможно ли "проинкрементировать" каждый элемент массива?". Пытаюсь решить эту задачу, пока не получается. Желание в результате получить значение 56565656 в регистре ESI. Вместо этого сейчас получается 55555556. Через переменную тоже. Или такое действие невозможно?
Код:
TITLE
;Author:
;Create:
;Date  :
;Changes:

INCLUDE D:\masm32\include\Irvine32.inc
INCLUDELIB D:\masm32\lib\Irvine32.lib
INCLUDELIB D:\masm32\lib\kernel32.lib
INCLUDELIB D:\masm32\lib\user32.lib

.data
m3 BYTE 4 DUP (55h)
.code
main PROC
     inc DWORD ptr [m3]
     mov esi,DWORD ptr[m3]

     call DumpRegs
     call WaitMsg

main ENDP
END main

Последний раз редактировалось greenblue; 08.02.2016 в 10:54.
greenblue вне форума Ответить с цитированием
Старый 08.02.2016, 11:03   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

inc просто делает +1. Если вы напишите dword ptr значит +1 к двойному слову; если напишите byte ptr значит к байту прибавит.
p51x вне форума Ответить с цитированием
Старый 08.02.2016, 11:15   #3
greenblue
Пользователь
 
Регистрация: 02.02.2016
Сообщений: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
inc просто делает +1. Если вы напишите dword ptr значит +1 к двойному слову; если напишите byte ptr значит к байту прибавит.
То есть, если массив состоит из элементов - байтов, к значению каждого байта, как к отдельному элементу (но ко всем сразу), за раз нельзя прибавить по 1, получается?

Думал, как назначить инкремент массиву так, что бы команда inc, работала с каждым байтом из массива отдельно, увеличивая его ( байтовый элемент массива на 1).
байт (55 + 1), байт (55+1), байт (55+1), байт (55+1). Такую схему пробовал сделать
Аналог такого, только одной строкой кода
Код:
     inc [m3]
     inc [m3+1]
     inc [m3+2]
     inc [m3+3]
     mov esi,DWORD ptr[m3]
Спасибо.

Последний раз редактировалось greenblue; 08.02.2016 в 11:46.
greenblue вне форума Ответить с цитированием
Старый 08.02.2016, 11:48   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

тогда делайте add 0x01010101
p51x вне форума Ответить с цитированием
Старый 08.02.2016, 12:11   #5
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
0x01010101
это если в массиве нет -1.

надо так

Код:
MOV eax, 01010101h
MOVD xmm1, eax
MOVD xmm0, DWORD PTR [m3]
PADDB xmm0, xmm1
MOVD esi, xmm0
f.hump вне форума Ответить с цитированием
Старый 08.02.2016, 13:42   #6
greenblue
Пользователь
 
Регистрация: 02.02.2016
Сообщений: 10
По умолчанию

Спасибо, оба способа получились.
greenblue вне форума Ответить с цитированием
Старый 17.02.2016, 12:24   #7
greenblue
Пользователь
 
Регистрация: 02.02.2016
Сообщений: 10
По умолчанию

Код:
.data
lab01 LABEL DWORD
m3 BYTE 4 DUP (55h)
p1 DWORD TYPE [m3]        ;знач.элем. массива в байтах

.code
main PROC
     mov eax,0h
     mov ecx,0h

     mov esi,OFFSET [m3]  ;смещение m3 относ.сегмента данных esi - косвенный операнд
     mov ecx,LENGTHOF m3  ;установка знач. счётчика = кол-ву эл. массива
     l1:
     inc BYTE PTR [esi]   ;inc значения наход. по адресу записаному в рег.esi
     ;inc esi             ;inc значения адреса метки m3 (переход к след эл.) строка №31
     add esi,[p1]         ;альтернативный вариант строке №31, смещение на длинну элем. массива
     loopD l1
     mov ebx,[lab01]      ;56h,56h,56h,56h ebx

     call DumpRegs
     call WaitMsg

main ENDP
END main

Последний раз редактировалось greenblue; 18.02.2016 в 08:29.
greenblue вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможно ли сделать выделение значения в столбце "факт" в красный цвет шрифта, если оно выходит меньше значения в столбце "план" ? squit Microsoft Office Excel 19 17.01.2015 20:09
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" Alexsandrr Microsoft Office Excel 4 19.10.2013 14:22
Найти максимальный элемент 1 столбца массива "Паскаль" Женька Good Помощь студентам 4 10.11.2011 23:31
"Стоимость горючего" или "Возможно ли повторение". vedro-compota Свободное общение 12 03.11.2010 20:01
ассемблер: "Составить программу умножающую каждый элемент массива из 15 чисел на на 5. Naruto63 Помощь студентам 4 19.10.2009 13:37