用or和and指令转换大写字母和小写字母

用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”给画到屏幕上。

好的,我现在需要回答用户关于在微机原理中实现大小写字母转换的问题。用户已经提供了一些参考资料,包括汇编语言C语言的例子。我得先理清楚微机原理中常用的方法,以及如何结合这些资料来组织一个清晰的回答。 首先,微机原理中的大小写转换通常涉及到ASCII的操作。根据引用[1],小写大写字母在计算机内的表示有差异,需要了解它们的二进制形式。例如,引用[2]中提到大写字母F的十六进制是46H,转换成小写f需要加上20H,也就是使用OR指令加上00100000。这说明在汇编语言中,可以通过位运算来实现转换。 接下来,我需要明确小写大写字母的ASCII范围。大写字母A-Z是41H到5AH,而小写字母a-z是61H到7AH。两者之间的差值是20H,也就是32的十进制。所以,转换的关键在于如何通过加减或位操作来调整这个差值。 然后,根据引用[2]中的例子,使用OR 00100000可以将大写转为小写。而AND 11011111则可以将小写转为大写。这是因为在ASCII中,第5位(从0开始计数)决定了大小写。大写字母的第5位是0,小写的是1。因此,通过设置或清除这一位,可以实现转换。 用户提供的C语言例子(引用[3])也验证了这一点,通过加减(‘a’-‘A’),即32,来实现转换。这在汇编中使用位操作是等效的,但汇编更直接操作二进制位。 然后,我需要将这些信息组织成步骤,可能包括判断字符是否为字母,然后应用相应的位操作。在汇编中,通常会使用条件判断指令,比如CMP条件跳转,来确定字符的范围,然后使用ANDOR进行转换。 同时,用户的问题可能涉及到如何编写具体的汇编代。根据引用[1]中的例子,程序需要接收键盘输入,处理转换,然后显示结果。所以在回答中需要提到输入输出部分,以及转换逻辑。 需要注意的是,不同的汇编语法可能有些差异,但基本思路是相同的。要确保示例代的正确性,可能需要参考引用中的例子,但用户提供的引用[2]中有具体的指令使用,比如ORAND。 最后,生成相关问题,考虑用户可能进一步询问如何优化、处理非字母字符,或者在不同平台下的实现差异等。 总结回答的结构应该是: 转换原理(ASCII差异) 具体方法(位操作) 汇编实现步骤(输入、判断、转换、输出) 示例代 相关问题 需要确保所有技术术语准确,并正确引用提供的资料。同时,使用中文,数学表达式用 . . . ...,独立公式用 . . . ... ,但在这个问题中可能涉及较少数学公式,更多的是汇编指令ASCII的表示。 在微机原理中实现大小写字母转换,主要依赖ASCII的二进制特性与位操作指令。以下是具体实现方法: 一、转换原理 ASCII差异 大写字母(A-Z)ASCII范围: 41 H 41H(‘A’)到 5 A H 5AH(‘Z’) 小写字母(a-z)ASCII范围: 61 H 61H(‘a’)到 7 A H 7AH(‘z’) 两者差值为 20 H 20H(即十进制32),第5位(从0开始)为大小写标志位: 大写字母:第5位为 0(如F的二进制 01000110) 小写字母:第5位为 1(如f的二进制 01100110)2 位操作逻辑 转小写:大写字母ASCII值 OR 00100000B(即 20H) 示例:'F' (46H) → 46H OR 20H = 66H ('f') 转大写:小写字母ASCII值 AND 11011111B(即DFH) 示例:'f' (66H) → 66H AND DFH = 46H ('F') 二、汇编实现步骤 读取键盘输入 使用中断指令(如INT 21H的 01H功能)获取单个字符。 判断字符类型 若字符在 41H-5AH范围内:转小写(可选) 若字符在 61H-7AH范围内:转大写(可选) 其他字符:直接输出 应用位操作 转小写:OR AL, 20H 转大写:AND AL, DFH 显示结果 使用中断指令(如INT 21H的 02H功能)输出字符。 三、示例代(汇编语言) Assembly ; 读取键盘输入 MOV AH, 01H INT 21H ; 判断是否小写字母(61H-7AH) CMP AL, 'a' JB NotLower CMP AL, 'z' JA NotLower AND AL, 0DFH ; 转大写 JMP Display NotLower: ; 判断是否大写字母(41H-5AH) CMP AL, 'A' JB Display CMP AL, 'Z' JA Display OR AL, 20H ; 转小写 Display: ; 显示转换后的字符 MOV DL, AL MOV AH, 02H INT 21H 四、注意事项 非字母处理:需通过条件跳转(如JB/JA)跳过转换逻辑1 扩展性:可结合循环实现连续输入,或通过字符串操作处理多字符3
03-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值