开机中。。。 发表于 2011-6-19 17:12:53

对于第七章and与or的不解

先看代码
assume cs:codesg,ds:datasg,ss:stacksg '实验6

datasg segment

db '1. display......'
db '2. brows........'
db '3. replace......'
db '4. modify.......'

datasg ends

stacksg segment

dw 0,0,0,0,0,0,0,0

stacksg ends

codesg segment

start:mov ax,stacksg
mov ss,ax
mov sp,16

mov ax,datasg
mov ds,ax
mov bx,0

mov cx,4

s0:push cx
mov si,0
mov cx,4

s: mov al,
and al,11011111b         'or al,11011111b
mov ,al

inc si
loop s

add bx,16
pop cx
loop s0

mov ax,4c00h
int 21h

codesg ends

end start
如果按照红色的代码执行,结果出现什么呢,就是把数据段里所有的数据全部置为........(对应的16进制为FF),何解,为什么一定必须add 就是置0而or一定是置1呢   我想知道原理,如果按照书本字面理解,我个人觉得 add与or是通用的,但是既然他是分开讲的,为什么不讲清楚呢


Miller01001 发表于 2011-6-19 18:23:35

0110 0010 = 在ASCII里面代表小写字母b
0100 0010 = 在ASCII里面代表大写字母B
    ↑
在上面可以看出第5位在不同,修改第5位就可以转换ASCII里面字母大小写
所以and 逻辑与,2位相同是为真,就是1,如果有一位不同就是0,假!
同理or逻辑或,有一位为真,即为真,全是假0,则为0!
比如 1   0   1   0
   andor and or
       1   1    0   0
-------------------------
      真真假 假
    1    1    0   0
即直接修改第5位就OK啦
比如BX的偏移地址单元ASCII值是大写的字母A
mov al,
or al,00100000 ;
因为字母大写A的ASCII的2进制数码为
0100 0001
      or
0010 0001
--------------
0110 0001
                                                                     

Y.H 发表于 2011-6-19 18:46:09

呃 你的程序是正确的 我也仔细看过,而至于你的问题,首先“.............”并不是零,这个点"."的符号在内存中可能就是ff   
而 andor指令 的原理我想你得自己看书,还是自己研究书本来得好!
and指令:逻辑“与”   
例: mov al,01100011
       andal,11011111
结果:    al=01000011
请注意看:上面的例从右往左数(以后都是这样)第一个"1"和下面的and 指令里的第一个"1"同样都是"1",所以and指令通俗一点说就是同位上如果都是”1"那么所得到的结果相应为也是"1“ ,如果一个为1,一个为0,那么结果就是0。而同时为0,那么结果也为0。
也就是说:mov al,01100011"与”andal,11011111里面的数据要同时为1时结果相应的位才为1,否则为0

or指令:逻辑”或“指令
例: mov al,01100011
       or    al,11011111
结果:    al=11111111
这样最明显了,也就是说只要两个数据中,同位上只要有一个是1那么结果的相应为也就是1
通俗说就是:只要mov al,01100011"或"or    al,11011111 里每个位上有一个为1话那么结果的相应位上必定为1。

希望这样说你能理解……

开机中。。。 发表于 2011-6-20 15:59:42

回1楼的热心同学,你说的and与or的定义我还是明白的,谢谢你不厌其烦的再次帮我复习一次,

当然如果1楼的这位同学可以帮我调试程序第35行 and al,11011111b把他改为 or al,11011111b 后为什么出现数据段的数据全部改为.......就更好了


再次表示感谢

开机中。。。 发表于 2011-6-20 16:03:07

回2楼的同学,首先对你表示感谢,感谢你抽出时间帮我解答我在学习中的困惑


当然如果2楼的这位同学可以帮我调试程序第35行 and al,11011111b把他改为 or al,11011111b 后为什么出现数据段的数据全部改为.......就更好了,这个才是我最想知道的答案


再次表示感谢



页: [1]
查看完整版本: 对于第七章and与or的不解