Article View: pl.comp.lang.asm
Article #2276Re: Tablica
From: Bogdan (bogdro)
Date: Thu, 17 Jun 2010 16:19
Date: Thu, 17 Jun 2010 16:19
124 lines
5345 bytes
5345 bytes
W dniu 16.06.2010 20:38, przemo12146 pisze: > Cześć, > Jestem początkujący mam kilka pytań do mojego kodu: > > format binary > > org 100h > > poczatek: > > mov bx,tablica > mov ax,a > mov cx,b > > mov [bx+5],ax > mov [bx+7],cx > > mov dx,[bx+5] > mov ah,9h > int 21h To tak nie podziała. W DX musisz mieć adres zmiennej, którą chcesz wyświetlić, a nie wartość tej zmiennej. Najchętniej by się napisało: mov dx, bx+5 ale tak się nie da. Spróbuj mov dx, bx ; DX = BX add dx, 5 ; DX = BX + 5 (reszta dobrze - bez zmian). > mov dx,[bx+7] > mov ah,9h > int 21h Jak wyżej. > mov ah,0h > int 16h > > mov ax,4C00h > int 21h > > tablica: times 10 db 0 > a db 1100001b,'$' > b db 10000001b,'$ > > 1.Dlaczego jak wpisuje do rejestru bx+1 lub bx+2 aż do bx+4 zmienną a > lub b pokazuje mi śmieci zamiast tego co pod nią się znajduje, zacząć > mogę dopiero od bx+5 tak jak wyżej ? Prawdopodobnie dlatego, że wpisywałeś wartość zmiennej, a nie jej adres. Wpisywałeś do DX adres 2461h (dolar w starszym bajcie, wartość zmiennej 'a' w młodszym) lub 2481h (w drugim przypadku). Swoją drogą, znak w zmiennej 'b' może nie być drukowalny (więc i tak dostaniesz śmieci). > 2.Dlaczego pomiędzy wpisywaniem zmiennych do tablicy pod adresy bx+5 > czy tez bx+7 itp. muszą być od siebie w odstepie 2 bo inaczej zamiast > zmiennych na pulpicie widzie śmieci ? Być może ma to związek z problemem BX+5 vs. [BX+5]. Ale pamiętaj też, że zapisujesz całe słowo (2 bajty) - wartość zmiennej 'a' lub 'b' plus następujący po nich znak dolara, aby zakończyć napis dla DOSa. Praktyka jak najbardziej słuszna, ale stąd właśnie bierze się odległość 2 bajtów, jeśli nie chcesz zamazywać tego, co już jest. > 3.Litera 'a' w kodzie ascii ma wartość szesnastkowo 61 binarnie > 1100001 czyli jest 7 bitowa pomijając uzupelnienie liczby do 8 bitów > dlaczego znajduje sie w odległości 2 bajtów w tablicy skoro tablica > jest zainicjonowana na 10 bajtów rownych 0 ? Skąd wiesz, że w odległości 2 bajtów? Może ją tam wpisałeś, a teraz pokazałeś inny kod? Może wyświetlasz co innego, niż myślisz, np. wyświetlasz nie od początku tablicy, a od środka? Może wyświetlasz całą tablicę, bajty zerowe się po prostu nie wyświetlają, co powoduje błędną interpretację wyświetlanego wyniku? Przedstawiony kod nie świadczy o tym, co mówisz. > 4.Wpisując do tablicy np: 255 bajtowej, zmienną składającą sie z 8 > bitów chcąc ją wpisać pod 10 bajt użyjemy operacji np: [bx+9] gdzie do > rejestru bx zostala przypisana tablica ale czy można zapisać to w > sposób [bx-245] Według mnie nie można. Offsety w adresacji nie zawiną się tak, jak trzeba. Spójrz na ten wynik disasemblacji: <adres> <kod instrukcji> <instrukcja> 00000000 8A870BFF mov al,[bx-0xf5] 00000004 8A870AFF mov al,[bx-0xf6] 00000008 8A87F500 mov al,[bx+0xf5] 0000000C 8A87F600 mov al,[bx+0xf6] Jak widać, offset zrobił się 16-bitowy (4 ostatnie znaki/2 ostatnie bajty kodu instrukcji). Używając ujemnych wartości, naprawdę cofasz się przed tablicę w pamięci (czego zazwyczaj się nie robi). > przecież zadeklarowana tablica to etykieta obliczana > przez linker > wraz z zadeklarowaną przestrzenią czyli wpisując jakąś zmienną pod x > przestrzeń to np: [tablica] jest początkiem czy końcem czyli bajtem 0 > czy 255 ? Jest początkiem, tak samo jak równoważny zapis [tablica+0]. > 5.W jaki inny sposób mogę przedstawić sumę elementów znajdujących się > w tablicach? Zawęź trochę pytanie. Możesz dodawać do siebie elementy dwóch tablic i wynik wyświetlać na ekranie. Możesz, jak kolega zasugerował, wyświetlić wynik w okienku win32. Możesz zwrócić jako kod wyjścia z programu (ERRORLEVEL). Pytasz o książki? Spróbuj z moim kursikiem na http://rudy.mif.pg.gda.pl/~bogdro/. Jak Ci się nie spodoba, mam trochę linków na http://rudy.mif.pg.gda.pl/~bogdro/linki.htm. -- Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS) Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 www.JabberPL.org www.TorProject.org Soft (EN): miniurl.pl/bogdro-soft
Technical Details
Message-ID:
<hvdhum$nlt$1@inews.gazeta.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mailReferences:
<dd5aa12f-284f-4e03-b29b-529270d19ecb@b35g2000yqi.googlegroups.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail From: "Bogdan (bogdro)" <bogdan@poczta.gazeta.pl> Newsgroups: pl.comp.lang.asm Subject: Re: Tablica Date: Thu, 17 Jun 2010 18:19:31 +0200 Organization: "Portal Gazeta.pl -> http://www.gazeta.pl" Lines: 124 Message-ID: <hvdhum$nlt$1@inews.gazeta.pl> References: <dd5aa12f-284f-4e03-b29b-529270d19ecb@b35g2000yqi.googlegroups.com> NNTP-Posting-Host: rudy.mif.pg.gda.pl Mime-Version: 1.0 X-Trace: inews.gazeta.pl 1276791579 24253 153.19.42.16 (17 Jun 2010 16:19:39 GMT) X-Complaints-To: usenet@agora.pl NNTP-Posting-Date: Thu, 17 Jun 2010 16:19:39 +0000 (UTC) X-User: bog.d In-Reply-To: <dd5aa12f-284f-4e03-b29b-529270d19ecb@b35g2000yqi.googlegroups.com> User-Agent: Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.1.9) Gecko/20100317 Thunderbird/3.0.4 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit