Hallo, guten Tag.
Ich möchte bitte 50 Daten umsetzen von Arraya nach Arrayb.
In ASM funktioniert es nicht.
QBX-Hauptprogramm:
1 | DECLARE sub testadr CDECL (byval a%, byval b%,byval c%, byval d%)
|
2 |
|
3 | rem $dynamic
|
4 | DIM Arraya%(2000)
|
5 | DIM Arrayb%(2000)
|
6 |
|
7 | FOR x% = 0 TO 50
|
8 | Arraya%(x%) = x%
|
9 | NEXT
|
10 |
|
11 | FOR x% = 0 TO 50
|
12 | Arrayb%(x%) = 0
|
13 | NEXT
|
14 | Arrayb%(51) = 777
|
15 |
|
16 | segia%=varseg(arraya%(0))
|
17 | ofsia%=varptr(arraya%(0))
|
18 |
|
19 | segib%=varseg(arrayb%(0))
|
20 | ofsib%=varptr(arrayb%(0))
|
21 |
|
22 | call testadr(segia%,ofsia%,segib%,ofsib%)
|
23 |
|
24 | for a%=0 to 51
|
25 | print arrayb%(a%)
|
26 | next
|
Mit diesem Programm funktioniert es nicht, es werden nur "0" angezeigt.
Wo liegt bitte der Fehler:
1 | #include <dos.h>
|
2 |
|
3 | void far testadr (int v_segment,int ofs,int v_segment1, int ofs1)
|
4 | {
|
5 | int* losa;
|
6 | int* losb;
|
7 |
|
8 | losa=(int*)MK_FP( v_segment,ofs);
|
9 | losb=(int*)MK_FP( v_segment1,ofs1);
|
10 |
|
11 | asm Push DS;
|
12 | asm Push SI;
|
13 |
|
14 | asm lds sI,losa ;
|
15 | asm les di,losb ;
|
16 | asm mov cx,50;
|
17 |
|
18 | gehe:
|
19 | asm mov Ax,[SI];
|
20 | asm mov [di],ax;
|
21 | asm Add SI,2;
|
22 | asm Add di,2;
|
23 | asm loop gehe;
|
24 |
|
25 | asm Pop SI;
|
26 | asm Pop DS;
|
27 | }
|
Danke.