Re: Wczytywanie liczby w asm

Autor: Grzegorz Malicki (Grzegorz_at_malicki.com)
Data: Mon 05 Jun 2000 - 09:45:34 MET DST


Użytkownik "Witold Romaniak" <witoldr_at_kki.net.pl> napisał w wiadomości
news:8h6nj2$sj7$1_at_sunsite.icm.edu.pl...
> "Tomek Lisowski" <Lisowski.Tomasz_at_sssa.nospam.pl> wrote:
> > > Jak wczytac z klawiatury jakas wielocyfrowa liczbe, powiedzy 500 albo
> > XOR BX,BX
> [...]
> > MOV AX,BX
>
> Oj, to jakis kosmos. Zrobilem tak, jak radzil Grzesiek, tylko wyszlo mi
tak
> circa ze 100 linii, ale dziala :-)
>
> WR
Ten kawalek ASMa to jest implementacja algorytmu ktory Ci wczesniej podalem.
Skoro udalo Ci sie napisac go w 100 liniach, to idz do M$, a zrobisz fortune
!
(placa od dlugosci kodu ;-))

Moze maly komentarz do kodu kolegi Tomka.

XOR BX,BX ;w BX jest przechowywana obliczona wartosc, wiec trzeba
wyzerowac
L1:
;wczytaj znak do AL i upewnij się, że jest to cyfra
;jeśli koniec, to JMP L2
;ten fragment dopisz sam, skoro wiesz jak :-)

; To ponizej, to mnozenie rejestru BX przez 10 (2*BX+8*BX=10*BX)
SHL BX,1
MOV DX,BX
SHL BX,1
SHL BX,1
ADD BX,DX

;przeksztalcenie kodu ASCII (30h to zero, a 39h to 9) na kod binarny (od 0
do 9)
SUB AL,'0'
XOR AH,AH

;dodanie kolejnej cyfry do calosci
ADD BX,AX
JMP L1 ; no i tak w kolko

; zakonczenie zabawy
L2:
MOV AX,BX ;w BX robil jako zmienna robocza, wiec wynik przepisujemy do AX
(tak jest bardziej elegancko).

A ... i jeszcze jedno. Z racji uzytych tu 16bitowych rejestrow samo przez
sie
narzuca sie ograniczenie obliczanej wartosci (niby oczywiste, ale w wirze
walki
z kode czlowiek czasami o takich rzeczach zapomina.)

Grzegorz Malicki



To archiwum zostało wygenerowane przez hypermail 2.1.7 : Tue 18 May 2004 - 20:12:44 MET DST