Bài giảng tin học đại cương C++ (chương 4)

15 224 0
Bài giảng tin học đại cương C++ (chương 4)

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

CHNG4:BNHVÀHINTHKÍT  §1.KHÁINIMCHUNG  Trongphnnàytasxemxétvicxlíhinthkítbngcáchxâm nhptrctipvàobnh(direcmemoryaccessDMA).Tastìmhiucách xâmnhptrc tipmànhình.CáchnàynhanhhnlàdùngcáchàmcaC.  §2.CÁCTOÁNTBITWISE 1.Toántbitwiseand(&):Cdùng6toántbitwiseđctómtttrong bngsau  Phéptoán Kíhiu and & or | xor ^ dchphi >> dchtrái << đo ~  Cácphéptoánnàycóthápdngchodliukiuint,charnhng khôngápdngchosfloat.  Toánt&(khácviandlogic&&)cnhaitoánhngcókiuging nhau.Cáctoánh ngnàyđcandbitvibit.Toánt&thngdùngkim traxemmtbitcthnàođócótrlàbaonhiêu.Vídđkimtrabitth3 cubinchcótr1hay0tadùngphéptoán:  ch&0x08; 2.Toántor:Toántor(khácorlogic||)thngdùngkthpcácbitt cácbinkhácnhauvàomtbinduynht.Vídtacóhaibinlàch1vàch2 và giscácbitt0 3cach1chacáctrmongmuncòncácbit4 7ca ch2chacáctrmongmun.Khivit:  a=ch1|ch2; thìc8bitcaađuchatrmongmu n.  3.Toántdchphi>>:Toántnàylàmvictrênmtbinduynht.Toán tnàydchtngbittrongtoánhngsangphi.Sbitdchchuynđcch đnhtrongsđ itheosautoánt.Vicdchphimtbitđngnghĩavivic chiatoánhngcho.Víd:01110010 dchsangphi1bitslà  001 11001 36 4. Đitshexsangsnhphân:Tadùngcáctoántbitwiseđđimt sthhexsangh2.Chngtrìnhnhsau:  Chngtrình41 #include<conio.h> #include<stdio.h>  voidmain() { inti,num,bit; unsignedintmask; charstring[10],ch;  clrscr(); do {  mask=0x8000;  printf(\nBanchomotso:);  scanf(%x,&num);  printf(Dangnhiphancuaso%xla:,num);  for(i=0;i<16;i++) {  bit=(mask&num)?1:0;  printf(%d,bit);  if(i==7)  printf();  mask>>=1; }  printf(\nBanmuontinhtiepkhong(c/k)?);  ch=getch(); } while(ch==c); getch(); }   Trongchngtrìnhtrêntadùngvònglpforđduytqua16bitca binnguyênttráiquaphi.Lõicavnđlàcác phátbiu:  bit=(mask&num)?1:0;  mask>>=1 Trongphátbiuđutiênmasklàbinchcómtbit1duynhtphíatrái nht.Masknàyđc&vinumđxembittráinhtcanum cólà1haylà 37 0.Nuktqukhác0(true)bittngngcanumlà1cònngclibit tngnglà0.Saumiln&maskđcdchtrái1bitđxácđnhbittip theocanum là0hay1.  5.Cáctoántbitwisekhác:  a. Toántxor^:Toántxortrvtr1khichcó1bitchkhông phi2bitcótrlà1  0 0 0 0 1 1 1 0 1 1 1 0  Toántxorcnkhiltbitnghĩalàhoánchuyngia1và0vì1xorvi1là 0và1xorvi0là1.Vídđltbitth3trongbinchtadùng:  ch^0x08  b.Toántdchphi<<:Toántnàytngttoántdchtrái.Giátr cabitchènvàobênphiluônluônbng0.Dchphitngngvivic nhânsđ ócho2.  c.Toántđo:Toántnàylàtoántmtngôi.Nótácđnglêncác bitcatoánhngvàđotrcabitt1sang0vàt0sang1.Đo2lnmt sta linhnđcscũ.  §3.BNHMÀNHÌNH 1.Kháinimchung:Mànhìnhthôngthngcó25dòngvàmidòngcó80 kít. Nhvytoàn bmàn hìnhcó2000kít. Mi kíttrênmànhình tngngvimtđachcthtrongbnhmànhình.Mikítdùng2 bytecabnhnày:bytethnhtchamãASCIIcakít(t0đn255 nay t0đnff)vàbyteth2chathuctínhcanó.Nhvyđhinth 2000kít,bnhmànhìnhphicn4000byte.Bnhmànhìnhđnsc btđutiB000hvàkt thúctiB0F9F.Nutacómànhìnhmàuthìvùng nh chochđvănbn s btđutB8000h và ktthúcti B8F9F.Khi munhinthkíttrênmànhình,đontrìnhthvin Csgiđontrình ROMBIOSđđt kít cnhin thvàođachtngngtrongbnh nàmhình.Numuncótcđnhanh,hãychèntrctipcácgiátrtrênvào vùngnhmànhình.  2.Contrfar:Khibitđach,cáchthôngdngđđagiátrvàobnhlà dùngcontr.Dovynutacnđakítvàovtríđutiêncavùngnh mànhìnhthìtavi t: 38  int*ptr;  ptr=0xB800; *(ptr)=ch; Đonchngtrìnhtrêncóvhplínhnglikhônglàmvicvìbin contrthôngthngcóhaibytetrongkhiđachB0000hlidài5chs (2,5 byte).Lídodnđntìnhtrngnàylàdocontrthngdùngđcha đichnmtrongmtđonduynhtmàthôi.Trongh8086,mtđondài 10000hhay65535byte.Bêntrongcácđo nđachyt0hđnFFFFh.Thông thngcácdliucachngtrìnhCnmtrongmtđonnênđthâm nhpcácđachnmngoàiđontaphidùngmtcchkhác.Bêntrong  8086,tìnhtrngnàyđckhcphcbngcáchdùngcácthanhghigilà thanhghiđon.Cácđachnmngoàiđonđctolpbngthpđa chđonvàđachoffset.  B 0 0 0   0 7 D 0  B 0 7 D 0  TronghìnhtrênđachđonB000hđcdchtrái4bitricngviđach offset07D0torađachtuytđiB07D0h.  3.Dùngđachđon:offsettrongC:Nhvykhiđachn mbênngoài đondliu,Cdùngthpđon:offsetvàyêucudngbiudin32bit(4 byte,8chshex)vi4chschođachđonvà4chschođach  offset.DovyCcoiđachtuytđiB07D0là0xB00007D0(B000vàtheo saulà07D0).TrongCcontr32đctínhbngcáchdchđachđonsang trái16bitvàcngviđachoffset.Docon trthôngthngkhôngthct giđachdài32bitnêntaphidùngcontrfar.Contrnàyctgiđa chdài4byte.Vìvychngtrìnhslà: intfar*ptr;  ptr=0xB8000000; *(ptr)=ch; 4. Dùngmtkítđtômànhình:Chúngtadùngcontrfarđghi lênmànhình2000bnsaocamtkít.Điunàytngtnhdùng putch().Chngtrìnhktthúcghigõx  Chngtrình 42 39 #include<conio.h> #include<stdio.h> #definelength 2000 voidmain() { intfar*fptr; intadd; charch; clrscr(); printf(Govaomotkitu,golaidethaydoi); fptr=(intfar*)0xB8000000; while((ch=getche())!=x) for(add=0;add<length;add++)  *(fptr+add)=ch|0x0700; }  Trongchngtrìnhphát biu:  *(fptr+add)=ch|0x0700; dùngđđinđykítlênmànhình.Binchlàkítmunđtvàobnh. Hng s 0x0700 là byte thuc tính, có nghĩa là không chp nháy, không đm,chtrngtrên nnđen. Phátbiukháccngiithích:  fptr=(intfar*)0xB8000000; Ta dùng du ngoc vì hng 0xB8000000 và bin int far fptr có kiu khác nhau:hngcóvlàsnguyêndàicònfptrlilàcontr chđnkiuint.Do đóđtránhnhcnhcatrìnhbiêndchtacnbinđikiulàmhngtr tthànhcontrfarchđnint.Mànhìnhcóthđcxemnhmtmnghai chiu gmcáchàngvàct.Đachtngngtrongbnhđctínht phépnhânshiuhàngvislngcttrongmthàngricngktqu vàshiuctviđa chbtđucavùngnhmànhình.Tacóchng trìnhsau:  Chngtrình43 #include<conio.h> #include<stdio.h> #definerowmax25 #definecolmax80 voidmain() { intfar*fptr; introw,col; 40 charch; clrscr(); printf(Govaomotkitu,golaidethaydoi); fptr=(intfar*)0xB8000000; while((ch=getche())!=x) for(row=0;row<rowmax;row++)  for(col=0;col<colmax;col++) *(fptr+row*colmax+col)=ch|0x0700; }  5.Trìnhxlívănbntheodòng:Đbitthênvstinlic acontrfar taxétthêmmttrìnhxlívănbntheodòng.Trìnhxlínàychlàmvic trênmtdòngvănbn.Tastinhànhtheo2bc:đutiênlàmtchng trìnhchophépngidùnggõvàomtdòngvàdichuynconnháytilui. Cóthxoákítnhdichuynconnháytiđóvàghiđèlênnó.Chng trìnhnhsau:  Chngtrình44 #include <conio.h> #include<dos.h> #definecolmax80 #definerarrow77 #definelarrow75 #definevideo0x10 #definectrlc\x03 intcol=0; intfar*fptr; unionREGSreg;  voidmain() { charch; voidclear(void); voidcursor(void); voidinsert(char); fptr=(intfar*)0xB8000000; clear(); cursor(); while((ch=getch())!=ctrlc) { 41  if(ch==0) {  ch=getch();  switch(ch)  { caserarrow:if(col<colmax) ++col; break; caselarrow:if(col>0) col; break;  } }  else if(col<colmax)  insert(ch);  cursor(); } }  voidcursor() { reg.h.ah=2; reg.h.dl=col; reg.h.dh=0; reg.h.bh=0; int86(video,&reg,&reg); }  voidinsert(charch) { *(fptr+col)=ch|0x0700; ++col; } voidclear() { intj; for(j=0;j<2000;j++) *(fptr+j)=0x0700; } 42  Đxoámànhìnhtađins0vàovùngnhmànhìnhvithuctính 07.Sauđóconnháyđcdichuynvđumànhìnhnhphcvnđnh vtríconnháynhsau:  ngt10h  ah=0;   dh=shiudòng  dl=shiuct  bh=shiutrang,thnglà0 Phát biu switch dùngđđoán nhn các phímđc nhn là phím thnghayphímchcnăng.Phímmũi têndùngtănggimcolvàgihàm cursor()đdichuynconnháytiđó.Nukítgõvàolàkítthng,nó đcchènvàonhhàminsert().  6.Bytethuctính:Mtkíttrênmàn hìnhđclugibi2byte:mt bytelàmãcakítvàbytekialàthuctínhcanó.Bytethuctínhđc chialàmnhiuphn,bitnàobng1thìthìthuctínht ngngđcbt. Bitth3điukhinđsángcònbitth7điukhinđchpnháy.Cácbit cònlilà:6thànhphnđcamàunn;5thànhphngreencamàu nn;4thành phnbluecamàunn;2thànhphnđcamàuch;1 thànhphngreencamàuch;0thànhphnbluecamàuch.Talp mtchngtrìnhđđinđymànhình bngcáckítchpnháy.  Chngtrình45 #include<conio.h> #include<stdio.h> #definerowmax25 #definecolmax80  voidmain() { intfar*fptr; introw,col; charch; clrscr(); printf(Govaomotkitu,golaidethaydoi);  fptr=(intfar*)0xB8000000; while((ch=getche())!=x) for(row=0;row<rowmax;row++)  for(col=0;col<colmax;col++) 43 *(fptr+row*colmax+col)=ch|0x8700; }  Đbtchpnháytađbitth7thành1,3bitmàunn0,1và2đc đttr1nênnnslàđen.Bytethuctínhlúcnàylà10000111=87h.  7. Chngtrìnhđinthuctính:Đhiusâuhnthuctínhcakíttaxét chngtrìnhsau Chngtrình46 #include<conio.h> #include<stdio.h> #definerowmax25 #definecolmax80 voidmain() { intfar*fptr; charch,attr=0x07;  voidfill(char,char); clrscr(); printf(Gonchochubinhthuong,\n); printf(Gobchochuxanhnuocbien,\n); printf(Goichochusang,\n); printf(Gocchochuchopnhay,\n); printf(Gorchochudaomau\n); while((ch=getche())!=x) {  switch(ch) {  casen:attr=0x07;   break;  caseb:attr=attr&0x88;   attr=attr|0x01;   break;  casei:attr=attr^0x08;   break;  casec:attr=attr^0x80;   break;  caser:attr=attr&0x88;   attr=attr|0x70;   break; 44 }  fill(ch,attr); } } voidfill(charch,charattr) { intfar*fptr; introw,col; fptr=(intfar*)0xB8000000; for(row=0;row<rowmax;row++) for(col=0;col<colmax;col++)  *(fptr+row*colmax+col)=ch|attr<<8; }  Tronghàmfill()tacólnh *(fptr+row*colmax+col)=ch|attr<<8; vìattrlàkítnênphidchtrái8bittr ckhikthpvich.  8.Trlixlívănbn:Bâygichúngtađãbitthuctínhcakítvàta smrngchngtrìnhxlívănbnbng cáchthêmvàovicchènvàhu bkít,đimàu.  Chngtrình47 #include<conio.h> #include<dos.h> #definecolmax80 #definerarrow77 #definelarrow75 #definevideo0x10 #definenorm0x07 #defineblue0x01 #definebkspc8 #definealtu22 #definectrlc\x03 int col=0; intlength=0; intfar*fptr; unionREGSreg;  voidmain() { 45 [...]... l ng b nh cho c mã ch ng trình l n mã d li u n m g n trong m t o n Ki u này c dùng t o ra t p tin d ng *.com Ki u huge c dùng chô m t m c d li u (th ng là m ng ) mà b n thân nó l n h n 64K 48 §5 T CH A DANH M C THI T B ây là m t vùng b nh dài 2 byte n m trong vùng nh th p có a ch tuy t i là 410h ch a thông tin v thi t b c n i v i máy tính truy c p t này ta dùng con tr far Con tr s ch t i o n 0000,... trái t u t cu i câu tránh ghi è lên §4 CÁC KI U B NH TRONG C 1 a ch o n và offset: Trong C ki u b nh là khái ni m ch v l ng các ph n b nh khác nhau mà ch ng trình có th chi m C cho phép 6 47 ki u b nh là tiny, small, compact, medium, large và huge Ki u b nh m c nh là small B vi x lí dùng các thanh ghi 16 bit ghi a ch Thanh ghi 16 bit l u c ffffh byte hay 65536 hay 64 Kb a ch Vùng nh có kích th c này... printf( Co may in noi tiep\n ); data=(eq>>9)&7; 49 printf( So cong noi tiep la :%d\n ,data+1); if (eq&1) { data=(eq>>6)&3; printf( So dia mem la :%d\n ,data); } else printf( Khong co dia mem\n ); data=(eq> >4)& 3; switch (data) { case 1: printf( Man hinh mau 40 cot\n ); break; case 2: printf( Man hinh mau 80 cot\n ); break; case 3: printf( Man hinh don sac 80 cot\n ); } fptr=(int far *)memsiz; printf( Dung . printf(%d,bit);  if(i==7)  printf();  mask>>=1; }  printf( Banmuontinhtiepkhong(c/k)?);  ch=getch(); } while(ch==c); getch(); }   Trongchngtrìnhtrêntadùngvònglpforđduytqua16bitca binnguyênttráiquaphi.Lõicavnđlàcác phátbiu: . KhigõthpphímAlt+Usltbinattrqualigianorm(thuctính 07)vàblue(chochmàuxanhthuctính01).Hàminsert(0cóvònglpfor dùngđthâmnhptrcti pbnhvàcontrfarđdchcáckítsangtrái khicnchèn.Tintrìmhdchphibtđutcuicâuđtránhghiđèlên.  §4.CÁCKIUBNHTRONGC 1.Đachđonvà offset:TrongCkiubnhlàkháinimđchvlng cácphnbnhkhácnhaumàchngtrìnhcóthchim.Cchophép6 47 kiubnhlàtiny,small,compact,medium,largevàhuge.Kiubnh mcđnhlàsmall.  Bvixlídùngcácthanhghi16bitđghiđach.Thanhghi16bit luđcffffhbytehay65536hay64Kbđa ch.Vùngnhcókíchthc nàygilàđon.Đtruycpđachnmngoàiđon,bvixlíphidùng haithanhghilàthanhghiđonvàthanhghioffset.Đachthcđctính b ngcáchdchđachcathanhghiđonsangtrái4bitricngvithanh ghioffset.Làmnhvytađánhđachđcfffffhhay1048576=1Mb.  2.Hailoichthcabvi xlí:Bvixlídùnghaikĩthutkhácnhauđ thamchiudliutrongbnh.Nuvtrícnthamchiunmtrongđon 64Kbvàđonnàyđãđcchđnhtrongthanhghiđo nthìbvixlích cndùngmtlnhduynhtđtruycpdliu.Cáchnàytngngvi vicdùngcontrneartrongCvàthchinrtnhanh.Tráilinu bvix lícnthamchiuônhnmngoàiđonthìđutiênnóphithayđiđa chđonvàsauđoalàđachoffset.Điunàytngngvivicdùngcon trfartrong Cvàthchinkháchm.  3.Cáckiucompact,small,mediumvàlarge:Có4loichthcabvix língvi4kiubnhtrongC  Kiu. Numãchngtrìnhnmgntrongmtđon64Kvàmãdliu nmgntrongmtđon64Kkhácthìkiubnhsmalllàthíchhp.Nu mãchngtrình lnhn64Kvàmãdliunmgntrongmtđon64K khácthìhãydùngkiubnhmedium.Numãchngtrìnhnhhn64K vàmãdliulnhn 64Kthìhãydùngkiubnhcompact.Nucmã chngtrìnhvàmãdliulnhn64Kthìhãydùngkiubnhlarge.  4.Kiutynivàkiuhuge:Kiutyniđcdùngtrong cáctrnghpđc bitvilngbnhchocmãchngtrìnhlnmãdliunmgntrong mtđon. Kiu nàyđc dùngđto ra tp tin dng *.com. Ki u huge đcdùngchômtmcdliu(thnglàmng)màbnthânnólnhn 64K. 

Ngày đăng: 17/06/2015, 14:10

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan