代码、数据、栈都为同一段内存的时候,我运行会出错
代码、数据、栈都为同一段内存的时候,我运行会出错比如我们将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,,后续的代码更是完全变样了。
这是为什么呢,视频里说是可以的,但我的就不行
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~ 还是不明白,mvo ax,1000h我在DEBUG里面是没有打错的,书写错误是没法保存执行的 应该是数据起冲突了,当你几个段使用同一内存单元的时候后面的数据会覆盖前面的数据,所以你后续代码才会出问题的 帮顶
页:
[1]