abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
včera 02:20 | Zajímavý článek

David Revoy, autor open source webového komiksu Pepper&Carrot nebo portrétu GNU/Linuxu, upozorňuje na svém blogu, že nový Inkscape 0.92 rozbíjí dokumenty vytvořené v předchozích verzích Inkscape. Problém by měl být vyřešen v Inkscape 0.92.2 [reddit].

Ladislav Hagara | Komentářů: 0
včera 02:02 | Komunita

Øyvind Kolås, hlavní vývojář grafických knihoven GEGL a babl, které využívá grafický program GIMP, žádá o podporu na Patreonu. Díky ní bude moci pracovat na vývoji na plný úvazek. Milník 1000 $, který by stačil na holé přežití, se již téměř podařilo vybrat, dalším cílem je dosažení 2500 $, které mu umožní běžně fungovat ve společnosti.

xkomczax | Komentářů: 12
21.1. 23:54 | Pozvánky

DevConf.cz 2017, již devátý ročník jedné z největších akcí zaměřených na Linux a open source ve střední Evropě, proběhne od pátku 27. ledna do neděle 29. ledna v prostorách Fakulty informačních technologií Vysokého učení technického v Brně. Na programu je celá řada zajímavých přednášek a workshopů. Letos je povinná registrace.

Ladislav Hagara | Komentářů: 0
21.1. 22:11 | Nová verze

Byla vydána verze 1.0.0 emulátoru terminálu Terminology postaveného nad EFL (Enlightenment Foundation Libraries). Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
20.1. 17:00 | Nová verze

Byl vydán Docker 1.13. Přehled novinek na YouTube a v poznámkách k vydání na GitHubu. Docker umožňuje běh aplikací v softwarových kontejnerech (Wikipedia).

Ladislav Hagara | Komentářů: 4
20.1. 15:51 | Komunita

Mozilla.cz informuje, že nástroje pro webové vývojáře se možná oddělí od Firefoxu a stanou doplňkem. Nástroje pro webové vývojáře prošly velkým přepisem a tým, který se stará o jejich vývoj, by uvítal možnost jejich častějších aktualizacích nezávisle na vydávání nových verzí Firefoxu.

Ladislav Hagara | Komentářů: 10
20.1. 07:00 | Humor

Čtenářům AbcLinuxu vše nejlepší k dnešnímu Dni zvýšení povědomí o tučňácích (Penguin Awareness Day).

Ladislav Hagara | Komentářů: 0
20.1. 06:00 | Komunita

Bylo spuštěno hlasování o přednáškách a workshopech pro letošní InstallFest, jenž proběhne o víkendu 4. a 5. března v Praze. Současně byla oznámena změna místa. InstallFest se letos vrací zpět na Karlovo náměstí do budovy E.

Ladislav Hagara | Komentářů: 0
20.1. 02:48 | Komunita

Greg Kroah-Hartman potvrdil, že Linux 4.9 je jádrem s prodlouženou upstream podporou (LTS, Long Term Support). Podpora je plánována do ledna 2019. Aktuální jádra s prodlouženou podporou jsou tedy 3.2, 3.4, 3.10, 3.12, 3.16, 3.18, 4.1, 4.4 a 4.9.

Ladislav Hagara | Komentářů: 0
20.1. 00:11 | Zajímavý článek

Výrobce síťových prvků, společnost Netgear, spustila nový program, který slibuje vývojářům, expertům, ale i běžným uživatelům vyplacení finanční odměny za nalezení bezpečnostních chyby v jejich produktech. Za nalezení zranitelnosti v hardware, API nebo mobilní aplikaci nabízí odměnu od 150 do 15 tisíc dolarů (dle závažnosti).

Michal Makovec | Komentářů: 0
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (10%)
 (2%)
 (74%)
 (3%)
 (10%)
Celkem 363 hlasů
 Komentářů: 25, poslední 21.1. 13:34
Rozcestník
Reklama

Dotaz: assembler secteni cisla

15.1.2006 02:45 _change
assembler secteni cisla
Přečteno: 377×
Zdravim vsechny mam takovy zacatecnicky problem, kdy nevim jak prinutit aby mi po secteni dvou cisel vytiskl danou promennou vysledek, takhle mi to vytiskne nic. diky za pomoc, jeslti nekdo vi jak.
SECTION .data
cislo1 dd 8
cislo2 dd 2
vysledek dd 0


SECTION .text
global _start 
_start:

mov eax,[cislo1]
mov ebx,[cislo2]
add eax,ebx    ;sectu cisla
mov [vysledek],eax   ;ulozim do vysledku

mov eax,4  ;prvni parametr cislo systemoveh ovolani
mov ebx,1  ;vim, ze konstanta stdout ma hodnotu 1
mov ecx,vysledek
mov edx,32 ;pocet znaku
int 0x80   ;zavolame jadro

mov eax,1  ;cislo volani jadra - exit
mov ebx,0  ;navratovy kod 0
int 0x80   ;zavolame jadro

Odpovědi

15.1.2006 08:00 Michal Pokorný | skóre: 6
Rozbalit Rozbalit vše Re: assembler secteni cisla
No já taky nejsem nějak extra dobrej programátor, ale řekl bych, že tu chybý konverze z datovédo typu dd (4-bytové celé číslo) na řetězec ;)
15.1.2006 10:14 Jirka | skóre: 36
Rozbalit Rozbalit vše Re: assembler secteni cisla
Tato funkce by mela vypsat obsah registru AL, ale je to delane pomoci sluzeb DOSu. Doufam, ze se nikdo nebude zlobit, ze jsem to tu dal: ps: jen pro uplnost: int 21h zpusobi preruseni, tim se (podle obsahu registru - z hlavy to neznam) zavola pozadovana sluzba. A u techto funkci staci do AX zapsat byte. Vim, ze to je pro 16 bitovy rezim, ale pro 32 bitu by nemelo byt tezke to prepsat. Doufam ze jsem na nic nezapomnel. Vytahl jsem to z jedne knihovny, kterou mam k dispozici.

segment code

Write_Word:             ; AX=Byte
	pushf
    	pusha
    	mov si,4
    	mov bx,10
wwcyc1: mov dx,0
        div bx
    	add dl,'0'
	mov [z_w+si],dl
        dec si
        cmp si,0
        jnz wwcyc1
        add al,'0'
	mov [z_w],al
    	mov dx,z_w
    	mov si,0
wwcyc2: cmp [z_w+si],byte '0'
    	jne wwcont
    	inc dx
    	inc si
    	cmp si,4
    	jne wwcyc2
wwcont: call Print_Str   ; viz. nize
	popa
	popf
	ret

Print_Str:              ; DX=String_offset, String='???....???','$'
        pushf
        pusha
        mov ah,9
        int 21h         ;volani sluzeb DOSu
        popa
        popf
        ret

        segment data
z_w     resb 2

Jardík avatar 15.1.2006 11:37 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: assembler secteni cisla
Opravdu tam chybí převod čísla na řetězec. Funkce na převod:
;--------------
;NumToAscii
;--------------
; eax = 32b číslo
; ebx = základ soustavy
; edi = pointer na buffer, kam bude uložen text
;--------------

NumToAscii:
pushad
xor esi,esi
.smycka_prevodu:
xor edx,edx
div ebx
call HexDigit
push edx
inc esi
test eax,eax
jnz .smycka_prevodu
cld
.smycka_zapis:
pop eax
stosb
dec esi
test esi,esi
jnz .smycka_zapis
popad
ret
HexDigit:
cmp dl,10
jb .mensi
add dl,'A'-10
ret
.mensi:
or dl,'0'
ret
Použití:
mov eax,[vysledek]
mov edi,buffer
call preved

v sekci .DATA
buffer:
TIMES 12 DB 0
Délku můžeš zjistit pomocí strlen:
strlen:
push eax
xor ecx,ecx
xor eax,eax
dec ecx
cld
repne scasb
neg ecx
pop eax
ret
Řetězec musí být uložen v ES:EDI a délka se vrátí v ecx. Jinak, abyste neřekli, že jsem blázen, tak prozradím, že je to z knihy Učíme se programovat v jazyce assembler pro PC
Věřím v jednoho Boha.
18.1.2006 11:40 _change
Rozbalit Rozbalit vše Re: assembler secteni cisla
diky, ale bohuzel zkousel jsem to nejak dat dohromady, a porad mi to nejde, nevim jak ten program dat dohromady, aby to fungovalo,nevite nekdo pls?
18.1.2006 12:46 Petr Šobáň | skóre: 79 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: assembler secteni cisla
A proč to píšeš v asm napiš to normálně v C a je po ptákách.
Jardík avatar 24.2.2006 22:37 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: assembler secteni cisla
Zde je funkční řešení tvého problému:
; překlad:
; nasm -f elf preved.asm
; ld -s -o preved preved.o

SECTION .text
global _start

_start:



; Sečtu Cislo1+Cislo2, výsledek do Vysledek
mov eax,[Cislo1]
mov ebx,[Cislo2]
add eax,ebx
mov [Vysledek],eax

; Převedu Vysledek na text do VysledekText
mov eax,[Vysledek]
mov ebx,10
mov edi,VysledekText
call NumToAscii

; Vytisknu vysledek

mov ebx,VysledekText	   ; ukazatel na text do ebx
mov esi,ebx            ; uložím ho ještě do esi
xor edx,edx

.next:
inc edx                ;v edx počítáme počet znaků, co budeme tisknout
lodsb                  ;načteme znak do al a k esi přičteme 1
or al,al               ;jsme už na konci řetězce (al==0)
jnz .next              ;ne? přičteme další znak
mov byte [esi-1],0xa   ;zapíšeme místo nulového byte na konci řetězce znak nového řádku


mov eax,4              ;systémové volání write( ebx = KAM, ecx = CO, edx = KOLIK )
mov ecx, ebx           ;v ebx byla adresa řetězce
mov ebx,1              ;STDOUT
                       ;v edx již je počet znaků
int 0x80               ;přerušení



; konec programu
mov eax, 1
mov ebx, 0
int 0x80


;--------------
;NumToAscii
;--------------
; eax = 32b číslo
; ebx = základ soustavy
; edi = pointer na buffer, kam bude uložen text
;--------------

NumToAscii:
pushad
xor esi,esi
.smycka_prevodu:
xor edx,edx
div ebx
call HexDigit
push edx
inc esi
test eax,eax
jnz .smycka_prevodu
cld
.smycka_zapis:
pop eax
stosb
dec esi
test esi,esi
jnz .smycka_zapis
popad
ret
HexDigit:
cmp dl,10
jb .mensi
add dl,'A'-10
ret
.mensi:
or dl,'0'
ret



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; DATA

SECTION .data

VysledekText TIMES 20 db 0
Cislo1 dd 8
Cislo2 dd 2
Vysledek dd 0
Věřím v jednoho Boha.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.