Autor |
Wiadomość |
eewkaa |
Wysłany: Nie 16:35, 25 Lis 2007 Temat postu: |
|
Kilka osób prosiło o rozwiązanie zadań z klasówki.
Zadanie 2
Napisz procedurę, która dostaje przez stos 2 parametry (x,y,z) i wylicza wyraz (z-x)+5-y; wynik zwraca do zmiennej globalnej W.
Pokaż przykładowe wywołanie procedury.
Kod: | .MODEL small
.STACK 100h
.DATA
W dw 0
x dw 3
y dw 4
z dw 8
.CODE
procedura PROC NEAR
push bp ;w tym momencie tworzymy ramke
mov bp,sp ;stosu wykorzystywana przez procedure
;dostep do elementu na szczycie stosu: [bp+4]
;dostep do kolejnych elementow: [bp+i], gdzie i = 6,8,...
mov bx,[bp+4] ;do bx przesuwamy z
sub bx,[bp+8] ;od bx odejmujemy x, wynik w bx
add bx,5 ;do bx dodajemy 5, wynik w bx
sub bx,[bp+6] ;do bx odejmujemy y, wynik w bx
mov W,bx ;kopiujemy zawartosc bx do zmiennej globalnej W
pop bp ;niszczymy utworzona ramke stosu
ret ;powracamy do programu glownego
procedura ENDP
start:
mov ax,@data ;ustawienie segmentu danych na
mov ds,ax ;dane naszego programu
push x ;ladujemy na stos kolejno:
push y ;x, y, z
push z
call procedura ;wywolujemy nasza procedure
pop z ;zdejmujemy ze stosu wczesniej polozone dane
pop y
pop x
mov ah,4ch ;konczymy program
int 21h
END start
|
Zadanie 3
Napisz program, który sumuje elementy tablic D1 i D2, a wyniki wpisuje do D2. Tablice D1 i D2 mają po 90 elementów.
Kod: | .MODEL small
.STACK 100h
.DATA
D1 db 90 dup (1) ;tablica 90 elementow o wartosciach 1
D2 db 90 dup (3) ;tablica 90 elementow o wartosciach 3
.CODE
mov ax,@data ;ustawienie segmentu danych na
mov ds,ax ;dane naszego programu
mov cx,90 ;inicjalizacja licznika, po kazdym przejsciu petli
;licznik automatycznie jest zmniejszany o 1
petla:
mov si,cx ;do rejestru indeksowego (si) przenosimy wartosc,
;ktora obecnie znajduje sie w liczniku
sub si,1 ;pomniejszamy ,si o 1, gdyz indeksy tablic numerowane sa od 0
mov al,D1+si ;wykonujemy dodawanie 2 elementow tablic D1 i D2, ktore znajduja sie pod tym
add D2+si,al ;samym indeksem, wynik zapisujemy do D2
loop petla
mov ah,4ch ;zakonczenie programu
int 21h
END |
Zadanie 3
Skopiuj pod adres fizyczny D1A53h zawartość pamięci o adresie logicznym AC12:C32Bh
Od razu zaznaczam, że nie mam pojęcia czy to zadanie jest poprawnie zrobione...
Kod: | mov bx,C32Bh
mov ax,AC12h
mov ds,ax
mov dx,[bx]
mov bx,3
mov ax,D1A5h
mov ds,ax
mov [bx],dx |
|
|
|
fala (aka tomek) |
Wysłany: Pią 1:26, 16 Lis 2007 Temat postu: |
|
Cytat: | procedura PROC NEAR |
nagłówek procedury, near chyba oznacza ze procedura i wywolanie znajduje sie w tym samym segmencie kodu (cokolwiek by to nie znaczylo bo sam nie wiem co to dokladnie znaczy, w zrodlach takie cos widzialem )
nic co mogłoby być niezrozumiałe po prostu: wrzuca bp na stos
(akurat w procedurach parametry sa przekazywane przez rejestry, dlatego aby przekazac parametr do funkcji trzeba zachowac wykorzystywane w niej rejestry na stosie, a przed wyjsciem z procedury przywrocic ich zawartosc pobierajac je spowrotem ze stosu "pop bp" (zeby mozna bylo te rejestry wykorzystac i nie stracic ich wartosci po zakonczeniu procedury
Cytat: | mov bp,sp <<< i to |
jak dla mnie to kopiuje zawartosc sp do bp tyle tylko ze to jest chyba kwestia tego w jaki sposob mozna adresowac a w jaki nie... 'sp' to jest StackPointer, wlasnie przegladam wyklady pani TurboDebagier i tam coś było odnośnite adresowania, i chyba nie można bezpośrednio przez 'sp' robic adresowania, dlatego skopiowany zostal do 'bp' ktory juz mozna wykorzystac do tego celu (tak mi sie wydaje)
(to tak na mój rozum, ale zastrzegam że moge sie mylić co do prawidłowości mojego rozumowania) |
|
|
denciaq |
Wysłany: Czw 21:52, 15 Lis 2007 Temat postu: |
|
ktos wie po co to jest ???
procedura PROC NEAR
push bp <<< o to
mov bp,sp <<< i to |
|
|
czart |
Wysłany: Czw 18:17, 15 Lis 2007 Temat postu: |
|
Faktycznie sie walnalem z tym 0Bh;
smurf Farmer: zadna instrukcja, po prostu napisałem jak to rozwiązywałem krok po kroku. Może ktoś skorzysta na tym. |
|
|
chodor |
Wysłany: Czw 17:31, 15 Lis 2007 Temat postu: |
|
to np robilismy na laborkach z asemblera zadanie 2 :
.model small
.stack 100h
.data
wynik dw 0
x dw 4
y dw 1
z dw 2
.code
procedura PROC NEAR
push bp
mov bp,sp
mov bx,[bp+8]
sub bx,[bp+6]
add bx,[bp+4]
mov wynik,bx
pop bp
ret
procedura ENDP
start:
mov ax,@data
mov ds,ax
push x
push y
push z
call procedura
pop x
pop y
pop z
mov ah,4ch
int 21h
END start |
|
|
dziemian_rec |
Wysłany: Czw 17:17, 15 Lis 2007 Temat postu: |
|
ale kombinujecie :/
1) mov al, 0bh
---> 0bh do al (młodszy bajt wyniku)
2) push 1234h
pop dx
---> 12h do dh
3) mov bl,dh
--->12h do bl
4) mov ah,bl
---> 0bh do ah (starszy bajt wyniku)
1. instrukcja wogóle nie potrzebna |
|
|
Linka |
Wysłany: Czw 17:10, 15 Lis 2007 Temat postu: |
|
własnie tez tak myslałam...
Chodor, Ty chyba masz zrobioną tą klasówke:)
jak mozesz to wes zapodaj;) |
|
|
chodor |
Wysłany: Czw 17:00, 15 Lis 2007 Temat postu: |
|
jest jeden błąd bo 0B to 11 dziesietnie a binarnie 0000 1011 i wtedy
i wtedy ax= 0001 0010 0000 1011 |
|
|
czart |
Wysłany: Śro 22:50, 14 Lis 2007 Temat postu: |
|
NIE WIEM CZY DOBRZE, JAK KTOŚ MA NIECH RZUCI WYNIK DLA PORÓWNANIA.
zad1.
MOV BX, 101011101B
MOV AL,0BH
BX = 00000001|01011101
0B = 16(dziesietny) = 00010000(binarnie)
PUSH 1234H
POP DX
1234H:
4=0100
3=0011
2=0010
1=0001
stąd:
DX=00010010|00110100
MOV BL,DH
BL = 00010010
MOV AH,BL
AH = 00010010
stąd
AX = AH|AL = 00010010|00010000 |
|
|
boro |
Wysłany: Śro 22:10, 14 Lis 2007 Temat postu: |
|
szczerze mowiac to nic nie mam. mam okropne opory jesli chodzi o nauke asemblera :/ na piatek nie przygotowuje sie. pisze program na ASD na poniedzialek wiec zbytnio nie mam czasu zeby od podstaw uczyc sie z asm. |
|
|
Linka |
Wysłany: Śro 21:19, 14 Lis 2007 Temat postu: |
|
Boro... moze masz cos takiego juz? podziel sie;) 3ba sobie pomagac:D |
|
|
boro |
Wysłany: Śro 21:05, 14 Lis 2007 Temat postu: |
|
mozesz przeciez napisac program ktory bedzie liczyl zadanka :P masz tam kompilator ktory wylapie bledy wiec bedziesz miala wieksza pewnosc ze masz dobrze niz gdybys rozwiazywala zadanie na kartce. |
|
|
Linka |
Wysłany: Śro 20:56, 14 Lis 2007 Temat postu: |
|
z tego co wiem to klasowka ma byc na kartce Boro;) |
|
|
boro |
Wysłany: Śro 20:51, 14 Lis 2007 Temat postu: |
|
jak wyswietla prawidlowy wynik to znaczy ze masz dobrze :P |
|
|
Linka |
Wysłany: Śro 20:22, 14 Lis 2007 Temat postu: Asembler - Klasowka |
|
ma ktos moze dobrze rozwiazaną tą klasowke prof turbodebagier?
..bo niby skad mam wiedziec czy robie dobrze...
|
|
|