作者pj2 (pj2)
看板CSIE_ASM
标题Re: [请益] 关於 writestring 奇怪问题
时间Sun Dec 17 20:52:02 2006
wrtiestring 应是以null为结尾的byte string.
所以 add esi, type source 是危险的, 最後没留 null 字元的空间
inc esi 也很怪, 只填了 source 预留的 40 bytes 中的前 10 个 byte
assume MASM 帮你 initialize source 40 个 bytes 为 0, 则 inc esi
的结果当然是 10 个 'A'
至於 add esi, type source, 可能是因为前 4 个 bytes 填入 XX 00 00 00
(assume little endian and XX 是 A 的 ASCII code)
writestring 的结果就会是 A
以上纯属推测, 我想 debug 看一下 source 的记忆体内容就知道正确结果,
有错请帮忙更正
另外, 请问你是本课程的修课学生吗? '敝校教授'中的'敝校'是指?
※ 引述《Jimmy0398 ()》之铭言:
: 之前写一个简单的小程式,要产生10个随机英文字母到字串中。
: 可是我发现有点问题,和观念有点初入。翻书没获得简答...以下是Code
: -------------------------------------------
: Include Irvine32.inc
: .data
: source dword 10 dup(0)
: .code
: main proc
: mov ecx,10
: mov esi,0
: L1 :
: mov source[esi],'A'
: inc esi ; Correct
: add esi,type source ; Error
: Loop L1
: mov edx,offset source
: call writestring
: exit
: ---------------------------------------------
: 这个程式是刚刚打过精简版的,之前的被测试到不成样子。
: 如果是执行黄色那条(inc 1 byte ) 可以完整印出10个 A
: 反之红色的话(add 4 bytes) 反而会出错! 只印一个 A
: 以正常阵列来说,应该是增加一个资料型态(Type or 4)
: 可是这个程式,不管资料型态如何。都只能用 Inc ESI
: PS.(mov esi,offset source 一样一次只可加 1 byte)
: 因为试了很久没答案,拿去问敝校教授:说不清楚怎麽会这样OTZ
: 不知道是不是 WRITESTRING 的问题
: 希望能有人帮解惑了 感恩~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.136.120.43
1F:推 pcedwin:134不是台大 12/17 23:40