fjs2009 发表于 2011-7-20 17:25:18

实验五 第6题,看着没有问题,运行却有问题,请指教。

assume cs:code
a segment
   dw 1,2,3,4,5,6,7,8,9,0aH,0bH,0cH,0dH,0eH,0fH,0ffH
a ends

b segment
   dw 0,0,0,0,0,0,0,0
b ends

code segment
start:mov ax,a
      mov ds,ax
   
      mov ax,b
      mov ss,ax
      mov sp,30

      mov bx,0
      mov cx,4
   s:push
      add bx,2
      loop s
   
      mov ax,4c00H
      int 21H
   
code ends
end start以上就是我写的代码,通过MASM编译器编译和连接成.EXE文件后在DEBUG里面运行。动行完mov ss,ax
这一句后,下一句mov sp,30自动完成的,正常,再下一句,应该是mov bx,0呀,在DEBUG里面却是add ax,0000,我晕,有图为证。请小甲鱼老师或童鞋们斧正。
http://bbs.fishc.com/data/attachment/album/201107/20/172149b2dxzoo6bbuc26oo.png
http://bbs.fishc.com/data/attachment/album/201107/20/1721109rrz7rzng0q8g0cr.png

lsgo 发表于 2011-7-20 20:21:50

本帖最后由 lsgo 于 2011-7-21 00:17 编辑

按楼主的代码码了下运行了下没出现与其所问的相同错误但是在循环6次后又出现错误 如图所示
弄了好久不知原因所在所以在这就留于楼下牛人解答{:5_97:}

fjs2009 发表于 2011-7-20 20:51:50

那可能就是个别机子的差异了吧。也许是代码在修改内存单元数据时,触到了机子不可告人的秘密,可以报错。嘿嘿,反正我也说不清楚。怪事。

zzxxcc89 发表于 2011-7-21 15:02:45

本帖最后由 zzxxcc89 于 2011-7-21 15:24 编辑

试了一下呵呵,和楼主的情况一样。可能是系统的保护原因吧

死亡请帖 发表于 2011-7-22 14:33:15

b段的0太少了,至少要15个

fjs2009 发表于 2011-7-23 01:43:40

b段,dw 0,0,0,0,0,0,0,0 就有八个字,16个字节了呀,还少吗?

fjs2009 发表于 2011-7-23 19:28:28

我晕,终于搞明白了。优化的程序如下:
编写code段中的代码,用PUSH指令将a段中的前8个字型数据,逆序存储到b段中。
assume cs:code,ss:b,ds:a
a segment
   dw 1,2,3,4,5,6,7,8,9,0aH,0bH,0cH,0dH,0eH,0fH,0ffH
a ends

b segment
   db '                '
b ends

code segment
start:mov ax,a
      mov ds,ax
   
      mov dx,b
      mov ss,dx
      mov sp,10H

      mov bx,0
      mov cx,8
    s:mov ax,
      push ax
      add bx,2
      loop s
   
      mov ax,4c00H
      int 21H
   
code ends
end start

tmlnsc 发表于 2011-7-24 09:56:40

mov ax,b
      mov ss,ax
      mov sp,30

ss的起始直址是b,而ss段只有16个字节,所以sp应该是指向16或者是10H.

fjs2009 发表于 2011-7-26 11:38:43

呵呵,正确。
页: [1]
查看完整版本: 实验五 第6题,看着没有问题,运行却有问题,请指教。