当前位置: 代码迷 >> 汇编语言 >> 寄存器BP初始值为零,为什么还要手动mov bp,0初始化解决方法
  详细解决方案

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

热度:10150   发布时间:2013-02-26 00:00:00.0
寄存器BP初始值为零,为什么还要手动mov bp,0初始化
代码如下,为什么把第22行的mov bp,0注释掉以后,程序会不一样

Assembly code
assume cs:code,ds:data,es:strackdata segment    db 'welcome to masm'data endsstrack segment    db 0,0,0,0,0,0strack endscode 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 21hcode endsend start        


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

那shell在载入程序的时候,会不会在cx中写入程序的长度(就像debug)
  相关解决方案