> Зашибись. Нет, С мне явно больше нравится :) > Так, а что ему теперь не подуше ? > .386P > .model FLAT > > includelib c:\masm32\lib\msvcrt.lib > includelib c:\masm32\lib\windows.lib > > .code > _main proc > xor dx,dx > mov ax,6 > mov bx,2 > div bx > _main ENDP > END > > The exception unknown software exception (0xc00000fd) ? > Правда я забил на стек, ну и что ? > > ОТВЕТ: > КРУТО ! Надо поставить ret 0 > я в шоке, а нафига тогда все эти end & endp ?
ну вы блин даете! может тебе действительно не слезать с си...
нет такой команды END/ENDP
ты читал когда-нибудь "Система команд ix86" ???
если это "КРУТО".............
мда19.11.01 15:49 Автор: Rook <Alex Sergeev> Статус: Member
> > Зашибись. Нет, С мне явно больше нравится :) > > Так, а что ему теперь не подуше ? > > .386P > > .model FLAT > > > > includelib c:\masm32\lib\msvcrt.lib > > includelib c:\masm32\lib\windows.lib > > > > .code > > _main proc > > xor dx,dx > > mov ax,6 > > mov bx,2 > > div bx > > _main ENDP > > END > > > > The exception unknown software exception (0xc00000fd) > ? > > Правда я забил на стек, ну и что ? > > > > ОТВЕТ: > > КРУТО ! Надо поставить ret 0 > > я в шоке, а нафига тогда все эти end & endp ? >
ну так это ж не си, чтоб end** еще и возврат исполнял. Головой думать надо, а не руками.
> ну вы блин даете! может тебе действительно не слезать с > си... > нет такой команды END/ENDP > ты читал когда-нибудь "Система команд ix86" ??? > если это "КРУТО"............. старнно, мне казалось x86, а не ix86 :)
Ну ладно, совсем зачморили19.11.01 15:51 Автор: PS <PS> Статус: Elderman
> Нафига MASMу вообще эта end нужна, если он немного за меня > не может подумать, и если я не вписал ret, сделать это. а для чего нужен end в pascal, или } в с/c++ ?
просто в языках высокого уровня (но опять-таки не вовсех и после 97 года) эта вещь проверяется и устанавливается компилятором , причем изменить код возврата не всегда возможно.
> > а для чего нужен end в pascal, или } в с/c++ ? > ; 16 : } > pop edi > pop esi > pop ebx > add esp, 64 > cmp ebp, esp > call __chkesp > mov esp, ebp > pop ebp > ret 0 > > Вот зачем. Примерно такое я и ожидал от endp в MASMе. Ну > хотя бы ret 0.
это был реторический вопрос.
но если тебе так лень писать ret воспользуйся Cristal Assemblerom (340 мб) со всеми библиотеками, он за тебя все что угодно сделает
Приплыли20.11.01 15:23 Автор: z0 <z0> Статус: Member
> > а для чего нужен end в pascal, или } в с/c++ ? > ; 16 : } > pop edi > pop esi > pop ebx > add esp, 64 > cmp ebp, esp > call __chkesp > mov esp, ebp > pop ebp > ret 0 > > Вот зачем. Примерно такое я и ожидал от endp в MASMе. Ну > хотя бы ret 0.
максимум чего тебе даст ENDP - подкорректирует тип RET-ов (которые все же при этом должны быть)
И еще пару ламерских вопросиков :)15.11.01 16:01 Автор: PS <PS> Статус: Elderman
только ногами не бейте - лет 7 за ассемблером не сидел.
При push стек куда двигается к старшим адресам или к младшим ?
Что считается "верхом" а что "низом" стека ?
Какой глубиный смысл в этих строках ?
push ebp
mov ebp, esp
sub esp, 64
И еще пару ламерских вопросиков :)15.11.01 16:12 Автор: Paul Lee Статус: Незарегистрированный пользователь
> только ногами не бейте - лет 7 за ассемблером не сидел. > При push стек куда двигается к старшим адресам или к > младшим ? к младшим
> Что считается "верхом" а что "низом" стека ? эт смотря откуда смотреть :)
> Какой глубиный смысл в этих строках ? > push ebp сохраняем ebp используемый вызывающей процедурой
> mov ebp, esp устанавливаем ebp на стек для работы с параметрами и локальными переменными
> sub esp, 64 резервируем место в стеке для локальных переменных
А ! Все, вспомнил, спасибо :) И еще одно :)15.11.01 16:24 Автор: PS <PS> Статус: Elderman Отредактировано 15.11.01 16:28 Количество правок: 1
> Если у меня sp == bp и я делаю pop. Т.е. верх стека > становится ниже низа стека: эту ситуацию отловит проц или > мне самому надо чекать такие вещи ? bp используется в данном случае исключительно для адресации внутри стека и никак не влияет на переполнение. Ну а за стеком надо бы следить конечно
Хех, давненько ассемблером не баловался15.11.01 15:56 Автор: Paul Lee Статус: Незарегистрированный пользователь
> Решил простенький код в ассемблерном виде посмотреть: > a = 5; > > Сгенерил мне: > mov DWORD PTR _a$[ebp], 5 > > Теперь в коде написал: > __asm > { > mov DWORD PTR _a$[ebp], 5 > } > > Компилер обиделся. Переписал: > __asm > { > mov DWORD PTR a, 5 > } > > Сгенерил мне опять > mov DWORD PTR _a$[ebp], 5 > > Вот сволочь какая :) ассемблерные вставки поганит. А как > MSVC 6, объяснить что не надо курочить то, что под __asm > написанно ?
Насколько могу понять _a$ это смещение в стеке до локальной переменной a, которое генерится компилятором. Указание ее в исходнике имхо некорректно.