MostWanted
Cenjen
- Učlanjen(a)
- 12.07.2013
- Poruke
- 668
- Poena
- 195
Moja oprema
- CPU & Cooler
- Ryzen 5600 & BeQuiet Pure Rock Slim 2
- Matična ploča
- Asus B550-PRO
- RAM
- 16GB DDR4 3200MHz Kingston
- GPU
- MSI Radeon 6700XT 12GB
- Storage
- 1TB nvme SSD Kingston
- Zvuk
- Tannoy Gold 5
- PSU
- Fractal ION Gold 750W
- Kućište
- Cooler Master Silencio S600 + BeQuiet Silent Wings 3 120mm
- Monitor
- LG UltraGear 27'' 1440p 165Hz
- Miš & tastatura
- Logitech G Pro tastatura i mis
Potrebna mala pomoc oko jednostavnog assembly programa koji sabira dva jednocifrena broja, za faks...
eax i ebx su 2 unete cifre, ecx rezultat. Ispod je ceo kod, sve sto treba da uradim je da prepravim da moze da izbaci rezultat kada je dvocifreni broj, za sada moze samo kada je jednocifreni, do 10. Znaci 9+9 ne moze. Rezultat bi trebalo biti prikazan kao broj u rangu 00-18, uvek dvocifreni. Pojma nemam o assembly-ju a slab sam sa vremenom trenutno pa bi mi jako znacila mala pomoc ovde
eax i ebx su 2 unete cifre, ecx rezultat. Ispod je ceo kod, sve sto treba da uradim je da prepravim da moze da izbaci rezultat kada je dvocifreni broj, za sada moze samo kada je jednocifreni, do 10. Znaci 9+9 ne moze. Rezultat bi trebalo biti prikazan kao broj u rangu 00-18, uvek dvocifreni. Pojma nemam o assembly-ju a slab sam sa vremenom trenutno pa bi mi jako znacila mala pomoc ovde
Kod:
; Constants
cr equ 13 ; Vognretur
lf equ 10 ; Linjeskift
SYS_EXIT equ 1
SYS_READ equ 3
SYS_WRITE equ 4
STDIN equ 0
STDOUT equ 1
STDERR equ 2
; Datasegment
section .bss
siffer resb 4
; Datasegment
section .data
meld db "Skriv to ensifrede tall skilt med mellomrom.",cr,lf
db "Summen av tallene maa vaere mindre enn 10.",cr,lf
meldlen equ $ - meld
feilmeld db cr,lf, "Skriv kun sifre!",cr,lf
feillen equ $ - feilmeld
crlf db cr,lf
crlflen equ $ - crlf
Skriv to ensifrede tall skilt med mellomrom
; Kodesegment med program
section .text
global _start
_start:
mov edx,meldlen
mov ecx,meld
mov ebx,STDOUT
mov eax,SYS_WRITE
int 80h
; Les tall, innlest tall returneres i ecx
; Vellykket retur dersom edx=0
call lessiffer
cmp edx,0 ; Test om vellykket innlesning
jne Slutt ; Hopp tilavslutning ved feil i innlesing
mov eax,ecx ; Første tall/siffer lagres i reg eax
call lessiffer
; Les andre tall/siffer
; vellykket: edx=0, tall i ecx
cmp edx,0 ;Test om vellykket innlesning
jne Slutt
mov ebx,ecx ; andre tall/siffer lagres i reg ebx
call nylinje
add eax,ebx
mov ecx,eax
call skrivsiffer ; Skriv ut verdi i ecx som ensifret tall
Slutt:
mov eax,SYS_EXIT
mov ebx,0
int 80h
; ---------------------------------------------------------
skrivsiffer:
; Skriver ut sifferet lagret i ecx. Ingen sjekk på verdiområde.
push eax
push ebx
push ecx
push edx
add ecx,'0' ; converter tall til ascii.
mov [siffer],ecx
mov ecx,siffer
mov edx,1
mov ebx,STDOUT
mov eax,SYS_WRITE
int 80h
pop edx
pop ecx
pop ebx
pop eax
ret
; ---------------------------------------------------------
lessiffer:
; Leter forbi alle blanke til neste ikke-blank
; Neste ikke-blank returneres i ecx
push eax
push ebx
Lokke:
; Leser et tegn fra tastaturet
mov eax,SYS_READ
mov ebx,STDIN
mov ecx,siffer
mov edx,1
int 80h
mov ecx,[siffer]
cmp ecx,' '
je Lokke
cmp ecx,'0' ; Sjekk at tast er i område 0-9
jb Feil
cmp ecx,'9'
ja Feil
sub ecx,'0' ; Konverter ascii til tall.
mov edx,0 ; signaliser vellykket innlesning
pop ebx
pop eax
ret ; Vellykket retur
Feil:
mov edx,feillen
mov ecx,feilmeld
mov ebx,STDERR
mov eax,SYS_WRITE
int 80h
mov edx,1 ; Signaliser mislykket innlesning av tall
pop ebx
pop eax
ret ; Mislykket retur
; ---------------------------------------------------------
; Flytt cursor helt til venstre på neste linje
nylinje:
push eax
push ebx
push ecx
push edx
mov edx,crlflen
mov ecx,crlf
mov ebx,STDOUT
mov eax,SYS_WRITE
int 80h
pop edx
pop ecx
pop ebx
pop eax
ret
; End _start