ASM - 64KB

Odpowiedz Nowy wątek
2004-07-06 14:33

Rejestracja: 17 lat temu

Ostatnio: 4 godziny temu

0

Hmm mam malego problema, chcialbym napisac programik ktory jednak potrzebuje tablicy o rozmiarze dokladnie 64000 bajtow. Oczywiscie najprostsza deklaracja dziala, jednak najprawdopodobniej jezeli kod programu wraz z ta tablica przekroczy rozmiar segmentu to wszystko sie posypie.
Czy da sie zrobic COM'a ktory jednoczesnie bedzie malutki rozmiarowo (dynamiczna alokacja tablicy), i bedzie dzialal mimo tego ze kod programu wraz z ta tablica przekroszy 64kB ??
PS. Staram sie uzyc NASM'a tak wiec fajnie jakby to bylo pod jego skladnie :)


Pozostało 580 znaków

2004-07-06 16:24
Administrator

Rejestracja: 17 lat temu

Ostatnio: 2 godziny temu

Lokalizacja: Poznań

0

Obrazek 320x200x8 ? :)
Może to?

INT 21 - DOS 2+ - ALLOCATE MEMORY
AH = 48h
BX = number of paragraphs to allocate
Return: CF clear if successful
AX = segment of allocated block
CF set on error
AX = error code (07h,08h) (see #1020 at AH=59h/BX=0000h)
BX = size of largest available block
Notes: DOS 2.1-6.0 coalesces free blocks while scanning for a block to
allocate
.COM programs are initially allocated the largest available memory
block, and should free some memory with AH=49h before attempting any
allocations


Pozostało 580 znaków

2004-07-07 08:09

Rejestracja: 17 lat temu

Ostatnio: 4 godziny temu

0

hmm, po alokacji, aby sprawdzic czy wszystko poszlo ok moge uzyc JZ ?? Bo to niby kasuje flage CF wiec jak CF=0 wtedy JZ dupa , ale nei jestem pewny :-|


Pozostało 580 znaków

2004-07-07 09:02

Rejestracja: 15 lat temu

Ostatnio: 8 lat temu

0

Dla flagi C używa się skoku JC(gdy CF=1) lub JNC(CF =0)


Nie ma ludzi zdrowych psychicznie, są tylko źle zbadani...

Pozostało 580 znaków

2004-07-07 09:28

Rejestracja: 17 lat temu

Ostatnio: 4 godziny temu

0

qrna daj ktos kod jak pobrac wskaznik do tej pamieci do zmiennej DW (lub innej) bo mnie zara trafi... juz z 2h siedze i pare razy mi kompa zacielo bo niby zaalokowalo a jednak dupa. Czy aby korzystac z tej pamieci to moge zrobic cos takiego:

buf DW 0 ;zmienna ktora ma byc numerem segmentu tej pamieci

mov ah,48h
mov bx,4000 ; 64000B / 16
int 21h
mov [buf],ax

czy to zadziala ?? to znaczy czy <ort>puzniej </ort>aby zapisac cos w tej pamieci bede mugl uzyc czegos takiego:

mov es,[buf]
mov [es:di],10

jak nie tak to jak to zrobic [glowa] [glowa] [glowa]


Pozostało 580 znaków

roter
2004-07-07 10:47
roter
0

mov es,[buf]

Dlaczego przepisujesz wartość buf do ES ?

Pozostało 580 znaków

2004-07-08 10:56

Rejestracja: 17 lat temu

Ostatnio: 4 godziny temu

0

heh jeblo mi sie :)

hmm poradzilem sobie juz, wskaznik 4 bajtowy, zapisuje w nim adres normalnie jak do zmiennej a puzniej aby odczytac uzywam LES lub LDS itp...


Pozostało 580 znaków

_gronki
2005-04-28 23:01
_gronki
0

Witam.
Odgrzebuję stary temat bo sam mam problem z alokacją [rotfl]

Kodzik:

    MOV AH,48H
    MOV BX,MEM_SIZE
    SHR BX,4
    INC BX
    INT 21H

Z tym że, otrzymuję błąd numer 8 (brak pamięci) :-|

(wydruk z MS DEBUG)

AX=4800 BX=0022 CX=0000 DX=0000 SP=007E BP=0000 SI=0000 DI=0000
DS=1CDE ES=1CDE SS=1D7C CS=1C9F IP=010C NV UP EI PL NZ NA PE NC
1C9F:010C CD21 INT 21
-P

AX=0008 BX=0000 CX=0000 DX=0000 SP=007E BP=0000 SI=0000 DI=0000
DS=1CDE ES=1CDE SS=1D7C CS=1C9F IP=010E NV UP EI PL NZ NA PE CY
1C9F:010E A37109 MOV [0971],AX DS:0971=0000

A może odpowiedź jest wyżej a ja jej ślepy nie widzę? [???]
pozdrawiam, gronki

Pozostało 580 znaków

2005-04-29 17:02

Rejestracja: 15 lat temu

Ostatnio: 8 lat temu

0

Przed przydzielaiem pamięci musisz ją najpierw zwolnić =]


Nie ma ludzi zdrowych psychicznie, są tylko źle zbadani...

Pozostało 580 znaków

2005-04-30 10:12

Rejestracja: 17 lat temu

Ostatnio: 4 godziny temu

0

uzyj funkcji 4ah na poczatku progza


Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0