assume cs:code,ds:data,ss:stack
data segment
db 'ibm ';6
db 'dec '
db 'dos '
db 'vax '
data ends
stack segment
db 5 dup(0)
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,0020h ;
mov ss,ax;单步调试的时候,发现就是在执行这一步的时候出现了问题,
;貌似是对内存的异常访问,内存越界这类的问题
;出现的问题是ntvdm.exe已停止工作!!!!!!!
mov sp,5
mov bx,6
mov cx,4
mov al,11011111b
cir1:
push cx
mov cx,3
mov si,0
cir2:
and byte ptr[bx+0+si],al
inc si
loop cir2
inc bx
pop cx
loop cir2
mov ax,4c00h
int 21h
code ends
end start
这里想延伸一下,我遇到的几个问题。
在debug程序的时候,加载到内存的所有汇编程序的CS寄存器的值都是14ea,感觉很奇怪,debug程序的时候,加载程序到内存,系统应该是给此段程序分配一个未用的系统内存,为什么有时候会和其他程序发生冲突,比如这里的内存越界,而且调试不同的程序的时候CS寄存器的值都是一样的?!
------解决方案--------------------------------------------------------
mov sp, 5 ?sp 必须对齐到 word(16-bit)/dword(32-bit) 吧