|
发表于 2015-10-17 22:56:08
|
显示全部楼层
assume cs:code 这里进行关联,常识吧
code segment 申请代码段
这里分第一个部分
start: mov ax,2000h
mov ds,ax 指定首地址
mov bx,0 bx清零
s:mov cl,[bx] 这里很好说,假如第一次循环,那么cl应该是0对不对
mov ch,0 在这里又把高位清零对不对
inc cx 在这里我们+1
inc bx 同理,加上1,为了第二次的循环
loop s (cx-1然后决定怎么执行) Loop指令是检测cx的值,为零才不循环对吧,那么说
,我们在这里的时候如果(cl不为零的话也就是我们
想要的值没有得到,那么跳到标识处继续。这样来说
只要[bx]不为0我们这里就会一直循环。
那么假如找到的话呢! cl的值就是0(bx传进来的) 然后又经过mov ch,0这句代码,这样我们得到的cx的值=0
那么这句代码 inc cx 又干嘛呢!是多余吗?不是的,因为loop循环之前必须判断 cx减去1到底
为不为零,才确定是否循环,所以呢! inc cx(在找到的情况下)前面两句已经吧cx定义为零了
那么如果这里不加这句代码的那么到了loop那里就会变成 cx(0)-1=-1,本来已经找到了,可是结果
变成了这样,那么又会再次进入死循环,嘿嘿!那样又有什么意义呢!得到了结果却没办法跳出
来传值,这样岂不是多做白用工吗? 那么加上了这句 那么到了loop那里就是 cx(1)-1=0,那么
我们就可以跳出来了对不对。
你明白了上面的,那么下面就不用我解释了吧
这里分第二个部分
ok:dec bx
mov dx,bx
mov ax,4c00h
int 21h
code ends
end start |
|