Witam problem z paroma zadaniami ASM

SPINK90

Użytkownik
Dołączył
Styczeń 17, 2013
Posty
1
Witam serdecznie potrzebuję pomocy w rozwiązaniu 9 zadań ,nie chodzi mi o samo rozwiązanie ale o napisanie tego w rodzaju:

Kod:
Zadanie 1.

mov ah, 08h		|zapisz do rejestru ah wartość 8
mov al, 03h		|zapisz do rejestru al wartość 3
add al, ah		|dodaj do rejestru al wartość rejestru ah, al + ah = 11, czyli 0Bh
mov ah, 0		|wyzeruj wartość rejestru ah
aaa				|jeśli (al and 0Fh) > 9, to dodaj do ax 6, 0Bh jest większe od 9 => 0Bh + 6 = 11h
mov dx, ax		|zapisz do rejestru dx wartość rejestru ax (wynosi ona 11h)

aaa (ASCII adjust after addition)
instrukcja tak jakby "zamienia" wartość hexadecymalną w pseudo wartość decymalną w danym bajcie.
Wygląda ona jak wynik decymalny będąc jednocześnie liczbą hexadecymalną.
Jak w powyższym przypadku 8 + 3 = 11 decymalnie i 0Bh hex. AAA zamieni 0Bh na 11h czyli taki pseudo dec.

Odpowiedź: wartość rejestru dx wynosić będzie 11h.

Poniżej wrzucam zadania:
http://i49.tinypic.com/2vt1gs6.jpg
2vt1gs6.jpg


Za rozwiązanie tego w sposób opisany wyżej jestem w stanie postawić flachę :p

Z góry dzięki za pomoc!
 

Dark Smark

Były Moderator
Dołączył
Kwiecień 29, 2006
Posty
1953
8086? To podstawy same...

1: podałeś wyżej
2:


Kod:
                mov dx,3  ;wpisz do 16 bitowego rejestru 3
                mov dl,2  ;wpisz do mlodszej czesci rejestru dx (dl) wartosc 2
                add dx,48 ;dodaj do dx 48
                mov ah,2 ;funkcja przerwania 21h wyswietlajaca znak z DL (2)
                int 21h ;wywolania przerwania programowego DOS 21h (wyswietla znak "2")
3: a)
Kod:
mov ah,0 ;pobieranie znaku (funkcja przerwania)
int 16h ;przerwanie programowe do obslugi klawiatury

b)
Kod:
mov ax, 4c00h ;funkcja 4c konczy dzialanie programu (return 0 w c++?)
int 21h ;przerwanie dos

analogicznie moze byc


Kod:
mov     ah,4ch
mov        al,0
int        21h

4:
a)
Kod:
cmp ax,0 ;porownaj wartosc z rejestru z ax z 0 (zapalaja sie flagi bodajze ZF)
jnz p1   ;jezeli wynikiem porownania nie jest zero to skocz do etykiety p1 w programie

b)
Kod:
cmp bl,5  ;porownaj wartosc mlodszej czesci rejestru bx (bl) z wartoscia 5
jne       ;jezeli nie rowne skocz do etykiety e2 (odpowiedniki if w jeyzkach wyzszego poziomu)

5:
Kod:
                mov dx,53 ;liczba '5' w ascii
                mov ah,2 ;wyswietl znak ASCII z DL (przerwanie)
                int 21h  ;przerwanie dos
                mov ah,2 ;wyswietl znak ASCII z DL (przerwanie)
                mov dl,13  ;CR
                int 21h     ;w przenosni mowiac otaczajace instrukcje to enter
                mov dl,10 ;LF
                int 21h ;przerwanie dos
                mov dl, "0" ;0
                int 21h ;przerwanie dos
                ;http://www.asciitable.com/index/asciifull.gif
                ;wyswietli
                ;5
                ;0



6:
Kod:
mov bl,2
mov al,-3
imul bl  ;mnozenie
mov dx,ax
neg dx   ;negacja
add dx,48  ;dodawnaie



;dx zawiera 0006
;flagi c=1, z=0, s=0, o=0, p=1, a=1, i=1, d=0
7: ;Nie znam dialektu wiec nie pomoge, nie podales zadnych danych nawet o procesorze, miej wiecej tak (niepewny):
Kod:
jakas proc
mov ah,4ch
int 21h
ret
jakaś endp




call jakas
8:
;
Kod:
mov ax,4
                mov bx,2
                mov cx,3
                mov dx,5
                push ax ;poloz na stos
                push dx
                push bx
                pop dx ;podnies ze stosu
                pop ax
                push cx
                pop bx
                pop cx
;koncowe wartosci to ax=0005, bx=0003, cx=0003, dx=0002

9:


Kod:
;
                mov dl,0
                mov cx,2
                k1:
                    sub dl,3
                    push cx
                    mov cx,3
                    k2:
                        add dl,2
                        push cx
                        pop cx
                    loop k2
                    pop cx
                loop k1
                mov al,5
                ;piekne petle w petli
                ;wynikdx=0206, wiec mlodsza czesc dl=06


Sory za formatowanie ale nie chcem mi sięm. Jest na forum jeden znawca tematu duzo duzo bardziej ogarnięty niż ja, nick: D.F.
 
Do góry Bottom