Encoding 如何在二进制操作码指令中编码ASCII文本?

Encoding 如何在二进制操作码指令中编码ASCII文本?,encoding,binary,cpu,cpu-architecture,opcode,Encoding,Binary,Cpu,Cpu Architecture,Opcode,我什么都不需要进修。我通常会问,如何在二进制文件的数据段中对数据字符串进行编码,以便在上执行 目的?假设我正在编写一个引导加载程序,我需要定义文件中使用的静态数据来表示要移动到内存地址的字符串,例如,使用 我假设一个地址的二进制编码实际上被翻译成二进制,相当于摩托罗拉68000内存映射中的十六进制表示,所以现在这不是问题 问题是。。。如何在二进制代码中对字符串/字符/符号进行编码,以便在M68000k操作码中进行编码?我读了手册、参考资料等,但没有一本涉及到这一点(从我所读的内容来看) 假设我想

我什么都不需要进修。我通常会问,如何在二进制文件的数据段中对数据字符串进行编码,以便在上执行

目的?假设我正在编写一个引导加载程序,我需要定义文件中使用的静态数据来表示要移动到内存地址的字符串,例如,使用

我假设一个地址的二进制编码实际上被翻译成二进制,相当于摩托罗拉68000内存映射中的十六进制表示,所以现在这不是问题

问题是。。。如何在二进制代码中对字符串/字符/符号进行编码,以便在M68000k操作码中进行编码?我读了手册、参考资料等,但没有一本涉及到这一点(从我所读的内容来看)

假设我想编码
move.l#'SEGA',$A14000
。我将得到这个结果操作码(不考虑如何编码ASCII字符):

半字节1=移动长,半字节2=内存寻址模式,后面三个字节等于地址

我的问题是,我是否可能将每个字符串按字符以文字ASCII编码,作为前面的指令MAM半字节的一部分


我对此感到困惑,希望有人知道如何在指令中对数据文本进行编码。

我曾经使用过4种不同的汇编语言进行编程,摩托罗拉M68HC11就是其中之一。根据我的经验,ASCII仅用于显示目的。低级别的CPU将所有内容都视为二进制值,它无法区分ASCII字符和其他字符。尽管像x86这样的高级汇编语言支持AAA(ASCII调整为加法)这样的指令,这确保在两个ASCII数字相加后,结果仍然是合法的ASCII数字。 因此,它主要依赖于汇编程序,如果汇编程序支持指令move.l#‘SEGA’,$A14000,这可能会起作用,但由于您不使用汇编程序并直接编写操作码,因此必须将ascii码编码为二进制,例如ascii码“1”(0x31)将在16位表示中编码为0000 0000 0011 0001。根据我的经验,没有机器代码可以移动整个字符串。因此,在微码中,首先提取第一个字符,然后将其复制到目标地址,然后提取第二个字符并将其复制到第二个位置,依此类推。。
假设指令长度为32位,且支持立即寻址模式,则前两个半字节表示移动指令和立即寻址类型,下两个半字节表示二进制编码字符,其余半字节表示要将其复制到的地址。希望这有帮助

您是否正在编写自己的汇编程序?如果是这样,您可能可以在M68000程序员手册中查找整数常量的编码(例如,
#'SEGA'
应该与
#0x53454741
相同)。如果您只是编写使用现有汇编程序编译的汇编代码,那么为什么不让汇编程序处理如何对指令进行编码?什么?不,我的目标是在架构所能想到的最低级别编写代码(即“机器代码”)。我没有使用任何汇编程序,这都是关于编码字符的。我正在用二进制格式从头开始编写操作码;没有汇编,也没有编写汇编程序;只需使用M68000二进制代码进行编码。好吧,查看反汇编代码并阅读M68000程序员参考手册可能会帮助您了解这些内容。但实际上,与编写汇编代码相比,手工编写机器代码并没有什么优势。它不允许你在“较低级别”做任何事情;编写完全相同的代码只会花费更长的时间。@Michael我意识到,但用二进制编写代码会更好地了解微序列器的工作原理,以及芯片的整体结构(例如是或否、1或0、触发器、晶体管等)。谢谢。你基本上是说我只是用ASCII等价物作为指令的一部分对每个字符进行编码?这是我的想法,但我不确定在各个方面是如何对待它的。我知道ASCII和二进制之间没有区别,但我不确定我是否只是用ASCII等价物拼出每个字符(例如,如果我移动的东西长得多,占用16个字符怎么办?)。我遇到的另一个问题是,我不知道操作码二进制指令中字符串数据/字符的确切编码位置(即在寻址模式之后、dest之前等)。据我所知,摩托罗拉68000手册没有解释如何或在何处对指令中的字符ASCII表示进行编码(至少我不明白)。
0010 1101 0100 0010 1000 0000 0000 0000