寄存器BP初始值为零,为什么还要手动mov bp,0初始化解决方法
寄存器BP初始值为零,为什么还要手动mov bp,0初始化
代码如下,为什么把第22行的mov bp,0注释掉以后,程序会不一样
------解决方案--------------------
你怎么敢保证每次初始值都是0?调试和非调试下都是0?
------解决方案--------------------
是阿,你的程序只有那一行对Bp赋值为0,前面的地方都没赋值,怎么就一定是0?
------解决方案--------------------
整个计算机只有一个BP,却有多个程序在使用这一个BP。所以当你使用BP时,并不能保证它里边的数据一定是零。必需先初始化!
------解决方案--------------------
这种规则没必要记,都初始化就好了。
------解决方案--------------------
代码如下,为什么把第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时,并不能保证它里边的数据一定是零。必需先初始化!
------解决方案--------------------
这种规则没必要记,都初始化就好了。
------解决方案--------------------