关于汇编原理的几个小问题~~
SP本身不就是存放堆栈的栈顶地址么?为何求栈顶地址时还要用SS*10+SP?还有第二问的11FFFH和11FFEH哪里来的?...
SP本身不就是存放堆栈的栈顶地址么?为何求栈顶地址时还要用SS*10+SP?还有第二问的11FFFH和11FFEH哪里来的?
展开
展开全部
一、SP本身是存放堆栈的栈顶地址,这没错,但是这个是指逻辑地址,而题目要求的是物理地址。
物理地址= ((段地址 * 16 ) + 段内偏移地址 )
也写成
物理地址= ((段地址 * 10H ) + 段内偏移地址 ),
所以你题目中那个式子SS*10+SP应该写成SS*10H+SP
二、根据上题可知,栈顶地址是12000H,把1234H送入堆栈的操作相当于,把1234H存在12000h-2(=11FFEH)的地址里,根据低位数据放在低地址,高位数据放在高地址,低8位数据34H存放在12000h-2(=11FFEH),而11FFFH存放的是高8位数据12H。
物理地址= ((段地址 * 16 ) + 段内偏移地址 )
也写成
物理地址= ((段地址 * 10H ) + 段内偏移地址 ),
所以你题目中那个式子SS*10+SP应该写成SS*10H+SP
二、根据上题可知,栈顶地址是12000H,把1234H送入堆栈的操作相当于,把1234H存在12000h-2(=11FFEH)的地址里,根据低位数据放在低地址,高位数据放在高地址,低8位数据34H存放在12000h-2(=11FFEH),而11FFFH存放的是高8位数据12H。
展开全部
你需要了解一下x86体系结构。
x86有好几种模式。比如实模式,保护模式。这是最重要的2种模式。
在汇编教材里面,一般使用的是实模式。
实模式地址空间大小为 1M。地址长度为 16位。但是16位最多能表示 2^16 = 64K的地址空间,怎么办呢?
使用一个段指针。
地址的计算为 ((段地址 * 16 ) + 段内偏移地址 )
这样就能表示20位的地址空间了。
10是16进制的10,实际上是 0x10 = 16
x86有好几种模式。比如实模式,保护模式。这是最重要的2种模式。
在汇编教材里面,一般使用的是实模式。
实模式地址空间大小为 1M。地址长度为 16位。但是16位最多能表示 2^16 = 64K的地址空间,怎么办呢?
使用一个段指针。
地址的计算为 ((段地址 * 16 ) + 段内偏移地址 )
这样就能表示20位的地址空间了。
10是16进制的10,实际上是 0x10 = 16
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个问题SP存放的是栈顶地址的偏移,SP是两字节寄存器最大只能表示到65536也就是64K,而整内存地址空间有1M,如果只用SP的话有好多地址是访问不了的。
第二个问题因为栈顶地址是12000H,把1234H送入堆栈的操作相当于,把1234H存入12000h-2的地址里,所以12000h-2的地址是11FFEH存放的是34H,而11FFFH存放的是12H。
第二个问题因为栈顶地址是12000H,把1234H送入堆栈的操作相当于,把1234H存入12000h-2的地址里,所以12000h-2的地址是11FFEH存放的是34H,而11FFFH存放的是12H。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询