鱼C论坛

 找回密码
 立即注册
查看: 3105|回复: 8

[争议讨论] 实验7 P172 讨论

[复制链接]
发表于 2011-9-28 10:32:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
sassume cs:code
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'                                                 ;定义21个字符串,每个字符串占用4字0-53h
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514      
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ;定义21个DWword双字数据 54-A7H
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800                                               ;定义21个word字型数据 A8-D1
data ends
table segment
      db 21 dup ('year summ ne ?? ')                                      ;定义21个 16字节数据 21组
table ends
code segment
start:mov ax,data
      mov ss,ax
   mov sp,0
   mov ax,table
   mov es,ax
   mov bx,0
   mov cx,21
s : pop es:[bx+0]
   pop es:[bx+2]
   add sp,51h
   pop es:[bx+5]
   pop es:[bx+7]
   add sp,51h
   pop es:[bx+10]
   sub sp,165
   add bx,16
  
   loop s
   
  
   mov ax,4c00h
   int 21h

code ends
end start
   
   
   
   
   
   
   

这为什么不行啊,高手帮我分析一下!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-28 11:15:14 | 显示全部楼层
没去细看,但你这代码怎么只有pop,之前的push呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-9-28 11:24:18 | 显示全部楼层

程序运行不起!
我把DATA 数据看成栈段。D1-0这是数据偏移地址。 我把SP设0 就想他加+2。指向年份。然后POP!但是不行。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-28 11:38:54 | 显示全部楼层
栈是一个很说不清的东西,用的时候一定得小心。
1、你data段的实际空间
大小为21*4+21*4+21*2
2、你设置data段为栈段,ss=ax='data',sp=0;在第一个pop后,取值的位置是哪儿?
取出的是ss:fffe和ss:ffff组成的字单元。而这两个内存空间在你的data段里面吗?
3、建议:这里直接用内存空间的直接调用比较清晰。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-9-28 12:34:47 | 显示全部楼层
tsembrace 发表于 2011-9-28 11:38
栈是一个很说不清的东西,用的时候一定得小心。
1、你data段的实际空间
大小为21*4+21*4+21*2

嗯,就是!所以不行,嘿嘿。
说不清楚。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-28 12:36:34 | 显示全部楼层
push pop要成对用的,你事先把数据存定义在栈中就不能这样取数据了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-28 12:38:04 | 显示全部楼层
定义数据段和附加段来操作,不用定义堆栈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-9-28 12:38:36 | 显示全部楼层
topcookie 发表于 2011-9-28 12:36
push pop要成对用的,你事先把数据存定义在栈中就不能这样取数据了

push pop要成对用,别有意义!
清楚!谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-9-28 12:39:30 | 显示全部楼层
topcookie 发表于 2011-9-28 12:38
定义数据段和附加段来操作,不用定义堆栈

我突然 突发奇想!。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-8 22:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表