鱼C论坛

 找回密码
 立即注册
查看: 3568|回复: 4

监测点6.1第二个问题的不解

[复制链接]
发表于 2011-5-15 23:23:11 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 小乌龟 于 2011-5-16 13:52 编辑

assume cs:codesg
codesg segment
    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
    dw 0,0,0,0,0
start:
    mov ax,cs     ;cs为所填第一空
    mov ss,ax
   mov sp,1ah    ;此条指令为所填第二空
    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

书上定义了10个字单元作栈空间,为什么甲鱼老师给的答案上只有5个?

还有关于第二个空mov sp,___,这里我想不通为什么填1a?
我的理解是:
       前边已经定义了8个字型数据,就是16个内存单元,栈空间是
从数据段后开始到往后10个字单元(20个内存单元),
那也是从15开始的,到35(16+20),sp应该指向36,即24H。
求解释……{:3_59:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-16 00:12:14 | 显示全部楼层
以下是我的理解!希望我没有理解错!
问题一、是鱼哥弄错了,应该是10个字!
问题二、如果栈定义为10个字,那SP就是你所说的24H (16+20=36=24H)

评分

参与人数 1荣誉 +1 收起 理由
loop + 1 欢迎交流讨论,鱼C有你更精彩~

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-16 00:29:52 | 显示全部楼层
本帖最后由 lxbwyr 于 2011-5-16 00:33 编辑

assume cs:codesg
codesg segment
    dw  0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h  这里定义了从0-F单元的内容
       CS : 01     23       45        67     89       AB     CD       EF      对应上面内容的偏移地址

    dw       0     ,       0      ,        0      ,     0   ,    0     这里定义了5个栈空间
      偏移 10-11    12-13       14  15     16-17   18-19  对应上面内容的偏移地址
再后面就是栈1a

start:
    mov ax,cs     ;
    mov ss,ax     将原来的代码段段地址通过ax 转给栈段
   mov sp,1ah   ;这时栈是空的。因此栈顶指向1A
    mov ax,0
    mov ds,ax    数据段DS,也就是最初来CS的段
    mov bx,0
    mov cx,8

评分

参与人数 1荣誉 +1 收起 理由
loop + 1 欢迎交流讨论,鱼C有你更精彩~

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-5-16 13:52:08 | 显示全部楼层
感谢两位,我明白了!
   第一,应该是甲鱼老师弄错了,应该是10个字;
   第二,如果按照甲鱼老师的定义(定义5个字),甲鱼老师填的la就是对的。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-16 14:14:46 | 显示全部楼层
本帖最后由 超越自我 于 2011-5-16 14:20 编辑

我的理解是:首先数据段和栈段都是在cs段中,在这个段中总共是定义了13个字单元(这应该没错吧?),而sp是栈顶指针,sp指向的是13个字单元的后一个字节单元,也就是编号为26的那个字节单元(因为内存单元是从0开始编号的),转换成16进制即为1A


另外书本上的:
start:
    mov ax,cs     ;
    mov ss,ax     将原来的代码段段地址通过ax 转给栈段
   mov sp,1ah   ;这时栈是空的。因此栈顶指向1A
    mov ax,0  ;应该改成:mov ax,cs     
   mov ds,ax    数据段DS,也就是最初来CS的段
    mov bx,0
    mov cx,8

评分

参与人数 1鱼币 +2 收起 理由
loop + 2 欢迎交流讨论,鱼C有你更精彩~

查看全部评分

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

本版积分规则

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

GMT+8, 2024-3-29 08:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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