| | |
| Stránka: 1 z 1
| [ Príspevkov: 2 ] | |
Autor | Správa |
---|
Registrovaný: 07.12.07 Prihlásený: 22.05.08 Príspevky: 2 Témy: 1 | Napísal jarda: 07.12.2007 19:16 | |
|
Zdravim Vas
Uz dlhsiu dobu si lamem hlavu nad takymto programom ...
- nacitam z klavesnice desatinne cislo (|x| <1) v desiatkovej sustave
- prevediem ho do sestnastkovej sustavy a vypisem ...
napr.:
vstup: 0.23
vystup: 0.3AE147AE1
Ma niekto nejaky napad ako by to malo vyzerat? Pripadne tu mozem pastnut to co som doteraz vypotil ...
EDIT:
takze pripajam to co som zatial vytvoril ... ale nefunguje to tak ako ma ...
Kód: TITLE prevod.asm .MODEL SMALL .STACK 400 .DATA lf DB 13 cr DB 10 output1 DB 'Zadane cislo je $' output2 DB ' v sestnastkovej sustave.',13,10,'$' char DB 0 kelosoli DB 0,0 tabulka DB '0123456789ABCDEF' .CODE
newline MACRO ;makro noveho riadku push ax push dx mov ah,02h mov dl,CR int 21h mov dl,LF int 21h pop dx pop ax ENDM
ukaz16kovo PROC ;procedura na zobrazenie cisla v decimalnom kode parametrom je cislo ulozene v bufferi push bp ;ulozenie ukazovatela na aktualnu poziciu zasobnika mov bp,sp push ax ;na zaciatku procedury ulozime do zasobnika stare obsahy registrov push bx push cx push dx mov ah,02h mov dl,'0' int 21h mov dl,'.' ;kedze ide o desatinne cislo tak najprv napisat 0. int 21h
mov cx,00h mov dh,00h ;pripravenie parametrov mov bx,0000h mov ax,[bp+4] ;nacitanie zo zasobnika cislo na zobrazenie
nocheinmal: mov cx,16 mov dx,0000h mul cx ;nasobenie sestnastkou add dl,48 ;pripocitanie ASCII nuly push ax mov ah,02h ;vypis danej cislice v dl na obrazovku int 21h pop ax cmp ax,00h jnz nocheinmal pop dx pop cx ;vratenie povodnych obsahov registrov pop bx pop ax pop bp ret 2 ukaz16kovo ENDP
getc PROC NEAR ;procedura na nacitanie znaku z klavesnice push bp ;parametrom procedury je offset buffera na ulozenie znaku mov bp,sp push ax ;na zaciatku procedury ulozime do zasobnika stare obsahy registrov push bx mov bx,[bp+4] ;nacitanie z zasobnika offset buffera na ulozenie znaku mov ah,01h ;DOS funkcia na nacitanie znaku z klavesnice int 21h ;volanie prerusenia mov [bx],al ;ulozenie znaku do buffera cmp al,lf ;porovnanie s koncom riadku
pop bx ;vratenie povodnych obsahov registrov pop ax pop bp ret 2 getc ENDP
start: mov ax,@DATA ;ulozenie datoveho segmentu mov ds,ax ;do ds mov dx,0000h mov bx,OFFSET char ;pripravenie prametra procedury getc mov ax,2000h
cyklus: push bx ;sprostredkovanie parametra procedure getc cez zasobnik call getc ;volanie nacitania znaku jz navestie1 ;skoc na vypis
mov cx,[bx] cmp cl,'.' ;porovnanie ci moze zacat nacitavat cislo lebo desatinne miesta idu od bodky jz nastav cmp dl,01h ;ci treba este nacitavat ci sa uz neprekrocila hranica poctu znakov jz cyklus
cmp dh,01h ;nastavenie aby viac uz necitalo znaky jnz cyklus cmp cl,'0' ;kontrola intervalu cislic js navestie1 cmp cl,'9' jns navestie1 push ax push bx push dx mov ch,00h sub cl,30h mul cx mov bx,OFFSET kelosoli mov cx,[bx] add cx,ax ;pripocitanie vysledneho cisla mov [bx],cx pop dx pop bx pop ax ror ax,3 ;rotacia o tri bity vpravo cmp ax,4000h jz nastavd jmp cyklus ;skoc na nacitanie a testovanie noveho znaku
nastav: mov dh,01h jmp cyklus
nastavd: mov dl,01h jmp cyklus
navestie1: newline ;volanie makra newline t.j. novy riadok mov ah,09h ;DOS funkcia zobrazenia retazca na obrazovku mov dx,OFFSET output1 ;do dx dame offset zaciatku retazca int 21h ;volanie prerusenia
mov bx,OFFSET kelosoli mov ax, [bx] ;pripravenie prametra procedury ukaz16kovo push ax ;sprostredkovanie parametra procedure cez zasobnik call ukaz16kovo ;volanie zobrazenia cisla v hexa kode
mov ah,09h mov dx,OFFSET output2 int 21h ;volanie prerusenia definitiv:mov ax,4c00h ;koniec programu int 21h ;volanie prerusenia end start
|
|
Registrovaný: 07.12.07 Prihlásený: 22.05.08 Príspevky: 2 Témy: 1 | Napísal autor témy jarda: 08.12.2007 10:41 | |
|
Pomohol by mi s tym niekto ??? Ponukam financnu odmenu ... !!!
|
|
| Stránka: 1 z 1
| [ Príspevkov: 2 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| assembler 8086- prevod z desiatkovej do 16-tkovej...help.. v Assembler, C, C++, Pascal, Java | 0 | 1205 | 18.04.2010 20:15 erik.666 | | Assembler - Rozdiel medzi dvoma casovymi udajmi v Assembler, C, C++, Pascal, Java | 1 | 558 | 10.12.2009 19:50 stopa27 | | assembler v Assembler, C, C++, Pascal, Java | 1 | 1493 | 10.11.2006 18:14 Marco | | Assembler v Assembler, C, C++, Pascal, Java | 0 | 708 | 01.04.2009 21:02 bbeni | | Assembler v Assembler, C, C++, Pascal, Java | 0 | 792 | 31.03.2009 20:10 bbeni | | ASSEMBLER v Assembler, C, C++, Pascal, Java | 8 | 1723 | 13.03.2007 20:39 My-reC | | Assembler Atmega8 v Assembler, C, C++, Pascal, Java | 5 | 1158 | 17.10.2009 17:13 Logik | | Assembler binary v Assembler, C, C++, Pascal, Java | 23 | 1205 | 18.04.2012 7:17 Fico | | Assembler 8086 v Assembler, C, C++, Pascal, Java | 3 | 606 | 21.04.2009 20:05 Fico | | Kalkulačka - assembler v Assembler, C, C++, Pascal, Java | 0 | 677 | 10.11.2011 18:54 Reverser | | aky assembler? v Assembler, C, C++, Pascal, Java | 4 | 760 | 21.11.2007 9:49 euthanan | | Assembler 8080 v Assembler, C, C++, Pascal, Java | 5 | 1291 | 02.04.2010 20:44 Fico | | Assembler 8086 v Assembler, C, C++, Pascal, Java | 2 | 610 | 27.03.2009 20:33 Ivan11114 | | assembler zaciatky v Assembler, C, C++, Pascal, Java | 5 | 953 | 03.09.2010 15:14 Fico | | assembler zadanie v Assembler, C, C++, Pascal, Java | 1 | 1011 | 09.03.2010 20:27 ac.milan | | Assembler - úloha v Assembler, C, C++, Pascal, Java | 2 | 905 | 22.10.2007 15:04 programator |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|