583413088 发表于 2012-2-3 20:44:04

大家看看这个代码有问题吗?

本帖最后由 583413088 于 2012-2-5 19:04 编辑

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, b
         mov ss, ax         ; 定义栈段地址
               mov sp, 16         ; 栈段偏移地址
               
               mov ax, a
               mov ds, ax         ; 定义数据段地址
         
               mov bx, 0          ; bX清零
               mov cx, 8          ; 定义循环次数
      s:   mov ax,
             push ax
               inc bx
               loop s
               
               

      mov ax, 4c00h
                int 21h
code ends
end start我一单步调试 就提示内存出错
帮帮忙啊 大家

独立日 发表于 2012-2-3 20:56:05

inc bx得改成   add bx,2    你定义的都是字大小的。

583413088 发表于 2012-2-4 13:51:55

独立日 发表于 2012-2-3 20:56 static/image/common/back.gif
inc bx得改成   add bx,2    你定义的都是字大小的。

我改了 可是当CX的值为3时还是错误啊

583413088 发表于 2012-2-4 19:26:30

大家帮帮忙啊 我总是找不出错啊

独立日 发表于 2012-2-4 21:09:50

不好意思,上次就是扫了一眼。没注意,你定义的栈段(8dw)貌似小于数据段(16dw)的大小,把栈段弄得16字大试试

583413088 发表于 2012-2-5 12:53:17

独立日 发表于 2012-2-4 21:09 static/image/common/back.gif
不好意思,上次就是扫了一眼。没注意,你定义的栈段(8dw)貌似小于数据段(16dw)的大小,把栈段弄得16字大试试

3Q 好了啊咋回事 为啥把栈空间 改成16字就没问题了啊

独立日 发表于 2012-2-6 08:41:33

我不是说了吗,因为你的数据段大小是16字,所以对应的栈段必须是16字,如果栈8字大小的话放不下,发生溢出。。

cyht33 发表于 2012-2-9 18:07:04

因为你入栈的数据长度超出定义栈的长度,所以报错
页: [1]
查看完整版本: 大家看看这个代码有问题吗?