Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Размер ASM вставки, VC6 SP6 
:(
    Опции темы
Madest
Дата 26.5.2006, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 27.11.2003
Где: Городок

Репутация: нет
Всего: нет



Как увеличить?
Все что закомментировано - нужно, но даже если раскомментировать безобидную строку mov eax,1 - вылетает.
Код

_asm
{
    mov al,n
    mov ah,nn
    mov dx,width
    mov cx,height
    mov esi,source
    mov edi,dest
    mov ebx,esi
    l8sh0:
        push ecx
        xor ecx,ecx
        mov cx,dx
        l8sh1:
            push ecx
            //ñìåùåíèå ÝÀ ïî âåðòèêàëè
            xor ecx,ecx
            mov cl,al
            l8sh4:
                sub esi,edx
            loop l8sh4
            //end ñìåùåíèå ÝÀ ïî âåðòèêàëè
            xor ecx,ecx
            mov cl,ah
            l8sh2:
                push ecx
                //òåñò ïî âûñîòå
                mov ecx,source
                cmp esi,ecx
                jb sh8nosumh
                add ecx,np
                cmp esi,ecx
                ja sh8nosumh
                //end òåñò ïî âûñîòå
                //ñìåùåíèå ÝÀ ïî ãîðèçîíòàëè
                xor ecx,ecx
                mov cl,al
                sub esi,ecx
                //end ñìåùåíèå ÝÀ ïî ãîðèçîíòàëè
                xor ecx,ecx
                mov cl,ah
                l8sh3:
                    push ecx
                    //òåñò ïî øèðèíå
                    mov ecx,ebx
                    cmp esi,ecx
                    jb sh8nosumw
                    add ecx,edx
                    cmp esi,ecx
                    ja sh8nosumw
                    //end òåñò ïî øèðèíå
                    //àêêóìóëÿöèÿ
                    push eax
                    xor eax,eax
                    xor ecx,ecx
                    mov ax,sum
                    mov cl,byte ptr[esi]
                    add ax,cx
                    mov sum,ax
                    xor ecx,ecx
                    mov cl,kol
                    inc cl
                    mov kol,cl
                    pop eax
                    //end àêêóìóëÿöèÿ
                    sh8nosumw:
                    inc esi
                    pop ecx
                loop l8sh3
                //îáðàòíîå ñìåùåíèå ÝÀ ïî ãîðèçîíòàëè
                xor ecx,ecx
                mov cl,al
                inc cl
                sub esi,ecx
                //end îáðàòíîå ñìåùåíèå ÝÀ ïî ãîðèçîíòàëè
                sh8nosumh:    
                add esi,edx
                pop ecx
            loop l8sh2
            //îáðàòíîå ñìåùåíèå ÝÀ ïî âåðòèêàëè
            xor ecx,ecx
            mov cl,al
            inc cl
            l8sh5:
                sub esi,edx
            loop l8sh5
            //end îáðàòíîå ñìåùåíèå ÝÀ ïî âåðòèêàëè
            //ðàñ÷åò destination
            push eax
            push ebx
        //    mov eax,1
        //    push ecx
        //    push edx
        //    xor eax,eax
        //    xor ebx,ebx
        //    xor ecx,ecx
        /*    mov ax,sum
            mov bl,kol
            div bl
            mov bl,al
            mov al,k1
            mov bh,byte ptr[esi]
            mul bh
            mov cx,ax
            xor eax,eax
            mov al,k2
            mul bl
            xor edx,edx
            cmp cx,ax
            jbe sh8end
            sub cx,ax
            mov ax,k12256
            cmp cx,ax
            jae sh8doh
            mov ax,cx
            mov cl,k12
            div cl
            mov dl,al
            jmp sh8end
            sh8doh:
                mov dl,255
            sh8end:
            mov byte ptr[edi],dl
            xor eax,eax
            mov sum,ax
            mov kol,al*/
        //    pop edx
        //    pop ecx
            pop ebx
            pop eax
            //end ðàñ÷åò destination
            inc esi
            inc edi
            pop ecx
        loop l8sh1
        add ebx,edx
        pop ecx
    loop l8sh0
}
 
--------------------
PM MAIL   Вверх
Exekutor
Дата 26.5.2006, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 1.11.2005
Где: Казахстан. Костан ай

Репутация: нет
Всего: 4



Цитата

     mov esi,source
    mov edi,dest


Неправильное использование регистров. Сюда может быть перемещено значение только из регистров общего назначения. 


--------------------
[color=blue][size=2]En taro addun, ma sol larinas[/size][/color]
PM MAIL   Вверх
Madest
Дата 26.5.2006, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 27.11.2003
Где: Городок

Репутация: нет
Всего: нет



то есть правильно так:
Код

mov eax,source
mov esi,eax
mov eax,dest
mov edi,eax

?
Хотя другие фильтры работают нормально с неправильным использованием.

А вот с этим фильтром с размером вставки как быть?  
--------------------
PM MAIL   Вверх
Exekutor
Дата 26.5.2006, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 1.11.2005
Где: Казахстан. Костан ай

Репутация: нет
Всего: 4



А что ни так с размером?

Добавлено @ 13:47 
Строк чтоли мало? 


--------------------
[color=blue][size=2]En taro addun, ma sol larinas[/size][/color]
PM MAIL   Вверх
Madest
Дата 26.5.2006, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 27.11.2003
Где: Городок

Репутация: нет
Всего: нет



Новичок я в АСМе, но появилась твердая уверенность, что АСМ-вставки в VC6 как-то ограничены по размерам, т.к. расскомментирование хотя бы одной строки из примера приводит к вылету из программы. А с закомментированной частью (с 92 по 128 строку) она не вылетает, но естесственно не делает то, что я хочу  smile 
Вылетает именно из-за размера, т.к. если даже раскомментировать безобидную строку 91: mov eax,1 - вылетает.  

Это сообщение отредактировал(а) Madest - 26.5.2006, 14:09
--------------------
PM MAIL   Вверх
Exekutor
Дата 27.5.2006, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 1.11.2005
Где: Казахстан. Костан ай

Репутация: нет
Всего: 4



Да не должны быть они ограничены по размерам. Хотя я не пользуюсь VC а предпочитаю программирования на чистом асме в TASM, я могу сказать почти наверняка что это ошибки твоей программы. Попробуй закомментировать другие строчки а эти раскомментировать. 


--------------------
[color=blue][size=2]En taro addun, ma sol larinas[/size][/color]
PM MAIL   Вверх
Madest
Дата 29.5.2006, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 27.11.2003
Где: Городок

Репутация: нет
Всего: нет



Пробовал конечно: комментировал середину, открывая то, что сейчас закомментировано - работает.
Но размер и в прямь не причем: добавляю в начало или конец вставки бессмысленные строки невлиющие на ход программы - работает. Но если в середину - вылетает.
Ведь если я добавлю после 90-й строки
push ecx
pop ecx
или
mov al,0
Ничего ж не должно случиться? а она при добавлении этих безобидных строк вылетает.
smile 
В общем, спасибо, буду ковырять алгоритм сначала. 
--------------------
PM MAIL   Вверх
РАЗДОЛБАЙ
Дата 28.6.2006, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доступен



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.1.2006
Где: Москва

Репутация: нет
Всего: нет



Madest
попробуй pusha  и popa ...у меня похожий глюк в асме случался когда контекст не сохраняешь или с регистрами не правильно работаешь 
;начало
pusha
....;твой код
;конец
popa

думаю просто VC никак не защищает контекст при входе в асм вставку .. 
PM MAIL IM Skype GTalk Jabber AOL YIM MSN   Вверх
586
Дата 28.6.2006, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: нет
Всего: 146



Loop не может прыгать больше, чем на 127 байт. 

Это сообщение отредактировал(а) 586 - 29.6.2006, 00:43
PM   Вверх
586
Дата 29.6.2006, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: нет
Всего: 146



Из справочника по asm:
Цитата
Команды  управления  циклами  -  это   близкие   (NEAR)  относительные
переходы.  Операнд - метка  является  8-битным   смещением   (относительно
текущего состояния указателя команд  IP),  поэтому команды могут выполнить
переход только на 127 байт вперед или на 128 байт назад.
 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для Windows/DOS"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для Windows/Dos | Следующая тема »


 




[ Время генерации скрипта: 0.1212 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.