作者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