. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->包含多个段的程序
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于实验5的(1)  [待解决] 回复[ 7次 ]   点击[ 605次 ]  
mengyikaisi
[帖 主]   [ 发表时间: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前面的那些数据也改变了,空栈的时候它们都是零啊,实在是不明白,麻烦大侠们解释下!谢谢!
mengyikaisi
[第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之后是数据变化
mengyikaisi
[第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之后是数据变化
iamalian
[第3楼]   [ 回复时间:2009-04-01 15:57 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-03-16 22:48
T跟踪的话,某些寄存器的状态值是要入栈的
yp12000
[第4楼]   [ 回复时间:2009-04-20 23:55 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-03-14 20:10
段地址必须为10H的倍数,也就是说必须为XXX0的形式 怎么可能以A或9结尾那?
bz00
[第5楼]   [ 回复时间:2009-04-22 18:48 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-04-22 18:40
楼主的问题也是我的问题.请高手回答的仔细些..谢谢
woliubin
[第6楼]   [ 回复时间:2009-04-23 03:35 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-04-20 05:51
上面的答案不对啊,第二问不应该是这个啊
zjxiaogaoren
[第7楼]   [ 回复时间:2009-04-29 08:58 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:1
注册日期:2009-04-20 20:16
楼主:
(1)data段中的数据没变,和以前一样 
(2)cs=0b6b  ss=0b6a  ds=0b69 
(3)有(2)中的数值关系可以看出来它们之间的关系 
 code段为X,则 date段为x-2,stack段为x-1 
回答是对的,因为题目让你编译连接然后debug,就是让你从2推出3这条关系
对于你所谓的问题,你可以参考下我发的内容
http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1004&qkSg=2&qID=34848&readSg=1
这是与T命令有关的,期待有志之仁共同来探讨下
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved