Architektury Komputerów
Transkrypt
Architektury Komputerów
Architektury Komputerów - Laboratorium Informatyka III rok ! ! " # "$ • Logiczna budowa i organizacja procesora 8086. • # % & • Wiedza zdobyta na przedmiotach z Podstaw Informatyki. ' $ ( & + + ,+ "! + +& + & + ,+ + "! ./0 ) * &- ) "! ) ) ! )* $ # Komputer PC z systemem DOS oraz kompilatorem Asemblera. Literatura [1] Piotr Metzger - Anatomia PC. [2] http://www.emu8086.com/assembly_language_tutorial_assembler_reference/asm_tutorial_01.html [3] http://www.programmingtutorials.com/assembly.aspx [4] http://www.emu8086.com/assembly_language_tutorial_assembler_reference/8086_instruction_set.html [5] http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrf_masm_topicalcrossreferencefordirectives.asp 1 + $ Wprowadzenie (-% & % ) % instrukcji maszynowych konkretnego procesora, dla którego tworzony program jest * , % % ) + ) (& ) . ( " rozkazów danego procesora [4]. Oprócz rozkazów maszynowych, do dyspozycji mamy & 123 ! ! ) którego owe programy piszemy. W naszym przypadku dotyczy to procesora zgodnego ze % $ 4 - $ rejestry segmentowe: CS, DS, ES i SS rejestry robocze: AX, BX, CX, DX, BP rejestry indeksowe: SI i DI rejestry specjalne: IP, SP oraz Rejestr Znaczników i jednostka arytmetyczno-logiczna 2 Do generowania kodu wynikowego na podstawie programu zapisanego w pliku tekstowym o nazwie z rozszerzeniem ". 5 (* 6 link.exe). # -$ • 0 ! nazwie np. program1.asm ! • . ml • . 7& ( 5 6 5$ plik ! link 5 6 5$ plik - ) ) -% plik z programem wynikowym o nazwie "plik.exe". # ( " link.exe, linker jest uruchamiany automatycznie. 8- ( • z segmentu kodu - & • z segmentu danych - & • z segmentu stosu & ! ) & ) ) % "$ ) ( 9 ( & -$ DATA1 DATA1 segment ends CODE1 CODE1 segment ends STOS1 STOS1 segment STACK ends 6 END START 3 ( ( % - % $ DATA1 segment txt1 db DATA1 ends CODE1 segment ASSUME cs:CODE1, ds:DATA1, ss:STOS1 START: ;inicjalizacja stosu mov ax, seg STOS1 mov ss,ax mov sp,offset top ;wypisane komunikatu na ekranie komunikatu mov ax,seg txt1 mov ds,ax mov dx,offset txt1 mov ah,9 int 21h ;przerwanie DOS - wypisanie komunikatu mov int CODE1 ; Przerwanie DOS - koniec programu ends STOS1 top STOS1 ax,4c00h 21h dw dw segment STACK 256 dup(?) ? ends ! END START # ). : + .; ( ( tekstowa przeznaczona do wydruku na ekranie. W segmencie stosu STOS1 zadeklarowano )( $5 5 # /.< 00=' < %-% % 4 0: >: ? % + & % $5To jest napis! :)5 4 ./0 @) A & B ) 9 ./0 # ) - ) )+ & " ' /C Np. Instrukcja: mov "! ax,4c00h % B ) * 4 , A 8- 9 %+ ! % <4. & ! ; % ) ) ( DATA1 txt1 DATA1 &( + &- ) DD ) - ? # ! & segment db ends CODE1 segment ASSUME cs:CODE1, ds:DATA1, ss:STOS1 START: ;inicjalizacja stosu mov ax,seg STOS1 mov ss,ax mov sp,offset top call call napis napis mov int ax,4c00h 21h " #! " # " " #! ; Przerwanie DOS - koniec programu ;podprogram napis napis: mov ax,seg txt1 mov ds,ax mov dx,offset txt1 mov ah,9 int 21h ret CODE1 ends STOS1 segment STACK dw 256 dup(?) dw ? ends top STOS1 ! END START E ) "! ! D// takiej instrukcji w programie: ) / % 5 ) "+ ( - DATA1 txt1 DATA1 segment db ends CODE1 segment ASSUME cs:CODE1, ds:DATA1, ss:STOS1 START: ;inicjalizacja stosu mov ax,seg STOS1 mov ss,ax mov sp,offset top mov cx,10 $ petla: call pop loop push cx napis cx petla mov int ax,4c00h 21h " # %& ' #! petla" %& () ; Przerwanie DOS - koniec programu ;podprogram napis napis: mov ax,seg txt1 mov ds,ax mov dx,offset txt1 mov ah,9 int 21h ret CODE1 ends STOS1 segment STACK dw 256 dup(?) dw ? ends top STOS1 ! END START - " A 4 ) " % / 6 ! $5: =0G ( F$,5 > % " H % 1. " 2. !+ ! ! ) ! ? ( " * &- , 3. ' % ) tekst1 tekst2 db db ) & + $ " 0000", 10, 13, '$' "1111", 10, 13, '$' ! + & - % "!$ % -- D// + 0000 0000 0000 1111 0000 0000 0000 1111 0000 0000 0000 1111 4. ! # I J0KL IM><+ D+ -! ! ( % * , mov call - % ? (& % $ & al,3 wypisz_cyfre ( ! $ Cyfra 3. . 0 JJ " 5. - ! . " - !? .D "! + & " - !? 0 JJ @ @G ( @G M " 7 D