Asemmbly osnova
»RSS Benchmark sajt

      Prikazani rezultati od 1 do 5 od ukupno 5

      Tema: Asemmbly osnova

      1. #1
        Member Avatar korisnika MostWanted
        Na forumu od
        Jul 2013
        Lokacija
        Desert / Middle East
        Poruka
        491
      2. Moja mašina
        • OS: Windows 10
        • LAP: Lenovo 14'' RYZEN 5 2500U, 8GB RAM, 256GB SSD
        • Ostalo: Samsung XCover 4
      3. Asemmbly osnova

        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

        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
        The closer you look, the less you see.

      4. #2
        Member Avatar korisnika TheCyA
        Na forumu od
        Dec 2009
        Lokacija
        Nis
        Poruka
        1.587
        Davno sam ovo radio tako da mozda nije tacno

        Ovo je kako vidim x86. Probaj da posle
        Kod:
        add eax,ebx
        dodas
        Kod:
        adc eax,0

      5. #3
        Member Avatar korisnika MostWanted
        Na forumu od
        Jul 2013
        Lokacija
        Desert / Middle East
        Poruka
        491
      6. Moja mašina
        • OS: Windows 10
        • LAP: Lenovo 14'' RYZEN 5 2500U, 8GB RAM, 256GB SSD
        • Ostalo: Samsung XCover 4
      7. Nope, nije to Googlam malo i koliko vidim, problem nastaje kada konvertujem u ASCII zato sto od 1-9 mogu da dodam 48 da dobijem ascii kod, dok ako na 10 dodam 48 dobijem ascii kod za ";". Pojma nemam kako da resim ovo
        The closer you look, the less you see.

      8. #4
        Member Avatar korisnika gadafi
        Na forumu od
        Sep 2005
        Lokacija
        Niš
        Poruka
        3.331
      9. Moja mašina
        • CPU: i5 9600K, Noctua NH-U12P
        • MoBo: Gigabyte Z390 Gaming SLI
        • RAM: Kingston HyperX DDR4-2400 2x16 GB
        • VGA: Nvidia Quadro P2000
        • MON: Dell U2412M
        • HDD: Crucial MX100 256GB, WD 1TB RE4 + 1.5TB Green + 3TB SE
        • OPT: LG HL-DT-ST BH16NS40
        • Case: Cooler Master HAF-X, Seasonic Focus Gold 550FX
        • SND: OnBoard, Microlab FC 360
        • OS: Windows 10
        • LAP: Lenovo Ideapad 700-17isk
        • TV: LG 42LW4500, 49UH8507
        • INET: Kablovska
        • Ostalo: HP Deskjet 5150, Kyocera FS-1920, Canon CS-4400F
      10. Možeš da podeliš broj na cifre, pa da konvertuješ svaku posebno.
        x1gor: Boot Loader nije program, vec vrsta programa ...

      11. #5
        Moderator Avatar korisnika yooyo
        Na forumu od
        Jun 2005
        Lokacija
        Beograd, London
        Poruka
        10.866
      12. Moja mašina
        • CPU: i7-4790
        • MoBo: ASUS
        • RAM: 16GB
        • VGA: NVidia GeForce 770GTX
        • MON: Dell U2716D - 27" (2560x1440)
        • HDD: Samsung Evo 840 (500GB) + 2TB HDD
        • SND: Integrisana
        • OS: Centos 7
        • LAP: Dell XPS 15
        • INET: DSL
      13. Treba da simuliraš bit za prenošenje (carry). Šta je rezultat 9+9? Trebalo bi da bude 8, a 1 se prenosi na sabirke ulevo.

        Sent from my Pixel 2 XL using Tapatalk
        pro’ gram mer (n.) - An organism that converts caffeine into code.

      Bookmarks

      Dozvoljeni tagovi

      • Ne možete pokrenuti nove teme
      • Ne možete odgovoriti u temi
      • Ne možete okačiti atačmente
      • Ne možete izmeniti svoje poruke
      •