【lc3】彙編實現I/O中斷
1.Purpose——To showhow interrupt-driven Input/Output can interrupt a program that is running,execute the interrupt service routine, and return to the interrupted program,picking up exactly where it left off (just as if nothing had happened).
The assignment consists of three parts:
1)The user program
2)The keyboard interrupt service routine
3)The operating system enabling code
2.Principle: (1)本實驗中對鍵盤輸入採用interrupt I/O方式,對顯示螢幕輸出則採用polling的方式
(2)在user program 中,講“[email protected]”與“ ”作為兩個字串,控制二者輪流輸出和換行時機,以達到實驗要求輸出方式
(3)為了至於顯示頻重新整理過快,採用了延時的方法,即每一行輸出後,count2500方進行下一行的輸出
(4)在interrupt routine中不能採用trap指令,則逐一將需要輸出的字元儲存到DDR中以達到輸出目的
3. procedure
程式碼註釋:
.ORIG x3000
LDR6,STACK ; initialize the stack pointer
LD R2,ADDR ; set up the keyboard interrupt vector tableentry LD R3,VECTOR
STRR2,R3,#0
LD R2,ENABLE ;enable keyboard interrupts
LDR3,KBSR
STRR2,R3,#0
LDR1,FEEDNUM1 ; start of actual user programto print checkerboard
OUTPUT1 LEAR0,OUT1 ;輸出第一行,從字串OUT1開始輪流輸出OUT1和
TRAPx22 ;OUT2兩個字串,共輸出9個則換行
ADDR1,R1,#-1
LEAR0,OUT2
TRAPx22
ADDR1,R1,#-1
BRzOUTFED1 ;輸出換行
BRpOUTPUT1
OUTFED1 JSRDELAY
LDR0,FEED
TRAPx21
LDR1,FEEDNUM2
BRnzpOUTPUT2 ;轉至輸出第二行部分
OUTPUT2 LEAR0,OUT2 ;輸出第一行,從字串OUT2開始輪流輸出OUT2和
TRAPx22 ;OUT1兩個字串,共輸出8個則換行
ADDR1,R1,#-1
LEAR0,OUT1
TRAPx22
ADDR1,R1,#-1
BRzOUTFED2
BRpOUTPUT2
OUTFED2 JSRDELAY ;換行並且轉至輸出line1的部分
LDR0,FEED
TRAPx21
LDR1,FEEDNUM1
BRnzpOUTPUT1
DELAY STR1, SaveR1 ;延時
LD R1, COUNT
REP ADDR1,R1,#-1
BRp REP
LD R1, SaveR1
RET
ENABLE .FILLx4000
KBSR .FILLxFE00
VECTOR .FILLx180
ADDR .FILLx1500
STACK .FILLx3000
COUNT .FILL#2500
SaveR1 .BLKW#1
FEED .FILL#13
FEEDNUM1 .FILL#9
FEEDNUM2 .FILL#8
OUT1 .STRINGZ" [email protected]"
OUT2 .STRINGZ" "
.END
----------------------------------------------------------------------------
.ORIGx1500
STR0,SAVER0 ;store the registers
STR2,SAVER2
STR3,SAVER3
STR4,SAVER4
STR5,SAVER5
STR7,SAVER7
LDI R1,KBDR ;初始化值
LDR2,NUM0
LDR3,NUM9
NOTR2,R2 ;講kbdr中只與0,9比較以判斷是否是數字
ADDR2,R2,#1
ADDR2,R2,R1
BRnNOTNUM
NOTR3,R3
ADDR3,R3,#1
ADDR3,R3,R1
BRpNOTNUM
BRnzpISNUM
ISNUM LEAR2,OUT1 ;是數字輸出相應的字串
ISNUM2 LDRR0,R2,#0
JSROUTPUT
ADDR2,R2,#1
LEAR3,OUT2
NOTR3,R3
ADDR3,R3,#1
ADDR3,R3,R2
BRzDONE
BRnpISNUM2
NOTNUM LEAR3,OUT2 ;不是數字,輸出相應的字串
NOTNUM2 LDRR0,R3,#0
JSROUTPUT
ADDR3,R3,#1
LEAR2,KBDR
NOTR2,R2
ADDR2,R2,#1
ADDR2,R2,R3
BRzDONE
BRnpNOTNUM2
OUTPUT STR1,SAVER1 ;因為不能使用trap,採用的輸出方法
LOOP LDIR1,DSR
BRzpLOOP
STIR0,DDR
LDR1,SAVER1
RET
DONE LDR1,ENABLE ;結束
LDR2,KBSR
STRR1,R2,#0
LDR0,SAVER0
LDR2,SAVER2
LDR3,SAVER3
LDR4,SAVER4
LDR5,SAVER5
LDR7,SAVER7
RTI
OUT1 .STRINGZ"\nICS2017:It is a number.\n"
OUT2 .STRINGZ"\nICS2017: ?????? What is this ??????\n"
KBDR .FILLxFE02
KBSR .FILLxFE02
ENABLE .FILLx4000
DSR .FILLxFE04
DDR .FILLxFE06
NUM0 .FILL#48
NUM9 .FILL#57
SAVER0 .BLKW#1
SAVER1 .BLKW#1
SAVER2 .BLKW#1
SAVER3 .BLKW#1
SAVER4 .BLKW#1
SAVER5 .BLKW#1
SAVER7 .BLKW#1
.END
4.results
(1)測試
輸入1,結果如下
輸入k,結果如下
*以其他字元進行測試,輸出均與要求一致
(2)反思
1.每行延遲為計數2500,在實際操作中仍然過快,在本人實驗中,每輸出一個7個字元的字串delay等同時間,顯示效果較佳
2.上述輪流輸出的方式較為繁瑣,把每行設定成一個字串能使程式碼簡化
3.在實驗中PC,PSR的棧的入棧操作由模擬器本身進行,出棧由RTI執行,未能清楚得到乃至修改PSR的值的方法
相關推薦
【lc3】彙編實現I/O中斷
1.Purpose——To showhow interrupt-driven Input/Output can interrupt a program that is running,execute the interrupt service routine, and ret
【lc3】彙編實現排序——student ID
Purpose: There are 64 students. Each has a unique ID,which consists of two integer. Given ID1 = (a1, a2) and ID2 = (b1, b2), then Ifa1 >
【學點Kaldi】Kaldi的I/O機制
本篇給出了Kalid中輸入輸出機制的概覽。(主要參考Kaldi的Doc) Kaldi中類的輸入輸出介面 Kaldi中定義的類有一個通用的I/O介面。標準的介面如下: class SomeKaldiClass { public: void Read(std::istream
【caffe原始碼的梳理之五】caffe資料I/O模組——資料變換器Data_Transformer
資料變換器 caffe的資料變換器(DataTransformer)主要提供了對原始影象的預處理方法,包括隨機的切塊、隨機的映象、幅度縮放、去均值、灰度、色度變換等。 1、資料結構的描述 message TransformationPa
【bzoj4276】[ONTAK2015]Bajtman i Okr?g?y Robin 線段樹優化建圖+費用流
har brush while inf uil mes queue eof div 題目描述 有n個強盜,其中第i個強盜會在[a[i],a[i]+1],[a[i]+1,a[i]+2],...,[b[i]-1,b[i]]這麽多段長度為1時間中選出一個時間進行搶劫,並計劃搶走
【opencv】Java實現的opencv3.x版本後Highhui報錯
-a sun div fan let 版本 ava line 報錯 隨筆為博主原創,如需轉載,請註明出處。 opencv3.x以後Highgui不再使用,用Imgcodecs代替,引入import org.opencv.imgcodecs.Imgcode
【前端】javascript實現導航欄筋鬥雲效果特效
超時 out die ron 滑動 scrip mouseover none point 實現效果: 實現效果如下圖所示 實現原理: 什麽是筋鬥雲效果: 這個效果很簡單,就是鼠標移到其他導航目錄時會有背景圖片跟著鼠標滑動到當前的目錄。 實現思路: 鼠標經過的時候
【前端】javascript實現帶有子菜單和控件的輪播圖slider
style creat radius .get abs weight col 技術分享 city 實現效果: 實現原理: // 步驟 // 1. 獲取事件源以及相關元素 // 2. 復制第一張圖片所在的li,添加到ul的最後面 // 3. 給ol添加li,ul中的個數-
【C#】C#實現事務
identity title ini body pro 簡單例子 ear scalar 技術分享 1、創建事務的結構 SqlConnection sqlConnection = new SqlConnection(); ...初始化連
【Android】如何實現Android發送短信
ted param close ase find array 短信 red phone 第一種:調用系統短信接口直接發送短信;主要代碼如下: /** * 直接調用短信接口發短信 * @param phoneNumber * @
【quickhybrid】如何實現一個Hybrid框架
釘釘 都是 不足 快速 view 環境 視野 swe 開發 章節目錄 【quickhybrid】如何實現一個跨平臺Hybrid框架 【quick hybrid】架構一個Hybrid框架 【quick hybrid】H5和Native交互原理 【quick hybrid】J
【模板】deque實現單調隊列
getch info 常數 單調隊列 har nbsp lse esp gin 雙端隊列deque容器: 關於deque最常用的有這幾個函數: 都是成員函數 雙端隊列模板題:【洛谷】P2952 [USACO09OPEN]牛線Cow Line 1 #in
【Nginx】 Nginx實現端口轉發
nbsp 都是 localhost ron tro ups server 搭建 div 什麽是端口轉發 當我們在服務器上搭建一個圖書以及一個電影的應用,其中圖書應用啟動了 8001 端口,電影應用啟動了 8002 端口。此時如果我們可以通過 localhost:80
【貪心】時空定位I
img display ide 選擇 vector ems 描述 code ++i 題目描述 張琪曼已經確定了李旭琳在一個長為20千米,寬為2千米的空間,她要在橫中心線上放置半徑為Ri的定位裝置,每個定位裝置的效果都會讓以它為中心的半徑為實數Ri(0<Ri<15
【轉】pymongo實現模糊查詢
python article 匹配 light net details regex 使用 模糊匹配 pymongo 模糊匹配查詢在mongo中這樣實現 {‘asr‘:/若琪/} 使用pymongo 兩種實現方式 1.import re
【Qt】QLabel實現的圓形圖像
不同 地址 ide qpixmap wro mask 描述 qpainter col 本篇只描述圓形圖像的兩種實現方式,動態陰影邊框如下: 目前實現的效果如下: 左右兩邊實現的方式不同: 右邊比較簡單 min-width: 100px; m
【tp5】tp5實現空模塊、空控制器、空操作的頁面404跳轉
die img not row header 分享 exc exce app 1、這裏只講tp5(5.0.18)的空模塊跳轉,空控制器和空操作官網有。 來個正確的空模塊處理吧: 首先找到think\App.php,備份,然後修改: 找到【throw new HttpExc
【java】簡單實現數據庫連接池
zed cal lean jdbc stat eof LEDE import thread 一直在想java事務是怎麽實現的,在原聲jdbc的時候級別下,我們可以通過關掉autocommit 然後再手動commit。但是項目開發中基本上是看不見conection的。所以自己
【轉】mysql實現隨機獲取幾條數據的方法
sele log rom net nbsp tab article .net sql sql語句有幾種寫法 1:SELECT * FROM tablename ORDER BY RAND() LIMIT 想要獲取的數據條數; 2:SELECT *FROM `table`
【轉】How can I get firmware version of a Qlogic HBA card?
https://access.redhat.com/solutions/36776 How can I get firmware version of a Qlogic HBA card? SOLUTION UNVERIFIED - 已更新 2017年八月25