鱼C论坛

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

转换为大写出错,转换为小写又成功了,不知错在哪里?

[复制链接]
发表于 2011-7-21 22:11:38 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 loop 于 2011-7-23 19:49 编辑

看了第33讲,也就是第七章7.6内容,我想不能循环,用一个笨办法试试转换大小写字母,按讲应该是可以的,结果前面转换成大写字母不成功,而后面转为小写字母却又成功了,不知是什么原因?请鱼友们指点
附上代码如下:
assume cs:codesg,ds:datasg
datasg segment
db 'BaSiC'
db 'iNfOrMaTiOn'
datasg ends
codesg segment
start: mov ax,datasg
       mov ds,ax
    
    mov bx,0
    
   
 
    and [bx],11011111B
    and [bx+1],11011111B
    and [bx+2],11011111B
    and [bx+3],11011111B
    and [bx+4],11011111B
    
 
     or [bx+5],00100000B
  or [bx+6],00100000B
  or [bx+6],00100000B
  or [bx+8],00100000B
  or [bx+9],00100000B
  or [bx+10],00100000B
  or [bx+11],00100000B
  or [bx+12],00100000B
  or [bx+13],00100000B
  or [bx+14],00100000B
  or [bx+15],00100000B
  
  mov ax,4c00h
  int 21h
codesg ends
end start

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-7-21 22:54:10 | 显示全部楼层
请小甲鱼指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-22 14:18:54 | 显示全部楼层
and [bx],11011111B是不行的,如果这样计算机就不知道是进行8位还是16位的运算,所以要指明数据尺寸。

评分

参与人数 1荣誉 +2 鱼币 +1 收起 理由
loop + 2 + 1 赞一个!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-23 02:06:17 | 显示全部楼层
楼上说的对,我再补充一下:一定要把8位和16位区分开,比如按上面的程序。mov ax,[bx] 这样写的话,(ax)=6142H(a=61H,B=42H) ,而写成mov al,[bx]的话,(al)=42H(B),因为db 定义的是字节数据,两个字节为一个字(dw),所以要先,mov al,[bx],再 and al,11011111b,最后再 mov [bx],al,才是正确的。

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
loop + 2 + 2 赞一个!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-7-23 13:30:04 | 显示全部楼层
哦,明白了,谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-19 02:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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