Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem ASSEMBLER - nacitanie mena suboru a jeho otvorenie

Zdravim ... nacital som meno suboru a ked ho chcem otvorit (urcite taky mam v projekte) proste napise ze taky subor neexistuje. Mam pocit ze zle nacitavam nazov suboru preto ho to nenajde (znak naviac alebo daco take)

;NACITANIE MENA SUBORU
zadaj_sub:
call clrscr
nacitaj_sub:
vypis uvod_sub ;pomocny vypis
mov ah,0ah ;funkcia DOS na nacitanie retazca
mov dx,OFFSET subMeno ;do dx=zaciatok retazca
int 21h ;prerusenie
cmp subMeno[1],0 ;test ci je prazdny
jz prazdny_sub
xor bx,bx
mov bl,[subMeno+1] ;do bl=skutocnu velkost retazca
mov [subMeno+bx+2],'$' ;na koniec retazca pridaj '$'
jmp menu_vypis
prazdny_sub: ;ak bol zadany prazdny retazec tak skusi nacitat retazec znovu
call clrscr
vypis prazdny_ret
jmp nacitaj_sub

Předmět Autor Datum
daj sem cely program, a uzavri to do CODE sekcie nech tam ostanu medzery. Ale uz z toho utrzku vidim…
MM.. 06.03.2017 21:26
MM..
ajaj :/ to ma mrzi no snazim sa co mozem nenavidim assemblery :D vypisuje mi to chybu a vypise chyba…
Parker 06.03.2017 21:32
Parker
call clrscr nacitaj_sub: vypis uvod_sub ;pomocny vypis mov ah,0ah ;funkcia DOS na nacitanie retazca…
MM.. 06.03.2017 21:37
MM..
inac len tak BTW. na x86 existuje movzx t.j. nemusis robit xor dx, dx mov dl, neco ale rovno mozes…
MM.. 06.03.2017 21:49
MM..
mam subor textak halo.txt a ked to tam zadam ze halo.txt stale nic nejde :/ a spravil som to tak ako…
Parker 06.03.2017 21:53
Parker
Ma tam byt 0, ziadne uvodzovky. Skus si trebars napevno buffer DB 'halo.txt',0 mov dx, buffer a za…
MM.. 06.03.2017 22:36
MM..
Pise to uplne to iste :/ dal som mov dx,offset buffer
Parker 06.03.2017 22:55
Parker
Program spustas z jakej zlozky? Jak presne to spustas? ... a ano ma tam byt offset buffer to mas dob…
MM.. 06.03.2017 23:04
MM..
BTW. Neni ten halo.txt nahodou uz otvoreny inym programom? Skus ho premenovat.
MM.. 06.03.2017 23:06
MM..
subor je presne v tej zlozke v akej mam obj asm aj exe su tam spolu vsetky skusil som aj premenovat…
Parker 06.03.2017 23:09
Parker
Spustam to cele cez GUI Turbo Assembler aj run
Parker 06.03.2017 23:10
Parker
GUI to spusta z inej zlozky. Spust si cmd a vlez tam cez cd prikaz a spust si exe. potom ti to pojde…
MM.. 06.03.2017 23:13
MM..
aha :/ to ma mohlo napadnut :( ale bohuzial ak to chcem cez CMD spustit vypise to: This version of…
Parker 06.03.2017 23:16
Parker
Neviem jak spusta ten gui DOS programy, to mas 64bitove windows a v nom turbo assembler ci co??? To…
MM.. 06.03.2017 23:18
MM..
Ked sa chces vyhnut problemom so zlozkou tak si daj nazov suboru plnu cestu buffer DB 'C:\neco\neco\…
MM.. 06.03.2017 23:15
MM..
ani s plnou cestou to nejde :D :D :D toto je hrozne :/ myslis ze by bol problem ak mam projekt na ex…
Parker 06.03.2017 23:21
Parker
Neviem kde mas problem ale skusil by som si na tvojom mieste stiahnut dosbox, a tam si to skus spust…
MM.. 06.03.2017 23:23
MM..
jasne chapem idem to skusit dakujem :) ozvem sa ci to pojde :)
Parker 06.03.2017 23:25
Parker
http://devdocs.inightmare.org/x86-assembly-dos-fil e-inputoutput/ toto proste musi fungovat (OFFSET…
MM.. 06.03.2017 23:26
MM..
uz o funguje s DOS Boxom :) dakujem ti velmi pekne :) poslední
Parker 06.03.2017 23:41
Parker

ajaj :/ to ma mrzi no snazim sa co mozem nenavidim assemblery :D vypisuje mi to chybu a vypise chyba_sub co je v tretom kode

DATA SEGMENT:

subMeno         DB  MAXLENGTH+1,0,MAXLENGTH+1 dup(?)    ;meno suboru

NACITANIE NAZVU SUBORU:

zadaj_sub:  
        call clrscr
nacitaj_sub:        
        vypis uvod_sub              ;pomocny vypis
        mov ah,0ah                  ;funkcia DOS na nacitanie retazca
        mov dx,OFFSET subMeno       ;do dx=zaciatok retazca
        int 21h                     ;prerusenie
        cmp subMeno[1],0            ;test ci je prazdny
        jz prazdny_sub
        xor bx,bx
        mov bl,[subMeno+1]          ;do bl=skutocnu velkost retazca
        mov [subMeno+bx+2],'

;na koniec retazca pridaj '[/code]
jmp menu_vypis
prazdny_sub: ;ak bol zadany prazdny retazec tak skusi nacitat retazec znovu
call clrscr
vypis prazdny_ret
jmp nacitaj_sub [/code]

OTVORENIE SUBORU:

vypis_sub:
    mov ah,3DH              ;sluzba BIOSu na otvorenie suboru
    xor al,al               ;open mode, 0 - read only atributa
    mov dx,offset subMeno   ;nastavenie subor, ktory sa bude otvrat
    int 21h
    jnc pokracuj            ;ak nenastala chyba pokracuj v citani
    call clrscr
    vypis chyba_sub
    jmp menu_vypis          ;ak nastala chyba skoc na menu
    
pokracuj:  ...

call clrscr
nacitaj_sub:
vypis uvod_sub ;pomocny vypis
mov ah,0ah ;funkcia DOS na nacitanie retazca
mov dx,OFFSET subMeno ;do dx=zaciatok retazca
int 21h ;prerusenie
cmp subMeno[1],0 ;test ci je prazdny
jz prazdny_sub
xor bx,bx
mov bl,[subMeno+1] ;do bl=skutocnu velkost retazca
mov [subMeno+bx+2], 0 ; lebo Open File chce ASCIIZ !
...

vypis_sub:
mov ah,3DH ;sluzba BIOSu na otvorenie suboru
xor al,al ;open mode, 0 - read only atributa
mov dx,offset subMeno +2 ;lebo string zacina az tam!
int 21h
jnc pokracuj ;ak nenastala chyba pokracuj v citani
call clrscr
vypis chyba_sub
jmp menu_vypis ;ak nastala chyba skoc na menu

inac neni to zle, len trochu nestrukturovane / nepekne (to "vypis" sa mi nepaci, makro pis velkym pismenami alebo co a so zatvorkami nech sa to nezlieva s instrukciami apod).

Ma tam byt 0, ziadne uvodzovky.

Skus si trebars napevno

buffer DB 'halo.txt',0

mov dx, buffer
a zavolaj to otvorenie suboru 

potom sa stane co?
Program spustas z jakej zlozky a si vobec v DOSe a ne vo Windows? halo.txt je v ktorej zlozke?

P.S> dos programy by mali ist aj v 32bitovych win, int21 samozrejme emuluje Win.
P.S.2. DS register dufam nemenis nikde, ak ano tak ho musis nastavit nazad jak bol.

GUI to spusta z inej zlozky. Spust si cmd a vlez tam cez cd prikaz a spust si exe. potom ti to pojde.
Pracovna zlozka neni ta kde je exe ale moze byt ina v zavislosti na tom ze jak sa to spusta.
Napr. ak som v zlozke C:\
a napisem
test\program\neco.exe
tak spustim neco.exe ale pracovna zlozka je C:\ a subory sa hladaju v C:\
!!!

aha :/ to ma mohlo napadnut :( ale bohuzial ak to chcem cez CMD spustit vypise to:

This version of E:\...\zad1.exe is not compatible with the version of Windows you're running. Check your computer's system information and then contact the software publisher. Hmm neda sa na tom IDE nejako nastavit aby to bralo ten textak? :/

Neviem jak spusta ten gui DOS programy, to mas 64bitove windows a v nom turbo assembler ci co??? To ale tak nefunguje.
P.S. ale skus si za prve pozriet nastavenia projektu tam je pracovna zlozka pre spustanie debugovanie apod, a za druhe mozes si dat ten .txt subor do vyssiej zlozky o jedno apod to je zvycajne to spravne.

Zpět do poradny Odpovědět na původní otázku Nahoru