MIPS中的字符与字符串

本文详细介绍了在MIPS架构中,如何使用8位字节和16位半字来表示和操作字符,包括Java的Unicode编码区别,以及C字符串与Java字符串的区别。同时,讨论了MIPS对栈和字地址的对齐策略,以及相应的加载/存储指令示例。
摘要由CSDN通过智能技术生成

MIPS中的字符与字符串

一、一个字符的长度

今天大多数计算机使用8位的字节来表示一个字符,即ASCII码。但是需要了解的是,Java采取Unicode编码方法,为了更具有包容性,该编码采用16位,即一个半字来表示一个字符。另外的一点区别是,C字符串以空字符’\0’来标示字符串的结束,但是Java中的字符串是没有结束符的。

二、MIPS实现字符的存取

1、对于用字节来表示的字符

①取字节(load byte)

示例:lb $s0,0($sp)

含义:将栈指针sp指向的寄存器的最右边的8位放入s0中最右边的8位,并将取到的8位中的最高位(符号位)填充到左24位中的每一位。

②存字节(store bytes)

示例:sb $s0,0($gp)

含义:将寄存器 s0 中的低 8 位数据存储到全局指针 $gp指向的内存地址处

2、对于用半字来表示的字符

①取半字(load half)

示例:lh $s0,0($sp)

含义:将栈指针sp指向的寄存器的最右边的16位放入s0中最右边的16位,并将取到的16位中的最高位(符号位)填充到左16位中的每一位。

②取半字(load half unsigned)

示例:lhu $s0,0($sp)

含义:将栈指针sp指向的寄存器的最右边的16位放入s0中最右边的16位,没有符号位的扩展

②存半字(store half)

示例:sh $s0,0($gp)

含义:将寄存器 s0 中的低16位数据存储到全局指针 $gp指向的内存地址处

3、栈和字地址的对齐

MIPS试图保存栈和字地址的对齐,因此程序总是用lw和sw来访问栈,这意味着一个字符在栈中被分配了四个字节,尽管他不需要这么多。这就是上面使用全局指针而不是栈指针来示范存半字和存字节的原因

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值