1{ %CPU=i8086,i386,x86_64 } 2 3program tasm16; 4 5{$ifdef cpui8086} 6{$asmcpu 80386} 7{$endif cpui8086} 8 9const 10{$ifdef cpui8086} 11 expect1: array [0..3] of byte = ( 12 $2E, // segcs 13 $67,$66, // db $67,$66 14 $AD // lodsw 15 ); 16 expect2: array [0..3] of byte = ( 17 $3E, // segds 18 $67,$66, // db $67,$66 19 $AD // lodsw 20 ); 21 expect3: array [0..3] of byte = ( 22 $36, // segss 23 $67,$66, // db $67,$66 24 $AD // lodsw 25 ); 26 expect4: array [0..3] of byte = ( 27 $26, // seges 28 $67,$66, // db $67,$66 29 $AD // lodsw 30 ); 31 expect5: array [0..3] of byte = ( 32 $64, // segfs 33 $67,$66, // db $67,$66 34 $AD // lodsw 35 ); 36 expect6: array [0..3] of byte = ( 37 $65, // seggs 38 $67,$66, // db $67,$66 39 $AD // lodsw 40 ); 41{$else} 42 expect1: array [0..4] of byte = ( 43 $2E, // segcs 44 $67,$66, // db $67,$66 45 $66,$AD // lodsw 46 ); 47 expect2: array [0..4] of byte = ( 48 $3E, // segds 49 $67,$66, // db $67,$66 50 $66,$AD // lodsw 51 ); 52 expect3: array [0..4] of byte = ( 53 $36, // segss 54 $67,$66, // db $67,$66 55 $66,$AD // lodsw 56 ); 57 expect4: array [0..4] of byte = ( 58 $26, // seges 59 $67,$66, // db $67,$66 60 $66,$AD // lodsw 61 ); 62 expect5: array [0..4] of byte = ( 63 $64, // segfs 64 $67,$66, // db $67,$66 65 $66,$AD // lodsw 66 ); 67 expect6: array [0..4] of byte = ( 68 $65, // seggs 69 $67,$66, // db $67,$66 70 $66,$AD // lodsw 71 ); 72{$endif} 73 expect7: array [0..0] of byte = ( 74 $2E // segcs 75 ); 76 expect8: array [0..0] of byte = ( 77 $3E // segds 78 ); 79 expect9: array [0..0] of byte = ( 80 $36 // segss 81 ); 82 expect10: array [0..0] of byte = ( 83 $26 // seges 84 ); 85 expect11: array [0..0] of byte = ( 86 $64 // segfs 87 ); 88 expect12: array [0..0] of byte = ( 89 $65 // seggs 90 ); 91 expect13: array [0..1] of byte = ( 92 $2E,$AC // segcs lodsb 93 ); 94 expect14: array [0..1] of byte = ( 95 $3E,$AC // segds lodsb 96 ); 97 expect15: array [0..1] of byte = ( 98 $36,$AC // segss lodsb 99 ); 100 expect16: array [0..1] of byte = ( 101 $26,$AC // seges lodsb 102 ); 103 expect17: array [0..1] of byte = ( 104 $64,$AC // segfs lodsb 105 ); 106 expect18: array [0..1] of byte = ( 107 $65,$AC // seggs lodsb 108 ); 109{$ifdef cpui8086} 110 expect19: array [0..2] of byte = ( 111 $F3, // rep 112 $66, // db $66 113 $A5 // movsw 114 ); 115{$else} 116 expect19: array [0..3] of byte = ( 117 $F3, // rep 118 $66, // db $66 119 $66,$A5 // movsw 120 ); 121{$endif} 122 123{$asmmode intel} 124 125procedure test1; assembler; nostackframe; 126asm 127 segcs; db $67,$66; lodsw 128end; 129procedure test2; assembler; nostackframe; 130asm 131 segds; db $67,$66; lodsw 132end; 133procedure test3; assembler; nostackframe; 134asm 135 segss; db $67,$66; lodsw 136end; 137procedure test4; assembler; nostackframe; 138asm 139 seges; db $67,$66; lodsw 140end; 141procedure test5; assembler; nostackframe; 142asm 143 segfs; db $67,$66; lodsw 144end; 145procedure test6; assembler; nostackframe; 146asm 147 seggs; db $67,$66; lodsw 148end; 149procedure test7; assembler; nostackframe; 150asm 151 segcs 152end; 153procedure test8; assembler; nostackframe; 154asm 155 segds 156end; 157procedure test9; assembler; nostackframe; 158asm 159 segss 160end; 161procedure test10; assembler; nostackframe; 162asm 163 seges 164end; 165procedure test11; assembler; nostackframe; 166asm 167 segfs 168end; 169procedure test12; assembler; nostackframe; 170asm 171 seggs 172end; 173procedure test13; assembler; nostackframe; 174asm 175 segcs lodsb 176end; 177procedure test14; assembler; nostackframe; 178asm 179 segds lodsb 180end; 181procedure test15; assembler; nostackframe; 182asm 183 segss lodsb 184end; 185procedure test16; assembler; nostackframe; 186asm 187 seges lodsb 188end; 189procedure test17; assembler; nostackframe; 190asm 191 segfs lodsb 192end; 193procedure test18; assembler; nostackframe; 194asm 195 seggs lodsb 196end; 197procedure test19; assembler; nostackframe; 198asm 199 rep; db $66; movsw 200end; 201 202procedure Error; 203begin 204 Writeln('Error!'); 205 Halt(1); 206end; 207 208{$ifdef cpui8086} 209{ This version works in all i8086 memory models } 210function CompareCode(cp: CodePointer; dp: Pointer; sz: SizeInt): Boolean; 211var 212 I: SizeInt; 213begin 214 for I := 0 to sz - 1 do 215 if Mem[Seg(cp^):Ofs(cp^) + I] <> Mem[Seg(dp^):Ofs(dp^) + I] then 216 begin 217 CompareCode := False; 218 exit; 219 end; 220 CompareCode := True; 221end; 222{$else cpui8086} 223function CompareCode(cp: CodePointer; dp: Pointer; sz: SizeInt): Boolean; 224begin 225 CompareCode := CompareByte(cp^, dp^, sz) = 0; 226end; 227{$endif} 228 229begin 230 if not CompareCode(CodePointer(@test1), @expect1, SizeOf(expect1)) then 231 Error; 232 if not CompareCode(CodePointer(@test2), @expect2, SizeOf(expect2)) then 233 Error; 234 if not CompareCode(CodePointer(@test3), @expect3, SizeOf(expect3)) then 235 Error; 236 if not CompareCode(CodePointer(@test4), @expect4, SizeOf(expect4)) then 237 Error; 238 if not CompareCode(CodePointer(@test5), @expect5, SizeOf(expect5)) then 239 Error; 240 if not CompareCode(CodePointer(@test6), @expect6, SizeOf(expect6)) then 241 Error; 242 if not CompareCode(CodePointer(@test7), @expect7, SizeOf(expect7)) then 243 Error; 244 if not CompareCode(CodePointer(@test8), @expect8, SizeOf(expect8)) then 245 Error; 246 if not CompareCode(CodePointer(@test9), @expect9, SizeOf(expect9)) then 247 Error; 248 if not CompareCode(CodePointer(@test10), @expect10, SizeOf(expect10)) then 249 Error; 250 if not CompareCode(CodePointer(@test11), @expect11, SizeOf(expect11)) then 251 Error; 252 if not CompareCode(CodePointer(@test12), @expect12, SizeOf(expect12)) then 253 Error; 254 if not CompareCode(CodePointer(@test13), @expect13, SizeOf(expect13)) then 255 Error; 256 if not CompareCode(CodePointer(@test14), @expect14, SizeOf(expect14)) then 257 Error; 258 if not CompareCode(CodePointer(@test15), @expect15, SizeOf(expect15)) then 259 Error; 260 if not CompareCode(CodePointer(@test16), @expect16, SizeOf(expect16)) then 261 Error; 262 if not CompareCode(CodePointer(@test17), @expect17, SizeOf(expect17)) then 263 Error; 264 if not CompareCode(CodePointer(@test18), @expect18, SizeOf(expect18)) then 265 Error; 266 if not CompareCode(CodePointer(@test19), @expect19, SizeOf(expect19)) then 267 Error; 268 Writeln('Ok!') 269end. 270