At 11:04 AM 11/30/2012, Tom Ehlert wrote:
> > We have this snippet of code:
>
> > var a:array[0..255] of byte;
> > begin
> > asm
> > seges lea di,a
> > mov bx,0ffffh
> > mov dx,0ffffh
> > mov cx,256
> > mov ax,6501h
> > int 21h
> > end;
>
>it's simply a bug in your program.
>
> ES:DI -> country information buffer (see #01750)
>
>but your code does not load ES. so ES most likely points 'somewhere'
I think that is what he tries to do with that SEGES instruction.
Never used this and I was kind of surprised that my Borland Pascal 7
compiler is actually accepting it!
I don't have my Borland Pascal 7 manuals at hand (they are in
storage, as I haven't used them in years) and the (German) online
help in BP7 only refers to it as "segment prefix" with no further
explanation...
>where you don't expect it.
> push ss
> pop es
>should work (otherwise use a debugger)
>
> > If A is assigned to constant value (for i:=0 to 255 do a[i]:=2) it works.
>because your smart compiler turns this into something like
>
> push ss
> pop es
> mov cx,256
> mov al,2
> rep stosb
>
>and now es points to right segment.
Well, or simply using a different instruction all together, replacing
SEGES LEA DI, a
with
LES, DI, a
(while still considering the side effects of messing with the ES
register, but IIRC, that is within a BP7 program save to do)
That will properly point ES:DI to the buffer to fill...
Ralf
------------------------------------------------------------------------------
Keep yourself connected to Go Parallel:
TUNE You got it built. Now make it sing. Tune shows you how.
http://goparallel.sourceforge.net
_______________________________________________
Freedos-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freedos-devel