|
主题 : : 关于实验5的(1) [待解决] |
回复[ 7次 ]
点击[ 605次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2009-03-15 21:35 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-08-21 22:38 |
我的答案
(1)data段中的数据没变,和以前一样
(2)(在我的电脑上是)cs=0b6b ss=0b6a ds=0b69
(3)有(2)中的数值关系可以看出来它们之间的关系
code段为X,则 date段为x-2,stack段为x-1
不知道答案对不对。
另外我在跟踪程序的时候发现,当执行完指令push ds:[0]后,也就是将数据压入栈,数据位于栈底,但是不知道什么原因数据上面的有些字节的地方改变了数据,在刚创建栈的时候都是0.(图在下面)
AX=0B69 BX=0000 CX=0042 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=0B69 ES=0B59 SS=0B6A CS=0B6B IP=000D NV UP EI PL NZ NA PO NC
0B6B:000D FF360000 PUSH [0000] DS:0000=0123
-t
AX=0B69 BX=0000 CX=0042 DX=0000 SP=000E BP=0000 SI=0000 DI=0000
DS=0B69 ES=0B59 SS=0B6A CS=0B6B IP=0011 NV UP EI PL NZ NA PO NC
0B6B:0011 FF360200 PUSH [0002] DS:0002=0456
-d 0b6a:0000
0B6A:0000 00 00 00 00 69 0B 00 00-11 00 6B 0B 6E 05 23 01 ....i.....k.n.#.
0B6A:0010 B8 6A 0B 8E D0 BC 10 00-B8 69 0B 8E D8 FF 36 00 .j.......i....6.
0B6A:0020 00 FF 36 02 00 8F 06 02-00 8F 06 00 00 B8 00 4C ..6............L
0B6A:0030 CD 21 07 00 74 0A FF 36-56 07 E8 21 FC 83 C4 02 .!..t..6V..!....
0B6A:0040 FF 06 56 07 5E 8B E5 5D-C3 90 55 8B EC 81 EC 90 ..V.^..]..U.....
0B6A:0050 00 56 C4 5E 06 26 8B 47-08 89 46 F8 26 83 7F 06 .V.^.&.G..F.&...
0B6A:0060 00 74 7F 26 8B 5F 06 D1-E3 8B 36 96 16 8B 00 89 .t.&._....6.....
0B6A:0070 86 72 FF 8B D8 D1 E3 8B-36 9A 16 8B 00 89 46 F6 .r......6.....F.
----------------------------------------------------------------
在0b6a:0000 ,2301就是压入的[0]数据,可是在2301前面的那些数据也改变了,空栈的时候它们都是零啊,实在是不明白,麻烦大侠们解释下!谢谢! | | |
|
|
|
|
[第1楼]
[ 回复时间:2009-03-15 22:35 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-08-21 22:38 |
在次跟踪了下程序,
assume cs:code,ds:data,ss:stack
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start: mov ax,stack //在这里查看了下栈中的数据都是零,
mov ss,ax
mov sp,16 //执行完上面两条指令后,栈中是数据有更改,这些数据是那里来的?
mov ax,data //执行到这里,栈中的数据在上面数据的基础上又改变了一个,改变的是第B个(11)
mov ds,ax // 到这里改变的也是第B个
push ds:[0] //下面的这就看不出什么来了
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
end start
--------------------------------
不明白上面那些数据的为什么会改变,特别是执行完mov ss,ax和 mov sp,16之后是数据变化 | | |
|
|
|
|
[第2楼]
[ 回复时间:2009-03-15 22:40 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-08-21 22:38 |
在次跟踪了下程序,
assume cs:code,ds:data,ss:stack
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start: mov ax,stack //在这里查看了下栈中的数据都是零,
mov ss,ax
mov sp,16 //执行完上面两条指令后,栈中是数据有更改,这些数据是那里来的?
mov ax,data //执行到这里,栈中的数据在上面数据的基础上又改变了一个,改变的是第B个(11)
mov ds,ax // 到这里改变的也是第B个
push ds:[0] //下面的这就看不出什么来了
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
end start
--------------------------------
不明白上面那些数据的为什么会改变,特别是执行完mov ss,ax和 mov sp,16之后是数据变化 | | |
|
|
|
|
[第3楼]
[ 回复时间:2009-04-01 15:57 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-03-16 22:48 |
|
|
|
|
|
[第4楼]
[ 回复时间:2009-04-20 23:55 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-03-14 20:10 |
段地址必须为10H的倍数,也就是说必须为XXX0的形式 怎么可能以A或9结尾那? | | |
|
|
|
|
[第5楼]
[ 回复时间:2009-04-22 18:48 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-04-22 18:40 |
楼主的问题也是我的问题.请高手回答的仔细些..谢谢 | | |
|
|
|
|
[第6楼]
[ 回复时间:2009-04-23 03:35 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2009-04-20 05:51 |
|
|
|
|
|
[第7楼]
[ 回复时间:2009-04-29 08:58 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:1
注册日期:2009-04-20 20:16 |
|