存储器Ox400000开始的一百个单元中存放着ASCII码,编写汇编语言程序,将其所有的小写字母转换成大写字母,对其他的ASCII码不做变换
时间: 2023-05-11 07:04:48 浏览: 508
以下是汇编语言程序的代码,可以将存储器Ox400000开始的一百个单元中的所有小写字母转换成大写字母,对其他的ASCII码不做变换:
```
MOV CX, 100 ; 循环100次
MOV SI, 400000h ; 存储器Ox400000开始的地址
LOOP_START:
MOV AL, [SI] ; 读取存储器中的一个字节
CMP AL, 'a' ; 判断是否为小写字母
JB NOT_LOWER_CASE ; 如果不是小写字母,跳过转换
CMP AL, 'z' ; 判断是否为小写字母
JA NOT_LOWER_CASE ; 如果不是小写字母,跳过转换
SUB AL, 20h ; 转换为大写字母
MOV [SI], AL ; 将转换后的字节写回存储器
NOT_LOWER_CASE:
INC SI ; 指向下一个字节
LOOP LOOP_START ; 循环
```
注意:这段代码只能处理存储器Ox400000开始的一百个单元中的数据,如果需要处理更多的数据,需要修改循环次数和起始地址。
相关问题
利用arm汇编实现:存储器从0x400000开始的100个单元中存放着ASCII码,编写程序,将其所有的小写字母转换成大写字母,对其他的ASCII码不变
以下是利用ARM汇编实现将ASCII码小写字母转换成大写字母的程序:
```
AREA my_program, CODE, READONLY
ENTRY
start MOV r0, #0x400000 ; 存储器起始地址
MOV r1, #100 ; 存储器中的单元数
ADD r2, r0, r1, LSL #2 ; 存储器结束地址
loop LDRB r3, [r0], #1 ; 读取存储器中的一个字节
CMP r3, #'a' ; 判断是否为小写字母
BLT skip ; 如果不是小写字母则跳过
CMP r3, #'z' ; 判断是否为小写字母
BGT skip ; 如果不是小写字母则跳过
SUB r3, r3, #'a'-'A' ; 转换为大写字母
STRB r3, [r0, #-1]! ; 保存转换后的字节
skip CMP r0, r2 ; 判断是否处理完所有字节
BNE loop ; 如果还有字节则继续循环
MOV r0, #0 ; 返回0
BX lr
END
```
该程序的实现思路是:
1. 用寄存器 r0 存储存储器的起始地址(0x400000);
2. 用寄存器 r1 存储存储器中的单元数(100);
3. 用寄存器 r2 存储存储器的结束地址(0x400000 + 100 * 4);
4. 进入循环:每次从存储器中读取一个字节,判断是否为小写字母,如果是则转换为大写字母,保存回存储器;
5. 判断是否处理完所有字节,如果没有则继续循环,否则返回0。
需要注意的是,ARM汇编中的地址是以字节为单位的,所以在计算存储器结束地址时需要将单元数乘以4。此外,由于 LDRB 和 STRB 指令只能读取/保存一个字节,所以在保存转换后的字节时需要使用带有后索引的 STRB 指令,即 STRB r3, [r0, #-1]!,这样可以先将存储器地址减1,再保存字节,从而避免使用额外的寄存器来保存地址。
存储器从0x3000开始的单元中存放着95个(包括空格字符)可打印字符,编写程序,将其所有的小写字母转换成大写字母,所有的大写字母转换成小写字母,对其它的 ASCII 码不做变换
好的,我来为您编写程序。首先需要了解 ASCII 码表中小写字母和大写字母的 ASCII 码对应关系:
小写字母a的ASCII码为0x61,大写字母A的ASCII码为0x41,它们的差值为0x20。
因此,将一个小写字母转换成大写字母,只需要将它的ASCII码减去0x20;将一个大写字母转换成小写字母,只需要将它的ASCII码加上0x20。
以下是程序代码:
```
.ORIG x3000
LOAD R0, x3000 ; 将存储器地址0x3000加载到R0中
LD R1, ASCII_A ; 将大写字母A的ASCII码加载到R1中
LD R2, ASCII_a ; 将小写字母a的ASCII码加载到R2中
LD R3, ASCII_Z ; 将大写字母Z的ASCII码加载到R3中
LD R4, ASCII_z ; 将小写字母z的ASCII码加载到R4中
LOOP:
LDR R5, R0, #0 ; 从存储器中加载一个字符到R5中
ADD R6, R5, #-32 ; 判断该字符是否为大写字母
BRzp UPPER ; 如果是,则跳转到转换为小写字母的代码
ADD R6, R5, #32 ; 判断该字符是否为小写字母
BRzp LOWER ; 如果是,则跳转到转换为大写字母的代码
BRnzp NEXT ; 如果不是字母,则直接跳转到下一个字符
UPPER:
ADD R5, R5, #-32 ; 将大写字母转换成小写字母
STR R5, R0, #0 ; 将转换后的字符存储回存储器
BRnzp NEXT ; 跳转到下一个字符
LOWER:
ADD R5, R5, #32 ; 将小写字母转换成大写字母
STR R5, R0, #0 ; 将转换后的字符存储回存储器
BRnzp NEXT ; 跳转到下一个字符
NEXT:
ADD R0, R0, #1 ; 将存储器指针加1,指向下一个字符
ADD R7, R3, R5 ; 判断是否到达存储器末尾
BRn LOOP ; 如果没有,则跳转回LOOP
HALT
ASCII_A .FILL x41
ASCII_a .FILL x61
ASCII_Z .FILL x5A
ASCII_z .FILL x7A
.END
```
程序的思路是先将存储器中的一个字符加载到R5中,然后判断它是否为大写字母或小写字母。如果是,则跳转到相应的转换代码;如果不是,则直接跳转到下一个字符。转换代码将字符的ASCII码加上或减去0x20,然后将转换后的字符存储回存储器。最后,判断是否到达存储器末尾,如果没有,则跳转回 LOOP 继续处理下一个字符。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)