鱼C论坛

 找回密码
 立即注册
查看: 1807|回复: 9

汇编程序6.3

[复制链接]
发表于 2014-4-27 15:20:39 | 显示全部楼层 |阅读模式

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

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

x
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:[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
               
code ends
end start

为什么 sp 是30h

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-27 16:17:14 | 显示全部楼层

我写错了 ,书上是DW 16个0, 因为没有h 嘛。是不是16个0 ,和定义的八个字 就是30h了?0后面没有h,就是字型数据吧,有h的是字数据。 这样应该才是20h吧。为什么是30h 呢?我们哪里搞错了呢?书上应该没错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

会不会dw 16个0 ,和第一次定义的八个 ,一共24个字,这样想的话就对了。cs:0 到 cs:2f ,用来存放定义的数据。 此时栈为空,所以指向cs:30h。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

但是为什么要定义16个0 呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-27 16:27:57 | 显示全部楼层
传说。 发表于 2014-4-27 16:17
我写错了 ,书上是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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-27 16:31:02 | 显示全部楼层
为之疯狂 发表于 2014-4-27 16:27
我差点就你搞晕了,什么叫 0 后面有h就是字型数据啊, h是代表这个数据是16进制数,而任何一个进制的0都是 ...

我写错了。 书上定义了16个0,这样是不是就对了? 但是上面是8个,下面为什么要定义16个0.。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-27 16:38:41 | 显示全部楼层
传说。 发表于 2014-4-27 16:31
我写错了。 书上定义了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 都不影响这个数的原本值.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-27 16:50:06 | 显示全部楼层
为之疯狂 发表于 2014-4-27 16:38
我这样跟你说吧, 你把计算器打开,输入 0000 你看下到底是显示 4个0 还是显示1个0, 我说这些是想告诉你, ...

dw 0 , 存到内存是00 00, 但是他定义16个0 是什么意思? 书上写的到底错没错?。。 麻烦你了。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-27 16:58:58 | 显示全部楼层
本帖最后由 传说。 于 2014-4-27 17:01 编辑
为之疯狂 发表于 2014-4-27 16:38
我这样跟你说吧, 你把计算器打开,输入 0000 你看下到底是显示 4个0 还是显示1个0, 我说这些是想告诉你, ...

明白了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-30 22:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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