Assembly 寄存器与ascii字符的比较

Assembly 寄存器与ascii字符的比较,assembly,compare,ascii,mips,Assembly,Compare,Ascii,Mips,在mips汇编中,如何将寄存器的内容(字节-我使用了lb命令)与基于ASCII表的字符进行比较?使用beq$t0,45,L1是否正确,其中45是字符的十进制数我认为有一件事可以帮助您忘记任何数据类型的概念。因为电脑没有那么聪明 你在问是否可以将$t0与十进制值45进行比较,当然你不能。MIPS处理器对十进制值45一无所知。它只知道两个数字:1和0。幸运的是,十进制值45可以表示为一组1和0-0010 1101,精确地说,是8位 然后,您想知道是否可以将$t0与ASCII字符“-”进行比较。MIP

在mips汇编中,如何将寄存器的内容(字节-我使用了lb命令)与基于ASCII表的字符进行比较?使用beq$t0,45,L1是否正确,其中45是字符的十进制数

我认为有一件事可以帮助您忘记任何数据类型的概念。因为电脑没有那么聪明

你在问是否可以将$t0与十进制值45进行比较,当然你不能。MIPS处理器对十进制值45一无所知。它只知道两个数字:1和0。幸运的是,十进制值45可以表示为一组1和0-
0010 1101
,精确地说,是8位

然后,您想知道是否可以将$t0与ASCII字符“-”进行比较。MIPS处理器对ASCII字符的了解不超过对十进制数字的了解。幸运的是,报告没有说“这是一个破折号”。它表示字符“-”映射到位模式
0010 1101
,我们称之为十进制45。或者hex 0x2D-但是处理器也不知道关于hex的任何信息

这是你真正幸运的地方。您不必在1和0中编写MIPS代码。你可以这样做,但你不必这样做——至少在你完成了特定的家庭作业后是这样一些聪明的家伙写了一个叫做汇编程序的东西,它能把你输入的字符(比如
beq$t0,45,L1
)转换成一组或多组32位二进制数字。如果这些家伙真的很聪明,他们可能会确保汇编器知道45和0x2D是同一件事,这也和ASCII字符“-”是同一件事

(但是是的……就像@Konrad说的,你不应该先通过MARS这样的汇编程序运行代码吗?)


编辑:正如@Patrik所指出的,
beq
接受两个寄存器,而不是一个寄存器和一个立即数。当然,你会得到一个语法错误,
beq$t0,45,L1
。您首先需要将值45加载到另一个寄存器(可能是$t8),然后
beq$t0,$t8,L1

原理是正确的,但如果出现语法错误,您可以将字符代码加载到寄存器中并比较寄存器:

li $t1, 45
beq $t0, $t1, L1

任何像样的汇编程序都允许您编写
beq$t0,'-',L1
,以防我们不能使用'?我的意思是,我们如何与十进制数字进行比较,然后在ascii表中查找它。我们使用的汇编程序没有汇编它-语法错误,这就是为什么我要问这个问题!首先,谢谢你的回答。其次,我们使用的汇编程序在命令中发现语法错误:$t0,45,L1,$t0,'-',L1,$T000101101,L1@user3185493看看@Patrik的答案。我应该记得,
beq
接受两个寄存器操作数,而不是一个寄存器和一个立即数。因此,您需要将校验值加载到寄存器中,然后进行比较。