🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.asm
7 messages
7 total messages Started by przemo12146 Wed, 16 Jun 2010 11:38
Tablica
#2211
Author: przemo12146
Date: Wed, 16 Jun 2010 11:38
67 lines
1626 bytes
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

mov dx,[bx+7]
mov ah,9h
int 21h

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 ?

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 ?

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 ?

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] 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 ?

5.W jaki inny sposób mogê przedstawiæ sumê elementów znajduj±cych siê
w tablicach?

Gdybym popelni³ gape prosze o wyrozumia³o¶æ.


Re: Tablica
#2213
Author: przemo12146
Date: Thu, 17 Jun 2010 03:15
6 lines
174 bytes
Dziêkuje za odpowied¼.
Co do kompilatora u¿ywam starej wersji MASM'a.
Mo¿e znasz jakie¶ dobre ksi±zki dla pocz±tkuj±cych co do programowania
w asemblerze?

Re: Tablica
#2215
Author: przemo12146
Date: Thu, 17 Jun 2010 10:07
2 lines
54 bytes
Jeszcze raz dziêkuje chêtnie skorzystam z kursu.

Re: Tablica
#2212
Author: Michoo
Date: Thu, 17 Jun 2010 11:05
57 lines
2508 bytes
przemo12146 pisze:
> Cze��,
> Jestem pocz�tkuj�cy mam kilka pyta� do mojego kodu:
Co to jest - TASM, czy jaki� inny staro�?

>
> 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 ?
Nie mia�em kontaktu z asm pod dosem dobre 5 lat, ale stara �ci�ga m�wi,
�e to, �e to dzia�a to jaki� cud - u�ywasz 09h, kt�re wypisuje string, a
  �adujesz do rejestru dx znak, a nie wska�nik (jakby� chcia� u�y� 02h)
>
> 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 ?
ax, bx maj� rozmiar s�owa, bajt ma rozmiar bajtu

>
> 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 ?
Co masz na my�li?

>
> 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] przecie� zadeklarowana tablica to etykieta obliczana
> przez linker
Z C ci si� pomiesza�o - linker policzy [tablica+10], a nie [bx+10], bo
nie zajmuje si� zgadywaniem co b�dzie w bx. Poza tym sk�d pomys�, �e
rejestr bx jest 8 bitowy?

> 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 ?
Jak si� chcesz odwo�a� do 3 pola 8 bajtowej tablicy to znacznie �atwiej
jest napisa� [tablica-6] ni� [tablica+2], wi�c odpowied� jest oczywista
- ko�cem.
>
> 5.W jaki inny spos�b mog� przedstawi� sum� element�w znajduj�cych si�
> w tablicach?
Najlepiej u�y� masm'a i przedstawia� w LISTBOX/EDIT jako kolejne
linijki, albo w zestawie p�l STATIC.

>
> Gdybym popelni� gape prosze o wyrozumia�o��.
Wyrozumia�o�� wyrozumia�o�ci�, ale ty prawie nic nie wiesz. Zacznij od
kursu assemblera a potem bierz si� za pisanie program�w - odwrotna
kolejno�� jest d�uga, trudna, bolesna i frustruj�ca.

--
Pozdrawiam
Michoo

Re: Tablica
#2214
Author: "Bogdan (bogdro)
Date: Thu, 17 Jun 2010 18:19
125 lines
4505 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

Re: Tablica
#2216
Author: Bernard
Date: Fri, 18 Jun 2010 17:23
58 lines
1208 bytes
On 2010-06-16 20:38, przemo12146 wrote:
> Cze��,
> Jestem pocz�tkuj�cy mam kilka pyta� do mojego kodu:
>
> format binary
>
> org 100h
>
> poczatek:
>
> mov bx,tablica

  - �adujesz dwa bajty spod adresu tablica do bx, a potem u�ywasz ich
jako adresu

> mov ax,a
> mov cx,b
>
> mov [bx+5],ax
> mov [bx+7],cx
>
> mov dx,[bx+5]

Tym razem do dx za�adowa�e� dawniejsz� warto�� zmiennej a
na szcz�cie jeden b��d maskuje drugi i to zadzia�a tak, jak chcia�e�.

> mov ah,9h
> int 21h
>
> mov dx,[bx+7]

A teraz zmiennej b - jak wy�ej.

> mov ah,9h
> int 21h
>
> 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 ?
>
> 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 ?

Bo Twoje zmienne maj� po 2 bajty (w ka�dym razie jako 2-bajtowe �adujesz
je do rejestr�w)


Re: Tablica
#2217
Author: "identifikator:
Date: Sun, 20 Jun 2010 20:29
9 lines
328 bytes
Dzi�kuje za odpowied�.
Co do kompilatora u�ywam starej wersji MASM'a.
Mo�e znasz jakie� dobre ksi�zki dla pocz�tkuj�cych co do programowania
w asemblerze?

Vlad Pirogow Asembler Podr�cznik Programisty - hardkor, normalnie jak Kto�
nie �wika� standard�w w DOSie to si� zam�czy t� pozycj�...


Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads