logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Asembler - Jak poprawić program dodający liczby i zapisujący wynik do pliku?

pitereko123 19 Lis 2012 09:33 3474 6
REKLAMA
  • #1 11547129
    pitereko123
    Poziom 9  
    Posty: 5
    Mam pewien problem otóż program dodaje 2 liczby wprowadzane z klawiatury ale tylko suma do 10 co zrobiłem źle i jak mam przekształcić program żeby zapisywał do pliku wynik?
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 11548560
    Dżyszla
    Poziom 42  
    Posty: 7071
    Pomógł: 1095
    Ocena: 217
    Ależ sumuje dobrze, tylko żeby wyświetlić, musisz dokonać odpowiednich konwersji. Pamietaj, że wyswietlasz tylko znak o wskazanym kodzie ASCII. Dodawanie i odejmowanie od tego kodu 30h powoduje "konwersję" cyfry na kod ASCII tejże cyfry lub odwrotnie.

    Zatem wyswietlanie wyników >= 10 wymusza potrzebę wyświetlenia dwóch znaków:
    1. O wartości ASCII (wynik MOD 10) + 30h
    2. O wartości ASCII (wynik DIV 10) + 30h
    gdzie MOD to reszta z dzielenia, a DIV to część całkowita z dzielenia (zapoznaj się z instrukcją DIV/IDIV)
  • REKLAMA
  • #3 11575899
    pitereko123
    Poziom 9  
    Posty: 5
    OK, dzięki. Ale jak go przekształcić żeby zapisywało do pliku?
  • REKLAMA
  • #4 11577238
    Dżyszla
    Poziom 42  
    Posty: 7071
    Pomógł: 1095
    Ocena: 217
    Proponuję zapoznać się z popularnymi przerwaniami oraz ich funkcjami.
    Szczególnie interesujace będą przerwania 13h i 21h
  • REKLAMA
  • #5 11594791
    pitereko123
    Poziom 9  
    Posty: 5
    mam już zapis do pliku ale nie umiem przekształcic na liczby dziesiętne pomoże ktoś z tym kodem??

    .MODEL SMALL
    .STACK 100H

    .DATA
    PROMPT_1 DB 'Podaj pierwsza liczbe: $'
    PROMPT_2 DB 'Podaj druga liczbe: $'
    PROMPT_3 DB 'Suma liczb to: $'

    VALUE_1 DB ?
    VALUE_2 DB ?

    Bufor DB 'Hello world'

    wynik DB ?

    Plik DB 'WYNIK2.txt',0
    .CODE
    MAIN PROC
    MOV AX, @data
    MOV DS, AX

    LEA DX, PROMPT_1 ;wczytuje rejestr 1
    MOV AH, 9
    INT 21H

    MOV AH, 01h ;wczytuje wprowadzony znak
    INT 21H

    SUB AL, 30H ;zapisuje pierwsza liczbe w ASCII
    MOV VALUE_1,AL

    MOV AH, 2
    MOV DL, 0DH
    INT 21H

    MOV DL, 0AH
    INT 21H

    LEA DX, PROMPT_2 ;wczytuje rejestr 2
    MOV AH, 9
    INT 21H

    MOV AH, 01h ;wczytuje wprowadzony znak
    INT 21H

    SUB AL, 30H ;zapisuje druga liczbe w ASCII
    MOV VALUE_2,AL

    MOV AH, 2
    MOV DL, 0DH
    INT 21H

    MOV DL, 0AH
    INT 21H

    LEA DX, PROMPT_3 ;wczytuje rejestr 3
    MOV AH, 9
    INT 21H



    xor ax,ax
    xor bx,bx

    MOV AL, VALUE_1 ;dodawanie wprowadzonych liczb
    add AL, VALUE_2



    ADD AL, 30H ;zamiana ASCII do dziesitnej

    MOV AH, 2 ;wyswietlanie
    MOV DL,AL
    INT 21H

    mov wynik,DL

    ; Otworzenie istniejącego pliku
    MOV AH, 3Dh
    MOV AL, 1
    MOV DX, SEG Plik
    MOV DS, DX
    MOV DX, OFFSET Plik
    INT 21h
    JC Koniec



    ; Zapisanie danych z bufora
    MOV BX, AX
    MOV AH, 40h
    MOV DX, SEG wynik
    MOV DS, DX
    MOV DX, OFFSET wynik
    MOV CX, 11
    INT 21h
    JC Koniec

    ; Zamknięcie pliku
    MOV AH, 3Eh
    INT 21h
    JC Koniec

    Koniec:

    ; Koniec programu
    MOV AH, 04Ch
    INT 21h

    MAIN ENDP
    END MAIN

    Proszę umieszczać kod w znacznikach syntax. Opcja Listing kodu. Zdanie rozpoczynamy z wielkiej litery. Proszę to poprawić. [adamas_nt]
  • #7 11792377
    Remeknapr
    Poziom 33  
    Posty: 3790
    Pomógł: 138
    Ocena: 183
    pitereko123 napisał:
    mam już zapis do pliku ale nie umiem przekształcic na liczby dziesiętne ,,,

    Są gotowe procedury służące do tego celu. Spróbuj znaleźć w sieci. Jeśli Ci się to nie uda podam link.

Podsumowanie tematu

✨ Użytkownik ma problem z programem w asemblerze, który dodaje dwie liczby, ale wyświetla tylko sumy do 10. Odpowiedzi sugerują, że konieczne jest dokonanie konwersji wyników do formatu ASCII, aby poprawnie wyświetlić sumy większe lub równe 10. Użytkownik również pyta o zapis wyników do pliku, co prowadzi do wskazania przerwań 13h i 21h jako przydatnych w tym kontekście. W kolejnych wiadomościach użytkownik informuje, że udało mu się zaimplementować zapis do pliku, ale potrzebuje pomocy w konwersji na liczby dziesiętne. Otrzymuje sugestie dotyczące poszukiwania gotowych procedur w sieci oraz linki do przykładów.
Wygenerowane przez model językowy.
REKLAMA