3. Teszt
adat segment v1 DB 3 v2 DW 4 adat ends
Feladat
v1 és v2 előjeltelen számok. Helyezd el az összeguket ax-ben!
Megoldás: v1 8 bites, tehát csak AL-be lehet betölteni. Mivel előjeltelen,
ezért, símán 0-kat írhatunk AH-ba. AX-ben tehát 16 bites érték, amihez
gond nélkül hozzá lehet adni a szintén 16 bites v2-t. Kész is.
mov al, v1 mov ah, 0 add ax, v2
Feladat
v1 és v2 előjeles számok. Helyezd el az összeguket ax-ben!
Megoldás: v1 8 bites, tehát csak AL-be lehet betölteni. Mivel előjeles,
a cbw utasítást kell használni, hogy 16 bites legyen.
AX-hez gond nélkül hozzá lehet adni a szintén 16 bites v2-t.
mov al, v1 cbw add ax, v2
Feladat
cx és dx előjeltelen számokat tartalmaznak. Helyezd el a kisebbiket ax-ben!
Megoldás:Hasonlítsuk össze őket. Ha cx a kisebb, ugrik a címkére, és cx-et
töltjük ax-be. Ha cx nem kisebb, akkor dx-et töltjük ax-be. Vigyázat, nem szabad
"rácsorogni" az else ágbol a then ágra! Ezt előzi meg a jmp vege utasítás.
cmp cx, dx jb cxakisebb mov ax, dx jmp vege cxakisebb: mov ax, cx vege:Vagy másképpen is lehet gondolkodni: tegyük bele az egyiket (mondjuk cx-et) ax-be, és ha nem jó akkor tegyük bele a másikat.
mov ax, cx ;nem biztos hogy cx a kisebb, de lehet cmp cx, dx ;hasonlítsuk össze jb kesz ;ha jol tippeltünk az előbb, ugorjunk mov ax, dx kesz:Ha a számok előjelesek lettek volna, jl utasítást kellett volna használni a jb helyett.
Feladat
Számoljuk ki az alábbi kifejezés értékét! (Feltesszük, h. minden művelet eredménye
elfér 16 biten.)
ax = ax*dx + cx*dx
Megoldás: Kicsit rémisztően néz ki, de csak egyszerű utasításokat használ.
mov bx, dx ;dx-et elmentem mul dx ;ax=ax*dx , bx=dx mov dx, ax ;dx=ax=ax*dx , bx=dx mov ax, cx ;dx=ax*dx , ax=cx , bx=dx mov cx, dx ;cx=ax*dx , ax=cx , bx=dx mul bx ;cx=ax*dx , ax=cx*dx add ax, cx ;ax=cx*dx + ax*dxNéhány utasítást meg lehet spórolni ha használjuk az xchg-t
mov bx, dx ;dx-et elmentem mul dx ;ax=ax*dx , bx=dx xchg ax, bx ;ax=dx , bx=ax*dx mul cx ;ax=cx*dx , bx=ax*dx add ax, bx ;ax=cx*dx + ax*dxÖrülök, hogy néhányan használták a fejüket is:
add ax, cx ;ax=ax+cx mul dx ;ax=(ax+cx)*dx=cx*dx + ax*dx