读书人

寄存器BP初始值为零为什么还要手动m

发布时间: 2012-04-03 12:38:19 作者: rapoo

寄存器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)

读书人网 >汇编语言

热点推荐