Консультация № 70695
12.01.2007, 22:30
0.00 руб.
0 3 3
Уважаемые эксперты!
Почему максимальное значение SP равно FFFE, а не FFFF ?
И что находится в FFFF ?

Обсуждение

Неизвестный
12.01.2007, 22:54
общий
это ответ
Здравствуйте, Andrej11!

В стэк можно записывать и извлекать из него как минимум 2 байта сразу (заметьте, команды POP AL нету!).
Поэтому обычно в SP хранятся чётные числа.
Однако, в него вполне возможно поместить 0FFFFh, но POP AX тогда вызовет ошибку, ведь она попытается прочитать байт по адресу SS:10000h, а он не существует.

PS
Кстати, на мой взгляд, максимальное значение SP есть 0, означающее, что стэк размером 64К пуст.

Удачи!
Неизвестный
13.01.2007, 02:25
общий
это ответ
Здравствуйте, Andrej11!
Известно, что программу можно завершить(если вы не толкали ничего в стэк, или затем выровняли его) инструкцией ret. Эта инструкция извлекает из стека адрес и передаёт по нему управление. Так вот при запуске программы в стеке лежит число 0, поверьте в отладчике. Т.е. управление будет передано по адресу CS:0, а там находятся байты CD20-код INT 20h-завершение программы. Т.е. при старте стэк не пуст, там лежит 0, записаный туда загрузчиком.
С уважением, IceW0|f.
давно
Советник
419
1011
13.01.2007, 19:45
общий
это ответ
Здравствуйте, Andrej11!

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

Но никакого максимального значения нет.

Если про размер стека, то он равен размеру установленного сегмента для стека и может быть любым значением от байта до 4 Гб.
Форма ответа