www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 電源 > 數(shù)字電源
[導(dǎo)讀]因?yàn)?086混合8位和16位寄存器,所以經(jīng)常需要將8位寄存器移出至臨時寄存器,運(yùn)算完以后再從臨時寄存器移入8086寄存器。這些操作比較頻繁,可以將其封裝成函數(shù)?! ≈噶畹牟?

因?yàn)?086混合8位和16位寄存器,所以經(jīng)常需要將8位寄存器移出至臨時寄存器,運(yùn)算完以后再從臨時寄存器移入8086寄存器。這些操作比較頻繁,可以將其封裝成函數(shù)。

  指令的操作碼決定了進(jìn)行何種運(yùn)算,指令還具有各種操作數(shù)。每條指令一般都有多種操作數(shù)類型。常見的8086指令類型如下。

  

 

  圖 40 常見8086指令類型

  以加法指令add為例。

  add reg, reg類型。根據(jù)reg位寬不一樣,可分成五類:16位的一種,低8位跟高8位兩兩組合形成四種。

  其余類型都是在reg,reg類型的基礎(chǔ)上。遇到reg,mem類型,先計(jì)算出內(nèi)存地址,再取出內(nèi)存內(nèi)容將其載入到輔助寄存器,接下來就是reg,reg類型的操作。mem,reg與reg,mem類似,只是運(yùn)算方向相反,最后要將結(jié)果從寄存器寫回內(nèi)存。遇到立即數(shù)類型,則是將立即數(shù)載入寄存器再做運(yùn)算。

  4.2.11.代碼執(zhí)行及轉(zhuǎn)移分發(fā)器

  當(dāng)一個基本塊翻譯完以后,經(jīng)上下文切換后,由MIPS環(huán)境轉(zhuǎn)入8086環(huán)境,開始執(zhí)行已翻譯的代碼塊。當(dāng)執(zhí)行至代碼塊末尾時,遇到跳轉(zhuǎn)指令,然后轉(zhuǎn)入轉(zhuǎn)移分發(fā)器進(jìn)行處理。轉(zhuǎn)移分發(fā)器計(jì)算跳轉(zhuǎn)目標(biāo)地址(8086),以此地址在跳轉(zhuǎn)緩存中尋找對應(yīng)的MIPS地址。如果找到了,說明跳轉(zhuǎn)目標(biāo)是已翻譯過的,那么繼續(xù)跳過去執(zhí)行。如果沒找到,說明目標(biāo)塊還沒有翻譯,那么先執(zhí)行翻譯過程,再執(zhí)行翻譯塊。

  4.3.系統(tǒng)庫及應(yīng)用程序詳細(xì)設(shè)計(jì)方案

  4.3.1.系統(tǒng)可用資源及其分配

  系統(tǒng)可用內(nèi)存空間有1MB的空間。內(nèi)存地址空間的分配如下圖:

  

 

  圖 46 內(nèi)存分配(1M)

  系統(tǒng)通過wishbone開源總線,與virtex-5硬件開發(fā)板自帶的鍵盤、鼠標(biāo)和串口等外設(shè)互聯(lián)。鍵盤的硬件接口是PS/2標(biāo)準(zhǔn),virtex-5支持16位色液晶顯示器,串口用來與其他電腦主機(jī)連接,進(jìn)行通信和數(shù)據(jù)傳輸。

端口類型

端口地址

rs232數(shù)據(jù)端口

20000000H

rs232忙位檢測

20000004H

vga顯示基址

50000000H

led

70000000H

鍵盤

90000000H

表 1 系統(tǒng)常用端口及其地址

  系統(tǒng)庫函數(shù)設(shè)計(jì)與實(shí)現(xiàn)

  系統(tǒng)最初只支持MIPS匯編語言。用MIPS匯編語言開發(fā)出俄羅斯方塊游戲。這個應(yīng)用程序,不僅幫助找出了硬件系統(tǒng)存在的一些bug,如流水線CPU中存在的數(shù)據(jù)相關(guān)和控制相關(guān)問題,指令集的功能問題,而且還驗(yàn)證了硬件系統(tǒng)與RS232串口之間的數(shù)據(jù)傳輸功能的正確性,以及鍵盤接口和顯示器接口的正確性和易用性。

  系統(tǒng)宏定義和端口常量

  系統(tǒng)的內(nèi)存和外設(shè)的地址空間是連續(xù)分配的。為了提高開發(fā)應(yīng)用程序的過程中的設(shè)備無關(guān)性和應(yīng)用程序的通用性,我們把各個端口定義為常量,供系統(tǒng)庫和應(yīng)用程序參考使用。

  unsigned int* text_base = (int *)0x000C0000;

  unsigned int* graphics_base = (int *)0x50000000; //VGA 端口

  unsigned int* ps2_base = (int *)0x90000000; //ps2鍵盤 端口

  unsigned int* rs232_base = (int *)0xFFFFE000;

  unsigned int* rs232_busy = (int *)0xFFFFF000;

  unsigned int* font_base = (int *)0x000C12C0; //字庫 端口

  表 2 系統(tǒng)端口常量定義

  系統(tǒng)的顯示器支持16位色,即R5G5B6。為了保持應(yīng)用程序開發(fā)的一致性,我們定義了一些供應(yīng)用程序使用的顏色常量。

  #define COLOR_WHITE 0xFFFF

  #define COLOR_BLACK 0x0000

  #define COLOR_RED 0xF800

  #define COLOR_GREEN 0x07E0

  #define COLOR_BLUE 0x001F

  #define COLOR_BROWN 0xFC00

  #define COLOR_PURPLE 0x9009

  #define COLOR_YELLOW 0xFFE0

  #define COLOR_PINK 0xF81F

  圖表 3 系統(tǒng)常用顏色常量定義

  鍵盤接口函數(shù)

  checkkey函數(shù)

  原型:int checkkey();

  功能:檢查鍵盤是否有按鍵被按下

  說明:有鍵被按下返回 1,否則返回 0

  checkandgetkey函數(shù)

  原型:int checkandgetkey(int* key);

  功能:檢查鍵盤是否有按鍵被按下,并得到按鍵的ASCII碼

  說明:有鍵被按下返回 1,按鍵的ASCII由指針 key 保存;否則返回 0

  getchar函數(shù)

  原型:int getchar();

  功能:讀鍵

  說明:從鍵盤上讀取一個鍵,并返回該鍵的鍵值

  顯示器接口函數(shù)

  putpixel函數(shù)

  原型:void putpixel(int x, int y, int color);

  功能:在屏幕的指定位置上畫點(diǎn)

  說明: (x,y)為屏幕上點(diǎn)坐標(biāo),指定顏色 color

  getpixel函數(shù)

  原型:int getpixel(int x, int y);

  功能:返回屏幕上指定點(diǎn)的狀態(tài)

  說明:(x,y)為屏幕上點(diǎn)的坐標(biāo),如果點(diǎn)為清除狀態(tài)返回零,否則返回非零值

  printchar函數(shù)

  原型:void printchar(int x, int y, int ch, int color);

  功能:打印給定的字符

  說明: (x,y)為起點(diǎn)坐標(biāo),ch 為要打印的字符的ASCII碼,指定字體顏色 font_color,背景顏色

  printword函數(shù)

  原型:void printword(int x, int y, int word, int color);

  功能:打印給定的字,調(diào)試時使用

  說明: (x,y)為起點(diǎn)坐標(biāo),word 為要打印的字即4個字節(jié),先打印高字節(jié),指定顏色 color

  printnum函數(shù)

  原型:void printnum(int x, int y, int num, int color);

  功能:打印給定的數(shù)字,調(diào)試時使用

  說明: (x,y)為起點(diǎn)坐標(biāo),num 為要打印的數(shù)字,指定字體顏色 font_color 背景色bkg_color,目前該函數(shù)只支持 0=

  line函數(shù)

  原型:void line(int x1,int y1,int x2,int y2, int color);

  功能:在屏幕上畫直線

  說明: (x1,y1)為起點(diǎn)坐標(biāo),(x2,y2)為終點(diǎn)坐標(biāo)

  circle函數(shù)

  原型:void circle(int x, int y, int radius, int color);

  功能:畫圓框

  說明:x和y分別為圓心的橫縱坐標(biāo),radius 為半徑,color 為圓邊框的顏色

  circlefilled函數(shù)

  原型:void circlefilled(int x, int y, int radius, int color)

  功能:畫圓,并填充

  說明:x 和 y 分別為圓心的橫縱坐標(biāo),radius 為半徑,color 為圓邊框以及填充的的顏色該函數(shù)還有待改進(jìn)

  rectangle函數(shù)

  原型:void rectangle(int left, int top, int right, int bottom, int color);

  功能:在屏幕上畫一矩形邊框

  說明: (left,top)指定左上角坐標(biāo),(right,bottom)指定右下角坐標(biāo),指定邊框顏色color

  串口接口函數(shù)

  rs232Check函數(shù)

  原型:int rs232Check()

  功能:檢查rs232是否busy

  說明: return 返回值1為忙,0為空閑

  rs232ReceiveByte

  原型:char rs232ReceiveByte()

  功能:從rs232接收一個字節(jié),輪詢方式

  說明: return 返回一個字節(jié)

  rs232SendByte

  原型:void rs232SendByte(char b)

  功能:給rs232發(fā)送一個字節(jié)

  說明: param b 要發(fā)送的字節(jié)

  LED接口函數(shù)

  _lightLeds函數(shù)

  原型:void _lightLeds(int leds);

  功能:控制LED的顯示

  說明:leds的低8位有效[!--empirenews.page--]

  4.3.2.應(yīng)用程序設(shè)計(jì)與實(shí)現(xiàn)

  4.3.2.1.基于MIPS匯編語言的俄羅斯方塊游戲設(shè)計(jì)

  開發(fā)環(huán)境:自己編寫的MIPS匯編器AssemblerForRS-232.jar,MIPS匯編語言源文件in.asm,安裝jre或jdk并配置好環(huán)境變量的windows XP及以上的操作系統(tǒng)。

  程序流程:

  

 

  圖 47 俄羅斯方塊程序流程圖

  主要模塊:

  start函數(shù)

  參數(shù):無

  功能:游戲的主體框架,作用類似main函數(shù)

  說明:內(nèi)部調(diào)用Tetris、tetris_clr、wait_key、start_enter等函數(shù),構(gòu)成整個游戲的主體框架。

  Tetris函數(shù)

  參數(shù):無

  功能:游戲的邏輯控制主體

  說明:調(diào)用各種初始化函數(shù)、俄羅斯方塊的生成函數(shù)和運(yùn)動函數(shù)、玩家鍵盤控制函數(shù)、各種信息顯示函數(shù),實(shí)現(xiàn)游戲的所有邏輯。

  ini_boarder函數(shù)

  參數(shù):無

  功能:畫俄羅斯方塊運(yùn)行的左右邊界

  說明:初始化游戲時使用

  set_bottom函數(shù)

  參數(shù):無

  功能:畫俄羅斯方塊運(yùn)行的下邊界

  說明:初始化游戲時使用

  info函數(shù)類

  函數(shù)類:info_help、info_next、info_fail

  參數(shù):無

  功能:顯示各種信息

  說明:在初始化游戲界面時調(diào)用info_help顯示幫助信息;調(diào)用info_next在屏幕左上角顯示下一個即將下落的方塊的形狀和顏色,當(dāng)游戲失敗時調(diào)用info_fail提醒玩家。

  check_key函數(shù)

  參數(shù):輸出參數(shù)$v0和$v1

  功能:檢查是否有鍵按下

  說明:鍵盤無鍵按下時$v0=0;否則$v0=1,$v1=鍵值

  chk_dlt函數(shù)

  參數(shù):輸出參數(shù)$v0

  功能:檢查并刪除滿行

  說明:檢測每一行是否已擺滿方塊,如果擺滿則將其刪除。返回值$v0為刪除的滿行數(shù)。

  detect_collision函數(shù)

  參數(shù):輸出參數(shù)$v0

  功能:檢查是否有方塊沖突

  說明:如果有沖突則返回$v0=2

  null_loop函數(shù)

  參數(shù):輸入?yún)?shù)$a0

  功能:空循環(huán),用于延時

  說明:$a0=0,表示長延時;$a0=1表示短延時

  get_next_seq函數(shù)

  參數(shù):輸入?yún)?shù)$a3、輸出參數(shù)$v0

  功能:根據(jù)當(dāng)前方塊的形狀,得到下一個方塊的形狀

  說明:輸入$a3當(dāng)前形狀的序列號,返回$v0下一個方塊的形狀的序列號

  draw_pic函數(shù)類

  函數(shù)類:pre_draw_pic類、un_pre_draw_pic類、draw_pic類

  參數(shù):輸入?yún)?shù)$a0和$a2

  功能:根據(jù)方塊現(xiàn)在的位置和接下來的位置來畫方塊

  說明:輸入?yún)?shù)$a0是當(dāng)前位置,$a2是方塊將要移動的位置

  4.3.2.2.基于C語言的吃豆子游戲設(shè)計(jì)

  開發(fā)環(huán)境:自己編寫的硬件系統(tǒng)模擬器SimulatorForV5.jar,自己編寫的內(nèi)存填充工具M(jìn)emoryFilling.jar,自己編寫的硬件內(nèi)存分配文件memory.bin,Gcc編譯環(huán)境,嚴(yán)格的簡單的C語言程序源文件user.c,安裝jre或jdk并配置好環(huán)境變量的windows XP及以上的操作系統(tǒng)。

  程序流程:

  

 

  圖 48吃豆子程序流程圖

  主要模塊:

  start_game函數(shù)

  原型:void start_game();

  功能:游戲程序的邏輯主函數(shù)

  說明:控制packman的運(yùn)動,兩個怪物的簡單智能移動,檢查游戲的終止條件,判斷鍵盤輸入并做相應(yīng)的響應(yīng)

  init_game函數(shù)

  原型:void init_game();

  功能:初始化游戲的全局變量

  說明:每次游戲重新開始時,需要調(diào)用該函數(shù)進(jìn)行全局變量的初始化

  check_catch函數(shù)

  原型:int check_catch()

  功能:檢測packman是否被怪物抓到

  說明:如果被抓到返回1,否則返回0

  check_collision函數(shù)

  原型:int check_collision()

  功能:檢測兩個怪物是否有沖突

  說明:如果有則返回1,否則返回0[!--empirenews.page--]

  clear_screen函數(shù)

  原型:void clear_screen(int color)

  功能:用指定顏色清屏

  說明:color為指定的顏色值,可以用宏定義的顏色值或者相應(yīng)的16位數(shù)值

  draw函數(shù)類

  原型:void draw_map();void draw_info();void draw_ball(int x, int y);void draw_pea(int x, int y)

  功能:在指定坐標(biāo)位置畫形狀

  說明:(x,y)為形狀的左上角定點(diǎn)的坐標(biāo)

  display函數(shù)類

  原型:int display_win();int display_lose();void display_bye()

  功能:全屏顯示提示信息

  說明:分別提示玩家游戲成功、游戲失敗、感謝信息

  get_direction函數(shù)類

  原型:int get_direction_1st();int get_direction_2nd()

  功能:隨機(jī)得到怪物的下一次移動的方向

  說明:根據(jù)兩個怪物位置的全局變量,簡單的智能算法,計(jì)算兩個怪物下一次移動的方向

  move函數(shù)類

  原型:void move_monster_1st();void move_monster_2nd ()

  功能:移動兩個怪物

  說明:根據(jù)兩個怪物的全局變量,計(jì)算后分別移動

  null_loop函數(shù)

  原型:void null_loop(int length)

  功能:空循環(huán),用于延時

  說明:length參數(shù)為0時是長延時,為1時是短延時

  save_lattice函數(shù)

  原型:void save_lattice(int x, int y, int * array)

  功能:把指定位置方格的像素值保存在數(shù)組中

  說明:(x,y)為指定方格的坐標(biāo),array為全局?jǐn)?shù)組變量

  resume_lattice函數(shù)

  原型:void resume_lattice(int x, int y, int * array)

  功能:把方格像素存儲到指定的坐標(biāo)

  說明:array為保存像素值的全局變量,(x,y)為要存放顏色的方格的坐標(biāo)

  4.3.2.3.基于x86匯編語言的推箱子游戲設(shè)計(jì)

  開發(fā)環(huán)境: x86模擬器emu8086.exe,DOS模擬器DosBox.exe,x86匯編器NASM,windows XP及以上的操作系統(tǒng)。

  程序流程:

  

 

  圖 49 推箱子程序流程圖

  主要模塊:

  init_game函數(shù)

  參數(shù):無

  功能:游戲初始化

  說明:初始化游戲的界面和各個變量,每次重新進(jìn)入游戲時調(diào)用該函數(shù)

  move_man函數(shù)

  參數(shù):輸入?yún)?shù)ax,bx

  功能:在指定的坐標(biāo)處畫man

  說明:ax為橫坐標(biāo),bx為縱坐標(biāo)

  move_box函數(shù)

  參數(shù):輸入?yún)?shù)ax,bx

  功能:在指定的坐標(biāo)處畫box

  說明:ax為橫坐標(biāo),bx為縱坐標(biāo)

  check_win函數(shù)

  參數(shù):輸出參數(shù)dx

  功能:檢查箱子是否都放到指定位置

  說明:如果箱子已經(jīng)擺放好返回dx=1,否則返回dx=0

  check_collision函數(shù)

  參數(shù):輸出參數(shù)dx

  功能:檢查man和箱子是否能夠移動

  說明:如果有沖突返回dx=1,否則返回dx=0

  check_key函數(shù)

  參數(shù):輸出參數(shù)ax,bx

  功能:檢查是否有鍵按下

  說明:如果有鍵按下,ax=1,bx=鍵值;否則ax=0,bx無意義

  get_key函數(shù)

  參數(shù):輸出參數(shù)dx

  功能:等待鍵盤輸入

  說明:鍵盤被按下后,返回鍵值dx=鍵值

  rectangle函數(shù)

  參數(shù):輸入?yún)?shù)arg0,arg1,arg2,arg3,arg4

  功能:畫帶顏色填充的長方形

  說明:參數(shù)通過堆棧傳遞,arg0=left,arg1=top,arg2=right,arg3=bottom,arg4=color,顏色采用R5G5B6的16位色

  xy2array函數(shù)

  參數(shù):輸入?yún)?shù)ax,bx,輸出參數(shù)dx

  功能:將游戲中的x和y坐標(biāo)對應(yīng)到一位數(shù)組中

  說明:ax為橫坐標(biāo),bx為縱坐標(biāo),返回dx

  draw_box函數(shù)

  參數(shù):輸入?yún)?shù)ax,bx,cx

  功能:在指定坐標(biāo)處畫box并用指定顏色填充

  說明:ax為橫坐標(biāo),bx為縱坐標(biāo),cx指定顏色

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護(hù)是驅(qū)動電源設(shè)計(jì)中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機(jī)驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計(jì)工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉