73 | | === D2.x === |
---|
74 | | |
---|
75 | | {{{ |
---|
76 | | #!d |
---|
77 | | /* |
---|
78 | | * Copyright (C) 2004 by Digital Mars, www.digitalmars.com |
---|
79 | | * Written by Lynn Allan |
---|
80 | | * This software is provided 'as-is' by a rusty asm-486 programmer. |
---|
81 | | * Released to public domain. |
---|
82 | | * |
---|
83 | | * Compile with: dmd test.d (uses dmd ver 2.046) |
---|
84 | | */ |
---|
85 | | |
---|
86 | | import std.stdio; |
---|
87 | | import std.string; |
---|
88 | | |
---|
89 | | void main () |
---|
90 | | { |
---|
91 | | string searchString = "The quick brown fox jumped over the lazy dog."; |
---|
92 | | // 00000000001111111111222222222233333333334444 |
---|
93 | | // 01234567890123456789012345678901234567890123 |
---|
94 | | immutable(char)* pss = &searchString[0]; // searchString[0]; |
---|
95 | | uint foundOffset = indexOf(searchString, 'z'); |
---|
96 | | uint zCode = 'z'; |
---|
97 | | uint len = searchString.length; |
---|
98 | | writefln("z found at: %s", foundOffset); |
---|
99 | | uint xCode = 'x'; |
---|
100 | | foundOffset = indexOf(searchString, 'x'); |
---|
101 | | len = searchString.length; |
---|
102 | | writefln("x found at: %s", foundOffset); |
---|
103 | | |
---|
104 | | asm { |
---|
105 | | cld; |
---|
106 | | mov ECX,len; |
---|
107 | | mov EAX,zCode; |
---|
108 | | mov EDI,pss; |
---|
109 | | repne; |
---|
110 | | scasb; |
---|
111 | | mov EBX,len; |
---|
112 | | sub EBX,ECX; |
---|
113 | | dec EBX; |
---|
114 | | mov foundOffset,EBX; |
---|
115 | | } |
---|
116 | | writefln("z found at: %s", foundOffset); |
---|
117 | | assert(foundOffset==38); |
---|
118 | | |
---|
119 | | asm { |
---|
120 | | cld; |
---|
121 | | mov ECX,len; |
---|
122 | | mov EAX,xCode; |
---|
123 | | mov EDI,pss; |
---|
124 | | repne; |
---|
125 | | scasb; |
---|
126 | | mov EBX,len; |
---|
127 | | sub EBX,ECX; |
---|
128 | | dec EBX; |
---|
129 | | mov foundOffset,EBX; |
---|
130 | | } |
---|
131 | | writefln("x found at: %s", foundOffset); |
---|
132 | | assert(foundOffset==18); |
---|
133 | | } |
---|
134 | | }}} |