推 Mgtmc:謝謝助教~所以第2的是A,B各佔一BYTE嗎? 140.112.247.77 10/12
→ Mgtmc:那請問testt10 + 1 可以存取到'B'嗎? 140.112.247.77 10/12
1. 是的,如同我列出來的記憶體內容,宣告WORD "AB"表示AB共用一個WORD,
也就是A、B各佔一個BYTE。
2. 沒有辦法直接用testt10+1取'B',因為你是定義WORD,而非BYTE,舉個例
子吧,一樣的宣告下,我寫:
mov ax,[testt10+1]
然後你會發現ax的值是0x4141,為什麼呢?這是因為在記憶體中,位址testt10
加上一個byte的位置剛好是41,而又因為testt10是宣告為WORD,所以一次是抓
一個WORD回來,且把這個WORD一樣依照little endian的方式放到ax中。所以如
果例子中的testt9是宣告為BYTE "EBCD",則這裡的ax會變成0x4541,就是因為
little endian的緣故。
我想可能有人會問,「那為什麼不寫 mov al,[testt10+1]呢?不就只取一個byte
嗎?」不過很不幸的,這樣的寫法是不被MASM(起碼我用的版本是這樣)接受的,
因為你的testt10是宣告為WORD,而al只有半個WORD的大小。
我想可能要再一次的提醒同學們,許多寫組語上遇到的的一些情形其實都是隨著Ass-
embler的不同而不同的,有的Assembler會接受一些奇怪寫法,然後很直覺的去組譯
它,但是有的Assembler會對user的程式碼有很嚴格的要求。等到同學們修系統程式
,自己親身寫過Assembler之後,必定會有更深一層的體會。所以如果同學們突然想
到有什麼寫法不知道結果會怎麼樣的,請一定要先親身寫個程式測試看看,相信會
有更多的收穫。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.61.33
推 starshine:助教真是太認真了 orz 218.166.100.85 10/13
推 Anncy:助教好棒!! 210.58.170.142 10/13
推 BigHeadBin:助教超認真!超棒的啦~~ 140.112.253.61 10/13
推 Mgtmc:我也被助教的熱忱和速度嚇到了~ 140.112.247.77 10/13
推 binbin:助教神到受不了了 140.112.31.56 10/14
推 kwunkwun:Great! 140.112.28.133 10/28