daten segment der 2. assembler datei verwenden stat das der ersten



  • Wie schaft man es, das man in einer 2ten Assemblerdatei, die ein eigendes Datensegmend hat, kurzzeitig das Daten Segmend von diesem zu verwenden.

    Realmod-assembler mit masm

    Bsp:

    main.asm:

    extrn upprint:far
    
    daten	segment
    blabla	db „Lalala etc“, „$“
    daten	ends
    
    staple	segment
    	dw 128 dup(?)
    staple	ends
    
    code	segment
    	assume ds:daten, cs:code, ss:staple
    begin:	
    	mov ax, daten
    	mov ds, ax
    
    	call upprint
    
    	mov ah, 4ch
    	int 21h
    
    staple	ends
    	end begin
    

    hw.asm:

    public upprint
    
    daten	segment
    text	db „Hallo Welt“, „$“
    daten	ends
    
    code	segment
    	assume ds:daten, cs:code
    
    upprint proc far
    
    	;leider erscheint kein Text auf dem Bildschirm.
    	; meine Idee wäre gewesen, 
    	; ein push ds einzufügen, und mit mov ax, daten  und mov ds, ax den ds dazu zu bringen
    	; auf dieses segment zu zeigen. Kann das überhaupt funktionieren, wenn man push ds macht
    	; weil mov ds, daten geht ja auch nicht.
    	push dx
    	push ax
    	lea dx, text
    	mov ah, 9
    	int 21h
    	pop ax
    	pop dx
    	ret
    upprint endp
    
    code	ends
    	end
    


  • BigGreenFoot schrieb:

    staple	ends
    	end begin
    

    das stimmt was nicht.

    Außerdem:
    man kann, segment public für die Zuordung zu einem Segment benutzen.
    Und wenn man sich nicht dauernd mit Assemblerdirektiven herumärgern möchte, dann kann man die Segmentzuordnung auch selber machen, dabei ist zu berücksichtigen, dass im Realmode die Segmentaddressen per
    Segment * 16 + Offset gebildet werden.
    Für Module braucht man die Segmentezuordung nicht neu machen. Guck am besten immer genau nach, was im Debugger/Disassembler in dieser Richtung vor sich geht und probier ein bißchen herum und protokolliere die Fehler.



  • sofern deine Version es unterstützt, benutze EXTERNDEF.


Anmelden zum Antworten