🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Odejmowanie dużych liczb

#2569
From: Bogdan (bogdro)
Date: Fri, 06 Sep 2013 17:29
109 lines
4058 bytes
W dniu 06.09.2013 03:57, Kamil pisze:
> Witam
> 
> Na stronie Bogdana jest min. procedura odejmowania:
> 
> 
> mov eax, [arg1]
> sub eax, [arg2]     ; odejmujemy 2 pierwsze części
> mov [wynik], eax    ; i zapisujemy wynik
>                     ; flaga CF mówi, czy była pożyczka
> 
> mov eax, [arg1+4]
> sbb eax, [arg2+4]   ; odejmujemy razem z pożyczk? (CF),
>                     ; jeśli w poprzednim odejmowaniu
>                     ; musieli?my co? pożyczać
> 
> mov [wynik+4], eax  ; wynik: [arg1+4]-[arg2+4]-pożyczka
>                     ; z pierwszego odejmowania
>                     ; CF teraz zawiera pożyczkę z SBB
>                     ; podobnie reszta działania:
> 
> mov eax, [arg1+8]
> sbb eax, [arg2+8]
> mov [wynik+8], eax
> 
> mov eax, [arg1+12]
> sbb eax, [arg2+12]
> mov [wynik+12], eax
> 
> jc arg1_mniejszy_od_arg2
> 
> Moja implementacja wygląda tak:
> 
> odejmij PROC
> 
> push esi
> push edi
> push ebx
> push ebp
> 
> 
> mov eax, [arg1]
> sub eax, [arg2]     ; odejmujemy 2 pierwsze części
> mov [wynik], eax    ; i zapisujemy wynik
>                     ; flaga CF mówi, czy była pożyczka
> 
> mov eax, [arg1+4]
> sbb eax, [arg2+4]   ; odejmujemy razem z pożyczk? (CF),
>                     ; jeśli w poprzednim odejmowaniu
>                     ; musieli?my co? pożyczać
> 
> mov [wynik+4], eax  ; wynik: [arg1+4]-[arg2+4]-pożyczka
>                     ; z pierwszego odejmowania
>                     ; CF teraz zawiera pożyczkę z SBB
>                     ; podobnie reszta działania:
> 
> mov eax, [arg1+8]
> sbb eax, [arg2+8]
> mov [wynik+8], eax
> 
> mov eax, [arg1+12]
> sbb eax, [arg2+12]
> mov [wynik+12], eax
> 
> jc arg1_mniejszy_od_arg2
> 
> arg1_mniejszy_od_arg2:
> 
> pop ebp
> pop ebx
> pop edi
> pop esi
> 
>   ret
> 
> odejmij endp
> 
> mam następujące pytania:
> 
> - Co sie stanie w razie wystąpienia sytuacji spełniącej warunek skoku jc?

 Nic. To jest "informacja dla autora", że gdyby chciał tę sytuację
obsłużyć, to może zrobić to w ten sposób.

>  Czy linia  mov [wynik+12], eax się wykona?

 Tak, bo jest przed skokiem.

> Jaki będzie wynik?

 Ten sam. Konkretnie - ujemny.

> - co się stanie kiedy już w peerwszych argumentach będzie  arg1 < arg2

 Nic. Liczby będą się dalej odejmować, tylko flaga CF będzie
gdzieniegdzie ustawiona.

> - cfzy jc nie powinno być po każdym odejmowaniu?

 Nie. Sytuacja ustawienia flagi CF jest obsługiwana przez zastosowanie
instrukcji SBB (odejmowanie "z pożyczką") zamiast SUB, czyli zwykłego
odejmowania.


-- 
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.Xiph.org   www.TorProject.org   Soft(EN): tinyurl.com/bogdro-soft
Technical Details
Message-ID: <522a10fd$0$1268$65785112@news.neostrada.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask.pl!news.nask.org.pl!goblin2!goblin.stu.neva.ru!feeder1.cambriumusenet.nl!feed.tweaknews.nl!209.197.12.246.MISMATCH!nx02.iad01.newshosting.com!newshosting.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
References: <52293698$0$1261$65785112@news.neostrada.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask.pl!news.nask.org.pl!goblin2!goblin.stu.neva.ru!feeder1.cambriumusenet.nl!feed.tweaknews.nl!209.197.12.246.MISMATCH!nx02.iad01.newshosting.com!newshosting.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-02.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
Date: Fri, 06 Sep 2013 19:29:28 +0200
From: "Bogdan (bogdro)" <bogdan@poczta.gazeta.pl>
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130801 Thunderbird/17.0.8
MIME-Version: 1.0
Newsgroups: pl.comp.lang.asm
Subject: Re: Odejmowanie dużych liczb
References: <52293698$0$1261$65785112@news.neostrada.pl>
In-Reply-To: <52293698$0$1261$65785112@news.neostrada.pl>
Lines: 109
Message-ID: <522a10fd$0$1268$65785112@news.neostrada.pl>
Organization: Telekomunikacja Polska
NNTP-Posting-Host: rudy.mif.pg.gda.pl
X-Trace: 1378488574 unt-rea-a-02.news.neostrada.pl 1268 153.19.42.16:33885
X-Complaints-To: abuse@news.neostrada.pl
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit