Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
La multi ani @fiuny!

Ghiocei - nu mai infloresc

Laowa 10mm F/2.8 pentru FF

Daca imi fac casa cu fosa, cat co...
 Navigatie Octavia 3

Cum obtin reducere la Bolt? Sau e...

Garantie reciclabile, monopolizata?

Suport auto biciclete
 A murit Vasile Diba 1954-2024

A postat pe tiktok o varianta cu ...

Sfat curațare TEI

Shell script pentru 3 update-uri ...
 Pareri plita cu inductie cu hota ...

Credit si avans cu plata cash - l...

alternativa pentru artelac night ...

Alarma daca pulsul scade prea mult
 

[ASM] Afisare cifre pare din sir

- - - - -
  • Please log in to reply
41 replies to this topic

#1
Abbey

Abbey

    New Member

  • Grup: Junior Members
  • Posts: 17
  • Înscris: 22.04.2019
Ma poate ajuta cineva cu o problema in assembler? Trebuie sa scriu un cod care sa afiseze cifrele pare dintr-un sir de cifre. Si pe cuvant ca nu stiu sa fac asta, nu am inteles nimic. Am facut un cod din ce am adunat de pe net, dar nici nu stiu daca am scris bine, ceea ce am scris:
.model small
.stack 100h
.data
vector db 1,2,3,4,5,6,7
n db 7
.code
start:
mov AX, @data
mov DS, AX
mov CX, n
xor SI, SI
xor CX, CX
mov CL, n
mov AL, vector
mov cx, 9			
xor ax, ax			
xor bx, bx			
l1:					
test cx, 1			
jz l2				
add bx, cx
jmp l3				
l2:
add ax, cx
l3:
loop l1
end start

va rog, ajutati-ma daca puteti, e foarte important

Edited by MarianG, 03 January 2020 - 19:55.
code tag


#2
MartinAdelberg

MartinAdelberg

    Member

  • Grup: Members
  • Posts: 866
  • Înscris: 23.08.2019

View PostAbbey, on 03 ianuarie 2020 - 19:15, said:

Ma poate ajuta cineva cu o problema in assembler? Trebuie sa scriu un cod care sa afiseze cifrele pare dintr-un sir de cifre. Si pe cuvant ca nu stiu sa fac asta, nu am inteles nimic.
In primul rand cauta care sunt operatiile elementare de stocare a unei variabile in registrele procesorului.
Apoi scrie cate un mic program care face urmatoarele lucruri:
1. aduna doua numere
2.scade doua numere
3.multiplica doua numere
4. imparte  doua numere.

https://www.tutorial...nstructions.htm

de asemeni vei avea nevoie si de instructiunile pt  incarca in registrii valori si pt a citi din registrii valorile incarcate.
https://www.tutorial...asic_syntax.htm

Un simulator online de assembler ai aici ca sa testezi : https://www.tutorial...mbly_online.php

Dupa ce pui aici cele 4 programele, putem trece mai departe.
Te astept cu ele.

Edited by MartinAdelberg, 03 January 2020 - 19:35.


#3
Tehnicianul090370

Tehnicianul090370

    Active Member

  • Grup: Members
  • Posts: 1,711
  • Înscris: 18.10.2018
Nu se poate da garantie la un produs decat in baza facturii,certificatului de garantie,a dovezii de cumparare.Nu se poate in baza SN-ului... Te duci la service cu SSD-ul in garantie si in baza SN-ului, ce sa caute lucratorul?!? Ceva achizitionat... de unde? De la Fane de la garla?

#4
maccip

maccip

    45 ani

  • Grup: Senior Members
  • Posts: 32,870
  • Înscris: 06.01.2007
Abbey, assemblerul nu se intelege. El nu e un limbaj de programare ci o transcriere fidela a instructiunilor de procesor in limbaj uman.

Daca n-ai inteles assembler, insamna ca n-a i inteles arhitectura si rostul unui procesor, cum functioneaza el, care-s variantele, ce inseamna in mod particular setul de instructiuni 8086.


Nu poti face cod adunat de pe net. Unitatea de cod reutilizabil este procedura, obiectul, nu bucata de cod scris.

#5
Abbey

Abbey

    New Member

  • Grup: Junior Members
  • Posts: 17
  • Înscris: 22.04.2019

View Postmaccip, on 03 ianuarie 2020 - 20:00, said:

Abbey, assemblerul nu se intelege. El nu e un limbaj de programare ci o transcriere fidela a instructiunilor de procesor in limbaj uman.

Daca n-ai inteles assembler, insamna ca n-a i inteles arhitectura si rostul unui procesor, cum functioneaza el, care-s variantele, ce inseamna in mod particular setul de instructiuni 8086.


Nu poti face cod adunat de pe net. Unitatea de cod reutilizabil este procedura, obiectul, nu bucata de cod scris.

Da, se poate spune si asa. Nu am inteles exact ce se intampla, cum functioneaza. Si nu stiu cum as reusi sa inteleg in cateva zile( pentru ca problema aia e proiectul pe care trebuie sa il predau saptamana viitoare)

#6
maccip

maccip

    45 ani

  • Grup: Senior Members
  • Posts: 32,870
  • Înscris: 06.01.2007
In codul ala al tau nu faci decat sa muti niste date de colo colo, si niste xor-uri prin care stergi niste registri.
Atat!
Apoi niste teste urmate de jump. N-are nicio noima ce ai scris tu acolo.

De exemplu pui in cx 9 si apoi faci TEST 1, 9 care e 1, rezultatul fiind ignorat dar pozitionati bitii de flag.
Apoi testezi zero-flag ???
Ce rost are chestia asta? N-are nicio logica.

#7
csgabe

csgabe

    Active Member

  • Grup: Members
  • Posts: 1,512
  • Înscris: 08.12.2009
Poti sa scrii programul in C si apoi sa te uiti la codul sursa in disassembler sau debugger.
Algoritmul e usor: trebuie sa parcurgi toate valorile din sir verificand daca valoarea se poate imparti la 2(restul (remainder) trebuie sa fie 0), daca da atunci se poate afisa, altfel treci la urmatoarea valoare.

Edited by csgabe, 03 January 2020 - 20:12.


#8
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,289
  • Înscris: 10.08.2005
de trecut la urmatoarea valoare treci indiferent de modulo 2

#9
Abbey

Abbey

    New Member

  • Grup: Junior Members
  • Posts: 17
  • Înscris: 22.04.2019

View Postcsgabe, on 03 ianuarie 2020 - 20:11, said:

Poti sa scrii programul in C si apoi sa te uiti la codul sursa in disassembler sau debugger.
Algoritmul e usor: trebuie sa parcurgi toate valorile din sir verificand daca valoarea se poate imparti la 2(restul (remainder) trebuie sa fie 0), daca da atunci se poate afisa, altfel treci la urmatoarea valoare.

Stiu sa scriu in C/C++. Dar imi e greu sa il scriu in Assembler, pentru ca nu inteleg cum functioneaza.

#10
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,070
  • Înscris: 24.02.2007
Scrii codul in C si urmaresti cu debugerul fiecare instructiune asm obtinuta, pas cu pas. Si registrii

Attached File  Untitled.png   98.26K   44 downloads

#11
Abbey

Abbey

    New Member

  • Grup: Junior Members
  • Posts: 17
  • Înscris: 22.04.2019

View Postmaccip, on 03 ianuarie 2020 - 20:09, said:

In codul ala al tau nu faci decat sa muti niste date de colo colo, si niste xor-uri prin care stergi niste registri.
Atat!
Apoi niste teste urmate de jump. N-are nicio noima ce ai scris tu acolo.

De exemplu pui in cx 9 si apoi faci TEST 1, 9 care e 1, rezultatul fiind ignorat dar pozitionati bitii de flag.
Apoi testezi zero-flag ???
Ce rost are chestia asta? N-are nicio logica.

Stiu si eu ca nu are logica. De asta am cerut ajutor.

View Postdani.user, on 03 ianuarie 2020 - 20:15, said:

Scrii codul in C si urmaresti cu debugerul fiecare instructiune asm obtinuta, pas cu pas. Si registrii

Attachment Untitled.png

Exista asa ceva...? :)) Pai si practic, ce e scris acolo, e programul meu in assembler?

#12
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,289
  • Înscris: 10.08.2005

View PostAbbey, on 03 ianuarie 2020 - 20:17, said:

Exista asa ceva...? Posted Image) Pai si practic, ce e scris acolo, e programul meu in assembler?
da, este

#13
maccip

maccip

    45 ani

  • Grup: Senior Members
  • Posts: 32,870
  • Înscris: 06.01.2007
Bai... n-am  mai scris in assembler de aproape 20 de ani. Mi-e greu sa scriu eu un cod corect, nu mai stiu arhitectura 8086.
Dar in principiu pot intelege un cod daca e corect, cat de cat, daca nu-i prea complicat sau daca n-are instructiuni din setul extins.

Poti incarca element cu element intr-un registru (AX) si apoi sa testezi paritatea cu instructiounea JP. Adica nu tre sa faci operatiunea de modulo 2 din moment ce ai paryty bit la dispozitie pozitionat in registrul de flags.
Vezi si tu cand se pozitioneaza acel bit si foloseste-te de informatia aia pentru a vedea in ce registru poti aduce numerele din vectorul ala. As putea sa studiez eu, dar nu-i tema mea. Daca as avea asa ceva de facut, astia ar fi pasii pe care sa-i  urmez.
Afisarea nu stiu cum se face,probabil cu o functie de biblioteca. Altfel cred ca-i enorm de greu cu intreruperea 10, video.. ceva nasol care in mod cert ma depaseste acum.

Edited by maccip, 03 January 2020 - 20:29.


#14
maccip

maccip

    45 ani

  • Grup: Senior Members
  • Posts: 32,870
  • Înscris: 06.01.2007
Proiectul de saptamana viitoare probabil ca-l vei preda, nu e foarte greu programul cerut de tine, e unul simplu care ilustreaza principiile de baza ale assembler.
Ce-ti recomand eu pentru a intelege pe deplin assemblerul si calculatorul in general e playlistul al doilea din link.
https://www.youtube....terbc/playlists
Iti explica pas cu pas cum sa realizezi un calculator, cum sa proiectezi tu insuti unitatea aritmetica si logica, opcode, microcodes, si cum sa-ti afci propriul limbaj de asamblare.
Nu vei face asa ceva, dar pentru a capata intelegere, trebuie sa mergi un nivel mai sus sa intelegi. Adica sa inveti tu sa proiectezi proproiul procesor sau arhitectura de computer.
Cred ca in 3-4 zile linistite poti da gata tot playlistul. Si cred ca e de mare ajutor, poate mai de ajutor decat un curs de facultate. Ramai cu o intelegere temeinica alucrurilor cand inveti tu sa faci ceva practic, bit cu bit, poarta cu poarta.

Eu am citit mai de mult "De la poarta TTL la microporcesor" 2 volume, e cartea care m-a facut sa inteleg, probabil ca se mai gaseste pein anticariate.
Dar, sincer, playlistul lui Ben Eater e mai bun decat cartea. In sensul ca ajungi mai repede la miracolul intelegerii. Cartea n-o poti parcurge in 3-4 zile, playlistul da.

#15
Abbey

Abbey

    New Member

  • Grup: Junior Members
  • Posts: 17
  • Înscris: 22.04.2019

View Postdani.user, on 03 ianuarie 2020 - 20:15, said:

Scrii codul in C si urmaresti cu debugerul fiecare instructiune asm obtinuta, pas cu pas. Si registrii

Attachment Untitled.png

Aici pare scris asa de complicat.. fata de cum arata problemele scrise de profesor

View Postmaccip, on 03 ianuarie 2020 - 20:43, said:

Proiectul de saptamana viitoare probabil ca-l vei preda, nu e foarte greu programul cerut de tine, e unul simplu care ilustreaza principiile de baza ale assembler.
Ce-ti recomand eu pentru a intelege pe deplin assemblerul si calculatorul in general e playlistul al doilea din link.
https://www.youtube....terbc/playlists
Iti explica pas cu pas cum sa realizezi un calculator, cum sa proiectezi tu insuti unitatea aritmetica si logica, opcode, microcodes, si cum sa-ti afci propriul limbaj de asamblare.
Nu vei face asa ceva, dar pentru a capata intelegere, trebuie sa mergi un nivel mai sus sa intelegi. Adica sa inveti tu sa proiectezi proproiul procesor sau arhitectura de computer.
Cred ca in 3-4 zile linistite poti da gata tot playlistul. Si cred ca e de mare ajutor, poate mai de ajutor decat un curs de facultate. Ramai cu o intelegere temeinica alucrurilor cand inveti tu sa faci ceva practic, bit cu bit, poarta cu poarta.

Eu am citit mai de mult "De la poarta TTL la microporcesor" 2 volume, e cartea care m-a facut sa inteleg, probabil ca se mai gaseste pein anticariate.
Dar, sincer, playlistul lui Ben Eater e mai bun decat cartea. In sensul ca ajungi mai repede la miracolul intelegerii. Cartea n-o poti parcurge in 3-4 zile, playlistul da.

Multumesc

#16
MartinAdelberg

MartinAdelberg

    Member

  • Grup: Members
  • Posts: 866
  • Înscris: 23.08.2019

View Postmaccip, on 03 ianuarie 2020 - 20:00, said:

Abbey, assemblerul nu se intelege. El nu e un limbaj de programare ci o transcriere fidela a instructiunilor de procesor in limbaj uman.
Sa avem pardon si sa respectam realitatea totusi:

In computer programming, assembly language often abbreviated asm, is any low-level programming language in which there is a very strong correspondence between the instructions in the language and the architecture's machine code instructions. Because assembly depends on the machine code instructions, every assembler has its own assembly language which is designed for exactly one specific computer architecture. Assembly language may also be called symbolic machine codet

Este clasificat ca limbaj de programare.

Edited by MartinAdelberg, 03 January 2020 - 21:03.


#17
sags

sags

    Senior Member

  • Grup: Senior Members
  • Posts: 9,731
  • Înscris: 24.04.2013
@Abbey: Daca stii C/C++, incepe prin a gandi registrele ca variabile. Apoi executa ‘de mana’ codul la care te-ai gandit si vezi daca merge cum crezi.

Fii atent la cateva particularitati de care nu ai tinut cont deloc in codul din mesajul inital:
  • al/ ah NU sunt registre independente de ax, ci jumatati ale lui. Degeaba pui ceva in al sau cl, daca 2 linii mai incolo - inainte de a te folosi de ceea ce ai pus - suprascrii ax respectiv cx cu totul, deci inclusiv jumatatile lor mai putin semnificative.
  • O serie de instructiuni se folosesc implicit de unele registre. De aici: (i) loop parca se foloseste de cx drept contor (ii) trebuie sa testezi numerele dintr-un sir. Asa cum intr-o variabila din C nu poti pune doua valori deodata, nici in cx nu poti… Ce faci tu este sa testezi contorul de elemente (sau pe-0acolo p[e undeva, ca nici macar asta nu faci corect).
  • Trebuie sa citest elemnentele sirului unul cate unul, tu acum nu a faci.
  • Pentru scris rezultatele depinzi in mod esential de tipul de calculator pe care vei rula programul si de sistemul lui de operare. Trebuie sa vezi cum se face scrierea in acel caz concret. De exemplu sub MS DOS poti folosi int 10h (direct apeluri CGA/EGA/VGA BIOS) sau int 21h (functiile sistem, inclusiv scriere in fisier - care poate fi si consola/ stdout - ale MS DOS).
  • Si o chestie legata de enunt: ‘cifrele pare’ s-ar putea sa se refere la caractere reprezentand cifre, nu la numere in intervalul 0…9. Deci trebuie sa vezi cum sunt codificate caracterele '0''9' (posibil ASCII, dar nu e obligatoriu) si sa scriii tratarea in mod corespunzator. In C/C++ ai aceeasi distinctie: una este int i = 0; si alta char c = '0';.

View Postmaccip, on 03 ianuarie 2020 - 20:27, said:

… Poti incarca element cu element intr-un registru (AX) si apoi sa testezi paritatea cu instructiounea JP. Adica nu tre sa faci operatiunea de modulo 2 din moment ce ai paryty bit la dispozitie pozitionat in registrul de flags. …
Nu-i asa. Mai intai simpla incarcare a unui registru nu seteaza flagurile. Mai apoi jp [cred ca, din amintiri din cela-afara de estompate] este ‘jump if positive’, paritatea parca se testeaza cu jpejump if parity even’/ jpojump if parity odd’. Si mai ales, flagul de parity nu este deloc ceea ce are nevoie initiatorul; el nu insemana ‘numar - in ansamblul lui - par/impar’ (ceea ce nu ar fi decat o dublura a bitului cel mai putin semnificativ) ci [parca] ‘numarul de biti pe 1 este par/impar’.

#18
MartinAdelberg

MartinAdelberg

    Member

  • Grup: Members
  • Posts: 866
  • Înscris: 23.08.2019

View Postsags, on 03 ianuarie 2020 - 21:02, said:

@Abbey: Daca stii C/C++, incepe prin a gandi registrele ca variabile. Apoi executa ‘de mana’ codul la care te-ai gandit si vezi daca merge cum crezi.
Ar putea fi o solutie insa de obicei nu este. Eu am facut si limbajul C++ si limbajul assembly si iti poti da seama din avion daca un cod a fost scris pentru assembly sau s-a apelat
la solutie de trisare cum ar fi debuggerul de Visual Studiio , si altele.

In plus vine profesorul si il intreaba ce face linia X din program si de ce face, si acolo a ramas.

Assembly este un limbaj in sine care se invata separat, altfel nu poti lua examenul respectiv.

Anunturi

Chirurgia cranio-cerebrală minim invazivă Chirurgia cranio-cerebrală minim invazivă

Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne.

Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate