🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #2285

Re: Tablica

#2285
From: Kicer
Date: Thu, 08 Jul 2010 19:43
136 lines
3778 bytes
przemo12146 wrote:

> Witam wszystkich,
> o to mój przerobiony kod:
> 
> 
> format binary
> 
> org 100h
> 
> poczatek:
> 
> mov word bx,[tablica+0]
> mov bx,wi
> 
> mov word bx,[tablica+2]
> mov bx,ta
> 
> mov word bx,[tablica+4]
> mov bx,is
> 
> mov word bx,[tablica+6]
> mov bx,sw
> 
> mov word bx,[tablica+8]
> mov bx,ie
> 
> mov word bx,[tablica+10]
> mov bx,ci
> 
> mov word bx,[tablica+12]
> mov bx,ew
> 
> mov word bx,[tablica+14]
> mov bx,sd
> 
> mov dx,tablica
> mov ah,09h
> int 21h
> 
> mov ah,0h
> int 16h
> 
> mov ax,4C00h
> int 21h
> 
> tablica: times 16 db 255
> wi db 'Wi'
> ta db 'ta'
> is db 'j',20h
> sw db 'sw'
> ie db 'ie'
> ci db 'ci'
> ew db 'e!'
> sd db 20h,'$'
> 
> 
> teraz już wszystko dział a zmienne znajdują się w tablicy, sprawdzałem
> w debuggerze

powyższy kod dziala tak:
do rejestru bx wkłada 2 bajty spod adresu tablica+0
później wkłada znowu do bx i tu zalezy od kompilatora albo adres zmiennej wi 
albo jej wartość

innymi słowy nadpisujesz poprzednią wartość bx
i tak dalej, kazda linijka wpisuje nową wartość do rejestru bx, czyli po 
optymalizacji Twój kod wyglada tak:


mov bx,sd                ;/zostaje tylko ostatni wpis do bx

mov dx,tablica
mov ah,09h
int 21h

mov ah,0h
int 16h

mov ax,4C00h
int 21h

tablica: times 16 db 255
wi db 'Wi'
ta db 'ta'
is db 'j',20h
sw db 'sw'
ie db 'ie'
ci db 'ci'
ew db 'e!'
sd db 20h,'$'


jeśli to Ci cos wyswietla to pewnie tylko dlatego że dos pomija znaki 
których wartosc do 255 i przechodzi do wysweitlania tego co lezy dalej w 
pamieci a jest tam Twój tekst.

Tylko też dziwnie bo dwie litery to dwa bajty a Ty uzywasz db, chyba ze 
kompilator którego używasz traktuje np zmienną wi jako poskładaną z 
pojedynczych bajtów a ile ich jest to juz nie wazne.

> 
> 1.Ile bajtów zmieści się pod pozycją np: [tablica+0] ?, dokładniej
> chodzi mi o to, że w zmiennej "wi" są teraz 2 bajty ale równie dobrze
> mogę wpisać tam 16 bajtów a napis i tak zostanie wyświetlony, tylko
> tyle, że nie będą one znajdować się w tablicy. Jeśli chciałbym żeby
> dodatkowe zmienne znajdowały się w tablicy musiałbym powiększyć ją o
> 16 i odpowiednio przypisać miejsca tak jak uprzednio.

tu patrz moja uwaga wyżej

generalnie jest tak że zmienna to nic innego jak adres w pamieci. pod jednym 
adresem jest 1 bajt. To co rozumiesz jako upchanie pod 1 adres tak naprawde 
oznacza wpisanie 1. bajtu pod ten adres, 2. pod następny itd

> 
> 2.Czy to znaczy, że mogę do zmiennej "wi" przypisać aż 65536 bajtów
> czyli tyle ile ma rejestr bx?

bx ma 16 bitów - 2 bajty

> 
> 3.Po ile tranzystorów mają rejestry (np:eax,ebx...) ?

nie wiem po co CI to ale zobacz tu:
http://en.wikipedia.org/wiki/Flip-flop_%28electronics%29

1. przerzutnik D to jeden bit


pozdrawiam
-- 
Michał Walenciak
Kicer86 at gmail dot com
http://kicer.sileman.net.pl
gg: 3729519
Technical Details
Message-ID: <i159pq$30g$1@inews.gazeta.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
References: <acaaee6e-5908-471b-a309-b7146d718425@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: Kicer <a@B.c>
Newsgroups: pl.comp.lang.asm
Subject: Re: Tablica
Followup-To: pl.comp.lang.asm
Date: Thu, 08 Jul 2010 21:43:52 +0200
Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
Lines: 136
Message-ID: <i159pq$30g$1@inews.gazeta.pl>
References: <acaaee6e-5908-471b-a309-b7146d718425@b35g2000yqi.googlegroups.com>
NNTP-Posting-Host: host-5db0eeee.sileman.net.pl
Mime-Version: 1.0
X-Trace: inews.gazeta.pl 1278618234 3088 93.176.238.238 (8 Jul 2010 19:43:54 GMT)
X-Complaints-To: usenet@agora.pl
NNTP-Posting-Date: Thu, 8 Jul 2010 19:43:54 +0000 (UTC)
X-User: spaz86
User-Agent: KNode/4.4.3
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit