Forum 1 Grupy Ćwiczeniowej
Forum studentów informatyki Politechniki Białostockiej
FAQ
Szukaj
Użytkownicy
Grupy
Galerie
Rejestracja
Profil
Zaloguj
Forum Forum 1 Grupy Ćwiczeniowej Strona Główna
->
3 semestr
Napisz odpowiedź
Użytkownik
Temat
Treść wiadomości
Emotikony
Więcej Ikon
Kolor:
Domyślny
Ciemnoczerwony
Czerwony
Pomarańćzowy
Brązowy
Żółty
Zielony
Oliwkowy
Błękitny
Niebieski
Ciemnoniebieski
Purpurowy
Fioletowy
Biały
Czarny
Rozmiar:
Minimalny
Mały
Normalny
Duży
Ogromny
Zamknij Tagi
Opcje
HTML:
TAK
BBCode
:
TAK
Uśmieszki:
TAK
Wyłącz HTML w tym poście
Wyłącz BBCode w tym poście
Wyłącz Uśmieszki w tym poście
Kod potwierdzający: *
Wszystkie czasy w strefie EET (Europa)
Skocz do:
Wybierz forum
To już 5 semestr???
----------------
Programowanie systemów aplikacyjnych
Metody probabilistyczne i statystyka
Grafika komputerowa
Systemy operacyjne
Układy elektroniczne
Systemy ekspertowe
Angielski
Architektura Komputerów
Bazy Danych
Systemy Samouczące
Bezpieczeństwo Systemów Komputerowych
Systemy Operacyjne 2
Programowanie Obiektowe
Statystyka 2
OiPL [o ile cos takiego bedzie]
Linux
4 semestr
3 semestr
Chillout
----------------
Spam Room
Humor
ShoutBox
Przegląd tematu
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
)
Cytat:
push bp <<< o to
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...
fora.pl
- załóż własne forum dyskusyjne za darmo
Powered by
phpBB
© 2001, 2005 phpBB Group
deoxBlue v1.0 // Theme created by
Sopel stylerbb.net & programosy.pl
Regulamin