Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| |
И еще пару ламерских вопросиков :) 15.11.01 16:12 Число просмотров: 1037
Автор: Paul Lee Статус: Незарегистрированный пользователь
|
> только ногами не бейте - лет 7 за ассемблером не сидел. > При push стек куда двигается к старшим адресам или к > младшим ? к младшим
> Что считается "верхом" а что "низом" стека ? эт смотря откуда смотреть :)
> Какой глубиный смысл в этих строках ? > push ebp сохраняем ebp используемый вызывающей процедурой
> mov ebp, esp устанавливаем ebp на стек для работы с параметрами и локальными переменными
> sub esp, 64 резервируем место в стеке для локальных переменных
|
<programming>
|
Хех, давненько ассемблером не баловался 15.11.01 15:07
Автор: PS <PS> Статус: Elderman
|
Решил простенький код в ассемблерном виде посмотреть:
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 написанно ?
|
|
Запутался в трех строчках :) 16.11.01 17:16
Автор: PS <PS> Статус: Elderman
|
mov ax,6
mov bx,2
div bx
Т.к. собираю как консоль, то сразу вищу эксепшен: Integer overflow
Это как же его мать, извиняюсь понимать ? 6/2 = overflow ?
|
| |
xor dx,dx 16.11.01 17:27
Автор: z0 <z0> Статус: Member
|
|
| | |
Блин, а ведь я на слово делил... :))) 16.11.01 17:47
Автор: PS <PS> Статус: Elderman Отредактировано 16.11.01 18:24 Количество правок: 1
|
Зашибись. Нет, С мне явно больше нравится :)
Так, а что ему теперь не подуше ?
.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 ?
|
| | | |
я просто охреневаю 17.11.01 08:12
Автор: z0 <z0> Статус: 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/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, сделать это.
|
| | | | | | |
Ну ладно, совсем зачморили 20.11.01 14:11
Автор: Rook <Alex Sergeev> Статус: Member
|
> Нафига MASMу вообще эта end нужна, если он немного за меня > не может подумать, и если я не вписал ret, сделать это. а для чего нужен end в pascal, или } в с/c++ ?
просто в языках высокого уровня (но опять-таки не вовсех и после 97 года) эта вещь проверяется и устанавливается компилятором , причем изменить код возврата не всегда возможно.
|
| | | | | | | |
Приплыли 20.11.01 15:06
Автор: PS <PS> Статус: Elderman
|
> а для чего нужен 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.
|
| | | | | | | | |
Приплыли 20.11.01 15:27
Автор: Rook <Alex Sergeev> Статус: 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.
это был реторический вопрос.
но если тебе так лень писать 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. Т.е. верх стека становится ниже низа стека: эту ситуацию отловит проц или мне самому надо чекать такие вещи ?
|
| | | |
А ! Все, вспомнил, спасибо :) И еще одно :) 15.11.01 16:39
Автор: Paul Lee Статус: Незарегистрированный пользователь
|
> Если у меня 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, которое генерится компилятором. Указание ее в исходнике имхо некорректно.
|
|
|