. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  检测点3.2实在不明白  [待解决] 回复[ 13次 ]   点击[ 1148次 ]  
hzkklook
[帖 主]   [ 发表时间:2010-01-18 14:19 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-11-22 13:11
我实在不能弄明白该问题应该怎么做。第一小题我看了答案后还好理解,第二小题就根本不能理解了。为什么最后的SP要等于0H?有哪位知道的朋友能把检测点3.2这道题详细的讲解一下?谢谢!
hygf99
[第1楼]   [ 回复时间:2010-01-18 22:59 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2009-10-17 21:41
将10000H-1000FH中的8个字,逆序拷贝到20000H-2000FH中。
MOV AX,2000H
MOV DS,AX

MOV AX,1000H
MOV SS,AX    ;将1000H设为堆栈段地址
MOV SP,0000H 
;为什么要把SP设为0呢,因为下面要执行的是出栈指令,出栈是SP+2;题目上说了,栈段中只有8个字,从1000:0000-1000:000F,当然要从0开始了。你试着把堆栈中的数据比作一串糖葫芦,从上到下依次是1,2,3……出栈就是吃糖葫芦,先吃0(如果有的话^_^),然后1,2,3……
POP ……
POP ……
redliu
[第2楼]   [ 回复时间:2010-02-04 23:37 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2010-02-02 22:32
二个字节为一个字,从10000H-1000FH刚好是16个字节,八个字,所以必须要从0开始,因为汇编中规定所有相关的编号都是从0开始算起,主要与机器语言地致,要是从1开始,就会有一个超出界的!
longwenj
[第3楼]   [ 回复时间:2010-03-23 11:45 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2010-03-08 11:21
把10000H-1000FH设成栈,那这堆栈就是满栈,当然SP就是=0了啊。然后进行出栈操作就行了。
7_plz
[第4楼]   [ 回复时间:2010-03-24 23:38 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-12-27 20:47
其实估计LZ不明白的是:

1:入栈是先SP=SP-2
   出栈是后SP=SP+2 
2:DS是数据段,访问内存时指向
   SS是栈段,是PUSH的入栈和POP的出栈指向
  例:POP [0] 是将栈段中(SS)的数据取出,写入数据段DS的[0]地址

设置SP=0  先对[0](SS=1000H)读数据   通过POP [E] (DS=2000H)操作将数据传入[E]
fangchaotom
[第5楼]   [ 回复时间:2010-04-27 20:21 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-04-18 18:39
书上69页有啊,ip=0满栈了啊
danny
[第6楼]   [ 回复时间:2010-05-05 22:10 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-04-30 14:38
(1)中栈的段地址为2000,每次PUSH将数据段的偏移地址对应的数据写入栈顶;(2)中栈的段地址为1000,每次POP将栈顶元素写入数据段内。
wxb2422
[第7楼]   [ 回复时间:2010-08-25 10:45 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-08-19 19:51
感谢4楼兄弟的解释,终于搞懂了。以前被DS和SS搞晕了
84404037
[第8楼]   [ 回复时间:2010-10-05 18:41 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-09-25 21:54
MOV AX,2000H 
MOV DS,AX 

MOV AX,1000H 
MOV SS,AX    ;将1000H设为堆栈段地址 
MOV SP,0000H  
这题的意思就是设成1000:0000为栈.然后通过出栈把数值送到DS的内存中
为什么为0就是说,。出栈的规则是先-2再出栈。要想准确的指定数值是先要加2所以为0000H
y_xiaopeng890903
[第9楼]   [ 回复时间:2010-11-12 18:39 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-11-11 17:55
谁有监测点3.2的完整答案,麻烦给贴出来好吗,谢谢了,拜托了,我这没有答案,郁闷,如果再加上解释就更好了,呵呵
y_xiaopeng890903
[第10楼]   [ 回复时间:2010-11-12 18:46 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-11-11 17:55
因为这是出栈,你把它与入栈时sp设置为0010联系起来想一下就明白了
lvjayd
[第11楼]   [ 回复时间:2011-01-06 06:17 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-12-30 06:46
4楼的 谢谢了!明白了。
oakes0329
[第12楼]   [ 回复时间:2021-05-19 06:14 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2021-05-11 21:07
4楼的兄弟,拜谢了
oakes0329
[第13楼]   [ 回复时间:2021-05-19 06:18 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2021-05-11 21:07
还是没有认真读书呀,书上明明白白写着呢,受教受教了。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved