|
主题 : : 检测点3.2的问题 [已解决] |
回复[ 5次 ]
点击[ 479次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2011-01-29 13:12 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:6
注册日期:2010-10-23 04:24 |
mov ax,1000h
mov ds,ax 以上两条指令是设置数据段的段地址为1000H
mov ax,2000H
mov ss,ax 以上两条指令是设置栈段的段地址为2000H
mov sp,10 设置栈顶的偏移地址,因栈为空,所以SP=0010H
push [0] 将1000:0处的字压入栈中
push [2] 将1000:2处的字压入栈中
push [4] 将1000:4处的字压入栈中
push [6] 将1000:6处的字压入栈中
push [8] 将1000:8处的字压入栈中
push [A] 将1000:A处的字压入栈中
push [C] 将1000:C处的字压入栈中
push [E] 将1000:E处的字压入栈中
CUP是怎样知道在1000:0处开始拿数据的?CPU执行PUSH 【0】时,CPU是取SS中的数据为段地址,SP的为偏移地址,我就是搞不懂CPU执行PUSH 【0】时为什么知道在1000:0开始拿数据压到SS:SP中。 | | |
|
|
|
|
[第1楼]
[ 回复时间:2011-01-29 19:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:8
信誉值:0
注册日期:2011-01-29 19:28 |
我也是新手,我是这么理解的不知道对不,当CPU执行到PUSH [0]时,PUSH是个栈压入的命令,上面已经设置了栈,而[0]这个里面的0是个内存单元的偏移地址,而CPU要取里面的数据得先找段地址,内存单元段地址存放在DS里面,貌似说得又明白又不明白,嘿嘿 | | |
|
|
|
|
[第2楼]
[ 回复时间:2011-01-30 10:41 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:6
注册日期:2010-10-23 04:24 |
|
|
|
|
|
[第3楼]
[ 回复时间:2011-02-01 11:49 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2011-01-29 19:28 |
mov sp,10 设置栈顶的偏移地址,因栈为空,所以SP=0010H
=====================================================
我是新手,我想问一下, mov sp,10 这里的10是十进制吧,请问和0010H有什么区别? | | |
|
|
|
|
[第4楼]
[ 回复时间:2011-02-02 07:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:6
注册日期:2010-10-23 04:24 |
回复:[第3楼]
------------------
mov sp,10这里的10不是十进制,是十六进制是0010H,4个十六进制,一位十六进制代表4位二进制,你那里说的10其实只是没写H而已,10H=0010H,不知道我说的帮不帮到你,如果说错了请各位指正。 | | |
|
|
|
|
[第5楼]
[ 回复时间:2011-02-02 07:08 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:6
注册日期:2010-10-23 04:24 |
此贴由 贴主 于 [ 2011-02-02 07:08 ] 结贴。 结贴原因:问题已解决 | | |