我剛剛注意到一些有趣的事情,並且我試圖獲得更好的理解。 我試圖使用Irvine WriteString調用。程序集x86 Irvine WriteString字節與Dword
Writestring
寫一個空結尾的字符串。
輸入:DX指向字符串偏移
INCLUDE Irvine32.inc
.data
fizz BYTE "Fizz", 0
...
MOV EDX, OFFSET fizz
CALL WriteString
CALL CrLf
而且完美地工作,我可以在我的窗口中看到 「菲斯」,就像在documentation。
但是,如果我嘗試使用DWORD,而不是BYTE
fizz DWORD "Fizz", 0
我要去看看 「zziF」 的提示窗口。 據我所知,唯一的區別是BYTE和DWORD,以位爲單位的大小(8位和32位)。 我真的不明白相反的順序。發生了什麼?
我很感謝每一個答案!
謝謝你的解釋! 嗯,你得到我我已經試圖存儲「FizzBuzz」作爲一個DWORD,但有一個建立錯誤,由於「太大常量」的大小,我想。 我真的不知道尺寸的限制。 但是,我正在瞭解endianness,但我從來沒有它可以導致這樣的事情。 所以基本上,使用字節而不是DWORD意味着我將有四個字符塊作爲BYTE,並且它的小字節序將按預期工作,如果我理解正確的話。 –
是的,單個字節的排序問題不起作用。至於「太大的常量」,顯然彙編器期望一個符合DWORD的字符串,所以4個字符是極限。逗號後面的零編碼爲另一個DWORD,佔用另外四個字節。爲了好玩,你可以嘗試看看彙編程序支持QWORD;那麼,你應該得到'zzuBzziF'。 –
謝謝,你幫了我很多!在我們的研究範例中,我甚至沒有看到QWORD,而且我今天剛剛學到了一些新東西。謝謝!現在我可以玩zzuBzziF!:) - –