tmlnsc 发表于 2011-7-21 22:11:38

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

本帖最后由 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 ,11011111B
    and ,11011111B
    and ,11011111B
    and ,11011111B
    and ,11011111B
   

   or ,00100000B
or ,00100000B
or ,00100000B
or ,00100000B
or ,00100000B
or ,00100000B
or ,00100000B
or ,00100000B
or ,00100000B
or ,00100000B
or ,00100000B

mov ax,4c00h
int 21h
codesg ends
end start

tmlnsc 发表于 2011-7-21 22:54:10

请小甲鱼指点

死亡请帖 发表于 2011-7-22 14:18:54

and ,11011111B是不行的,如果这样计算机就不知道是进行8位还是16位的运算,所以要指明数据尺寸。

fjs2009 发表于 2011-7-23 02:06:17

楼上说的对,我再补充一下:一定要把8位和16位区分开,比如按上面的程序。mov ax, 这样写的话,(ax)=6142H(a=61H,B=42H) ,而写成mov al,的话,(al)=42H(B),因为db 定义的是字节数据,两个字节为一个字(dw),所以要先,mov al,,再 and al,11011111b,最后再 mov ,al,才是正确的。

tmlnsc 发表于 2011-7-23 13:30:04

哦,明白了,谢谢了
页: [1]
查看完整版本: 转换为大写出错,转换为小写又成功了,不知错在哪里?