用or和and指令转换大写字母和小写字母
我们如果去观察A、B、C、D、E、F和a、b、c、d、e、f 这些字母的二进制表示形式为
A:01000001 a:01100001
B:01000010 b:01100010
C:01000011 c:01100011
D:01000100 d:01100100
E:01000101 e:01100101
F:01000110 f:01100110
我们通过观察会发现其实大写字母和小写字母就是二进制处的从右往左数第五位的差异,大写字母第五位为0,而小写字母第五位为1
代码如下所示
assume cs:codesg,ds:datasg
datasg segment
db 'BaSiC'
db 'iNfOrMaTiOn'
datasg ends
codesg segment
start: mov ax,datasg
mov ds,ax;让ds指向datasg段
mov bx,0 ;设置bx为0,让ds:bx指向的是BaSiC的第一个字母
mov cx,5
s: mov al,[bx]
and al,11011111B ;将al中的ascii码的第五个位置变成了0,就变为大写字母
mov [bx],al ;重新进行赋值
inc bx ; (bx)加1 也就是让ds:bx指向下一个字母
loop s
mov bx,5 ;设置bx = 5 ,ds:bx指向iNfOrMaTiOn的第一个字符
mov cx,11
s0:mov al,[bx]
or al,00100000B ;将al中的ASCII码的第5位置设置为1,变为小写字母
mov [bx],al ;赋值给ds:bx
inc bx
loop s0
mov ax,4c00h
int 21h
codesg ends
end start
这些小写字母和大写字母是怎么显示出来的?
其实当我们按下键盘a的时候,我们会看到屏幕上会有a显示出来,其实我们可以把这个过程可以是当我们按下a的时候,这个按键的信息就会被送入到计算机当中,计算机会利用ASCII的编码规则,对它进行编码,然后把它转换为61H给存储在内存的指定的空间,然后文本编辑软件就可以从内存中取出61H,然后把这个值给送到显卡上的显存当中,工作在文本模式下的显卡,就会用ASCII码的规则去解释显存当中的内容,显卡驱动显示器就会将字符”a”给画到屏幕上。