求大神来看看,奇怪的实验九问题!
源代码如下: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!
谢谢各位大神!!帮帮忙!
顶!俺来学习期待大侠指导~ 我这边提示图片来自qq空间,不可引用。看不到你的编译效果。 本帖最后由 コ契約^ō 于 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个字节????
请帮忙解说一下,万分感激!!!
add ax,0a0h 本帖最后由 贝壳 于 2012-9-3 16:53 编辑
刚才搞错了,是段地址,所以0ah表示的就是160个字节
本帖最后由 贝壳 于 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:20 编辑
再说简单点:
公式一: ax*16+si(十进制,下同)的结果构成了指针的地址,要想让指针指向下一行,需要让公式一的结果增加160。在上个循环里,si 增加了32,没有复原;ax的值被复原了。所以ax只需再增加8就够了。
贝壳 发表于 2012-9-3 17:16 static/image/common/back.gif
再说简单点:
公式一: ax*16+si(十进制,下同)的结果构成了指针的地址,要想让指针指向下一行,需要让 ...
非常感谢!!听君一席话,豁然开朗!!!我还真没想到这点!!看来这就是差距!!!
页:
[1]