传说。 发表于 2014-4-27 15:20:39

汇编程序6.3

assume cs:code

code 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,30h
               
                mov bx,0
                mov cx,8
        s:        push cs:
                add bx,2
                loop s
               
                mov bx,0
                mov cx,8
        s0:        pop cs:
                add bx,2
                loop s0
               
                mov ax,4c00h
                int 21h
               
code ends
end start

为什么 sp 是30h

为之疯狂 发表于 2014-4-27 16:02:29

sp确实不可能会等于30H,从代码中可以看出一共定义了16个字型数据 2*16 = 32 转换成16进制也就是20H,楼主你可以去看另一个人的代码,和的一样sp他的也是32(10进制),不过问的问题不一样,下面这是链接:http://bbs.fishc.com/thread-46404-1-1.html

传说。 发表于 2014-4-27 16:17:14

为之疯狂 发表于 2014-4-27 16:02 static/image/common/back.gif
sp确实不可能会等于30H,从代码中可以看出一共定义了16个字型数据 2*16 = 32 转换成16进制也就是20H,楼主你 ...

我写错了 ,书上是DW 16个0, 因为没有h 嘛。是不是16个0 ,和定义的八个字 就是30h了?0后面没有h,就是字型数据吧,有h的是字数据。 这样应该才是20h吧。为什么是30h 呢?我们哪里搞错了呢?书上应该没错。

传说。 发表于 2014-4-27 16:27:08

为之疯狂 发表于 2014-4-27 16:02 static/image/common/back.gif
sp确实不可能会等于30H,从代码中可以看出一共定义了16个字型数据 2*16 = 32 转换成16进制也就是20H,楼主你 ...

会不会dw 16个0 ,和第一次定义的八个 ,一共24个字,这样想的话就对了。cs:0 到 cs:2f ,用来存放定义的数据。 此时栈为空,所以指向cs:30h。

传说。 发表于 2014-4-27 16:27:56

为之疯狂 发表于 2014-4-27 16:02 static/image/common/back.gif
sp确实不可能会等于30H,从代码中可以看出一共定义了16个字型数据 2*16 = 32 转换成16进制也就是20H,楼主你 ...

但是为什么要定义16个0 呢?

为之疯狂 发表于 2014-4-27 16:27:57

传说。 发表于 2014-4-27 16:17 static/image/common/back.gif
我写错了 ,书上是DW 16个0, 因为没有h 嘛。是不是16个0 ,和定义的八个字 就是30h了?0后面没有h,就是 ...

我差点就你搞晕了,什么叫 0 后面有h就是字型数据啊, h是代表这个数据是16进制数,而任何一个进制的0都是相等的,可以不加h,因为都是零0.

我看是不是16进制 是看 dw 来的,你不是定义了16个dw数据吗。
你可能以为dw 0,0,0,0,0,0,0,0这样就不是8个字型数据了,其实他存入内存的时候会自己往高位添0的,
也就是说你相当与你定义了, dw 0000,0000,0000……(这里一共有8个)

所以我说你一共是定义了 8+8 = 16 个字型数据,一个字型数据等 2 个字节,2*16 = 32 转16进制 20H

传说。 发表于 2014-4-27 16:31:02

为之疯狂 发表于 2014-4-27 16:27 static/image/common/back.gif
我差点就你搞晕了,什么叫 0 后面有h就是字型数据啊, h是代表这个数据是16进制数,而任何一个进制的0都是 ...

我写错了。 书上定义了16个0,这样是不是就对了? 但是上面是8个,下面为什么要定义16个0.。

为之疯狂 发表于 2014-4-27 16:38:41

传说。 发表于 2014-4-27 16:31 static/image/common/back.gif
我写错了。 书上定义了16个0,这样是不是就对了? 但是上面是8个,下面为什么要定义16个0.。

我这样跟你说吧, 你把计算器打开,输入 0000 你看下到底是显示 4个0 还是显示1个0, 我说这些是想告诉你,4个0 他同样是等于0 ,而这里要写4个0,是因为一个字型数据占2个字节,1个字节 = 8位2进制数 = 4位16进制数, debug 里面显示的 16位进制, 所以说他存放到内存的时候是 00 00 这样存放的,你在看下你的第一行,
我就拿0123H来说,其实0123H 你也可以写成123H,你要几组一句话,任何一个数,在左边添0 都不影响这个数的原本值.

传说。 发表于 2014-4-27 16:50:06

为之疯狂 发表于 2014-4-27 16:38 static/image/common/back.gif
我这样跟你说吧, 你把计算器打开,输入 0000 你看下到底是显示 4个0 还是显示1个0, 我说这些是想告诉你, ...

dw 0 , 存到内存是00 00, 但是他定义16个0 是什么意思? 书上写的到底错没错?。。 麻烦你了。。

传说。 发表于 2014-4-27 16:58:58

本帖最后由 传说。 于 2014-4-27 17:01 编辑

为之疯狂 发表于 2014-4-27 16:38 static/image/common/back.gif
我这样跟你说吧, 你把计算器打开,输入 0000 你看下到底是显示 4个0 还是显示1个0, 我说这些是想告诉你, ...
明白了。
页: [1]
查看完整版本: 汇编程序6.3