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
 

instructiunile mul si imul in limbaj de asamblare, nelamuriri

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

#1
tutuN_

tutuN_

    Junior Member

  • Grup: Members
  • Posts: 137
  • Înscris: 21.09.2014
Salutare!
Am urmatoarele instructiuni in limbaj de asamblare

mov ax,0055h
mov bx,11AAh
mul al
xchg ax,bx
not ax
neg bx


Am inceput
AX: 0055h
BX: 11AAh
iar linia 3 n-o inteleg.Nu reusesc sa inteleg mul si imul.Am citit, am inteles ca e inmultire fara semn.Ok, inmultesc 0055 cu 11aa in baza 16,nu?Obtin  5DD72 care ar trebui sa treaca in DX:AX pentru ca am registre de 16 biti, nu? si ar veni 0005:DD72, dar nu-i corect.Bag codul in emu8086 si in AX obtin 1C39, de unde? si in DX am 0000.

Exemplul 2

mov ax,0024h
mov bx,00A1h
imul bl
neg ax
push ax
push bx
inc sp
pop ax


AX: 0024h
BX: 00A1
imul bl reprezinta inmultire cu semn pe 8 biti, nu?Daca inmultesc 0024h cu 00A1h obtin 16A4 dar in emu8086 in AX am F2A4.
Am cautat pe net, am transformat in decimal si am avut 00A1h=161 in decimal dar asta-i pe 16 biti, nu?Am cautat un calculator pe net si pe 8 ar fi -95, dar cum il aflu pe -95 pe foaia de hartie?Iar pentru 00a1h=36 in decimal si am de inmultit -95*36=-3420 care in complement fata de 2 in hexa este F2A4, asa e procedeul?
Dar la primul exemplu?
Mersi!

#2
dexterash

dexterash

    --something---

  • Grup: Senior Members
  • Posts: 22,912
  • Înscris: 19.08.2004
Limbajul de asamblare nu e chiar universal, ci e specific fiecarui procesor/arhitectura. Asa ca mai intai afla ce arhitectura e si apoi cauta manualul specific arhitecturii cu instructiunile asm.

Lasa cautarile "pe net" ca mai mult te zapacesc decat te ajuta.

#3
sags

sags

    Senior Member

  • Grup: Senior Members
  • Posts: 9,731
  • Înscris: 24.04.2013
mul byte este inmultire a doi operanzi de 8 biti fara semn cu rezultat pe 16 biti. Precis, face ax = al (acest opeand e fix) * operadul din instructiune. In cazul tau, ax = al * al; ce pui in bx nu e folosit, nici ceea ce pui in ah, iar rezultatul e 1C39h (55h * 55h).

imul byte este inmultire cu semn, operanzi de 8 biti cu rezultat pe 16 biti. Da, in cazul tau un operand este negativ: 0A1h interpretat ca intreg pe 8 biti cu semn inseamna -95.

Edited by sags, 13 January 2020 - 00:31.


#4
MihaiProg

MihaiProg

    Member

  • Grup: Members
  • Posts: 345
  • Înscris: 08.02.2016
mov ax,0055h
mov bx,11AAh
mul al
xchg ax,bx
not ax
neg bx

pratic inmultesti al cu al si pe bx il lasi deoparte
in bx va fi valuarea bx care ai seta-o anterior: mov bx,11AAh

"mul al" ar trebui sa file "mul bl".

#5
MihaiProg

MihaiProg

    Member

  • Grup: Members
  • Posts: 345
  • Înscris: 08.02.2016

Quote

si in AX obtin 1C39, de unde?
mov ax,0055h  deci inmultind al cu el insusi al*al = 55h*55h = 1C39.

Quote

imul bl reprezinta inmultire cu semn pe 8 biti, nu?
Un "unsigned byte" poate stoca o valoare de la 00 la FF,
Un signed byte stocheaza valori pozitive de la 0 la 127 (de la 0 la 7F in hexa)
si valori negative de la -128 (80 hexa) la -1 (FF hexa)
cu alte cuvinte bitul cel mai semnificativ este 1 pentru valori negative  (80 hexa = 10000000 in binar)
si 0 pentru valori pozitive.

Valoare absoluta a numarului negativ = Valoarea maxima-Numarul+1
Exemplu numarul 00A1h:  FF-A1+1 = 5F ceea ce este 95,
cu alte cuvinte A1h = -95
Deci calculam -95*36=-3420

#6
tutuN_

tutuN_

    Junior Member

  • Grup: Members
  • Posts: 137
  • Înscris: 21.09.2014
Am inteles.
Multumesc pentru ajutor!

Anunturi

Chirurgia spinală minim invazivă Chirurgia spinală minim invazivă

Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical.

Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale.

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