代码如下,为什么把第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时,并不能保证它里边的数据一定是零。必需先初始化!
------解决方案--------------------------------------------------------
这种规则没必要记,都初始化就好了。
------解决方案--------------------------------------------------------