Друзья! Это прикол, наверное, у разработчиков такой. Очень смешно, ничего не скажешь. Код (Text): .386 .model flat, stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib .code section bufer db 1 dup (\ 04dh, 05ah, 090h, 000h, 003h, 000h, 000h, 000h, \ 004h, 000h, 000h, 000h, 0ffh, 0ffh, 000h, 000h, \ 000h, 0b8h, 000h, 000h, 000h, 000h, 000h, 000h, \ 000h, 000h, 040h, 000h, 000h, 000h, 000h, 000h, \ 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, \ 000h, 000h, 000h, 000h, 000h, 000h) .code start: invoke ExitProcess, 0 end start Видите? Создаю секцию, а вней массив из 46-ти элементов. Но попробуя я туда приписать ещё один, то выскакивает ошибка! А если задать размер, то ещё смешнее, блин. Если так написать: Код (Text): bufer db 80 dup (\ 04dh, 05ah, 090h, 000h, 003h, 000h, 000h, 000h, \ 004h, 000h, 000h, 000h, 0ffh, 0ffh, 000h, 000h, \ 000h, 0b8h, 000h, 000h, 000h, 000h, 000h, 000h, \ 000h, 000h, 040h, 000h, 000h, 000h, 000h, 000h, \ 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, \ 000h, 000h, 000h, 000h, 000h, 000h) То получится 80, но не элементов, а массивов! 80 массивов. Очень смешно. Ладно, пробую по-другому, вот так: Код (Text): .386 .model flat, stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib .code section bufer db 0dh, 0ch, 04dh, 05ah, 090h, 000h, 003h, 000h, \ 000h, 000h, 004h, 000h, 000h, 000h, 0ffh, 0ffh, \ 000h, 000h, 000h, 0b8h, 000h, 000h, 000h, 000h, \ 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, \ 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, \ 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h .code start: invoke ExitProcess, 0 end start Всё компилится и создаётся буфер из 48-ми элементов. Но не из 49! Припиши я хоть ещё один байт и выскакивает ошибка компиляции. ...Ребята, что за цифры магические- 46 байт, 48 байт... Мне надо большой массив инициализировать, несколько тыщ элементов. В С без проблем было...
amvoz А обязательно весь массив в одном операторе инициализировать? Можно, например, так сделать: Код (Text): bufer: db 0dh, 0ch, 04dh, 05ah, 090h, 000h, 003h, 000h db 000h, 000h, 004h, 000h, 000h, 000h, 0ffh, 0ffh db 000h, 000h, 000h, 0b8h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h P.S. В фасме нет ограничения на размер оператора.
Да нет, конечно, главное, чтобы байты подряд все шли. ПОлучиось спасибо. Вы извините, я в асме не очень, в С больлше.
Mankubus Спасибо, не знал... действительно, 5+46*2+1=98 - еще +2 и все. второй вариант 2+48*2=98 Интересно. А откуда инфа, если не секрет? Я не то, чтобы сильно доки по масму читал, но признаться об ограничении на длину строки не знал
Это не прикол, это синтаксис MASM/TASM. Документацию не пробовал читать для начала? label db <количество повторов> dup(<что повторять>) Так что bufer db 80 dup (....) это и есть создание восьмидесяти массивов с содержимым указанным в скобках. Нужен один массив - пиши через db как l_inc показал. PS: ограничения тут не причём...