当前位置: 代码迷 >> 汇编语言 >> 写SS寄存器程序错误终止
  详细解决方案

写SS寄存器程序错误终止

热度:5052   发布时间:2013-02-26 00:00:00.0
写SS寄存器程序异常终止
本帖最后由 wenhong609 于 2013-01-10 12:06:01 编辑

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) 吧
  相关解决方案