[ Príspevkov: 2 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 07.12.07
Prihlásený: 22.05.08
Príspevky: 2
Témy: 1 | 1
NapísalOffline : 07.12.2007 19:16 | Assembler - prevod medzi sustavami

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



Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 07.12.07
Prihlásený: 22.05.08
Príspevky: 2
Témy: 1 | 1
Napísal autor témyOffline : 08.12.2007 10:41 | Assembler - prevod medzi sustavami

Pomohol by mi s tym niekto ??? Ponukam financnu odmenu ... !!!


 [ Príspevkov: 2 ] 


Assembler - prevod medzi sustavami



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

assembler 8086- prevod z desiatkovej do 16-tkovej...help..

v Assembler, C, C++, Pascal, Java

0

1244

18.04.2010 20:15

erik.666

V tomto fóre nie sú ďalšie neprečítané témy.

Assembler - Rozdiel medzi dvoma casovymi udajmi

v Assembler, C, C++, Pascal, Java

1

592

10.12.2009 19:50

stopa27

V tomto fóre nie sú ďalšie neprečítané témy.

Assembler

v Assembler, C, C++, Pascal, Java

0

828

31.03.2009 20:10

bbeni

V tomto fóre nie sú ďalšie neprečítané témy.

ASSEMBLER

v Assembler, C, C++, Pascal, Java

8

1787

13.03.2007 20:39

My-reC

V tomto fóre nie sú ďalšie neprečítané témy.

assembler

v Assembler, C, C++, Pascal, Java

1

1537

10.11.2006 18:14

Marco

V tomto fóre nie sú ďalšie neprečítané témy.

Assembler

v Assembler, C, C++, Pascal, Java

0

746

01.04.2009 21:02

bbeni

V tomto fóre nie sú ďalšie neprečítané témy.

Kniha : Assembler

v Assembler, C, C++, Pascal, Java

1

563

16.04.2013 22:34

XOLOO

V tomto fóre nie sú ďalšie neprečítané témy.

Assembler úloha

v Assembler, C, C++, Pascal, Java

0

829

02.02.2008 7:37

HT

V tomto fóre nie sú ďalšie neprečítané témy.

zacat assembler

v Assembler, C, C++, Pascal, Java

15

1182

16.12.2011 23:24

Ďuri

V tomto fóre nie sú ďalšie neprečítané témy.

Assembler Atmega8

v Assembler, C, C++, Pascal, Java

5

1208

17.10.2009 17:13

Logik

V tomto fóre nie sú ďalšie neprečítané témy.

Assembler 8086

v Assembler, C, C++, Pascal, Java

3

644

21.04.2009 20:05

Fico

V tomto fóre nie sú ďalšie neprečítané témy.

Assembler binary

v Assembler, C, C++, Pascal, Java

23

1272

18.04.2012 7:17

Fico

V tomto fóre nie sú ďalšie neprečítané témy.

Kalkulačka - assembler

v Assembler, C, C++, Pascal, Java

0

719

10.11.2011 18:54

Reverser

V tomto fóre nie sú ďalšie neprečítané témy.

aky assembler?

v Assembler, C, C++, Pascal, Java

4

785

21.11.2007 9:49

euthanan

V tomto fóre nie sú ďalšie neprečítané témy.

Assembler 8080

v Assembler, C, C++, Pascal, Java

5

1339

02.04.2010 20:44

Fico

V tomto fóre nie sú ďalšie neprečítané témy.

Assembler 8086

v Assembler, C, C++, Pascal, Java

2

654

27.03.2009 20:33

Ivan11114



© 2005 - 2024 PCforum, edited by JanoF