我想从大写转换为小写。 这是我写的代码,但仍然没有得到错误的地方。我知道要从上到下隐蔽我减去32以便尝试做到这一点。但是,在我运行程序后,它不会以小写形式显示结果。 谢谢你的帮助。
START ORG $1000
MOVE.L USERID,D0
SUBI.L #32323232,D0
MOVE.L D0,result
SIMHALT
USERID DC.L 'ABCD1234'
result DS.L 1
END START
答案 0 :(得分:1)
#32323232
是......好吧,价值32323232
。但是你试图将它应用于加载为32位(LONG)值的4个BYTE字符,这意味着每个字符占用它自己的8位,就像MOVE.L USERID,D0
之后D0
是$41424344
,其中$41 == 65 == 'A', $42 == 66 == 'B', $43 == 67 == 'C', $44 == 68 == 'D'
。
在十六进制格式中,每个字母(8位)恰好有两个十六进制数字,因为1个十六进制数字是从0
到15
的值,而这正是4位可以编码的总数,所以它是完美的转换4位< => 1个十六进制数字。
但是如果您将该值$41424344
并将其从十六进制转换为十进制,您将获得1094861636
。它仍然是相同的值,但突然间,字母不再容易“可见”了。它们隐藏在那里65*256*256*256 + 66*256*256 + 67*256 + 68 = 1094861636
,因为8位可以编码256
个不同的值,因此通过乘以256
的幂,您可以将十进制值放在特定的LONG的BYTE中。因此,例如66*256*256
表示“长度为第三个最低有效字节”,或者从技术上讲,它意味着将十进制值66
“向左移动16位”。实际上,如果您要将66
加载到D1
并执行LSL.L #16,D1
,则可以在不使用乘法指令的情况下计算66*256*256 == 66*65536 == (66<<16)
。
关于数字“基本N格式化”如何工作,你有M个数字(0到N-1)值,每个数字代表N的i次幂乘以它取决于它在数字中的位置。 IE浏览器。十进制(基数10)格式中的值123
写为“123”,其中“1”表示值10 2 ,“2”表示10 1 < / sup>,“3”表示10 0 值。
请注意,书面的“123”表格不是数字123
。数字123
纯粹是抽象实体,用于将其写在这里的十进制格式如“123”实际上是值本身的不完美镜像,十进制格式对此格式施加的限制很少,而不是实际值。可能是“基本N”格式的这些不完美的最简单的例子:值123
具有十进制的第二有效形式:122.99999..
具有无限量的“9”分数。它仍然是完全相同的值123
,但写的方式不同(而不是实际上,有限短的“123”变体)。
回到你的32323232
...你确实希望将每个32
置于特定的BYTE中,但这需要你使用32*256*256*256 + 32*256*256 + 32*256 + 32 = 538976288
十进制值。 PITA的计算方法是什么。
如果你想知道“为什么汇编来源充满了令人讨厌的十六进制数字?”,这就是这个冗长的答案以及所有这些数值练习的重点。
32
是$20
(你应该能够动态转换你的两个力量)。如果你想将$20
放在特定的字节位置,你必须写#$20202020
(当然它仍然是538976288
)。在编写源代码的时候,没有计算器,这当然是可以管理的,对吗?这就是答案,为什么十六进制格式在程序员程序员中如此受欢迎,它允许您立即查看单词/长值中特定字节的值是什么。
只是出于好奇,你的32323232
值分成字节为$01ED36A0
(你现在能看到它们吗?每个字节是8位=两个4位,4位=单个十六进制数字)。 / p>
正如马克所说,你需要补充一下。所以修复你的来源:
MOVE.L USERID,D0
ADDI.L #$20202020,D0
MOVE.L D0,result
这确实会在地址result
($101E
)的内存中显示“abcd”。
关于"bit manipulation":如果您要查看带有十六进制格式的ASCII表,您会看到大写/小写字母除了第6位之外具有相同的值,对于大写字母是明确的,并设置小写。
通过执行ORI.L #$20202020,D0
,您将在D0
长的每个字节中设置第6位,有效地为字母ASCII值执行“小写”。
ANDI.L #~$20202020,D0
(~$20202020
为$DFDFDFDF
,倒置$20
位模式)将为ASCII字母做“大写”。
XORI.L #$20202020,D0
将从上到下翻转到大写。
所有这些都将毫无意义地破坏其他ASCII字符,如数字和符号,因此只有当您知道您的值仅包含字母(“垃圾输入,垃圾输出”)时,这些位技巧才可用。