鱼C论坛

 找回密码
 立即注册
查看: 3037|回复: 4

[争议讨论] 对于第七章and与or的不解

[复制链接]
发表于 2011-6-19 17:12:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
先看代码
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,[bx+3+si]
and al,11011111b         'or al,11011111b
mov [bx+3+si],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是通用的,但是既然他是分开讲的,为什么不讲清楚呢


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 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
     and  or and or
       1   1    0   0
-------------------------
      真  真  假 假
    1    1    0   0
即直接修改第5位就OK啦
比如BX的偏移地址单元ASCII值是大写的字母A
mov al, [bx]
or al,00100000 ;
因为字母大写A的ASCII的2进制数码为
0100 0001
      or
0010 0001
--------------
0110 0001
                                                                       
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-19 18:46:09 | 显示全部楼层
呃 你的程序是正确的 我也仔细看过,而至于你的问题,首先“.............”并不是零,这个点"."的符号在内存中可能就是ff   
而 and  or  指令 的原理我想你得自己看书,还是自己研究书本来得好!
and指令:逻辑“与”     
例: mov al,01100011
       and  al,11011111
结果:    al=01000011
请注意看:上面的例  从右往左数(以后都是这样)第一个"1"和下面的and 指令里的第一个"1"同样都是"1",所以and  指令通俗一点说就是同位上如果都是”1"那么所得到的结果相应为也是"1“ ,如果一个为1,一个为0,那么结果就是0。而同时为0,那么结果也为0。
也就是说:mov al,01100011"与”and  al,11011111里面的数据要同时为1时结果相应的位才为1,否则为0

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

希望这样说你能理解……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-20 15:59:42 | 显示全部楼层
回1楼的热心同学,你说的and与or的定义我还是明白的,谢谢你不厌其烦的再次帮我复习一次,

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


再次表示感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-20 16:03:07 | 显示全部楼层
回2楼的同学,首先对你表示感谢,感谢你抽出时间帮我解答我在学习中的困惑


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


再次表示感谢



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 22:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表