鱼C论坛

 找回密码
 立即注册
查看: 2169|回复: 8

[已解决]求大神来看看,奇怪的实验九问题!

[复制链接]
发表于 2012-9-2 21:51:38 | 显示全部楼层 |阅读模式

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

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

x
源代码如下:
assume cs:code,ds:data,ss:stack
data segment
     db'welcome to masm!'
     db 02h,24h,71h         
data ends
stack segment
     dw 8 dup(0)
stack ends
code segment
start:mov ax,data
         mov ds,ax
         mov ax,stack
         mov ss,ax
         mov sp,16
         mov bx,0
         mov si,0
         mov di,0
         mov ax,0b872h
         mov cx,3

s:       push ax
         push bx
         push cx
         mov es,ax
         mov cx,10h
s0:     mov al,ds:[bx]
         mov es:[si],al
         mov al,ds:10h[di]
         mov es:[si+1],al          
         inc bx
         add si,2
         loop s0
         inc di
         pop cx
         pop bx
         pop ax
         add ax,0ah
         loop s
         
         mov ax,4c00h
         int 21h
code ends
end start

编译后运行后为什么是这种效果:

                               
登录/注册后可看大图

谢谢各位大神!!帮帮忙!
最佳答案
2012-9-3 17:16:21
本帖最后由 贝壳 于 2012-9-3 17:20 编辑

再说简单点:
公式一: ax*16+si  (十进制,下同)的结果构成了指针的地址,要想让指针指向下一行,需要让公式一的结果增加160。在上个循环里,si 增加了32,没有复原;ax的值被复原了。所以ax只需再增加8就够了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-9-3 00:01:48 | 显示全部楼层
顶!俺来学习  期待大侠指导~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-9-3 02:48:17 | 显示全部楼层
我这边提示图片来自qq空间,不可引用。看不到你的编译效果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-9-3 10:44:41 | 显示全部楼层
本帖最后由 コ契約^ō 于 2012-9-3 10:45 编辑
贝壳 发表于 2012-9-3 02:48
我这边提示图片来自qq空间,不可引用。看不到你的编译效果。

哦,!!那我给你说说吧!!运行后就像这样:
                                 welcome to masm!
                                                                welcome to masm!
                                                                                               welcome to masm!         
是这样排列的!!这想是我段地址加错了,难道不该加160个字节????
请帮忙解说一下,万分感激!!!  
                                             
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-9-3 14:04:55 | 显示全部楼层
add ax,0a0h
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-9-3 15:09:48 | 显示全部楼层
本帖最后由 贝壳 于 2012-9-3 16:53 编辑

刚才搞错了,是段地址,所以0ah表示的就是160个字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-9-3 16:09:11 | 显示全部楼层
本帖最后由 贝壳 于 2012-9-3 16:58 编辑

如果你想出现这种效果的话:
                                  welcome to masm!
                                  welcome to masm!
                                  welcome to masm!
应该用:add ax,8
因为在s0段的循环里,指针已经随着8次
add si,2
移动了32个字节。所以ax再递增的时候,只需要递增128个字节了。

楼主,感觉这个答案正确吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-9-3 17:16:21 | 显示全部楼层    本楼为最佳答案   
本帖最后由 贝壳 于 2012-9-3 17:20 编辑

再说简单点:
公式一: ax*16+si  (十进制,下同)的结果构成了指针的地址,要想让指针指向下一行,需要让公式一的结果增加160。在上个循环里,si 增加了32,没有复原;ax的值被复原了。所以ax只需再增加8就够了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-9-3 22:19:55 | 显示全部楼层
贝壳 发表于 2012-9-3 17:16
再说简单点:
公式一: ax*16+si  (十进制,下同)的结果构成了指针的地址,要想让指针指向下一行,需要让 ...

非常感谢!!听君一席话,豁然开朗!!!我还真没想到这点!!看来这就是差距!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-27 23:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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