Új hozzászólás Aktív témák
-
Jester01
veterán
válasz
plaschil
#335
üzenetére
Ha egyáltalán fogalmad sincs akkor az kemény menet lesz.
Először is, az assembly az processzor(-család) specifikus dolog. Az említett 2 feladat 2 különböző processzorra kell. Mindkét esetben szükséged lesz a megfelelő utasításkészlet leírásra (instruction set reference) és persze az általános architektúra ismeretére. Amennyiben ki is akarod őket próbálni, úgy a fejlesztési eszközökre (toolchain) is szükséged lesz, ideértve egy debuggert és egy szimulátort is.Egyik feladat megfogalmazása sem egyértelmű, de kiindulásnak jó lesz ha egyfajta értelmezést elfogadunk.
Nézzük az elsőt. Tegyük fel, hogy úgy értették, azt a 2 konstans számot kell BCD módban összeadni, majd az eredményt binárisan (egy byteon), BCD-ben és hexában (ez utóbbi kettőt ascii kóddal) megadni. A programban először összeadjuk őket binárisan majd a megadott "decimális korrekciót" alkalmazva kapjuk a bcd eredményt. Ezután ezt össze-vissza alakítjuk:
- a bcd értéket egyesekre (e) és tízesekre (t) bontjuk
- 00 ascii kódját hozzáadva kapjuk a decimális eredményt
- 10t+e=8t+t+t+e képlettel kapjuk a bináris eredményt
- amit pedig két 4 bites részre bontunk, ebből lesz egy-egy hexa számjegy amit táblázatból olvasunk kiÍme:
mov al, 38h
add al, 49h
daa ; 38(bcd) + 49(bcd) = 87(bcd)
mov dh, al ; copy (DH=87h)
mov dl, al ; copy (DL=87h)
shr dh, 4 ; tens (DH=08h)
and dl, 0fh ; ones (DL=07h)
mov al, dh ; tens (AL=08h)
shl al, 3 ; 8 * tens (AL=40h)
add al, dh ; 9 * tens (AL=48h)
add al, dh ; 10 * tens (AL=50h)
add al, dl ; 10 * tens + ones (AL=57h=87)
add dx, 3030h ; convert to ascii (DX=3837h='87')
movzx bx, al ; copy and zero BH (BX=57h)
shr bl, 4 ; first hex digit (BX=05h)
mov ch, [table+bx] ; get hex digit (CH=35h='5')
mov bl, al ; copy (BX=57h)
and bx, 0fh ; second hex digit (BX=07h)
mov cl, [table+bx] ; get hex digit (CL=37h='7')
; results
; AL=binary (57h)
; CX=hex (3537h='57')
; DX=dec (3837h='87')
; lookup table for hex digits
table: db '0123456789ABCDEF'(a táblázat olvasásnál feltételeztem, hogy CS=DS. Ha ez nem így van, akkor CS: előtag használata szükséges vagy a táblázatot kell a DS szegmensbe tenni.)
Új hozzászólás Aktív témák
- Hosszú premier előzetest kapott az Arknights: Endfield
- CURVE - "All your cards in one." Minden bankkártyád egyben.
- Vezeték nélküli fülhallgatók
- Milyen külső akkumulátort mobileszközökhöz?
- Kormányok / autós szimulátorok topikja
- Facebook és Messenger
- Meghozta a régóta várt asztali Ryzen APU-kat az AMD
- Spórolós topik
- Bittorrent topik
- E-roller topik
- További aktív témák...
- CÉGEK FIGYELEM!! iPhone 11 64GB Black -1 ÉV GARANCIA - 27% ÁFA-S SZÁMLA Kártyafüggetlen, 100% Akksi
- DELL Precision 5540 Workstation i7-9850H Nvidia Quadro T2000 32GB 512GB 15.6" 1év garancia
- Dell Latitude Precision Üzleti gépek, 2-in-1 gépek, 3-11. gen.
- Keresünk iPhone 12/ 12 Mini/ 12 Pro/12 Pro Max
- Dell Latitude 7290,12.5",FHD,i5-7300U,8GB DDR4,256GB SSD,WIN11
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
