コ契約^ō 发表于 2012-9-2 21:51:38

求大神来看看,奇怪的实验九问题!

源代码如下:
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:
         mov es:,al
         mov al,ds:10h
         mov es:,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

编译后运行后为什么是这种效果:
http://b260.photo.store.qq.com/psb?/17fbd91d-a688-4be9-88b9-e9be395d0e05/Yayk7HG10ZNPPXl1*vM8UsPlEAJjTvf2RsGHkTuOdB8!/b/dIARApuyUAAA&bo=kAJQAeU!
谢谢各位大神!!帮帮忙!

网络学习 发表于 2012-9-3 00:01:48

顶!俺来学习期待大侠指导~

贝壳 发表于 2012-9-3 02:48:17

我这边提示图片来自qq空间,不可引用。看不到你的编译效果。

コ契約^ō 发表于 2012-9-3 10:44:41

本帖最后由 コ契約^ō 于 2012-9-3 10:45 编辑

贝壳 发表于 2012-9-3 02:48 static/image/common/back.gif
我这边提示图片来自qq空间,不可引用。看不到你的编译效果。
哦,!!那我给你说说吧!!运行后就像这样:
                                 welcome to masm!
                                                                welcome to masm!
                                                                                             welcome to masm!         
是这样排列的!!这想是我段地址加错了,难道不该加160个字节????
请帮忙解说一下,万分感激!!!
                                             

会游泳的猫 发表于 2012-9-3 14:04:55

add ax,0a0h

贝壳 发表于 2012-9-3 15:09:48

本帖最后由 贝壳 于 2012-9-3 16:53 编辑

刚才搞错了,是段地址,所以0ah表示的就是160个字节

贝壳 发表于 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个字节了。

楼主,感觉这个答案正确吗?

贝壳 发表于 2012-9-3 17:16:21

本帖最后由 贝壳 于 2012-9-3 17:20 编辑

再说简单点:
公式一: ax*16+si(十进制,下同)的结果构成了指针的地址,要想让指针指向下一行,需要让公式一的结果增加160。在上个循环里,si 增加了32,没有复原;ax的值被复原了。所以ax只需再增加8就够了。

コ契約^ō 发表于 2012-9-3 22:19:55

贝壳 发表于 2012-9-3 17:16 static/image/common/back.gif
再说简单点:
公式一: ax*16+si(十进制,下同)的结果构成了指针的地址,要想让指针指向下一行,需要让 ...

非常感谢!!听君一席话,豁然开朗!!!我还真没想到这点!!看来这就是差距!!!
页: [1]
查看完整版本: 求大神来看看,奇怪的实验九问题!