+ -
当前位置:首页 → 问答吧 → 寄存器BP初始值为零,为什么还要手动mov bp,0初始化

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

时间:2011-11-27

来源:互联网

代码如下,为什么把第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
    



    



作者: glouze   发布时间: 2011-11-27

你怎么敢保证每次初始值都是0?调试和非调试下都是0?

作者: mydo   发布时间: 2011-11-27

是阿,你的程序只有那一行对Bp赋值为0,前面的地方都没赋值,怎么就一定是0?

作者: PointertoPointer   发布时间: 2011-11-27

整个计算机只有一个BP,却有多个程序在使用这一个BP。所以当你使用BP时,并不能保证它里边的数据一定是零。必需先初始化!

作者: gaoyue_qq_1664507529   发布时间: 2011-11-27

明白了
LZ看见debug总会把bp置为零,就以为平时载入程序也会这样

问一下相关的问题
请问shell载入程序的时候,会不会在cx中写入程序的长度(就像debug)
平时载入程序的时候,会自动初始化哪几个寄存器

作者: glouze   发布时间: 2011-11-27