Treść przykładowego programu "oblicz.s", demonstrującego wprowadzenie danej i wykonanie obliczeń arytmetycznych w WinDLX
Proponuję zmodyfikować program tak, aby:
a) wczytywał liczby ze znakiem (zarówno + jak i - )
b) wykonywał inne działanie bądź działania arytmetyczne dla argumentów stałoprzecinkowych
c) wypisywał wynik bez wykorzystania formatu zmiennoprzecinkowego
d) wczytywał liczby w wybranym formacie zmiennoprzecinkowym, wykonywał na nich wybrane działanie arytmetyczne i wypisywał wynik zmiennoprzecinkowy ze znakiem
; program oblicz
; wypisanie zachęty do wprowadzenia liczby
; wczytanie liczby całkowitej bez znaku z klawiatury za pomocą biblioteki input
; wykonanie na tej danej elementarnych obliczeń : tutaj pomnożenia przez 10
; wypisanie wyniku jako liczby ZMP podwójnej długości
.data
Zacheta: .asciiz "Podaj liczbe calkowita bez znaku, ktora bedzie pomnozona przez 10 : "
FormatWypisania: .asciiz "Wynik mnozenia wczytanej liczby przez 10 = %g\n\n"
.align 2
ParametrPrintf: .word FormatWypisania
WartoscWypisania: .space 8
; 8 bajtów, bo wynik jako liczba ZMP 64-bitowa
.text
.global main
main:
;*** tu wstaw pierwsza instrukcję
; tu PC = (256) czyli (100)h
; $TEXT = 100h = 256
; $DATA = 1000h = 4096
; przekaż do r1 adres zachęty jako parametr wejściowy biblioteki input
addi r1,r0,Zacheta ; w r1 adres komunikatu do wypisania
;*** Odczytaj liczbę z konsoli do r1 za pomocą biblioteki input
jal InputUnsigned
; jako wynik procedury InputUnsigned w r1 mamy liczbę całkowitą bez znaku
; zapisujemy tę liczbę do f10
movi2fp f10,r1
; konwertujemy te liczbę z formatu STP do formatu ZMP i zapisujemy do f1
cvti2f f1,f10
; do D2 zapisujemy mnożnik 10
addi r2,r0,10
; zapisujemy jako STP do rejestru ZMP f12
movi2fp f12,r2
; konwertujemy z postaci STP z f12 do ZMP do f2
cvti2f f2,f12
; wykonujemy mnożenie argumentów ZMP i wynik do f3
multf f3, f1, f2
;konwersja z postaci 32- na 64-bitową z f3 do f6-f7
cvtf2d f6,f3
; zapamiętujemy wynik mnożenia w zmiennej WartoscWypisania
sd WartoscWypisania,f6
; przygotowujemy dla trap5 parametr w r14, jako adres opisu formatu i pola danej do wypisania
addi r14,r0,ParametrPrintf
; trap 5 - patrz HELP
trap 5
;*** end
trap 0