(推薦)6502基礎知識_第1頁
(推薦)6502基礎知識_第2頁
(推薦)6502基礎知識_第3頁
(推薦)6502基礎知識_第4頁
(推薦)6502基礎知識_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、如果您需要使用本文檔,請點擊下載按鈕下載!6502基礎知識:6502 CPU是8位的處理器,早期的nes(任天堂娛樂系統(tǒng))即是采用了此種cpu,特點是功耗小,成本低,穩(wěn)定性強,缺點嘛,自然是很明顯,速度慢,能處理的任務類型少,而且,相對于NES,WQX還少了象處理圖象和聲音的專用芯片(NC2k后的系統(tǒng)增加了高速處理芯片DSP來作為聲音處理,因此使在其上播放WAV成為可能)。以后,我們使用匯編語言,就都要和這個6502芯片打交道了,讓我們熟悉一下它。和PC上的8080CPU一樣,6502 cpu也有一套指令集,cpu識別指令,進行相應的操作。這些指令都是16進制的,比如:a9h 01h 85h

2、80h 60h,在16進制數(shù)據(jù)后面加上一個h(hex),來將它們和其它進制區(qū)分開來,以后的內(nèi)容里,16進制后將不加h,其它進制(10進制后加D(dec),2進制后加B(bin)則將特別說明。上面的那段數(shù)據(jù):a9 01 85 80 60,就是一段機器碼,也是一段匯編程序,匯編的寫法如下:lda#$01sta$80rts這段命令的用途將在以后介紹,這里只是讓大家了解一下匯編及機器碼程序的書寫格式。這些數(shù)據(jù)以二進制的格式被存儲在wqx的存儲介質(zhì)里(一般為ram,flash,rom),由cpu控制不斷從存儲介質(zhì)中讀取并分析執(zhí)行。數(shù)和運算相關知識這節(jié)講解進制、邏輯運算知識,若已經(jīng)知道,可跳去下一節(jié)(1)

3、進制:如果您需要使用本文檔,請點擊下載按鈕下載!a.常見的計數(shù)制:10進制,這是大家熟悉的,由0-9這10個數(shù)碼組成,逢10進位,表示時在數(shù)碼后加D(Decimal),由于很常用,常省略Db.二進制數(shù):只有0,1兩個數(shù)碼,逢2進位,用B(Binary)結(jié)尾,如11110000Bc.十六進制數(shù)有0-9和A,B,C,D,E,F共16個數(shù)碼,其中A,B,C,D,E,F分別對應10進制的10,11,12,13,14,15,后用H(hexadecimal)結(jié)尾,如79h。因為本書中大量使用了這一數(shù)志,所以將h省略各進制數(shù)間可進行等值轉(zhuǎn)換,可使用wqx上科學計算器實現(xiàn) 計算機只能識別1,0代表的兩種信息,

4、所以在計算機中運行的是二進制數(shù),而計算機中所謂的8位機,則是指6502一次處理數(shù)據(jù)長度為8位邏輯運算知識6502多用于控制領域,因此6502系統(tǒng)中存在大量邏輯運算,基本的邏輯運算有:與,或,非,基本邏輯運算再經(jīng)簡單的組合,便可構成復合邏輯門,如與非門,或非門,異或門等等,下面講解它們a.邏輯與邏輯表達式為:f=aba,b為2事件,只有當a,b皆為真時,結(jié)果f才為真,否則f為假f=ab的邏輯狀態(tài)表:00=0 01=0 10=011=1規(guī)則可總結(jié)為:有0則0,全1則1如果您需要使用本文檔,請點擊下載按鈕下載!與操作在實際中常于于屏蔽(修改)或測試(獲取)數(shù)據(jù)中某個或某幾個位的狀態(tài)如lda$80an

5、d#$40(10000000b)sta$80rts這樣就可以屏蔽$80中的6-0位b.邏輯或邏輯或的表達式為:f=ab邏輯狀態(tài)表為:00=1 01=1 10=111=1 規(guī)則可總結(jié)為:有1則1,全0則0或操作常用來置位,如將$80的0,1位置1:lda$80ora#$03(00000011b)sta$80rts和上面是一樣的,現(xiàn)在$80里就又是原來的數(shù)據(jù)了,這里#$79就是密碼,沒有它就無法解開加密后的數(shù)據(jù)6502寄存器知識觸發(fā)器是一類具有記憶能力的基本邏輯電路觸發(fā)器就是一位寄存器,可以存放1位二進制信息,并且有接收和輸出二進制數(shù)的功能,N個觸發(fā)器便可構成N位的寄存器如果您需要使用本文檔,請點

6、擊下載按鈕下載!6502中共有5個8位寄存器和1個16位寄存器1.累加寄存器A這是8位的寄存器,也是6502中最重要和最常用的寄存器,可用于讀寫數(shù)據(jù),進行各種邏輯運算等等。2.變址寄存器X這個8位寄存器和A差不多,只是它可以非常方便地加1或減1,常用于數(shù)據(jù)傳送,運算等等3.變址寄存器Y和X一樣,2個變址寄存器搭配使用使程序更加靈活4.堆棧指針SP這是8位的寄存器,指向?qū)m斘恢迷诔绦蜻\行時。須要一稱之為堆棧的RAM塊作為數(shù)據(jù)緩沖區(qū),以暫存程序運行過程中的一些重要數(shù)據(jù)堆棧由連續(xù)的RAM單元組成。數(shù)據(jù)寫入堆棧稱入棧,數(shù)據(jù)從堆棧中讀出稱為出棧,堆棧的操作遵循先進后出的操作,即先入棧的數(shù)據(jù)后出棧。系

7、統(tǒng)如何了解當前的堆棧頂在哪以從頂部彈出堆棧呢?就要依靠堆棧指針SP,6502規(guī)定,堆棧位于第一頁($0100-$01ff)的RAM中,因此SP指向的時堆棧頂?shù)牡?位,即堆棧頂?shù)刂窞?00SP,當進行入棧、出棧操作時,棧頂單元發(fā)生變化,SP的內(nèi)容也將加1或減1可以用下面程序讀出當前SP的內(nèi)容:TSXSTX$2000如果您需要使用本文檔,請點擊下載按鈕下載!RTS這時$2000即為SP的內(nèi)容5.程序狀態(tài)字PSW(Program Status Word)這也是8位寄存器,用于寄存指令執(zhí)行的狀態(tài)信息,PSW的各位狀態(tài)有的是根據(jù)指令執(zhí)行的結(jié)果由硬件自動設置的,有的可以由用戶用軟件的方法設定。PSW的各位

8、如下(其中第5位未用,保持為0)7 6 5 4 3 2 1 0N V B D I Z CN:負數(shù)標志,指令指行完后為負(7F)則n=0,否則為1V:溢出標志,若產(chǎn)生溢出則V=1,否則V=0I:中斷標志。是否允許系統(tǒng)中斷IRQ,=1:禁止,=0:允許Z:零標志,結(jié)果是否為0,為0則Z=1,否則Z=0C:進位標志,結(jié)果最高位有進位則C=1,否則C=05.程序計數(shù)器PC這是6502唯一的一個16為計數(shù)器,其內(nèi)容為將要執(zhí)行命令的存放地址,尋址范圍達64KB($0000-$FFFF),CPU是根據(jù)PC的內(nèi)容找到指令的存儲單元,取出指令執(zhí)行的。PC具有自動加1的功能,CPU每讀取一條指令的1字節(jié),PC內(nèi)容

9、自動加1,指向下一個存儲單元,這樣就能實現(xiàn)程序的順序執(zhí)行PC沒有地址,用戶不能對它進行讀寫,但可以通過轉(zhuǎn)移,調(diào)用,返回等指令改變其內(nèi)容,以改變程序的執(zhí)行順序6502主要組成設備這節(jié)講解wqx的主要組成部件如果您需要使用本文檔,請點擊下載按鈕下載!1.軟件就是我們編寫或下載的程序和系統(tǒng)的部分,6502系統(tǒng)包括軟件和硬件兩個方面。2.存儲器主要作用是存放程序和數(shù)據(jù),6502系統(tǒng)的存儲單元為8位,每位都是一個二進制數(shù),即每個存儲單元存放一個8位的進制數(shù),也就是一個字節(jié)。向存儲單元存放信息稱為寫,取出信息稱為讀,讀,寫操作都稱為訪問存儲器。6502訪問存儲器是根據(jù)存儲單元的地址進行的,根據(jù)地址訪問存儲

10、單元又稱為尋址。6502的cpu最大尋址范圍為64kb,即$0000-$ffffwqx有512kb的閃存和數(shù)mb的rom,而cpu卻只能尋址64kb,這個問題是如何解決的呢?和早期的dos系統(tǒng)一樣,系統(tǒng)對存儲器采取了分頁訪問的方法,以nc1020的512kb閃存為例,第00頁的$4000-$bfff為512kb的第一個32kb,第01頁的$4000-$bfff為512kb的第二個32kb.以此類推,這樣即可對大容量的存儲器進行訪問。至于nc2k的nand flash存儲器,和這有些不同,這將在以后詳細講解。Wqx主要有下面這些存儲器:a.Mask ROM這是種不可寫的存儲器,又稱為掩膜ROM,

11、也就是說對于此種存儲器來說,只能進行讀操作。在NC1020中分步在80-FF頁$4000-BFFFb.System bios這是種特殊的rom,是系統(tǒng)的bios,存放了中斷處理例程,系統(tǒng)重要的函數(shù)等等如果您需要使用本文檔,請點擊下載按鈕下載!位于各系統(tǒng)的$e000-$ffffc.Nor Flash是可多次擦除的存儲器,wqx用的是512kb的nor flash,Flash存儲器內(nèi)容不易丟失。nor flash的特點是讀取速度快,性能穩(wěn)定,可以芯片內(nèi)執(zhí)行,缺點則是容量小,寫入速度慢,nc2k以前的機型將其作為系統(tǒng)/數(shù)據(jù)存儲器,nc2k以后的機型則將其作為系統(tǒng)和一些重要數(shù)據(jù)的存儲器d.nand f

12、lash這是一種容量很大的flash存儲器。nc2k使用的是32mb的nand flash,它的特點是容量大,擦寫速度快,缺點是穩(wěn)定性較差(易出現(xiàn)壞區(qū)),讀寫復雜,同時讀取速度較慢e.sram主要的隨機存儲器也即內(nèi)存,分布在各系統(tǒng)的$0000-$3fff($0000-$003f映射到系統(tǒng)i/o)f.xramnc2k后的機型為了適應nand flash增加的32k大內(nèi)存,位于$80頁4000-bfffg.rambnc2k系統(tǒng)作為壞區(qū)表等信息存放處h.ram04$00頁的$4000-$5fff($6000-$7fff為其鏡象),8k的內(nèi)存3.CPU 中央處理器(Central Processor

13、Unit,CPU)是整個6502系統(tǒng)的核心,由運算器和控制器組成,進行運算和控制操作。a.運算器是6502的運算部件,內(nèi)有邏輯運算單元,可以實現(xiàn)加、減、加1、減1、比較等算術運算和與、或、異或等邏輯運算。b.控制器是6502的指揮控制元件,保證wqx各部分能自動而協(xié)調(diào)地工作。如果您需要使用本文檔,請點擊下載按鈕下載!4.I/O接口wqx在工作時,要不斷從外部設備,比如鍵盤等獲取信息,并向外部設備,比如屏幕,發(fā)送控制信號,這些信息的輸入輸出電路稱為I/O(Input/Output),I/O口是系統(tǒng)和外部設備之間交換信息的通道WQX共有64個8位I/O口,分別被映射到sram的$0000-$003

14、f,直接對改段地址進行操作即可操作I/O5.其它外部設備很多設備是不能集成到6502主板上的,比如lcd,紅外/串口通訊設備,鍵盤,電源(電池和外部電源接口),時鐘電路,發(fā)音設備等等,它們稱為外部設備,一般通過I/O接口對它們進行訪問。使用debug工具這是本章最后一節(jié),這里我將告訴大家如何使用debug工具,這可是很重要的!目前wqx使用的debug工具有xasm(by xu),wqxhex(by sun),nc-tools(by xu)等等,這里我強烈推薦nc-tools這個工具!這是我有史以來用過的最好的debug工具了。nc-tools 1020和2600分別在的下載區(qū)和星迷天地區(qū)可得

15、到最新版本。nc1020版nc-tools可用于nc1020/n,cc880,cc980;nc2600版可用于nc-2600,如果你的機型沒由相應的nc-tools,用sun的wqxhexeditor也可。這里只介紹和匯編編程相關的一些命令的用法,其它功能請參考nc-tools使用說明按鍵操作:空格:命令確定如果您需要使用本文檔,請點擊下載按鈕下載!方向上:當前瀏覽位置+10下:減10換姨燙燙燙燙燙燙燙燙燙燙燙壇上:加1下:加60方向左:減1方向右:減60q:退出求助:工具菜單:切換hex/中文:直接以文字修改當前存儲器內(nèi)容:查看寄存器狀態(tài):當前頁+1:-1+(nc1020):清空$2000-

16、$30001.v命令轉(zhuǎn)到地址格式:v xxxxv xxxxyyxxxx為地址yy為頁2.e c修改存儲器內(nèi)容如果您需要使用本文檔,請點擊下載按鈕下載!e c xxxxe c xxxxyy3.e i插入數(shù)據(jù)e i xxxxxxxx:移動范圍yy:刪除個數(shù)5.c 比較數(shù)據(jù)c x000yyx000:地址 yy頁將yy頁x000-xfff和$2000-$2fff比較6.a 寫匯編a xxxxyya xxxx只能在ram寫方向上=$換頁上=#左=)方向下=,右=y.=b換頁下=(7.s h 搜索hex如果您需要使用本文檔,請點擊下載按鈕下載!s h xxxxyyyyxxyyxxxx xx 開始地址、頁y

17、yyy yy 結(jié)束地址、頁8.s c 搜索文字s c xxxxyyyyxxyy9.u反匯編u xxxxu xxxxyy10 g 執(zhí)行g xxxxg xxxxyy11.w 寫入w x000yy將$2000-$2fff寫入$x000-$xfff12.l 發(fā)送l x000yy將$2000-$2fff寫入$x000-$xfff12.l 發(fā)送l x000yy將yy頁x000-xfff發(fā)送到$2000-$2fff13.x 求int中斷地址x yyyy如果您需要使用本文檔,請點擊下載按鈕下載!yyyy:中斷向量尋址方式掌握6502的尋址方式才能弄懂6502的指令,因此這節(jié)很重要#$xx:指令#$zz:數(shù)據(jù)(

18、8位)$yy:地址(8位零頁地址)$yyyy:地址(16位)(1)立即尋址方式格式:xx#$zz如lda#$05要尋址的數(shù)據(jù)在后面已給出,稱為立即尋址(2)直接尋址方式格式:xx$yy or xx$yyyy如:LDA$1EADC$2300要尋址的數(shù)據(jù)在所給出的地址中,該地址的內(nèi)容即為所需數(shù)據(jù)這里分為零頁尋址(xx$yy)和普通尋址(xx$yyyy)xx$yy就相當于xx$00yycpu將$0000-$ffff的可尋址范圍分為0-ff個頁面,每頁面ff個地址,其中$00-$ff稱為零頁,對他們的尋址稱為零頁尋址,可以看出,由于零頁尋址的指令為2字節(jié),較普通尋址要快,因此使用零頁尋址的指令可提高程

19、序運行速度(3)寄存器隱含尋址如果您需要使用本文檔,請點擊下載按鈕下載!格式:xx如:tayphp在這種尋址方式中,所需的數(shù)據(jù)并沒有直接給出,也沒有給出地址,而是將某個寄存器的內(nèi)容作為操作數(shù),常用于寄存器間交換數(shù)據(jù)等(4)直接x變址,直接y變址格式:xx$yyyy,xor xx$yyyy,yor xx$yy,yor xx$yy,x如:lda$1000,xlda$1000,ylda$80,xlda$80,y這種尋址方式是在直接尋址的基礎上,再加上x或y寄存器的內(nèi)容,獲得操作數(shù)所在地址如lda$1000,x當x=5時,那么所要尋址的操作數(shù)就在$1005(4)間接尋址格式:xx($yy,x) or

20、xx($yy),y or jmp($xxxx)如:cmp($80,x)lda($80),y所謂間接尋址就是指操作數(shù)所在的地址或所需跳轉(zhuǎn)的地址并不直接給出,而是在所給出的地址中如果您需要使用本文檔,請點擊下載按鈕下載!如:lda($80,x)當x=5,$85=00,$86=20那么所要的操作數(shù)就在$2000中 即在$80+5,$81+5存放了地址如:lda($80),y當y=5,$80=00,$81=20 那么操作數(shù)就在$2005中,即將$80,$81中地址+5(y)如jmp($2000)$2000=00,$2001=30那么就會跳轉(zhuǎn)到$3000間接尋址是很重要的一種尋址方式,剛開始時你也許會覺

21、得使用直接尋址很簡單,但用多了就會發(fā)現(xiàn),間接尋址的靈活方便是直接尋址無法相比的(6)相對尋址格式:xx$yyyy如:bcs$2000相對尋址是相對于當前地址的跳轉(zhuǎn)指令尋址,可向前或向后跳轉(zhuǎn),范圍在+7f-7f之間指令系統(tǒng)$xxxx:16位地址#$xx:數(shù)據(jù)$xx:零頁地址data:地址中數(shù)據(jù)addr:地址stack:堆棧a,x,y,p,s:寄存器如果您需要使用本文檔,請點擊下載按鈕下載!z,n,c,v,d,i,b:標志寄存器p的各位各種指令和尋址方式構成了匯編代碼,要注意并非每個指令都有所有的尋址方式,例如cmp指令就只有cmp($xx,x)的間接x尋址方式而沒有cmp($xx),y的間接y尋

22、址方式指令分為一字節(jié)、二字節(jié)、三字節(jié)指令,分別占用1,2,3 b的存儲空間,一、二字節(jié)的指令比三字節(jié)指令所占空間少,速度快1.數(shù)據(jù)傳輸指令這里的傳輸是復制,而不是移動(1)ldadata-a(2)ldxdata-x(3)ldydata-y(4)staa-addr(5)stxa-addr(6)stya-addr(7)taya-y(8)tya如果您需要使用本文檔,請點擊下載按鈕下載!y-a(9)taxa-x(10)txax-a(11)phaa-stack堆棧是由系統(tǒng)開辟的一塊用于保護數(shù)據(jù)的區(qū),在$0100-$01ff間,用于存放一些數(shù)據(jù)這里pha將a放入了堆棧中,同時堆棧指針s=s-1(12)pl

23、astack-a將保存在堆棧最上的數(shù)據(jù)彈出-a,s=s+1(13)phpp-stack,s=s-1(14)plpstack-p,s=s+1(15)tsxs-x(16)txsx-s如果您需要使用本文檔,請點擊下載按鈕下載!2.數(shù)據(jù)操作指令(1)oraa=a or data(2)eora=a xor data(3)anda=a and data(4)asl邏緝左移,將data中各位依次向作移一位,最高位-c,相當于x2a(or data)=a(or data)=a(or data)/2(6)rol循環(huán)左移(7)ror循環(huán)右移(8)bit相當于and,只是與操作的結(jié)果不放入a中,而只是影響標志位a=a+c+data這帶c進位的加法,若c=1,則a=a+data+1因此在單個數(shù)據(jù)加法時要將c位清0如:lda#$80如果您需要使用本文檔,請點擊下載按鈕下載!clcadc#$05sta$2000rts此時結(jié)果為85 而在多個數(shù)據(jù)加法時,僅在最低位加法時清0如2030+5080lda#$30clcadc#$80sta$2000lda#$20adc#$50 /注意這里就不要清c了sta$2001rts結(jié)果為70B0(10)sbc帶c借位減法a=a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論