Φόρτωση ενός αρχείου από δίσκο στον EMULATOR 8086

συζητήσεις για assembly

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
RAE
Δημοσιεύσεις: 1
Εγγραφή: 22 Σεπ 2009 15:45

Φόρτωση ενός αρχείου από δίσκο στον EMULATOR 8086

Δημοσίευση από RAE » 22 Σεπ 2009 16:12

Γεια

H παρακάτω ρουτίνα του EMULATOR 8086 τυπώνει τα command line parameters. Αλλά δεν ξέρω πως να φορτόσω και μετά πως να εμφανίσω ένα αρχείο από τον δίσκο συγκεκριμένα την πρώτη παράμετρο θέλω μόνο στην οθόνη την p1 δηλαδή. Ευχαριστώ προκαταβολικά. Υπόψιν είμαι αρχάριος στην συμβολική γλώσσα 2 μέρες μόνο έχω πείρα :lol:

http://www.emu8086.com/dr/asm2html/asse ... m.asm.html

Κώδικας: Επιλογή όλων

; this sample prints out the command line parameters. 
; in dos you simply add this line after the executable, 
; for example: 

; param p1 p2 p3 

; in emulator it is possible to set parameters 
; by selecting "set command line paramters" from the "file" menu. 


name "param"


org     100h

jmp start

buffer db 30 dup (' ')
msg db 'no command line parameters!', 0Dh,0Ah, '$'


start:
mov     si, 80h       ; cmd parameters offset. 


; copy command line to our buffer: 
xor     cx, cx          ; zero cx register. 
mov     cl, [si]        ; get command line size. 

lea     di, buffer      ; load buffer address to di. 

cmp     cx, 0           ; cx = 0 ? 
jz      no_param        ; then skip the copy. 

inc     si              ; copy from second byte. 
next_char:
mov     al, [si]
mov     [di], al
inc     si
inc     di
loop    next_char

; set '$' sign in the end of the buffer: 
mov     byte ptr [di], '$'

; print out the buffer: 
lea     dx, buffer
mov     ah, 09h
int     21h

jmp     exit    ; skip error message. 

no_param:
; print out the error message: 
lea     dx, msg
mov     ah, 09h
int     21h



exit:
; wait for any key.... 
mov     ah, 0
int     16h

ret ; return control to the operating system. 

[ RAE ]

LightForce
WebDev Moderator
Δημοσιεύσεις: 3812
Εγγραφή: 13 Απρ 2003 23:49

Φόρτωση ενός αρχείου από δίσκο στον EMULATOR 8086

Δημοσίευση από LightForce » 22 Σεπ 2009 21:36

Hi RAE και καλώς ήρθες,

Υπάρχει παράδειγμα, το file-operations.asm που δείχνει λίγο-πολύ όλες τις βασικές λειτουργίες fileIO σε DOS, μήπως σου ξέφυγε.

Άβαταρ μέλους
RAE2
Δημοσιεύσεις: 5
Εγγραφή: 26 Σεπ 2009 14:05
Επικοινωνία:

Φόρτωση ενός αρχείου από δίσκο στον EMULATOR 8086

Δημοσίευση από RAE2 » 26 Σεπ 2009 14:42

Γεια

Έχασα user/pass και ξανάκανα εγγραφή στο φόρουμ!
Λοιπόν ας πούμε ότι θέλω να φορτόσω μόνο το αρχείο file1.txt που υπάρχει στον δίσκο και να εμφανίζω τα περιεχόμενα. ο EMULATOR μου δίνει αυτό το μήνημα.. :roll: :cry:

INT 21h, AH=09h -
address: 0713A
byte 24h not found after 2000 bytes.
; correct example of INT 21h/9h:
mov dx, offset msg
mov ah, 9
int 21h
ret
msg db "Hello$"

Tι είναι λάθος στον κώδικά μου;
Δεν έχω καταφέρει να το κάνω να δουλέψει όσο και αν προσπάθησα και πειραματίστικα 2 μέρες! Επίσης έχετε να προτείνεται άλλον 8086 assembler με IDE; p.s Ευχαριστώ για την απάντηση lightforce.

Κώδικας: Επιλογή όλων

   org 100h  
            
    ; open file            
    mov al, 2
    mov dx, offset filename
    mov ah, 3dh
    int 21h
    jc err
    mov handle, ax
          
    ; read file      
    mov bx, ax
    mov ah, 3fh
    mov cx, 1024
    mov dx, offset buffer
    int 21h
    jc err
   
    ; close file    
    mov ah, 3eh
    mov bx, handle
    int 21h      
                
    ; print file
    mov dx, offset buffer
    mov ah, 09h
    int 21h
      
                   
    ret
                   
    filename db "file1.txt", 0
    handle dw ?
    err:
    ; ....            
   
    buffer:

LightForce
WebDev Moderator
Δημοσιεύσεις: 3812
Εγγραφή: 13 Απρ 2003 23:49

Φόρτωση ενός αρχείου από δίσκο στον EMULATOR 8086

Δημοσίευση από LightForce » 27 Σεπ 2009 14:42

Hi RAE2,

Νομίζω ότι χρειάζεται πρώτα να τερματίσεις τον buffer σου με $ η null αναλόγως τον τρόπο που θα τον τυπώσεις μετέπειτα.
Το interrupt INT 21h / AH= 3Fh επιστρέφει τον αριθμό των bytes που διαβάστηκαν στον AX.

Το κομμάτι κώδικα:

Κώδικας: Επιλογή όλων

    ; read file     
    mov bx, ax
    mov ah, 3fh
    mov cx, 1024
    mov dx, offset buffer
    int 21h
    jc err
   
    ; close file   
    mov ah, 3eh
    mov bx, handle
    int 21h 
Καλύτερα ίσως θα μπορούσε να είναι έτσι:

Κώδικας: Επιλογή όλων

	; read from file
	mov [handle], ax
	mov bx, ax
	mov ah, 3fh
	mov cx, 0ffffh
	mov dx, buffer
	int 21h
	jc err
	
	; terminate buffer
	mov si, buffer
	mov bx, ax                        ; AX = number of bytes actually read
	mov byte [si+bx], 24h             ; terminate buffer
	 
	; close file
	mov ah, 3eh
	mov bx, [handle]
	int 21h
	jc err

Άβαταρ μέλους
RAE2
Δημοσιεύσεις: 5
Εγγραφή: 26 Σεπ 2009 14:05
Επικοινωνία:

Φόρτωση ενός αρχείου από δίσκο στον EMULATOR 8086

Δημοσίευση από RAE2 » 10 Οκτ 2009 12:16

Σ'ευχαριστώ για την απάντηση lightforce. Έχω επιτέλους working code μετά από πολλές δοκιμές και σπάσιμο νέυρων :kaloe:

Απάντηση

Επιστροφή στο “Assembly”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες