Transkript
PDF
isim, Soyadı..........................................................................................................Öğrenci NoŞ...................................
BLGM323 Sınava Hazırlık Ödevi. (Güz 2014-15)
(5 puanlıktır.)
Q1). Alfabetik karakterlerin alfabetik olmayanlara oranını hesaplayacak bir 8086 programı yazmanız gerekiyor.
Programınız ekrana “Yazıyı girin:” yazıp konsoldan gelen satırı IBUF’a koyacak. Satırın her karakterini test edip
alfabetikleri al’de, olmayanları dl’de sayacak. Tüm karakterler işlenince al/dl bölme işlemini yapıp sonucu ASCII’e
dönüştürerek “Karakter oranı= #” biçiminde, # yerine tek basamaklı sonucu koyarak ekrana yazacak. Programı yazarken
hazır verilen makroları kullanmalısınız.
Çevirici kodunuz şunları gerçekleştirmelidir: (a) Veri bölütünde içinde “Yazıyı girin:$”, ve “Karakter oranı=#$” bulunan
MSG1 ve MSG2 etiketli iki metin ile 255 karakterlik IBUF etiketli bir giriş tamponu tanımlayın. veri bölütü paragrafını ds’ye
aktarın. (b) MSG1’i ekrana yazdırın. (c) konsoldan IBUF’a bir satır okutun, ve ax=0 ve dl=1 yapın. (d) cx’e IBUF’taki satırın
karakter sayısını tutan baytı aktarın, ve di’ya satırdaki ilk karakterin adresini koyun. (e) L1 etiketli bir döngü başlatın ve
di’nin gösterdiği karakteri test edecek makroyu çalıştırın. (f) sonuca göre alfabetik ise al’yi, değilse dl’yi bir arttırın. (g) di ‘yi
bir arttırarak bir sonraki karakteri göstertin. (h) Bütün karakterlerin bu şekilde işlenmesini sağlayıp ardından sonuç al’de
kalacak biçimde ax/dl bölme işlemini yapın. (i) al’deki sonucu ascii-sayıya dönüştürüp MSG2’nin içindeki # karakterinin
üzerine yazdırın. (j) MSG2’yi ekrana yazdırıp DOS’a çıkın ve çevirici kodu sonlandırın.
testalfa makrosu di’nin gösterdiği karaktere bakarak alfabetikse (bh=0, bl=1) değilse (bh=1, bl=0) döndürür.
=====dosya: MAKROLAR.ASM ===================
yazdır macro string
mov ah, 09h
mov dx, offset string
int 21h
endm
testalfa macro
local done
push ax
mov bx,0100h ; assume non-alpha
mov al,[di]
cmp al,”A”
jb done
and al,0DFh ;convert uppercase
cmp al,”Z”
ja done
mov bx,0001h ; it is alphabetic
done:
pop ax
endm
satıroku macro buffer
mov ah, 0Ah
mov dx, offset buffer
int 21h
endm
dosacık macro
mov ah,4ch
int 21h
endm
=====end of file MACRO.ASM ============
.model small
include makrolar.asm
.data
Açıklamalar
(a) Veri bölütünde içinde “Yazıyı
girin:$”, ve “Karakter oranı=#$”
bulunan MSG1 ve MSG2 etiketli iki
metin ile 255 karakterlik IBUF etiketli
bir giriş tamponu tanımlayın. veri bölütü
paragrafını ds’ye aktarın. (b) MSG1’i
ekrana yazdırın. (c) konsoldan IBUF’a
bir satır okutun, ve ax=0 ve dl=1 yapın.
(d) cx’e IBUF’taki satırın karakter
sayısını tutan baytı aktarın, ve di’ya
satırdaki ilk karakterin adresini koyun.
(e) L1 etiketli bir döngü başlatın ve
di’nin gösterdiği karakteri test edecek
makroyu çalıştırın. (f) sonuca göre
alfabetik ise al’yi, değilse dl’yi bir
arttırın. (g) di ‘yi bir arttırarak bir
sonraki karakteri göstertin. (h) Bütün
karakterlerin bu şekilde işlenmesini
sağlayıp ardından sonuç al’de kalacak
biçimde ax/dl bölme işlemini yapın. (i)
al’deki sonucu ascii-sayıya dönüştürüp
MSG2’nin içindeki # karakterinin
üzerine yazdırın. (j) MSG2’yi ekrana
yazdırıp DOS’a çıkın ve çevirici kodu
sonlandırın.
…………
…………
………………………………………………………………………………………………………;(a)
…………
…………
………………………………………………………………………………………………………;(a)
…………
…………
………………………………………………………………………………………………………;(a)
.code
mov ax,@data
;(-)
mov ds,ax
;(-)
……………………………………………………………………………………………………………………… ;(b)
………………………………………………………………………………………………………………………
mov ax,0
mov dl,1
mov cl,……………………………………………………………………………………………………
mov ch,0
mov di,……………………………………………………………………………………………………
;(c)
;(-)
;(-)
;(d)
;(d)
L1:
……………………………………………………………………………………………………………………… ;(e)
……………………………………………………………………………………………………………………… ;(f)
……………………………………………………………………………………………………………………… ;(f)
……………………………………………………………………………………………………………………… ;(g)
……………………………………………………………………………………………………………………… ;(h)
……………………………………………………………………………………………………………………… ;(h)
……………………………………………………………………………………………………………………… ;(i)
……………………………………………………………………………………………………………………… ;(i)
……………………………………………………………………………………………………………………… ;(j)
……………………………………………………………………………………………………………………… ;(j)
end
Sonsınav Ev ödevi - 2
Q2).Aşağıdaki bellek altsistemi üç bellek birimini verilen adres tablosundaki gibi etkinleştirmektedir.
ISABUS A19 A18
MEM-A 0 0
MEM-B 0 0
MEM-C 0 0
A17 A16 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
1
1
1
0
0
0
0
1
1
1
0
0
0
1
1
1
1
0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
ilk / son adresler
0
1
0
1
0
1
a) Devre şematiğini en az devre elemanıyla bellek yongalarının tabloya uygun etkinleştirme sinyalleri alacağı biçimde
tamamlayın (Gereken bağlantıları gerçekleştirirken adres ve denetim sinyallerinin etiketlerinden yararlanabilirsiniz).
b) Adres tablosuna her bir bellek yongasının ilk ve son adresini doldurun.
c) Mikroişlemci bellekten 38940h adresindeki baytı okurken bellek altsisteminin hangi hatları etkinleştirilir? Etkin olan
sinyalleri E ile işaretleyin.
~MEMR ( ); ~MEMW ( ); ~IOR ( ); ~IOW ( ); ~CSA ( ); ~CSB ( ); ~CSC ( );
MEM-A
ISA BUS
A0..A10
A[0..19]
D[0..7] D[0..7]
~OEA
~WEA
~CSA
D[0..7]
~MEMR
~MEMW
MEM-B
A0..A10
74S138
A(lsb) ~Y0
~Y1
B
~Y2
C
~Y3
~Y4
E1
~Y5
~E2
~Y6
~E3
~Y7
~IOR
~IOW
RESET
D[0..7] D[0..7]
~OEB
~WEB
~CSB
MEM-C
A0..A11
~OEC
~WEC
~CSC
D[0..7] D[0..7]
Q3)
a) 306h’de giriş, 307h’de çıkış portu oluşturmak üzere aşağıdaki adres dekoderiyle port denetim devresi tasarımını
tamamlayınız.
ISA BUS
D[0..7]
A[0..19]
~IOR
74S139
A(msb) ~Y0
~IOW
~Y1
D[0..7]
D[0..7]
B
~Y2
~E
~Y3
b) port-1 ve port-2 nin hangisi çıkış portudur? ………………………
0V
+5V
D[0..7]
Q[0..7]
G
~OC 74LS373
port-1
D[0..7]
Q[0..7]
G
~OC 74LS373
port-2
D[0..7]
Sonsınav Ev ödevi - 3
Q4) Aşağıdaki 8088 işlemcisi için bellek-adres tablosu Mem-1 ve Mem-2 bellek yongalarını etkinleştirmek içindir.
ISABUS A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 A9 A8
port-1 0 0 1 1 0 0 1 01 01 01 01 01
port-2 0 0 1 1 0 1 01 01 01 01 01 01
A7-A0
00
FF
00
FF
device select
~CS1 (Mem-1)
~CS2 (Mem-2)
~CS1’in etkinleştirdiği toplam bellek kapasitesi kaç bittir? ……………………………………..
Mem-1 ve Mem-2’nin her birinin adres aralığı (ilk ve son adresi) ne kadardır.?
Mem-1 Aralığı= ……………….…… den ……………………’e Mem-2 Aralığı = …………………… den ………………………….’e
Q5)
a) Aşağıdaki bellek altsistemindeki ~WR ve ~OE hatlarının bağlantılarını tamamlayınız.
RAM-1
ISA BUS
A[0..12]
A[0..19]
~CS
D[0..7]
D[0..7]
~WR
~IOR
~IOW
A14
A15
A17
~MEMR
~MEMW
A16
A18
A19
74S139
A(lsb) ~Y0
~Y1
B
~Y2
C
~Y3
~Y4
E1
~Y5
~E2
~Y6
~E3
~Y7
~OE
RAM-2
A[0..13]
D[0..7]
~CS
~WR
~OE
b) (a) da verilen devrenin adres tablosunu ve RAM-1 ile RAM-2’nin adres aralıklarını aşağıya doldurunuz.
Address Ranges
ISABUS A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 A9 A8 A7-A0
RAM-1
ile
arası.
RAM-2
ile
arası.
74S138
Q6) Bir 8088 sisteminde 8255’in PORTB (adres 309h) uçları Ortak Anodlu 7-bölütlü göstergeye şu sırayla bağlanmıştır:
~a:PB0, ~b:PB1, ~c:PB3, ~d:PB5, ~e:PB2, ~f:PB4, ~g:PB6, ~dp:PB7. PORTC’nin (adres 30Ah) bit-0 ucu ise bir düğmeye
aşağıdaki gibi bağlıdır.
a) “7” yazacak gösterge kodunu bulun.: ………….........b (ikili)= …..…h (hex).
b) Aşağıdaki kod işlerken jz komutu L1’e sapmadıysa düğme kısa devre
midir, açık devre midir? .
mov
in
and
jz
…
dx,30Ah
al,dx
al,01h
L1
a
f
e
düğme durumu: ……………… devre;
g
d
~a – PB0
~b – PB1
b ~e – PB2
~c – PB3
~f – PB4
~d
– PB5
c
~g – PB6
~x – PB7
PC0
Sonsınav Ev ödevi - 4
Q7).
a) Aşağıdaki dly50ms prosedürünü delay50ms
makrosuna dönüştürün
…………
……………………………………………………………
…………
……………………………………………………………
dly50ms proc
; wait for 50ms
mov bx, 1666
wh
mov ax, 150
wl
dec ax
jnz wl
dec bx
jnz wh
ret
dly50ms endp
…………
……………………………………………………………
…………
……………………………………………………………
…………
……………………………………………………………
…………
……………………………………………………………
…………
……………………………………………………………
…………
……………………………………………………………
…………
……………………………………………………………
…………
……………………………………………………………
…………
……………………………………………………………
…………
……………………………………………………………
…………
……………………………………………………………
…………
……………………………………………………………
…………
……………………………………………………………
…………
……………………………………………………………
…………
……………………………………………………………
…………
……………………………………………………………
…………
……………………………………………………………
…………
……………………………………………………………
…………
……………………………………………………………
b) Aşağıdaki stepmotor makrosunu adımmotoru etiketli
bir prosedüre dönüşturun. Prosedürünüzde dly50ms
yerine delay50ms makrosunu kullanın. Argümanın ax
yazmacında iletildiğini varsayın.
stepmotor macro yön
; direction=1 -> forward, -1 -> reverse
mov ax, yön
add step, ax
mov bx, step
and bx, 0003h
mov al, [bx]+ offset SMTBL
mov dx, 300h
out dx,al
call dly50ms
endm
Q8) Bir 8088 sisteminde bir ADC804 yongası 304h port adresine
arayüzlenmiştir. ADC804’ün referans gerilimi Vref=1024mV’tur.
~INTR hattı 8255in PortA bit-2 sine bağlıdır. PB ye bir adım motoru
(SM) bağlıdır. 8255 PA,PB,PC,ComR adresleri 308-30Bh verilmiştir.
a) ADC’nin basamak gerilimini bulun ∆V =………….
b) Vin=0.4V için ADC okuması N0.4V kaç olur N0.4V=………….
+1.024V
ADC804
D[0..7]
Address Decoder
304h
D[0..7]
308-30Bh
A1
A0
~IOW
~IOR
D
~CS
A1
A0
8255
PA
PB
Vref
~WR
Vin
~RD
~CS
~INTR
PA2
SM
PC
c) 8255’in ComR değeri kaç olmalıdır. ComR (16-lı)= … … h.
d) Aşağıdaki programda ADCden okunan değer NA, 0.4V tan düşükse motoru geriye döndürmek, yüksekse ileriye
döndürmek, eşitse hiç döndürmemek isteniyor. Program kodunda (a) equ kullanarak 0.4V’daki NADC değerini N4 etiketiyle
bir sabit sayı olarak tanımlayın. (b) 8255’in yalnız PA sını giriş yapın. (c) ADIM’ı 0’dan başlatın
(d) anadöngü’de ADC yi başlatın. (e) PA2 bitinden ADCnin tamamlanmasını bekleyin (f) ADC’yi okuyup NA’ya aktarın. (g)
NA<N4 ise ADIMı bir arttırın (h) NA>N4 ise ADIMı bir azaltın. (i) ADIMı 03h ile maskeleyin (j) [bx]+smc adresinden adım
motoru kodunu al’ye okuyun. (k) al’deki kodu motora yollayın. (l) 200 milisaniye bekleyin. (m) anadöngü’ye atlayın ve kodu
sonlandırın.
Sonsınav Ev ödevi - 5
; a) equ ‘yu tamamlayın
;h) NA>N4 ise ADIMı bir azaltın.
.model small
.data
adim db 0
smc db 6,3,9,12
.code
mov ax,@data
mov ds,ax
___________________________________;h
N
equ ____________________________;a
___________________________________;h
___________________________________;h
;b) 8255’in yalnız PA sını giriş yapın
___________________________________;h
___________________________________;b
;i) ADIMı 03h ile maskeleyin
___________________________________;b
___________________________________;b
;c) ADIM’ı 0’dan başlatın
____________________________________;c
____________________________________;c
___________________________________;h
___________________________________;i
___________________________________;i
___________________________________;i
___________________________________;i
;d) anadöngü’de ADC yi başlatın
;j) [bx]+smc adresinden adım motoru
; kodunu al’ye okuyun
ANADÖNGÜ:
___________________________________;j
____________________________________;d
___________________________________;j
____________________________________;d
; k) al’deki kodu motora yollayın.
____________________________________;d
___________________________________;k
;e) PA2 bitinden ADC işleminin sonuçlanmasını bekleyin
___________________________________;k
LA:
___________________________________;j
mov dx, _______________________;e
___________________________________;k
in al,dx
and al, ________________________;e
j____ LA
___________________________________;k
;f) ADC’yi okuyup NA’ya aktarın..
____________________________________;f
____________________________________;f
;l) (l) 200 milisaniye bekleyin.
___________________________________;l
___________________________________;l
___________________________________;l
____________________________________;f
___________________________________;l
;g) NA<N4 ise ADIMı bir arttırın
; m) anadöngü’ye atlayın.
____________________________________;g
___________________________________;m
____________________________________;g
___________________________________;m
____________________________________;g
___________________________________;m
____________________________________;g
___________________________________;m
____________________________________;g
___________________________________;m
____________________________________;g
; kodlamayı sonlandır
end
Sonsınav Ev ödevi - 6
Q9) Aşağıdaki donanım devresinde 7-bölütlü LED gösterge bağlantısı
PB0~a, PB1~b, PB2~c, PB3~d, PB4~e, PB5~f, PB6~g, PB7~dp biçimindedir.
PA7 ye SWX anahtarı bağlıdır. PA1-0 uçlarından iki bitlik NX sayısı okunuyor. ADC, 0...1024mV arasında değişen Vin
gerilimini 8-bit NA sayısına okumaktadır. ‘bekle nw’ makrosu nw*20 mikrosaniye bekleme sağlamaktadır. ADC’nin doğru
okuma yapabilmesi için 100mikrosaniye beklemek gerekmektedir.
ISA BUS
A19-0
D7-0
~MEMW
~MEMR
~IOW
~IOR
decoder
~312h
A19-0 ~31Ah
~320h
~320h
~IOR
D7-0
1
~IOW
~IOR
~312h
D7-0
ADC0804 Vref
~WR
~RD
Vin
~CE
D7-0
port A
~OE
PA7: SWX
Q7-0 D7-0
PA1-0: NX
LE
1024mV
~31Ah
~IOW
D7-0
D7-0
Common
port B
Anode 7-seg
LE
D7-0 Q7-0
~OE
Devrenin her 100 milisaniyede
.a) SWX basılıysa, iki bitlik NX sayısını {0,1,2,3} 7-seg göstergeye yazmak için gösterge kod tablosunu hazırlayıp programı
tamamlayın.
.b) SWX basılı değilse ADCyi NA.ya okuyup NA>NX*16.ise göstergeye 1, değilse 0 yazması için programı tamamlayın
bekle macro nw
swbasılıdeğil:
local bekledöngüsü
;ADC’yi başlat
mov cx, nw
bekledöngüsü:
loop bekledöngüsü
endm
.model small
.data
NA db ?
NX db ?
; gerekli gösterge kodlarını yaz
gkt db ..................................................
.code
mov ax,@data
mov ds,ax
anadöngü: ; SWX i oku ve 0 ise swxbasılıdeğil’e git.
mov dx, .................................................
in al,dx
and al, ..............................................
j.......... swxbasılıdeğil
; portu okuyup maskeleyerek al”de yalniz NX sayısını birak
mov dx, ..........................................
in al,dx
and al, ...........................................
;NX sayısının NX’e yaz ve gösterge kodunu al’ye oku,
mov NX, al
mov bl,al
mov bh,0
göstergekodunuoku:
mov al, ............................................
;al’deki gösterge kodunu porta yolla
............................................................................
...........................................................................
; makroyu kullanarak 100 mikrosaniye bekle
............................................................................
; ADC’yi al’ye okuyup NA ya yaz
............................................................................
...........................................................................
...........................................................................
; NX’i al’ye alıp kaydırarak NX*16 yi hesapla
mov cl,4 ; 4 bit kaydırmak için
...........................................................................
...........................................................................
;al’deki NX*16 ile NA’yı işaretsiz sayı gibi karşılaştır.
...........................................................................
;al daha büyük ya da eşitse küçükdeğil’e atla.
...........................................................................
; bx’e 0 koyup göstergekodunuoku’ya git
...........................................................................
...........................................................................
küçükdeğil: ; bx’e 1 koyup göstergekodunuoku’ya git
mov dx, ..........................................
...........................................................................
........................................................
...........................................................................
bekle100ms: ; makroyu kullanarak 100ms bekle
;100 ms beklemek içi bekle100ms’ye atla
......................................................................
...........................................................................
end
Sonsınav Ev ödevi - 7
Q10) Eğitsel bir program yazarak basit bir soru gösterip yanıtını değerlendirmek istiyoruz. Bunun için
aşağıdaki mesajlar gerekecek:
S1 etiketli “3+4 = $“;
H etiketli “Hayır, Yanlış oldu, tekrar deneyin:$“;
E etiketli “Evet, bildiniz.$”;
Y1 etiketli “7$”.
Veri bölütünde bir de içi dört boşluk karakteri dolu olan BUF etiketli 4-karakterlik klavye giriş tamponumuz olacak.
Yazacağınız kodda şu işleri gerçekleştirmelisiniz:
a) veri bölütünde gereken tüm dizinleri ve tamponları tanımlayın.
b) S1’i ekranda gösterin;
c) Kullanıcının klavyeden BUF’a en fazla 4 karakterlik bir satırı ASCII metin olarak girmesini sağlayın
d) BUF’taki metini Y1 deki metinle karşılaştırın.
e) İkisi aynı metin ise E dizinini ekrana yazın.
e) aynı metin değilse H dizinini ekrana yazın ve başa dönün.
f) programı DOS’a dönerek sonlandırın.
Programınızı en kısa biçimde kodlarken aşağıdaki makroları kullanabilirsiniz. compstr makrosu str1 ile str2 metinlerini “$”
karakterine ya da birbirinden farklı bir karaktere kadar karşılaştırıyor. Eğer metinler ‘$’ karakterine kadar aynıysa sıfır
bayrağı (Z) 0 dönüyor, değilse sıfır bayrağı 1 dönüyor.
=====file MACRO.ASM ===================
dispstr macro string
mov ah, 09h
mov dx, offset string
int 21h
dispstr endm
compstr macro str1,str2
local nextchar, done
mov di,offset str1
mov si,offset str2
mov ah,0
nextchar
mov al,[di]
cmp al,”$”
jz done
mov ah,[si]
cmp ah,“$”
jz done
cmp ah,al
jnz done
inc di
inc si
jmp nextchar
done
endm
=====end of file MACRO.ASM ============
getstr macro buffer
mov ah, 0Ah
mov dx, offset buffer
int 21h
getstr endm
exitdos macro
mov ah,4ch
int 21h
exitdos endm
Açıklamalar
.a) veri bölütünde gereken tüm dizinleri ve
tamponları tanımlayın.
.model small
include macro.asm
.data
…………
…………
………………………………………………………………………………………….
…………
…………
………………………………………………………………………………………….
…………
…………
………………………………………………………………………………………….
…………
…………
………………………………………………………………………………………….
…………
…………
………………………………………………………………………………………….
.code
mov ax,@data
mov ds,ax
.b) S1’i ekranda gösterin;
……………………………………………………………………………………………
.c) Klavyeden BUF’a en fazla 4 karakterlik bir
satırı ASCII metin olarak girilmesini sağlayın
……………………………………………………………………………………………
……………………………………………………………………………………………
jnz L1
.d) BUF’taki metini Y1 deki metinle karşılaştırın.
.
e) İkisi aynı metin ise E dizinini ekrana yazın.
.e) aynı metin değilse H dizinini ekrana yazın ve
başa dönün.
.f) programı DOS’a dönerek sonlandırın.
……………………………………………………………………………………………
jmp exit
L1:
……………………………………………………………………………………………
exit:
……………………………………………………………………………………………
end
Sonsınav Ev ödevi - 8
Q11)
Aşağıdaki 314h, 315h, 316h, and 317h çıkış port adreslerini seçen giriş/çıkış adres tablosunu göz önüne alın.
address
ISABUS A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
port-1 0 0 1 1 0 0 0 1 0 1 0 0
314h
port-2 0 0 1 1 0 0 0 1 0 1 0 1
315h
port-3 0 0 1 1 0 0 0 1 0 1 1 0
316h
port-4 0 0 1 1 0 0 0 1 0 1 1 1
317h
Adres tablosunu gerçekleştirmek üzere, aşağıdaki devre şematiğini verilmiş birimlerle en az sayıda eviriciyi kullanarak
tamamlayın. Portların çalışabilmesi için gereken denetim hatları ve veriyolu bağlantılarını gerçekleştirin.
ISA BUS
D[0..7]
A[0..19]
G
~OC 74LS373
D[0..7]
~IOR
Q[0..7]
D[0..7]
~IOW
Q[0..7]
port-1
port-2
G
~OC 74LS373
74S138
A(lsb) ~Y0
~Y1
B
~Y2
C(msb) ~Y3
~Y4
E1
~Y5
~E2
~Y6
~E3
~Y7
D[0..7]
Q[0..7]
port-3
G
~OC 74LS373
D[0..7]
Q[0..7]
port-4
G
~OC 74LS373
Q12)
Aşağıdaki sayısaldan örneksele dönüştürücü DAC0808 bir 8255 PPI’nin adresi 300h olan PortA ‘sına
bağlanmıştır. Saat hızı 3.4MHz olan 8088 loop komutunu 5 mikrosaniyede işlediğine, ve devrede DAC dayanak gerilimi
2048 mV olduğuna, ve PortA çıkış olarak yapılanmış olduğuna göre,
a) DAC0808’in basamak gerilimi ne kadardır:? ∆V= ...........................
…
b) Aşağıdaki koda göre Vout çıkış geriliminin grafiği nasıldır?
2048mV
L1:
L2:
L3:
L4:
volts
2.0
1.8
1.6
1.4
1.2
1.0
0.8
0.6
0.4
0.2
0.0
0
1
2
3
4
5
6
7
8
ms
mov al, 50
mov dx, 300h
out dx,al
mov cx, 2000/5
loop L1:
inc al
out dx,al
mov cx, 6
loop L3:
cmp al,150
jnz L2
mov cx, 1000/5
loop L4:
….
Sonsınav Ev ödevi - 9
Q13). (Finale yalnızca ADC0804 bölümü dahildir)
Bir 8088 sistemi ADC804’e 20h port adresinden erişmektedir. ADC’nin
dayanak gerilimi 5120mV’tur. ADC’nin INTR ucu bağlı olmadığından
ADC’yi başlattıktan sonra okumadan önce 120 mikrosaniye beklemek
gerekecektir. Devredeki USART 8251 yongasına 40h (veri) ve 41h
(denetim) adreslerinden erişilmektedir. USART’ın RXC ve TXC (saat
girişleri) 9600Hz saat üretecine bağlıdır. USART’ın RXD and TXD uçları
donanımlı tokalaşma kullanmaksızın yalnızca veri yollamak üzere 9600
Baud, paritesiz, 8-veri-bitli, tek-stop-bitli protokolle bir terminale veri
iletecektir..
Address Decoder
D[0..7]
20h
~IOW
~IOR
8251
~CS
RxD
TxD
D[0..7] Data
A0 D/~C TxC RxC
+5.12V
ADC804
Vref
~WR
Vin
~RD
~CS
~INTR
40h-41h
9600Hz
Terminal
a) ADC devresinin basamak gerilimini bulun. ∆V =………….
b) ADC’nin Vin=1.2 volt iken okuyacağı NADC değeri kaçtır.
NADC (1.2V)=………….
c) USART’ın Mod kurulumu ikili sayı olarak kaç olmalıdır.
Mod (ikili)= … … … … … … … … b.
d) 8255 denetim kurulumu ikili sayı olarak kaç olmalıdır
Denetim (ikili)= … … … … … … … … b.
e) Aşağıdaki program her 0.5
saniyede bir ADC’yi okuyup girişi
1.2Volttan azsa ‘L’, az değilse ‘H’
yollasın isteniyor. 8088 saat hızı 3.4
MHz olduğunu ve 24 loop
komutunun 120 mikrosaniye, 200
loop komutunun 1ms tuttuğunu
varsayın..
N equ .......
.model small
.code
; 8251 sıfırlama kod dizisi
.......................
......................
. .......................
.......................
.......................
.......................
.......................
; mod yazmacının kurulması
.......................
.......................
; denetim yazmacının kurulması
.......................
.......................
mainloop:
; ADC çeviriminin başlatılması
.......................
.......................
; 120 µsaniye bekle
.......................
.......................
; ADC sonucunu oku
.......................
.......................
; sonucu ah’ye sakla
.......................
; yollama-tamp. boşalmasını bekle
.......................
waittxbuf:
.......................
.......................
.......................
; al’ye ‘L’ koy,
mov al, ‘L’
; ah<N ise kücükmüs’e atla
cmp ah, N
jna kücükmüs
mov al, ‘H’
kücükmüs:
; al’yi çıkış tamponuna yaz
.......................
.......................
.......................
; 4 kez 250 ms bekle
.......................
.......................
.......................
.......................
.......................
.......................
.......................
.......................
jmp mainloop
end
f) Her ADC okumasından sonra bir karakter yollandığına göre Karakterin yollanması için harcanan süre ne kadardır?
ADC okumaları arasındaki süre ne kadardır?
g) Bu haberleşme biçimi simpleks mi? yarı-dupleks mi? yoksa tam dupleks midir? neden?
INT 10h BIOS servisleri
AH=00h Video Modunu kur
AL=03, CGA text modu
AL=04, 320x200 4 renk grafik modu.
AL=06, 640x200 hi-res B/W grafik modu.
AL=07, monokrom text modu
AH=02h Ekran imlecini kur
DH=satır, DL=sütun. BH=sayfa
AH=03h Ekran imlecini oku, Dönenler
DH=satır, DL=sütun. BH=sayfa. CX=imleç
AH=06h Ekranı temizle
AL=0 bütün sayfa için, BH=7 öznitelik,
CH=0, CL=0, başlangıç satır ve sütunu.
DH=24, DL=80, bitiş satır ve sütunu.
AH=0Ch Grafik ekranın bir pikselini kur.
AL=(0 siyah, ya da 1 beyaz),
CX=sütun; DX=satır,
Sonsınav Ev ödevi - 10
Çevirici Özet Bilgileri
INT 21h DOS servisleri
AH=01h klavyeden tek harf bekle ve oku.
AL klavyeden basılan tuşu döndürür.
AH=02h ekranda bir karakteri göster.
AL= gösterilen karakterin ASCII kodu.
AH=09h ekranda bir dizgi göster
DX= “$” ile sonlanan ASCII dizginin offseti.
AH=0Ah <cr> ile sonlanan bir dizın girişi bekler.
DX= tampon ofseti. dizi tamponda döner.
tampon = {tamponuzunluğu,dizinuzunluğu, içerik}
05 00 20 20 20 20 20 5 harflik boş tampon,
05 03 41 62 33 0D 20 içinde “Ab3<cr>” var.
AH=4Ch dos’a dön
INT 16h Klavye Servisi
AH=01h (herhangi bir tuşa basıldıgını anlar)
ZF=1 tuşa basılmamış demektir.
AH=00h ( yalnız AH=01h dan sonra kullanılır, ve
basılan tuşu AL de döndürür).
80x86 Komut Biçimleri
ror dst, 1 ; ror dst, cl ; rol dst, 1 ; rol dst, cl ;
mov hedef,kaynak (veri aktarma)
(sağa ve sola döndürmeler)
movsx – movzx (baytı 16 bit yazmaca aktarır, 386) rcr dst, 1 ; rcr dst, cl ; rcl dst, 1 ; rcl dst, cl ;
(sağa ve sola elde bitli döndürmeler)
cbw reg (baytı işaretli sözcük yapar, 386)
cwd reg (sözcüğü işaretli çiftsözcük yapar, 386) mul op (işaretsiz ax=al×op yada dx:ax=ax×op )
div op (işaretsiz al=ax/op, ah=kalan, ya da
cbw (al deki baytı ax te sözcük yapar)
ax=dx:ax/op dx=kalan)
cwd (ax teki sözcüğü dx:ax te işaretli yapar)
imul op (işaretli ax=al × op or dx:ax=ax × op)
clc / stc (elde bitini sıfırlar / birler)
idiv op (işaretli, işlenenleri div gibidir )
inc h / dec h (h=h+1 / h=h-1: arttır/azalt)
loop yakınadres (cx i bir azaltır, sıfır olursa go to
add h,k (h=h+k ; toplama)
yakınadrese sapar.)
adc h,k (h=h+k+CF ; eldeli toplama)
jmp adres (adrese sapar)
sub h,k (h=h - k ; çıkarma)
test k1,k2 bayrakları (k1 VE k2) e göre günceller.
sbb h, k (h=h - k - CF; borçlu çıkarma)
cmp op1, op2 (sapma için sayıları karşılaştır)
daa (toplamayı ondalık düzeltme);
jxx shortaddress (eşitse, büyükse,küçükse, ve
das (çıkarmayı ondalık düzeltme)
durum bayrağına koşullu)
aaa (ascii yada u-BCD toplama düzeltmesi.)
işaretli veya işaretsiz: je, jne
and h,k ; or h,k ; xor h,k (mantıksal bit bite)
işaretli: jg, jng, jge, jnge, jl, jnl. jle, jnle
neg h (2’lik tümleyenle ikili eksileme)
işaretsiz: ja, jna, jae, jnae, jb, jnb, jbe,jnbe
shl h,1 - shl h,cl (sola 1 bit – cl bit kaydırma);
shr h,1 - shr h,cl (sağa 1 bit – cl bit kaydırma);
bayraklı jz, jnz, jc, jnc, js, jns, jo, jno, jp, jpo,
sar h,1 - sar h,cl (sağa aritmetik kaydırma)
8255 PPI
Mode-0 Kontrol Baytı:
b7
(PA, PCH, PB, PCL için 0:çıkış, 1:giriş yapar)
b6
b5
1
b4
0
b3
0
b2
PA
Çevirici Direktifleri
.model [tiny|small|compact|medium|large|huge]
.data (veri bölütünün başını belirler)
.code (kod bölütünün başını belirler)
.stack n (yığıt bölütünün büyüklüğünü belirler)
@data (veri bölütünün olması gereken değer.)
<etiket> equ value (etikete sabit ataması yapar)
db value (bellekte bir dizi bayt için yer ayırır)
dq, dd, dw dörtlü-, çift- ve tek sözcük yeri ayırır
dt (10 basamak unpacked-BCD yeri ayırır.)
n dup(değer) (değeri n kere tekrarlar.)
<procetiketi> proc [short|near|far]…endp
(prosedür tanımlar)
end etiket (giriş noktası verıp çeviriciyi sonlar.)
<makroetiketi> macro argumanlar…endm
(makro tanımlar).
include dosyaadı.uzantısı (bir dosyayı ekler)
call procetiketi (procetiketi altyordamını çağırır.)
ret [n] (yığıttan n bayt silip altyordamdan döner.)
push rx - pop rx (yığıta 16-bit yazmaç iter – alır)
pushf - popf (yığıta bayrakları iter – alır)
xchg h1,h2 (h1 ile h2 yazmaçlarını yerdeğiştirir.)
Bazı ASCII kontrol karakterleri
07h =<BEL> (zil) ; 08h =<BS> (geriye-sil) ;
09h =<TAB>; 0Ah =<LF> satırsonu;
0Ch =<FF> sayfasonu ; 0Dh =<CR> SatırBaşı;
ASCII baskı karakterleri tablosu:
-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F
2- ! " # $ % & ' ( ) * + , - . /
3- 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4- @ A B C D E F G H I J K L M N O
5- P Q R S T U V W X Y Z [ \ ] ^ _
6- ` a b c d e f g h i j k l m n o
7- p q r s t u v w x y z { | } → ←
b1
PCH
b0
0
PB
8251 USART
Mode yazmacı formatı (asenkron modu için):
b7 b6 = { S2S1: bitiş bit sayısı
00: geçersiz / 01:1stop / 10: 1.5stop / 11: 2stop },
b5
= { EP: parite tipi
0: tek / 1: çift },
b4
= { PEN: parite etkin
0: parite biti yok / 1: parite biti var },
b3 b2 = { L2L1: data biti sayısı 00: 5-bit / 01: 6-bit / 10: 7-bit / 11: 8-bit },
b1 b0 = { B2B1: baud bölme oranı 00: sync-mode / 01: /1 / 10: /16 / 11: /64 }
Control Register format for asynchronous mode:
b7
= { EH: Senkron-araması 0:etkin değil / 1: etkin }
b6
= { IR:
Internal reset
0: devam et / 1: 8251A ‘yı resetle }
b5
= { RTS: Request to send, 0- tokalaşmasız / 1: RTS-çıkışı-sıfıra-zorlanır }
b4
= { ER: Hata Reseti
0- hata bayrakları kalsın 1: PE,OE, ve FE hatalarını temizle}
b3
= { SBRK: Dur-karakteri yolla
0: durmasın / 1: TxD çıkışı sıfıra zorlanır}
b2
= { RxE: Alıcı etkinleşsin 0: etkin değil / 1: etkin }
b1
= { DTR: Data terminal ready 0: tokalaşmasız / 1: DTR-çıkışı-sıfıra zorlanır }
b0
= { TxE: gönderici etkinleşsin 0: etkin değil / 1: etkin, }
Status Register format for asynchronous mode:
b7
= {DSR 1: DSR girişi etkin (sıfır)}
b6
= {SY/BD 1: senkron veya dur karakteri geldi}
b5
= {FE
1: Çerçeve hatası oluştu}
b4
= {OE
1: Aşma hatası oluştu }
b3
= {PE
1: Parite hatası oluştu}
b2
= {TxE 1: Tx veri göndermeyi bitirdi}
b1
= {RxRDY 1: Veri girişi tamponu dolu}
b0
= {TxRDY 1: Veri gönder tamponu boş}
PCL