立地成佛 发表于 2012-9-11 23:53:26

代码、数据、栈都为同一段内存的时候,我运行会出错

代码、数据、栈都为同一段内存的时候,我运行会出错
比如我们将10000H-1001FH 安排为代码段,并在里面存储如下代码:
mvo ax,1000h
mov ss,ax
mov sp,0020h
mov ax,cs
mov ds,ax
mov ax,
add ax,
mov bx,
add bx,
push ax
push bx
pop ax
pop bx
设置cs=1000H IP=0
我在运行到mov bx,这里的时候就产生了错误,mov bx,变成了mov bx,,后续的代码更是完全变样了。
这是为什么呢,视频里说是可以的,但我的就不行

梦幻羽羽 发表于 2012-9-12 20:56:09

assume cs:code

code segment
   
start:mov ax,1000h
      mov ss,ax
      mov sp,0020h
      mov ax,cs
      mov ds,ax
      mov ax,
      add ax,
      mov bx,
      add bx,
      push ax
      push bx
      pop ax
      pop bx
          
code ends

end start呵呵,楼主, 你好

你只是有点小小的粗心而已,多多仔细就行了~

错误分析:
               1,这个打错了。mvo ax,1000h(你竟然能单步调试说明只是这里打错了)
               2,在对内存操作时,如果后面是 立即数(idata),就要明确 段寄存器( 0 不需要),不然错误,但是如果是后面不是立即数,那就不用, 下面列子

比如:后面是立即数,默认在ds中
          mov ax,ds:   ;显示在段寄存器
          mov ax,ds:
          mov ax,ds:
         后面是立即数,默认在es中
          mov ax,es:
          mov ax,es:

         后面不是立即数,默认在ds中
            mov ax ,
            mov ax,
       因为内存的索引方式不是 立即数,   所以不需要显示段地址

    呵呵, 楼主,相信你很快就会明白的,bye~

立地成佛 发表于 2012-9-12 21:38:45

还是不明白,mvo ax,1000h我在DEBUG里面是没有打错的,书写错误是没法保存执行的

好虾人 发表于 2012-10-7 13:30:41

应该是数据起冲突了,当你几个段使用同一内存单元的时候后面的数据会覆盖前面的数据,所以你后续代码才会出问题的

阔怀 发表于 2015-8-20 16:27:57

帮顶
页: [1]
查看完整版本: 代码、数据、栈都为同一段内存的时候,我运行会出错