羊羽生 发表于 2013-11-3 23:06:41

问题7.8里的sp的定义

这里sp定义为16,我的理解应该为50H,不知道该怎么理解,附上该程序的一部分代码
assume cs:codesg,ds:datasg,ss:stacksg
datasg segment
db '1. display      '
db '2. brows      '
db '3. replace      '
db '4. modify       '
datasg ends
stacksg segment
dw 0,0,0,0,0,0,0,0;用栈来保存cx
stacksg ends
codesg segment
start:
       mov ax,stacksg
           mov ss,ax
           mov sp,16;为什么是16而不是50H

LinuxDeepin 发表于 2013-11-4 06:54:34



dw 0,0,0,0,0,0,0,0

dw 定义字形数据 ,共 8 个
一个字形数据两个字节组成,8 个字形数据一共有 16 个字节
因为计算机从 0 开始计算,所以 sp 指向 16 ,或者是 10H

羊羽生 发表于 2013-11-4 19:52:21

LinuxDeepin 发表于 2013-11-4 06:54 static/image/common/back.gif
dw 0,0,0,0,0,0,0,0

dw 定义字形数据 ,共 8 个


谢谢 ,不过前面db定义的数据呢 这两个不是放在一起么 我看之前的例题好像都把前面的数据也算进去计数的

1236 发表于 2013-11-4 20:09:08

你可能写的是王爽的书上的嵌套loop循环那里,保存cx,直接Mov dx,cx这样多方便啊

羊羽生 发表于 2013-11-5 23:48:35

1236 发表于 2013-11-4 20:09 static/image/common/back.gif
你可能写的是王爽的书上的嵌套loop循环那里,保存cx,直接Mov dx,cx这样多方便啊

王爽老师的意思是有时候寄存器不够用,就放到内存里

1236 发表于 2013-11-6 00:35:02

羊羽生 发表于 2013-11-5 23:48 static/image/common/back.gif
王爽老师的意思是有时候寄存器不够用,就放到内存里

额 那就按你的方法用栈吧 你dw了8个字形单元 也就是16个字节,正好16 不是50

羊羽生 发表于 2013-11-6 14:52:10

1236 发表于 2013-11-6 00:35 static/image/common/back.gif
额 那就按你的方法用栈吧 你dw了8个字形单元 也就是16个字节,正好16 不是50

不需要计算前面db的字节单元所占的内存么

1236 发表于 2013-11-9 15:18:19

羊羽生 发表于 2013-11-6 14:52 static/image/common/back.gif
不需要计算前面db的字节单元所占的内存么

因为内存是不分段的,所以你这个两种情况,第一,如果你mov ax,ds,mov ss,ds,也就是把段地址当做了栈地址,那么你sp设置成50是对的,如果你是mov ax,stacksg,mov ss,ax 那么你应该把sp设置成16 很明显你这个源码是属于第二种情况

高凯 发表于 2013-11-9 22:36:21

sp是堆栈指针吧

要没时间了 发表于 2013-12-2 12:23:05

别管上面的!

阔怀 发表于 2015-8-12 12:22:15

{:1_1:}
页: [1]
查看完整版本: 问题7.8里的sp的定义