|
主题 : : 实验5 第6题求牛人解惑·········· [待解决] |
回复[ 13次 ]
点击[ 1541次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-08-03 19:05 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-07-26 12:14 |
由于我把题目看错了 看成顺序排列了 这是我的顺序排列代码:
assume cs:code
a segment
dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code segment
start: mov ax,a
mov ds,ax
mov ax,b
mov ss,ax
mov sp,10h; SP设置成30h,执行到PUSH [BX]后,下一条指令怎么是ADC AL,00 ,是不是栈超界了
mov bx,0eh
mov cx,8
s: push [bx]
sub bx,2
;执行到LOOP时,用P命令可以编译,但是用T命令执行到CX=0003 BX=0004,SUB BX,+02H时
;弹出对话框CPU遇到无效命令,请选择关闭终止程序
loop s
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-08-03 21:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:268
信誉值:12
注册日期:2010-06-18 22:19 |
|
|
|
|
|
[第2楼]
[ 回复时间:2010-08-05 21:03 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-07-26 12:14 |
回复:[第1楼]
------------------
谢谢你 找到答案了,在不能确定一段内存空间中是否存放着重要数据和代码的时候,不能随意向其中写入内容 | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-09-29 21:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-09-12 18:06 |
回复:[第1楼]
------------------
谢谢你 找到答案了,在不能确定一段内存空间中是否存放着重要数据和代码的时候,不能随意向其中写入内容
------------------
回复:在纯dos下,应该没有问题,除非你是在windows的cmd下。 | | |
|
|
|
|
[第4楼]
[ 回复时间:2011-02-13 21:09 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-02-13 21:05 |
mov ax,b
mov ss,ax
mov sp,10h; SP设置成30h,执行到PUSH [BX]后,下一条指令怎么是ADC AL,00 ,是不是栈超界了
------------------
我也是刚学的,说说我的见解,SP应该肯定是要设置为10H,因为栈段开始地址是b,而不是cs
个人看法,大家一起学习。 | | |
|
|
|
|
[第5楼]
[ 回复时间:2011-04-12 07:17 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-02-21 22:36 |
mov ax,b
mov ss,ax
mov sp,10h; SP设置成30h,执行到PUSH [BX]后,下一条指令怎么是ADC AL,00 ,是不是栈超界了
------------------
我也是刚学的,说说我的见解,SP应该肯定是要设置为10H,因为栈段开始地址是b,而不是cs
个人看法,大家一起学习。
------------------
回复:那栈段开始地址是B,而不是cs,那开始的B为什么一定要是10H了,不可以是0H开始的吗?
题目只提到了把前8个DW定义的字单元逆向入栈,后面的就可以不用管了,8个字单元等于16个,因为起止是从0开始,15结束,栈顶指向下一个单元16,16=10H,不知道这么说对不对 | | |
|
|
|
|
[第6楼]
[ 回复时间:2011-04-14 12:51 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-04-04 12:43 |
mov ax,b
mov ss,ax
mov sp,10h; SP设置成30h,执行到PUSH [BX]后,下一条指令怎么是ADC AL,00 ,是不是栈超界了
------------------
我也是刚学的,说说我的见解,SP应该肯定是要设置为10H,因为栈段开始地址是b,而不是cs
个人看法,大家一起学习。
------------------
回复:那栈段开始地址是B,而不是cs,那开始的B为什么一定要是10H了,不可以是0H开始的吗?
题目只提到了把前8个DW定义的字单元逆向入栈,后面的就可以不用管了,8个字单元等于16个,因为起止是从0开始,15结束,栈顶指向下一个单元16,16=10H,不知道这么说对不对
------------------
回复:
哪如果这样说的话,请看课本P128,例题6.3,栈的定义从CS开始,那么SP应该为20h,课本为什么是30h | | |
|
|
|
|
[第7楼]
[ 回复时间:2011-06-08 21:59 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-05-30 17:38 |
mov ax,b
mov ss,ax
mov sp,10h; SP设置成30h,执行到PUSH [BX]后,下一条指令怎么是ADC AL,00 ,是不是栈超界了
------------------
我也是刚学的,说说我的见解,SP应该肯定是要设置为10H,因为栈段开始地址是b,而不是cs
个人看法,大家一起学习。
------------------
回复:那栈段开始地址是B,而不是cs,那开始的B为什么一定要是10H了,不可以是0H开始的吗?
题目只提到了把前8个DW定义的字单元逆向入栈,后面的就可以不用管了,8个字单元等于16个,因为起止是从0开始,15结束,栈顶指向下一个单元16,16=10H,不知道这么说对不对
------------------
回复:
哪如果这样说的话,请看课本P128,例题6.3,栈的定义从CS开始,那么SP应该为20h,课本为什么是30h
-------------------------------
p128 那点的栈定义的是16个字,那是32位该占2个段吧加上1个字段,所以sp是30h | | |
|
|
|
|
[第8楼]
[ 回复时间:2011-06-24 13:17 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-01-17 12:29 |
mov ax,b
mov ss,ax
mov sp,10H //此处SP设成10H,是因为栈段地址是段b的地址。所以应该是10H,如果设成30H后,那么实际物理地址就是SS:30H做为了栈底(SS是B段的,不是程序一开始的)。就与CS段发生地址冲突了。如果执行PUSH指令,就会修改了代码段的内容。当然如果希望SP是30H,那也是可以做得到,但是段地址ss就不能是b了,而应该是a了。 | | |
|
|
|
|
[第9楼]
[ 回复时间:2011-09-08 17:17 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-08-10 12:45 |
我支持8楼说法。
实验五里的所谓“总结”的东西,不能死套吧,那些X+几,X-几的填空,都是说要 求得SS或DS段相对于CS段的偏移,如果你设置了将 b段地址与SS相关联,那么就要把该栈段空间的起始地址看做是 b:0(或SS:0),空栈状态的栈顶就是 栈底+2 了。
当然你想利用前面总结那些所谓的规律,请明白这些规律的本质是什么,为什么有的是X-2,换个位置就是X+3了,如果实际操作中遇到位置和你在书本上学习都不一样的,你自己是否会计算出那几个段寄存器的相对位置呢? | | |
|
|
|
|
[第10楼]
[ 回复时间:2012-02-22 12:02 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-07-20 08:57 |
assume cs:code
a segment
dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code segment
start: mov ax,a
mov ds,ax
mov ax,b
mov ss,ax
mov sp,10h; SP设置成30h,执行到PUSH [BX]后,下一条指令怎么是ADC AL,00 ,是不是栈超界了
mov bx,0eh ;此处应该为 mov bx,10h
mov cx,8
s: push [bx]
sub bx,2
;执行到LOOP时,用P命令可以编译,但是用T命令执行到CX=0003 BX=0004,SUB BX,+02H时
;弹出对话框CPU遇到无效命令,请选择关闭终止程序
;bx值小了,[bx]不知道是什么地址了
loop s
mov ax,4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第11楼]
[ 回复时间:2012-06-03 15:33 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-05-20 23:04 |
回复:[第1楼]
------------------
谢谢你 找到答案了,在不能确定一段内存空间中是否存放着重要数据和代码的时候,不能随意向其中写入内容
------------------
回复:在纯dos下,应该没有问题,除非你是在windows的cmd下。
------------------
回复:请问什么是纯dos模式呢~~~在win7中打开的cmd和纯dos有什么不同呢~~~ | | |
|
|
|
|
[第12楼]
[ 回复时间:2012-08-10 14:27 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-08-10 10:09 |
楼主为什么喜欢到着写呢?
为什么不
mov ax,b
mov ss,ax
mov sp,10h
mov cx,8
mov bx,0
s:push [dx]
add bx,2
loop s
把bx设置为0,即为ds的数据起始位置,干嘛要倒着来啊! | | |
|
|
|
|
[第13楼]
[ 回复时间:2012-08-10 14:28 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2012-08-10 10:09 |
|