寄存器BP初始值为零,为什么还要手动mov bp,0初始化解决方法

寄存器BP初始值为零,为什么还要手动mov bp,0初始化
代码如下,为什么把第22行的mov bp,0注释掉以后,程序会不一样

Assembly code
assume cs:code,ds:data,es:strack

data segment
    db 'welcome to masm'
data ends

strack segment
    db 0,0,0,0,0,0
strack ends

code segment
    start:
    mov ax,strack
    mov ss,ax
    mov sp,8

    mov ax,data
    mov ds,ax
    mov ax,0B800h
    mov es,ax
    
    mov bp,0            ;就是她,爱她不容易
    mov bx,0
    mov cx,3
    s:
    push cx
    
    mov bx,0
    mov di,0
    mov cx,15
    s1:
    mov al,[bx]
    mov es:[bp][di],al
    inc bx
    add di,2
    loop s1
    
    add bp,160
    pop cx
    loop s
   
    mov bp,0
    mov si,1
    mov al,11110010b
    mov cx,15
    s2:
    mov es:[bp][si],al
    add si,2
    loop s2

    mov bp,160
    mov si,1
    mov al,10100100b
    mov cx,15
    s3:
    mov es:[bp][si],al
    add si,2
    loop s3

            
    mov bp,320
    mov si,1
    mov al,11110001b
    mov cx,15
    s4:
    mov es:[bp][si],al
    add si,2
    loop s4
    
    mov ax,4c00h
    int 21h
code ends

end start
    



    





------解决方案--------------------
你怎么敢保证每次初始值都是0?调试和非调试下都是0?
------解决方案--------------------
是阿,你的程序只有那一行对Bp赋值为0,前面的地方都没赋值,怎么就一定是0?
------解决方案--------------------
整个计算机只有一个BP,却有多个程序在使用这一个BP。所以当你使用BP时,并不能保证它里边的数据一定是零。必需先初始化!
------解决方案--------------------
这种规则没必要记,都初始化就好了。
------解决方案--------------------
探讨

那shell在载入程序的时候,会不会在cx中写入程序的长度(就像debug)