鱼C论坛

 找回密码
 立即注册
查看: 3286|回复: 14

6.2在代码段中使用栈

[复制链接]
发表于 2011-8-7 13:37:25 | 显示全部楼层 |阅读模式

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

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

x
程序6.3中用DW定义了16个字空间,知识将8个字倒叙排放,为什么要用到16个字的栈空间啊,谁能给我讲讲啊
6.3.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-7 13:46:14 | 显示全部楼层
那只是个栈,不是一定要和数据相等的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-7 14:36:21 | 显示全部楼层
这个主要是让你看起来比较舒服,排列整齐,在debug模式下刚好是一行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-7 14:44:18 | 显示全部楼层
顶上~·顶上!~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-7 15:14:17 | 显示全部楼层
我定义了八个  怎么不行啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-7 15:50:21 | 显示全部楼层
  1. assume cs:codesg
  2. codesg segment
  3.         dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
  4.         dw 0,0,0,0,0,0,0,0
  5. start: mov ax, cs
  6.            mov ss, ax
  7.            mov sp, 32
  8.            mov bx, 0
  9.            mov cx, 8
  10.         s:push cs:[bx]
  11.         add bx, 2
  12.         loop s
  13.        
  14.         mov bx, 0
  15.         mov cx, 8
  16.   s0:pop cs:[bx]
  17.      add bx, 2
  18.          loop s0
  19.          mov ax, 4c00h
  20.          int 21h
  21. codesg ends
  22. end start
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-7 15:50:53 | 显示全部楼层
这个代码不对吗怎么  求不出来啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-7 15:52:17 | 显示全部楼层
  1. assume cs:codesg
  2. codesg segment
  3.         dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
  4.         dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  5. start: mov ax, cs
  6.        mov ss, ax
  7.            mov sp, 30h
  8.           
  9.            mov bx, 0
  10.            mov cx, 8
  11.         s: push cs:[bx]
  12.            add bx, 2
  13.            loop s
  14.           
  15.            mov bx, 0
  16.            mov cx, 8
  17.         s0:pop cs:[bx]
  18.            add bx, 2
  19.            loop s0
  20.           
  21.            mov ax, 4c00h
  22.            int 21h
  23. codesg ends
  24. end start
复制代码
这个代码可以啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-7 16:04:51 | 显示全部楼层
assume cs:codesg
codesg segment
        dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
        dw 0,0,0,0,0,0,0,0
start: mov ax, cs
           mov ss, ax
           mov sp, 32
           mov bx, 0
           mov cx, 8
        s:push cs:[bx]
        add bx, 2
        loop s
        
        mov bx, 0
        mov cx, 8
  s0:pop cs:[bx]
     add bx, 2
         loop s0
         mov ax, 4c00h
         int 21h
codesg ends
end start



我的电脑可以运行。
未命名.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-7 16:14:22 | 显示全部楼层
仔细查找呗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-11 00:29:19 | 显示全部楼层

课本为什么是   mov sp, 30  而小甲鱼的是    mov sp, 32        我来探讨下 dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
这里是 16个字  型数据
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h     这里是 8个字  型数据  进栈 出栈 都是 8个字  型数据

16个字型数据+进栈8个字型数据+出栈8个字型数据=32     那么push执行的步骤一. sp-2  二 . ss:sp  

那么来看下 检测点6.1 第2题小甲鱼 答安
(2)
assume cs:codesg
codesg segment
    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
    dw 0,0,0,0,0,0,0,0,0,0
start:
    mov ax,cs     ;cs为所填第一空
    mov ss,ax
    mov sp,24h    ;此条指令为所填第二空
    mov ax,0
    mov ds,ax
    mov bx,0
    mov cx,8
s:
    push [bx]
    pop cs:[bx]    ;此条指令为所填第三空
    add bx,2
    loop s
   
    mov ax,4c00h
    int 21h
codesg ends
end start
  

按照上面的分析dw 0,0,0,0,0,0,0,0,0,0这里是 10个字  型数据
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h     这里是 8个字  型数据  进栈 出栈 都是 8个字  型数据
10个字型数据+进栈8个字型数据+出栈8个字型数据=26
为什么小甲鱼这里不是 mov sp,26h   而是 mov sp,24h    ;此条指令为所填第二空  求解




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-12 17:26:11 | 显示全部楼层
楼上的算法错误。仔细研究吧。十进制与十六进制不要混淆了。(8+10)*2/16=?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-12 18:43:59 | 显示全部楼层
栈太小可能会出错,具体我也不是很清楚
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-13 15:32:10 | 显示全部楼层
据我研究,push的时候,不止sp指向的内存会改变,前面10个字节也会改变,至少debug下是这样的
上图了:
ss=0BB0 cx=0044
首先我用r修改sp,使sp=0010
0BB0:0000  51 00 00 B9 08 00 B8 B3-0B 8E D8 B8 B4 0B 8E D0
0BB0:0010  BC 10 00 FF 37 43 43 E2-FA BB 00 00 B9 08 00 8F  
这时候按t,执行push cx
再查看内存
0BB0:0000  51 00 00 B9 00 00 00 00-01 00 B0 0B 98 05 44 00
0BB0:0010  BC 10 00 FF 37 43 43 E2-FA BB 00 00 B9 08 00 8F
可以看到从0BB0:0004~0BB0:000F共12个字节的数据发生了改变
这是为什么呢,有知道的告诉下
1.JPG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-13 15:41:02 | 显示全部楼层
你喜欢可以改为8个字啊,呵呵,
这只是申请一段内存空间,多少无所谓,够用就行了,
不知是不是,呵呵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-26 15:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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