Сейчас на форуме: (+5 невидимых)

 eXeL@B —› Программирование —› Вопросы по асме
<< . 1 . 2 . 3 . >>
Посл.ответ Сообщение

Ранг: 113.4 (ветеран)
Активность: 0.130
Статус: Участник
Ветеран

Создано: 06 июля 2007 19:06 · Поправил: locker_fx
· Личное сообщение · #1

Здравствуйте уважаемые про-асм кодеры!
Я всё-таки решился научиться этому древнему мега-искусству кода на асме. Второй день читаю и читаю(набираюсь инфой, а потом начну практику). Вот всё вроде бы хорошо, но вот думаю для практики напишу одну школьную несложную задачку: есть число(именно число) его надо перевести в письменную запись(к примеру 1367,25 тысяча тристо шестьдесят семь рублей двадцать пять копеек). Но тут я понял что во всех туторах прочитанных мною ОЧЕНЬ много API, но нет по работе со строками...
Подскажите плиз где можно почитать про аботу со строками? И ещё как вы обходитесь без массивов? Всё в строчке хранить и вырезать нужное?

Понимаю что для всех гуру это элементарно и неинтересно, но всё же прощу отнестись с пониманием, к тем кто недавно стал на путь истинный...

P.S. Забыл сказать: Гугл за за свет незаплатил, а Яндекс'у интернет отключили за спам )))))))))))

Заранее благодарен за помощь!!!

-----
моя подпись!




Ранг: 51.0 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 10 июля 2007 20:37
· Личное сообщение · #2

locker_fx пишет:
После прочетния этого предложения у меня зарадилась мысль что сам МАСМ разработан Hutch'ем и MS не имеет никакого отношения(хотя ранее знал что МАСМ-это от мелкомягких, но стал думать что я ошибался). Вобщем мелочь и к асме не имеет никакого отношения...да и хватит МС славы прибавлять... ))))

кажется, от MS только сам компилятор/линкер и еще некоторые инструменты.
а все библиотеки и .inc-файлы - от этого самого хатча



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 11 июля 2007 08:10 · Поправил: Bitfry
· Личное сообщение · #3

Просто не все внимательно читают. Вот полная цитата:
===
MASM32
Это очень распространённый пакет, собранный Стивеном Хатченсоном (Hutch).
Важно понять, что MASM32 вовсе не компилятор, а сборник для программирования под Win32, в который входит 32-битный компилятор MASM.
===
Придётся написать ещё яснее. Есть MASM – компилятор от MS и MASM32 – пакет от Hutch'a и не надо их путать.
Когда-то был MASM6 – пакет от MS, но этот проект давно загнулся (а точнее влился в VS).

-----
Всем привет, я вернулся




Ранг: 113.4 (ветеран)
Активность: 0.130
Статус: Участник
Ветеран

Создано: 11 июля 2007 08:57
· Личное сообщение · #4

Bitfry пишет:
Придётся написать ещё яснее.

да забей. это мелочи, притом мало касающиеся программирования на асме...

У меня тут появилась пара идей где мжно поправить/добавить, но я их пока обдумаю и опробую на себе, а чуть позже напишу...могу в ПМ

-----
моя подпись!




Ранг: 23.1 (новичок), 3thx
Активность: 0.010
Статус: Участник

Создано: 11 июля 2007 16:10
· Личное сообщение · #5

MSDN



Ранг: 113.4 (ветеран)
Активность: 0.130
Статус: Участник
Ветеран

Создано: 11 июля 2007 19:37
· Личное сообщение · #6

ZX-CodeR
ты постишь мусорные(флудо) посты ради повышения ранга или тебе это доставляет удовольствие?

-----
моя подпись!




Ранг: 113.4 (ветеран)
Активность: 0.130
Статус: Участник
Ветеран

Создано: 11 июля 2007 20:37
· Личное сообщение · #7

=TS= пишет:
могу посоветовать создать массив указателей на строки... А строки использовать ASCIIZ -- строки в однобайтовой ASCII кодировке с завершающим нулем. Тогда реализация алгоритма будет не намного сложнее чем на языке высокого уровня

хорошая идея, буду пытаться её рализовать



AlexZ,=TS=
а как обращаться с массивами в асме?

-----
моя подпись!




Ранг: 61.4 (постоянный), 1thx
Активность: 0.020
Статус: Участник

Создано: 11 июля 2007 20:52
· Личное сообщение · #8

смотря массивами чего.
с массивами указателей очень просто.
Загружаем указатель на первый элемент массива:
lea edi, first
Получаем доступ к X-тому элементу:
mov eax, edi[X]



Ранг: 113.4 (ветеран)
Активность: 0.130
Статус: Участник
Ветеран

Создано: 11 июля 2007 21:42
· Личное сообщение · #9

n0name
а как правильно обьяснить массив указателей?
а адреса строк надо самому загонять в массив? пример:
lea edi, first
mov edi[1], offset str1
mov edi[2], offset str2
....
так?
Ещё вопрос: элементы массива нумеруются с нуля или с единицы?

-----
моя подпись!




Ранг: 15.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 11 июля 2007 22:02 · Поправил: lapslap
· Личное сообщение · #10

locker_fx да так
для красоты заюзайте лучше rep xxx

второй вопрос улыбнул




Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 12 июля 2007 06:46
· Личное сообщение · #11

locker_fx пишет:
а как правильно обьяснить массив указателей?

=) объявить можно как угодно. sotona же сказал про массивы и строки. Представь для начала, что такое массив и как он будет выглядеть в памяти, тогда подбных вопросов не возникнет. MASM тоже не знает, что такое массивы =) Массив указателей - это всего-лишь несколько цыферок по порядку. А то, как ты к ним обращаешься уже и определяет, чем эти цыферки служат. Массивом, строкой или еще чем.

Можно так:
.data
Arr1 dd n dup (00000000h)
...
.code
lea EDI,Arr1
mov [EDI],offset Str1
mov [EDI+4],offset Str2

Отладка, как всегда рулит))

-----
radio uno in ibisa ...




Ранг: 113.4 (ветеран)
Активность: 0.130
Статус: Участник
Ветеран

Создано: 12 июля 2007 08:59
· Личное сообщение · #12

Icelot пишет:
Можно так:
.data
Arr1 dd n dup (00000000h)
...
.code
lea EDI,Arr1
mov [EDI],offset Str1
mov [EDI+4],offset Str2


а потом, считая n-номер нужного элемента обращаться по адресу edi+(4*n). Я прав(я сный пень что такую запись масм не поймёт. а сам алгоритм правильный?)?

-----
моя подпись!





Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 12 июля 2007 09:07 · Поправил: Icelot
· Личное сообщение · #13

locker_fx в случае с такой реализацией да, именно так.

add:
в статьях Битфрая про "нулевую" ошибку читал? Вообщем первый элемент массива = 0*4=0, т.е. EDI+0, второй = 1*4=4, т.е. EDI+1. Если не хочешь париться и считать первым элементом не 0-вой а 1-вый, то загружай всегда в EDI указатель не на 0-вой элемент при инициализации, а 1-вый. Т.е.:

lea EDI,Arr1
add EDI,04h
..
mov [EDI],offset Str1
...


-----
radio uno in ibisa ...




Ранг: 113.4 (ветеран)
Активность: 0.130
Статус: Участник
Ветеран

Создано: 12 июля 2007 10:24 · Поправил: locker_fx
· Личное сообщение · #14

Icelot пишет:
в статьях Битфрая про "нулевую" ошибку читал? Вообщем первый элемент массива = 0*4=0, т.е. EDI+0, второй = 1*4=4, т.е. EDI+1. Если не хочешь париться и считать первым элементом не 0-вой а 1-вый, то загружай всегда в EDI указатель не на 0-вой элемент при инициализации, а 1-вый.

я привык работать с нулевого для меня так проще(за это я нелюблю ВБ, т.к. там у строки нету нулевого элемента).

Кстати, в edi+0 будет не первый элемент а нулевой, т.к. 4*n=0 если n=0, где n-номер элемента массива.Согласен?

-----
моя подпись!





Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 12 июля 2007 10:39
· Личное сообщение · #15

locker_fx пишет:
я привык работать с нулевого для меня

ну так это хорошо =) я просто на всякий случай сказал, ты ведь спрашивал:
locker_fx пишет:
Ещё вопрос: элементы массива нумеруются с нуля или с единицы?


-----
radio uno in ibisa ...




Ранг: 113.4 (ветеран)
Активность: 0.130
Статус: Участник
Ветеран

Создано: 12 июля 2007 11:11
· Личное сообщение · #16

Icelot пишет:
ты ведь спрашивал:

я спрашивал потому что думал, что МАСМ имеет свой механизм работы с массивами и имеет строгие правила, например эл-ты нумеруются с 1. Ну, а т.к. механизма нет и программер делает сам, то он волен делать так как ему удобнее...


Icelot пишет:
ну так это хорошо

пойму все норм кодеры(хотя есть исключения, которым удобнее делать всё наооборот) считают от нуля, т.к. это удобнее и спасает иногда от лишней мороки

-----
моя подпись!




Ранг: 113.4 (ветеран)
Активность: 0.130
Статус: Участник
Ветеран

Создано: 12 июля 2007 11:41
· Личное сообщение · #17

А как можно запустив прогу под олькой передать й строку через ком. строку ?

-----
моя подпись!





Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 12 июля 2007 12:13
· Личное сообщение · #18

locker_fx пишет:
считают от нуля, т.к. это удобнее

хех) чего ж тут удобнонго-то? просто так заведено, что у машины ряд положительных чисел начинается с нуля, поэтому все мы и привыкаем к этому.

locker_fx пишет:
А как можно запустив прогу под олькой передать й строку через ком. строку ?

Т.е.? Передать строку проге, запущенной под Ольгой через ком. строку? оО это как? Задай вопрос поточнее.

-----
radio uno in ibisa ...





Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 12 июля 2007 13:21
· Личное сообщение · #19

locker_fx пишет:
Кстати, в edi+0 будет не первый элемент а нулевой, т.к. 4*n=0 если n=0, где n-номер элемента массива.Согласен?

хм.. я про это и говорил)) может не точно выразился. 0-ой для нас, но первый в памяти если уж на то пошло ;)

-----
radio uno in ibisa ...




Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 12 июля 2007 13:25
· Личное сообщение · #20

locker_fx пишет:
А как можно запустив прогу под олькой передать й строку через ком. строку ?

Ты вообще другие темы читаешь? Я уже не говорю про поиск:
http://exelab.ru/f/action=vthread&forum=5&topic=9288

-----
Всем привет, я вернулся




Ранг: 113.4 (ветеран)
Активность: 0.130
Статус: Участник
Ветеран

Создано: 12 июля 2007 17:32
· Личное сообщение · #21

Bitfry пишет:
Ты вообще другие темы читаешь?

Сказать честно, то почти нет. Читаю только то что кажется интересным.
Я знаю, что ты в статье где-то это упоминал, но при повторном(быстром просмотре статьи ненашёл и чтобы долго непариться решил спросить)

-----
моя подпись!




Ранг: 113.4 (ветеран)
Активность: 0.130
Статус: Участник
Ветеран

Создано: 12 июля 2007 17:35
· Личное сообщение · #22

Icelot пишет:
0-ой для нас, но первый в памяти если уж на то пошло ;)

ну так-то оно так, но лично для меня начало-это 0. Я так привык и для меня так проще.

-----
моя подпись!




Ранг: 113.4 (ветеран)
Активность: 0.130
Статус: Участник
Ветеран

Создано: 13 июля 2007 17:06
· Личное сообщение · #23

Пытаюсь написать свою первую прогу на асм. И тут сразу появились вопросы:
1)как на асме оптимально реализовать то что выполняет эта строка на делфи:
text:=str1+text;

2)Как в момент работы проги забить кусок памяти под строку?
3)Можно ли застолбить кусок памяти так, чтобы пока я его не юзаю винда его использовала, а не оставляла пустым(т.е. вопрос поэеономии ресурсов)

-----
моя подпись!




Ранг: 61.4 (постоянный), 1thx
Активность: 0.020
Статус: Участник

Создано: 13 июля 2007 17:43
· Личное сообщение · #24

1)
invoke lstrcat, str1, text
invoke lstrcpy, text, str1

при этом должно быть выделено достаточно памяти под str1 и text.
2) статически или динамически?
3) наврядли.



Ранг: 113.4 (ветеран)
Активность: 0.130
Статус: Участник
Ветеран

Создано: 13 июля 2007 18:16
· Личное сообщение · #25

n0name пишет:
2) статически или динамически?

сорри забыл указать(спешил, когда писал)-динамически

-----
моя подпись!





Ранг: 85.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 13 июля 2007 18:29
· Личное сообщение · #26

2)GlobalAlloc наверное тебе поможет..
3)бред какой-то
locker_fx ну такие простые вещи в справочниках находятся спокойно..

а то скоро по любому поводу будешь
locker_fx пишет:
чтобы долго непариться решил спросить)


-----
radio uno in ibisa ...




Ранг: 113.4 (ветеран)
Активность: 0.130
Статус: Участник
Ветеран

Создано: 13 июля 2007 18:47
· Личное сообщение · #27

Icelot пишет:
а то скоро по любому поводу будешь

неа, скоро поумненю
а пока задаю тупые вопросы...

-----
моя подпись!




Ранг: 113.4 (ветеран)
Активность: 0.130
Статус: Участник
Ветеран

Создано: 13 июля 2007 18:51
· Личное сообщение · #28

Нашел: Справочная система по языку ассемблера IBM PC автор Юров
Это тот справочник, который рекомендовал Bitfry ?

-----
моя подпись!




Ранг: 61.4 (постоянный), 1thx
Активность: 0.020
Статус: Участник

Создано: 13 июля 2007 18:55
· Личное сообщение · #29

Icelot пишет:
2)GlobalAlloc наверное тебе поможет..

GlobalAlloc - зло, намного лучше юзать HeapAlloc.




Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
THETA

Создано: 13 июля 2007 19:08 · Поправил: FrenFolio
· Личное сообщение · #30

locker_fx пишет:
1)как на асме оптимально реализовать то что выполняет эта строка на делфи:
text:=str1+text;

На самом деле, оптимальным будет написание своих аналогов API-функций lstrcat и lstrcpy. Это увеличит скорость выполнения программы.
locker_fx пишет:
Справочная система по языку ассемблера IBM PC автор Юров

Это хороший справочник, но заметь, именно справочник. Тебе же лучше все же начать изучение асма с учебников. Могу порекомендовать книги Крупника и Пирогова.

-----
Программист SkyNet




Ранг: 113.4 (ветеран)
Активность: 0.130
Статус: Участник
Ветеран

Создано: 13 июля 2007 21:09 · Поправил: locker_fx
· Личное сообщение · #31

n0name пишет:
invoke lstrcat, str1, text
invoke lstrcpy, text, str1

Может опять я туплю.., но чё-то неполучается у меня:
Вот код проги:
.386
.model flat, stdcall
option casemap :none ; case sensitive
;##################################################################### ####
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc

includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
;##################################################################### ####
.data
MsgBoxCaption db "It's the first your program for Win32",0
text db "работает!!!",0
str1 db "Прога ",0
;##################################################################### ####
.code

start:

invoke lstrcat, str1, text
invoke lstrcpy, text, str1
invoke MessageBox, NULL, addr text, addr MsgBoxCaption, MB_OK
invoke ExitProcess, NULL
end start


Вылазит месадж бокс с текстом "работает!!!"



Если это я туплю, то не пинайте сильно, я только учусь...

-----
моя подпись!



<< . 1 . 2 . 3 . >>
 eXeL@B —› Программирование —› Вопросы по асме
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати