u654f 发表于 2015-8-9 20:58:24

汇编疑问

本帖最后由 u654f 于 2015-8-10 12:33 编辑

assume cs:codesg,ds:datasg
datasg segment
        db 'welcome to masm!'
        db '................'
datasg ends
codesg segment
        start:
        mov ax,datasg
        mov ds,ax
        mov ss,ax
        mov sp,20h
        mov bx,14
        mov cx,8
        s:
        push
        dec bx
        dec bx
        loop s
        mov ax,4c00h
        int 21h
codesg ends
end start
以上代码是将第二行db作为栈,将第一行数据送入....中,代码达到了预期效果但还出现个疑问,第一段内存为何会发生改变?看图片

jmuxiaolu 发表于 2015-8-9 20:58:25

mov bx,14有点不太明白。不应该是mov bx,10h吗?要移动的数据有16个字节啊!

俞晨曦 发表于 2015-8-9 21:55:33

不科学啊!难道是用dosbox的原因吗?

u654f 发表于 2015-8-9 22:16:34

不知道是环境问题,还是代码问题。一步一步调试了。是循环到bx为8时发生改变的,但是程序里面都没有修改过这段内存的值,调试时发现bx为8时执行push高地址内存的8位数据会往低内存地址的数据平移了8位。有点莫名其妙。

u654f 发表于 2015-8-9 23:22:33

jmuxiaolu 发表于 2015-8-9 23:12
mov bx,14有点不太明白。不应该是mov bx,10h吗?要移动的数据有16个字节啊!

push 取得是m!   bx=16取得就是..了

qingboy895 发表于 2015-8-13 11:42:00

push 取得是m!   bx=16取得就是..了
这个办法好。。

H.FF 发表于 2015-8-24 23:18:41

完全看不出问题

狼之道 发表于 2015-8-31 21:35:36

路过,赚鱼币

y290176346 发表于 2015-9-3 23:26:28

感谢楼主的奉献 我要鱼币

u654f 发表于 2015-9-6 15:51:34

jmuxiaolu 发表于 2015-8-9 23:12
mov bx,14有点不太明白。不应该是mov bx,10h吗?要移动的数据有16个字节啊!

虽然问题没解决,但至少证明你动了脑子,强烈鄙视只管要鱼币不用脑子的!
页: [1]
查看完整版本: 汇编疑问