注册 登录
编程论坛 汇编论坛

【汇编】三个问题,堆栈指针和空字符问题

davidguhao 发布于 2016-09-08 18:02, 3046 次点击
1 为什么可以假设堆栈指针(stack pointer)是对其16字节边界的
2 为什么堆栈指针在调用子程序时,一定要进行16字节边界对齐
3 为什么字符串一定要使用空字符结尾……(LENGTHOF 完全可以胜任)
4 回复
#2
zhulei19782016-09-08 21:31
堆栈每次弹出都是一个字,所以要边界对齐。
字符串空字符结尾它程序就是那么设计的,读到空字符就结束读取。
#3
davidguhao2016-09-09 18:41
回复 2楼 zhulei1978
您还没有回答我的第一个问题

为什么可以这么假设?
我在书上看到作者就是说可以假设……
#4
Valenciax2016-09-09 22:05
一般程序不会主动修改sp值,其值均由编译器做初始化,段和段的最小差距为16字节,边界对齐是很自然的动作...
因此可以有这种假设
#5
hu9jj2016-09-10 08:41
CPU在读写非跨界数据时可以一次性操作,而对跨界数据则必须分两次操作,所以多字节数据尽量要做到字对齐,方便CUP处理。栈指针寄存器可能还无法做跨界操作,所以设置栈地址时不能跨界.
另外段寄存器是要左移4位再加偏移地址形成实际地址,也许是16字节边界对齐更利于CPU操作。
1