Rutina na načítání čísla – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Rutina na načítání čísla – Assembler – Fórum – Programujte.comRutina na načítání čísla – Assembler – Fórum – Programujte.com

 

Seph
~ Anonymní uživatel
37 příspěvků
15. 11. 2013   #1
-
0
-

[x86 real mode <BIOS interrupts>, GAS ASM, linker LD, emulátor BOCHS]

Nazdar, 

čelím tentokrát již poměrně konkrétnímu problému... Napsal sem rutinu na načítání čísel, ale jaksi nefunguje. Když zadám 100, vrátí mi 110. Když zadám 200 nebo 250 vždy mi vrátí 210 a tak dále (u tisíce mám overflow v pomocném registru takže se nadají zadávat čísla větší jak 1000). Už sem s tím peru celkem dost hodin, a ne a ne najít kde je zakopanej pes. Pokud by se někomu povedlo najít chybu, byl bych zkutečně rád...

.globl __readNumber
__readNumber:
readChar
cmp al , 'x'   /* ještě sem nevyřešil enter, takže pro ukončení zadávání používám x (enter mi dělá bordel...) */
jne rn0
mov ax , 0 
mov bl , 0
jmp rn10
rn0:
sub al , 0x30
push ax
call __readNumber
mov cx , ax
power 10 , bl
inc bl
mov dx , ax
pop ax
mul dl    /* zde se projeví overflow u čtyř ciferného čísla ... */
add ax , cx
rn10:
ret

 Rutiny na kterých je závislá funkce s chybou (načtení znaku) :

.macro readChar
mov ah , 0
int 0x16
printChar al
.endm

.macro printChar char
push ax
setCharColor 0xf
mov al , \char
mov ah , 0xe
int 0x10
pop ax
.endm

.macro setCharColor color
push ax
push bx
push cx
mov bl , \color
call __setCharColor
pop cx
pop bx
pop ax
.endm

.globl __setCharColor
__setCharColor:
mov ah , 0x9
mov al , ' '
mov bh , 0
mov cx , 1
int 0x10
ret
Nahlásit jako SPAM
IP: 80.188.252.–
Seph
~ Anonymní uživatel
37 příspěvků
15. 11. 2013   #2
-
0
-

Zapoměl bych ...

.macro power base , exp
push bx
mov ax , \base
mov bl , \exp
call __power
pop bx
.endm

.globl __power
__power:
cmp bl , 0
jne pw1
mov ax , 1
jmp pw10
pw1:
cmp bl , 1
jne pw2
jmp pw10
pw2:
dec bl
mov bh , 0
mov cx , ax
pw0:
mul cl
inc bh
cmp bh , bl
jne pw0
pw10:
ret
Nahlásit jako SPAM
IP: 80.188.252.–
Seph
~ Anonymní uživatel
37 příspěvků
17. 11. 2013   #3
-
0
-

Vyřešeno

Nahlásit jako SPAM
IP: 80.188.252.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 146 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý