作者jiunlin (jiunlin)
看板PangSir
標題Re: 關於同學在下課時詢問的問題
時間Wed Oct 13 00:53:31 2004
[...quote deleted...]
◆ From: 140.112.30.82
1F:推 Mgtmc:謝謝助教~所以第2的是A,B各佔一BYTE嗎? 140.112.247.77 10/12
2F:→ 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
3F:推 starshine:助教真是太認真了 orz 218.166.100.85 10/13
4F:推 Anncy:助教好棒!! 210.58.170.142 10/13
5F:推 BigHeadBin:助教超認真!超棒的啦~~ 140.112.253.61 10/13
6F:推 Mgtmc:我也被助教的熱忱和速度嚇到了~ 140.112.247.77 10/13
7F:推 binbin:助教神到受不了了 140.112.31.56 10/14
8F:推 kwunkwun:Great! 140.112.28.133 10/28