匯編語言范文
時間:2023-03-29 22:10:42
導語:如何才能寫好一篇匯編語言,這就需要搜集整理更多的資料和文獻,歡迎閱讀由公務員之家整理的十篇范文,供你借鑒。
篇1
關鍵詞:加密算法DES匯編語言
目前在金融界及非金融界的保密通信中,越來越多地用到了DES算法。DES(DataEncryptionStandard)即數據加密算法,是IBM公司于1977年研究成功并公開發表的。隨著我國三金工程尤其是金卡工程的啟動,DES算法在POS、ATM、磁卡及智能卡(IC卡)中被廣泛應用,以此來實現關鍵數據的保密。如信用卡持卡人的PIN的加密傳輸、IC卡與POS間的雙向認證、金融交易中的密碼鍵盤等,均用到DES算法。由于密碼鍵盤不可能使用高級語言,所以用匯編語言實現DES就非常實用。
1DES算法的簡單原理
DES是一種分組密碼。假定明文m是由0和1組成的長度為64位的符號串,密鑰k也是64位的0、1符號串。
設:M=m1m2m3…m64
K=k1k2k3…k64
加密過程可表達如下:
DES(m)=IP-1·T16·T15…T2·T1·IP(m)
其中:IP(m)是初始置換,IP-1是逆置換,T16~T1是16次迭代。
(1)初始置換IP
功能是把輸入的明文m按位重新組合,并把輸出分為L0、R0兩部分,每部分各長32位,其置換規則如下:
58,50,42,34,26,18,10,2,
60,52,44,36,28,20,12,4,
62,54,46,38,30,22,14,6,
64,56,48,40,32,24,16,8,
57,49,41,33,25,17,9,1,
59,51,43,35,27,19,11,3,
61,53,45,37,29,21,13,5,
63,55,47,39,31,23,15,7
(2)逆置換IP-1
經過16次迭代運算后,得到L16、R16,將此作為輸入,進行逆置換。逆置換滿足:
IP·IP-1=IP-1·IP=I
逆置換正好是初始置換的逆運算。
(3)T16~T1的迭代計算
DES的迭代算法采用模2加法。
在通信網絡的兩端,雙方約定了一致的密鑰。在通信的源點用密鑰對核心數據進行加密并形成密文,然后,以密文的形式在公共通信網中傳輸到通信網絡的終點。數據到達終點后,用同樣的密鑰對密文數據進行解密,便再現了明文形式的核心數據。這樣,便保證了核心數據(如PIN、MAC等)在公共通信網中傳輸的安全性和可靠性。
2匯編語言的實現
用匯編語言實現DES算法有它的優勢也有它的難點。優勢是51匯編的位操作可以方便地實現置換功能。但用匯編語言實現算法的迭代運算及循環功能比較煩瑣。在用51匯編實現DES的過程中,我編寫了幾個子程序,組合起來可實現DES算法加密。在這里寫出一些思路,有需要的同行可與我聯系(E-mail:zhoubin@)。
8031有16個可以位尋址的寄存器,可放置128位的數據,利用它可實現DES的轉置功能。將明文m放入寄存器27H~20H中,即位地址00H對應m64,3FH對應m1。利用標志寄存器C可實現置換與逆置換程序。在DES的16次迭代過程中,要實現公式:
Li=Ri-1;Ri=Li-1f(Ri-1,ki)
的運算過程,其關鍵在于f(Ri-1,ki)的功能。f是將32位的輸入轉化為32位的輸出。其中含3項技術:
①將32位膨脹為48位的E功能。該項功能可用類似于置換功能的子程序編寫。
②48位子密鑰的生成。為了便于51匯編生成子密鑰,可以使用主機用串口下傳的方式,由主機將16個子密鑰傳給89C52為核心的單片機,然后存入80H~FFH中。如果密鑰是固定的,則可直接將子密鑰固化在89C52的Flash中。
③S盒的功能是將48位的輸入再次縮為32位。具體實現是將S盒表存入89C52的Flash中,每次通過查表求得S輸出的結果。
下面列舉其中的幾個子程序。
(1)IP置換子程序
;入口寄存器:(MSB)2726252423222120(LSB),出口寄存器:(MSB)2F2E2D2C2B2A2928(LSB)
;功能:將入口寄存器的數據按置換表換位。
IP:MOVC,06H;將m58送到進位標志中
MOV7FH,C;將進位標志送m1中
MOVC,0EH;將m50送到進位標志中
MOV7EH,C;將進位標志送m2中
;重復,按表編寫MOVC,31H;將m15送到進位標志中
MOV41H,C;將進位標志送m63中
MOVC,39H;將m7送到進位標志中
MOV40H,C;將進位標志送m64中
RET
(2)逆置換子程序
;入口寄存器:(MSB)2726252423222120(LSB),出口寄存器:(MSB)2F2E2D2C2B2A2928(LSB)
;功能:將入口寄存器的數據按逆置換表換位。
IPRVS:MOVC,18H;將m40送到進位標志中
MOV7FH,C;將進位標志送m1中
MOVC,38H
.
.
.
RET
(3)異或子程序
;入口寄存器:272625243F3E3D3C,出口寄存器:2B2A2928
;功能:將寄存器27262524的內容和寄存器3F3E3D3C的內容異或。結果保存在2B2A2928寄存器中。
XORLF:MOVA,3FH;將高8位異或
XRLA,27H
MOV2BH,A;放入出口處
MOVA,3EH
XRLA,26H
MOV2AH,A
MOVA,3DH
XRLA,25H
MOV29H,A
MOVA,3CH
XRLA,24H
MOV28H,A
RET
(4)S盒子程序
;入口寄存器:(MSB)2F2E2D2C2B2A2928,出口寄存器:(MSB)27262524
;功能:48位32位
S6TO4:MOV20h,2FH;取出高位數據
LCALLS162345;調用實現Si(b1b6,b2b3b4b5)
;的功能子程序
MOVDPTR,#S1TAB;S盒表的首址
MOVA,21H;取出第幾個S盒
LCALLDPTRADD
CLRA
MOVCA,@A+DPTR;求出S盒的表地址及S結果
SWAPA
MOV27H,A;保存高位結果
MOV20H,2EH
LCALLS162345
;重復
篇2
匯編語言與cpu有關。
匯編語言是專門為某一類CPU而設計的,所以匯編語言與CPU類型息息相關,當然至于型號卻是不一樣的。高級語言與CPU基本上是關系不是很大的,但完全沒有關系也不是那么一定的,比如C51就是專門為51單片機這類CPU而設計的高級語言。
匯編語言,即第二代計算機語言,用一些容易理解和記憶的字母,單詞來代替一個特定的指令,比如:用“ADD”代表數字邏輯上的加減,“MOV”代表數據傳遞等等,通過這種方法,人們很容易去閱讀已經完成的程序或者理解程序正在執行的功能,對現有程序的bug修復以及運營維護都變得更加簡單方便。
(來源:文章屋網 )
篇3
論文摘要:本文首先分析了當前匯編語言的教學現狀及實驗環節的重要作用,然后闡述了匯編語言實驗教學的設計思路,給出了較詳細具體的實驗內容安排。
1 匯編語言及其教學現狀
匯編語言是計算機能夠提供給用戶使用的最快而又最有效的語言,也是唯一能夠利用計算機所有硬件特性并能直接控制硬件的語言。對程序的空間和時間要求很高的場合,匯編語言的應用是必不可少的,至于很多需要直接控制硬件的操作場合則更是非用匯編語言不可。用匯編語言編寫的程序的執行速度通常比高級語言(如C/C++)快很多,甚至成百上千倍。相應的,匯編語言的缺點就是使用者需要對硬件有更深入的了解,編程效率不高。
“匯編語言程序設計”課程的任務是為“計算機組成原理”、“接口”、“操作系統”等后繼課程提供必要的基礎知識,它對訓練學生掌握與硬件相關的程序設計技術、從事自主版權計算機芯片和系統軟件的開發、信息安全、過程控制等方面,均有十分重要的作用。無論計算機技術如何發展,機器語言、匯編語言的計算機程序設計語言體系仍然是計算機技術的基礎,也是計算機技術的重要知識體系之一。不能了解和熟悉匯編語言,不僅將導致學生知識結構的缺乏,也可能導致學生認知水平的降低,開發手段的貧乏。
然而,初學者往往感到它難學、難懂、抽象,更難以掌握。教師開展教學困難,學生學習和掌握困難,教學效果差,以致會影響后繼課程的學習。
2 實驗環節在匯編語言教學中的作用
在計算機相關專業的教學領域,實驗和實訓教學是培養大學生學習能力、實踐能力、思考能力、創新能力的重要環節和有效途徑。顯然,學生在學習匯編語言這門課程中產生的困難,首先來自于他們對所學知識缺乏必要的感性認識,沒有充分的實驗。
計算機在很多方面不同于其他學科,尤其是與硬件有密切關系的課程。由于匯編語言課程具有硬件操作的密切相關性,實驗環節在整個教學活動中就占據了舉足輕重的地位.匯編語言的實驗對培養學生的動手能力和學習興趣,提高學生閱讀、編輯和調試程序的能力,有著不可替代的重要作用。學生通過實驗課深入了解CPU、存儲器、接口及外部設備的工作特性,對數據在計算機中的表達和傳送產生感性認識。在實驗中對匯編語言達到更好的理解、掌握,從感性認識上升到理論認識。
3 實驗教學的設計思路
由于各高校辦學類型不同、培養目標不同、所在地及周邊地區社會需求不同,計算機及其相關專業的教學內容也應有所不同。對于非研究型院校的相關專業,對“匯編語言”的教學可以集中在適度的理論知識和充分的操作實踐上。“適度”體現在理論課的講授中內容不必展開太寬,“充分”體現在實驗課的安排上要充分。
盡管學生學習匯編語言有著不少困難,但“興趣是最好的老師”,要激發學生的學習興趣。有了興趣,他就能積極地思考,大膽地探索,變被動接受為主動思考。因此,匯編語言的實驗教學總的思路就是要以激發學生興趣為主線,盡量設計趣味性的實驗內容,充分發揮學生的積極性和創造性。
很多學生不重視實驗課的主要原因之一是認為實驗課的好壞對學習成績影響不大,目前多數院校的學習成績評定,僅以期末一張考試卷的好壞而定,這使很多學生重理論、輕實驗。因此,應認真記載每個學生在實驗課上的實際操作能力和編程能力,并以優、良、中、差進行仔細考核,開學初就明確告訴學生這種考核制度的存在,使之開始就沒有怠慢的情緒,從思想上重視實驗。
實驗教學的安排按照由淺入深、循序漸進的方式進行,合理選擇實驗內容,盡量避免過多過雜,內容選擇注意舉一反三,即以啟發思維為主,對設計型、綜合型實驗只要能完成預定實驗目標,不苛求實驗過程與步驟的統一。實驗所演算的匯編語言程序應具備好的觀測效果,能直接體現計算機的操作特點,教師演示和學生實踐穿行,并且注意重復對比,讓學生發現自己操作的失誤,加深對匯編語言操作規律的理解。
實驗教師在實驗中主要起到引導的作用,實驗前的講解以重點、難點和注意事項為主,不應面面俱到,可以先給出一些問題,讓學生帶著問題去做、去觀察、去思考。實驗中,則應以學生為主體,讓每個同學通過操作行為感受計算機的物理過程,教師將理論揉在實例中的具體操作中,學生會感到數據是有形的,CPU的操作是物質化的。經過反復練習,學生不但學到了基礎知識,而且提高了綜合分析和理解能力。實驗中,還要鼓勵學生自己修改實驗,有時學生對自己編的程序沒有把握,一旦上機實驗后就清楚了。他在計算機上修改程序,觀察修改后的結果,實際上就是了解改動部分在整個程序中所起的作用,這種作用的認識和理解不是通過說教得來的,而是切身經歷的、看到的,學生對它的理解、記憶就要深刻得多。
4 實驗內容的具體安排
具體的實驗內容應覆蓋匯編語言教學中的各重要方面,內容涉及debug、匯編語言編程環境、匯編語言程序設計、輸入輸出與中斷、Win32匯編、匯編語言與C語言的混合編程等。類型分為選作和必做。每個實驗分屬驗證型、設計型或綜合型。
4.1 穩扎穩打練好基本功:debug和編程環境
“萬事開頭難”。對匯編語言的學習,能否開好頭很關鍵,很多學生就是因為開始沒學好,感覺跟不上,就不再認真地學習了,有的甚至放棄了。其實匯編語言實驗開始的基礎部分是比較簡單的,想掌握它是沒什么大問題的。
匯編語言源程序通常以ASCII文本文件的形式保存,通過匯編鏈接形成一個EXE可執行文件。對EXE文件的調試構成了實驗課的主體內容,貫穿始終,而EXE文件的調試通常是通過debug實現的。學生通過使用debug可以觀察到存儲器的數據存儲情況,也可以隨時觀察到CPU中寄存器的數據變化。debug的反匯編命令是理解匯編語言的助記符形態和機器指令的01碼形態的對應關系的重要工具,學生可以通過它深入體會匯編語言中指令的構成及各部分含義。debug提供的單步執行命令是另一個重要工具,利用t單步執行一條指令,及時觀察數據緩沖區的變化情況,這也是進行調試、發現程序錯誤的最直接有效的方法。
debug的實驗部分以使用a、t、r、d、u等命令為主反復進行指令練習。學生通過使用debug觀察到指令執行前后機器中數據的變化,對深入理解計算機的工作原理、匯編指令的作用是直接的和不可替代的。學生不再感到機器是復雜的,指令是抽象的。
接下來安排的實驗則是對匯編語言編程環境的熟悉和掌握,這也是重要的一環。對編程環境不熟悉,不僅會影響學習匯編語言的效率,還會引起一些不必要的錯誤發生。因此可以考慮多給幾個簡單完整的程序,讓學生多去 使用編程環境,熟悉匯編鏈接過程。實驗初,只給一些正確的程序,讓學生經過匯編鏈接可以較容易地形成exe文件并成功執行,看到了正確的結果,學生就有了方向,也就有信心去做下面的實驗了。
在熟悉了簡單的編譯過程之后,接下來可以在原有程序中適當安排一兩個錯誤,讓學生觀察匯編鏈接中出現的錯誤信息,理解這些錯誤發生的原因,這一點對程序調試是至關重要的,如果看不懂錯誤信息,就沒有辦法正確定位錯誤,也談不上修正錯誤了。
以上分析,學習匯編語言伊始,一定要練好基本功,包括對debug的熟練使用,對編程環境的熟悉。這部分實驗一定要安排得充分,力求使學生不再對機器望而生畏,不再對匯編指令有抽象難懂的感覺,如果能開好這個頭,后繼的學習就順利得多了。
4.2 輕輕松松做改變:匯編語言程序設計
由于學習匯編語言之前,學生通常已經學習過一門程序設計語言,因此這部分實驗可安排簡單、典型的驗證型、設計型實驗,以編寫程序為主。先要求學生用之前學過的程序設計語言實現,然后再給出匯編語言的實現,通過對比;學生自然可以發現匯編語言與其他程序設計語言的異同。當程序出現錯誤時,則必須要求學生使用debug進行調試,觀察變化,排除錯誤,加強程序調試能力。
4.3 細心耐心學核心:輸入輸出與中斷
中斷是學習匯編語言的重點加難點部分,能否真正掌握匯編語言也在于此,中斷也是匯編語言的魅力所在。這部分實驗一定要找一些學生感興趣的、具有明顯觀測效果的例子,至少安排兩個階段的實驗。第一階段以驗證型實驗為主,先使學生熟悉中斷過程、中斷處理程序的框架;第二階段以設計型實驗為主,讓學生自己去思考中斷過程中發生的事情,中斷程序設計的方法。對這部分知識的傳授一定要有耐心,對每個程序的講解要透徹、概念清晰。中斷是真正要用的東西,之前學習的內容只是為它做鋪墊,不能學好中斷,匯編語言這門課的真諦就沒有學到。
4.4 興趣延伸:WIn32匯編、匯編語言與C語言混合編程
很多學生學習匯編語言之初就會問匯編語言用在哪里,很少接觸到匯編語言等問題,其實現在匯編語言很少單獨使用,而Win32匯編、匯編語言與C語言的混合編程用的比較多,這兩部分內容學起來并不難,可當作拓展知識部分,作為自學內容。教師可以找一些實際使用這部分內容的例子,讓學生知道匯編語言的用途,使學生不再“學而不用”,“學而不知用”。
篇4
關鍵詞:匯編語言;實驗教學;模仿法;演示法
中圖分類號:G642 文獻標識碼:B
1引言
匯編語言是所有程序設計語言中最原始的語言,它與機器語言最為接近,簡言之,匯編語言是符號化的機器語言,通過匯編語言可以直接訪問計算機的硬件,如果要深入了解計算機的工作原理和底層細節,就必須學習匯編語言。著名的計算機科學家Donald Knuth堅持推崇匯編語言,并且曾經說過“我堅持認為除非你了解了各種底層細節,否則根本不可能為態度認真的程序員寫書。”①匯編語言的地位是任何高級語言都無法取代的。因此,匯編語言程序設計成為計算機專業的必修課程。
然而匯編語言程序設計課程的教學普遍存在諸多問題,已經引起了廣大教師的研究與關注,如考文獻中的[1][2][3][4][5]等。就目前看來,匯編語言教學大多不能體現“以學生為本”的教學理念,主要表現在對實驗教學的重視程度不夠。匯編語言程序設計是實踐性很強的一門課程,學生只有在程序設計的實踐中才能真正掌握。所以我們認為匯編語言教學應該“老師少講課、學生多動手”,也就是要充分重視實驗環節,讓學生唱主角,改變傳統的以課堂講授為主的教學模式。
為此,本文進行匯編語言實驗教學的研究與探索。下面分別從實驗安排、教學方法和考核方式三個方面介紹作者在多年的匯編語言實驗教學中的體會。
2精心安排實驗
2.1學時安排
目前國內高校的匯編語言程序設計課程大多是基于Intel 8086/8088微處理器的②,總學時一般在60學時左右,實驗課學時一般占總學時的1/4到1/3。我們認為60個總學時是比較合理的,但是實驗課學時遠遠不夠。事實上,對于任何一種程序設計語言來說,不需要教師講解太多的內容,關鍵是讓學生多動手。我們認為匯編語言的理論課學時和實驗課學時各占總學時的1/2是比較合理的。
2.2實驗內容安排
匯編語言的實驗課內容應該包括但不限于:
(1) 調試工具DEBUG的使用:匯編語言程序的調試要比高級語言程序的調試困難得多,熟練使用DEBUG是匯編語言程序設計的基本技能。
(2) 匯編語言程序設計的上機過程:匯編語言程序的編輯、匯編、連接、運行和調試是匯編語言實驗的必備知識。此外,學生還應當懂得在此過程中所產生的各種文件(.obj、.lst、.crf和.exe等)的用途。
(3) 基本程序結構設計:任何復雜的程序都是由三種基本結構(順序結構、分支結構和循環結構)組成的,因此,基本程序結構設計訓練是編寫復雜程序的基礎,是匯編語言實驗不可缺少的內容。
(4) 子程序設計:所謂子程序,相當于C語言中的函數。子程序是結構化程序的基本組成,子程序設計是開發大型程序的基礎,對于培養編程能力十分重要。
(5) 中斷調用:操作系統和BIOS(Basic Input Output System)以中斷調用的方式為程序員提供了一組功能強大的程序庫,屏蔽了復雜的硬件細節,從而極大程度地減輕了程序員的負擔。而且,不理解中斷系統就不能理解計算機的工作原理。因而學習中斷調用是匯編語言實驗課的必要內容。
此外,中斷服務程序的編寫和匯編語言程序與高級語言程序的連接等內容也應該讓學生有所了解;在實驗學時允許的前提下,也可以安排一個綜合性實驗。
3選擇合適的教學方法
對于實驗課,只布置任務、讓學生自己做實驗的方法并不可取,因為其結果往往是只有少數學生能夠達到實驗要求,而大多數的學生收獲很小,甚至有的把實驗課用來玩游戲了。所以,實驗課應該有專門的任課教師。當然,從培養學生的創新能力的角度講,應該盡可能地讓學生獨立完成任務,但是創新能力的培養有賴于足夠的基礎知識和基本技能。我們認為匯編語言實驗課應該以基礎知識和基本技能的學習為主,適當地關注創新能力的培養,在照顧到大多數學生的前提下,給創新能力強的學生提供獨立發展的空間。要做好這一點,我們認為有兩種十分有效的教學方法:演示法和模仿法。
3.1演示法
在實驗課上,我們經常發現有許多學生向老師問同一個問題,如果一一解答,不但使任課教師十分疲憊,而且嚴重浪費了資源和時間。對于這些共性的問題,可以通過投影儀向學生演示解決問題的辦法,所以在實驗室中安裝投影儀將為實驗教學帶來極大的方便,目前大多數高校具備這樣的硬件條件。特別是對于調試工具DEBUG的使用和匯編語言程序設計的上機過程的學習尤為有效。初學者對于程序的編輯、匯編、連接、改錯和調試過程往往不知所措,如果老師從頭到尾演示整個過程、讓學生一步一步地跟著操作,就能極大地提高學習效率。一次簡單的演示往往要勝過千言萬語的解釋。
3.2模仿法
程序設計對于大多數的初學者來說有一定的難度。對于給定的一個實驗題目,許多學生往往感到無從下手。事實上,老師可以把一些經典的程序提供給學生,例如怎樣實現分支結構、怎樣實現循環結構、怎樣使用系統調用、怎樣編寫子程序、怎樣編寫中斷處理程序等,讓學生在讀懂之后模仿著編程。模仿的程序多了,編程也就熟練了。通過一段時間的經驗積累,就能夠編寫比較復雜的和具有創造性的程序,正所謂“熟能生巧”。我們在教學中發現這種模仿的方法十分有效。當然要特別注意的是,不能把模仿變成抄襲。
3.3對比法
一般說來,在學習匯編語言之前都要學習C語言。匯編語言與C語言的學習是相輔相成的。老師應該通過對比的方法向學生指出匯編語言與C語言之間的千絲萬縷的聯系。例如,一塊數據區的開始地址為BASE,要尋找的操作數相對于開始地址的偏移量為SI,我們發現幾乎所有的學生會把這個操作數寫成[BASE+SI],而不會寫成BASE[SI],因為第一種寫法更直觀,而第二種寫法令人費解。然而,如果教學生把BASE看成C語言里的數組、把SI看成下標,那么學生就會恍然大悟了。通過對比教學法,能夠使學生更深入地理解高級語言中的數據類型、變量、函數、數組、指針等概念的理解,同時也必將大大促進匯編語言的學習。
4改革考核方式
因為“匯編語言程序設計”是實踐性很強的一門課程,所以實驗課成績應該在總成績中占有相當大的比重。我們認為以閉卷考試成績為主要依據的考核方式是不合適的,甚至可以取消考試、以實驗課成績為主,如果要考,也應該是開卷的。然而由于許多現實困難,目前大多數高校的匯編語言課程的實驗課成績只占很小的比重,這也是學生不重視實驗課的重要原因之一。提高實驗課成績所占比重的主要困難在于學生多、抄襲成風、老師負擔重、實驗條件有限、考核的主觀性太強等。盡管面臨諸多困難,我們認為實驗課成績應該占到總成績的1/2。老師可以根據學生的實驗表現按五級分制(優、良、中、及格、不及格)或二級分制(通過、不通過)考核。為了減輕教師的負擔,可以只針對一個綜合性實驗(而不是所有的實驗)加以考核。
5結束語
本文根據作者多年的教學體會,對匯編語言實驗教學進行了深入的思考。從“以學生為本”的教學理念出發,根據匯編語言程序設計課程所具有的實踐性強的特點,提出“老師少講課、學生多動手”的教學模式,主張提高實驗課學時和實驗課成績的比重,重視實驗教學,并從實驗內容、教學方法和考核方式三個方面介紹了作者的想法。然而由于學生過多、資源有限、我國高等教育長期投入不足和體制缺陷等許多現實困難,匯編語言實驗教學的改革依然任重道遠。
參考文獻:
[1] 張全福. 匯編語言程序設計實驗教學改革與探索[J]. 教學研究,2005,28(6):545-546.
[2] 周代英,楊曉霞. 匯編語言課程教學方法改革探索[J]. 中國科教創新導刊,2008(6):55-56.
[3] 吳媛,茹慶云,楊富超. 匯編語言程序設計的教學研究[J]. 中國科技信息,2005(14):215.
篇5
為了實現創新人才培養的目標,將研究性教學模式引入匯編語言程序設計教學中,對教學方法、教學組織形式及考核方法等進行了改革,改善了教學效果,提高了教學質量。
【關鍵詞】
匯編語言程序設計;研究性教學模式;創新人才培養
1《匯編語言程序設計》課程現狀及存在問題
《匯編語言程序設計》是計算機專業的專業基礎課,是一門實踐性很強的課程。以往老師講授這門課程時,主要以“老師講、學生聽”的形式進行的,這樣不助于學生理解指令的執行過程,往往導致學生在上機調試時無從下手,更談不上綜合程序的設計。這種僵化的教與學的模式必須進行改革,才能達到創新人才培養的目標。
2教學改革思路:
如果要提高教學質量,達到預期的教學效果,關鍵要改革教師的教學方法和學生的學習方式,即教師從傳統的講授灌入式向探究式轉變,學生從傳統的被動接受向主動接受、探究發現和研究性學習轉變,達到培養學生主動發現問題、分析問題、創造性地解決問題的能力[1]。這就需要重新定位教師主導地位和學生主體地位的關系,采用以"學生為主體,教師為主導"的新教學理念。結合匯編語言程序設計課程的特點,緊緊圍繞“深入理解機器工作的基本原理、培養底層編程意識和思想”和提高學生綜合運用所學知識的能力兩個核心目標,通過對教學方法及考核方式等進行改革,從而提高教學質量。
3教學方法及教學手段的改革
1.啟發式教學:課程的講授過程中,采用啟發式教學方法,有意識地引導學生思考,將計算機的硬件工作過程深入課中,使得學生對語言的執行過程有更深入的理解。例如,在講解存儲器的分段時,可以將CPU與存儲器的數據訪問講解一下,這樣學生就能理解為什么要進行分段處理。2.項目驅動教學:匯編語言程序設計是一門實踐性很強的課程,老師根據課程目標,設置3個難度適中的綜合訓練項目,貫穿整個教學過程中。學生在課余時間,通過檢索資料、團隊合作、綜合分析,尋找解決問題的方案,最終提交程序代碼及方案報告。“項目”教學是以學生為中心,老師為組織者和引導者,在項目的實現過程中,不但使學生加深對知識的系統理解,而且也了解了與知識相關的前沿熱點問題,從而培養大學生自主學習能力、探究問題能力、協作能力、適應和創新能力等。3.隨堂實踐:學生上課可以自帶筆記本,在知識點的講解過程中,老師要充分利用多媒體教學環境中的計算機系統,對于程序實例可課堂調試演示,在機器上可隨堂編寫小程序現場運行,和學生一起進行調試的過程中,打破匯編語言的神秘感,消除學生對匯編語言難以掌握的恐懼心理,使同學們更直觀、更快理解和掌握相關知識,激發學生對新知識和新技術的求知欲,提高教學質量。
4教學組織過程
課堂的前幾分鐘進行提問,掌握學生的知識點掌握情況,并督促學生搞好復習與預習;在知識擴展環節中,老師布置知識擴展點及要求,學生自主查閱資料并整理資料,增強學生查閱、整理和總結資料的能力,進而鍛煉學生自主學習的能力;訓練項目的實施以項目組的形式進行,即5~6名學生為1個項目組,并選其中一個學生擔任組長,組長組織成員開展討論和交流,但每個學生都獨立完成項目的設計、實驗和項目報告;項目的實施主要采取“課外為主、課內為輔”的方式。即學生領取任務后,通過課余時間進行資料查閱、討論、答疑、編程和調試,以及完成項目報告書等。每個項目布置時,老師要進行概要的講解,讓學生了解項目的整體思路及接下來應該怎樣解決,然后多安排幾次答疑輔導時間,學生帶著自己的疑問與老師交流,師生一起找到解決問題的辦法,這也提高了項目的完成質量;答辯時要求以組為單位,在規定的時間范圍內,做完的組可以找老師答辯,答辯時學生帶著電腦可以進行現場調試,根據功能實現及答辯情況給予答辯分,對平時負責本組程序講解的同學答辯成績有加分;由組長組織,進行討論,鍛煉學生的表達能力,增加學生的知識儲備;每周安排一次答疑,這樣可以及時了解學生知識點的掌握情況,有助于老師課堂內容的安排,同時也有助于師生交流,提高教學質量。
5考核方式
以課程結束時的考試作為評定學生的依據是很不科學的,要改變傳統的學生學業評價中“一考定全局”終結式評價模式[2]。學生的評價應該是能夠不斷的指導學生、鼓勵學生、完善其學習方法,增加學生的應用能力,進而實現人才的培養目標。在課程考核中,我們采取以下的考核辦法:期末總成績由考試成績(50分)、綜合訓練成績(40分)、平時成績(10分)三部分組成。總成績中加重了學生對所學知識綜合應用能力的比重,同時也注重對學生學習過程的評價。
6結束語
本文將研究性教學模式引入《匯編語言程序設計》課程教學中,打破了傳統的教學理念,經過兩輪教學實踐,教學效果較以往有明顯的提高。
參考文獻:
[1]羅克露.研究性教學模式的探討[J].計算機教育
篇6
關鍵詞:匯編語言;C語言;混合編程
匯編語言的優勢就是速度快,占用存儲空間不大,而且可以隨時控制硬件,這些優點是其它的程序語言無法取代的。匯編語言也有不足之處,就是在高級程序的編寫與調試時存在著較大的困難,特別是在處理一些數據或者一些混合運算時顯得更加困難。
C語言,它的優勢就是在于功能全面,表達形式多樣且靈活,開發使用效率很高,具有其它高級語言無法具有的優勢。通常在軟件開發過程中,大部分程序采用高級語言編寫,以提高程序的開發效率;但在要求執行速度快、占用空間少或要求直接控制硬件的場合,則利用匯編語言編寫,以提高程序的運行效率。
1.匯編語言和C語言混合編程的方法
C語言和匯編語言混合編程的具體方法有以下幾種。
2.1 參數傳遞
匯編語言程序和C語言程序在調用時會涉及到參數傳遞,一般采用堆棧進行傳遞。在匯編語言中將BP作為基址寄存器,調用程序先將來自于C語言程序中的參數依次壓入堆棧中,然后當需要使用這些參數時,再用BP加上不同的偏移量依次對堆棧中的數據進行存取操作。
2.2 調用關系的確定
對于將要涉及到調用的過程或函數需要事先說明和建立調用與被調用關系。被調用的過程或函數應預先說明為外部類型,以便被外部模塊引用,而調用程序也需要在程序中說明將要引用的外部模塊的名稱。在說明調用關系時還應根據不同的存儲模式確定相應的匯編語言格式。C程序小模式對應匯編程序的近類型過程,而C程序大模式則對應匯 編程序的遠類型過程。
總而言之,匯編語言和C語言的混合編程方法可以使匯編語言與C語言之間取長補短,充分發揮各自優勢,相互交叉調用,進行參數傳遞,共享數據信息和數據結構,使由此開發的軟件更實用、更安全可靠,使開發和編程工作達到事半功倍的效果。
參考文獻:
[1] 羅南超,向昌成,李唐輝. 匯編語言實現多種進制的通用輸入輸出[J]電腦知識與技術, 2008,(36) .
[2] 崔衛東. VC++與匯編語言混合編程的研究與實現[J]福建電腦, 2007,(05) .
[3] 宋金華. 匯編語言和C語言在圖形處理中的綜合應用[J]湖北廣播電視大學學報, 2010,(12) .
篇7
關鍵詞:計算機;匯編語言;系統控制;應用研究
中圖分類號:TP313 文獻標識碼:A 文章編號:1007-9599 (2012) 11-0000-02
匯編語言是一種面向機器的特殊程序設計語言,計算機匯編語言是指通過匯編語言程序設計實現計算機的硬件系統控制的指令的一種程序構成。利用計算機匯編語言進行編程設計,不僅可以有效提高工作效率,還可以節省程序空間,實現最大利用。本文將主要對計算機匯編語言的相關理論及其在實踐中的具體應用進行研究分析。
一、計算機匯編語言的概念
在計算機的系統操作過程中,主要是通過計算機硬件設備對計算機的軟件發出工作命令完成的。計算機匯編語言是通過匯編語言程序的設計,來操控計算機的某一程序系統,從而實現匯編語言程序對計算機的控制。計算機匯編語言的這一操作控制過程也正好符合計算機主機中中央處理器的工作原理和工作結構。控制命令是由控制編碼與操作數構成,操作數的處理功能和中央處理器能夠擁有的功能是由控制編碼來控制實現,中央處理器是控制命令得以執行的根本,操作數能夠為中央處理器執行控制命令提供處理對象。
中央處理器執行系統所發出的控制命令,從而的實現命令完成。中央處理器實現這一過程主要依據其強大的功能和結構特性。在計算機的中央處理器中,中央處理器的控制器部分首先對其它系統所發出的控制信息中的操作碼進行編譯、執行等工作,然后再通過已經接收、編譯的信息,發出控制命令,從而幫助整個計算機系統完成運行工作;中央處理器的運算器部分則是實行對控制器所接收到的數據信息進行高速運算功能;另外,中央處理器中還有一個寄存器的部分,主要是用來儲存數據的,寄存器的功能不同,在處理數據和執行命令時所發揮出的作用也就不同。
在計算機的實際應用中,匯編語言在對計算機軟、硬件的操控和工作效率上的優點是其它編程語言不能夠實現的。在通過計算機硬件設施來控制計算機的軟件系統上,很多時候都只有匯編語言可以滿足;在利用匯編語言進行編程來完成工作目標上,匯編語言不僅能夠快速的完成工作目標,而且整個目標程序的設置也是最簡短的,在空間和時間上都具有無可比擬的優越性。這里可以通過一個對比顯現出來,假設現在通過匯編語言和不是采用匯編語言的兩種方法來計算目標程序,通過兩個操作運算過程就可以明顯看出,不采用語言匯編計算方法的計算過程,在運算中不僅花費的時間要遠遠高于運用匯編語言來計算的方法,而且冗雜繁蕪的計算過程占用了計算機的大部分空間,而運用語言匯編計算方法的計算過程只占用了一少部分空間,孰優孰劣,結果不言而喻。
二、匯編語言與高級語言、DELPHI語言、C語言的結合運用
(一)匯編語言與高級語言的結合運用
在計算機的實際程序應用中,一般程序員在進行程序編寫時大部分是運用高級語言來完成,而在整個程序的重要部分,或者說在實際中運行要求高、運行次數又較多而且可以直接與計算機硬件設施相關聯的部分,其程序的編寫都是運用匯編語言來實現的。采取以上的方法,是因為在實際操作中雖然匯編語言擁有工作速度快,工作效率高,占用空間小的優勢,但它同時也要求對計算機內存裝置有相當的熟悉度,在進行程序編制和讀寫時也存在有一定的難度,在計算機程序編寫的實踐應用中有一定的不便利性;而高級語言除了占用計算機存放空間比較多,程序編寫的代碼較長使計算機運行速度較慢外,高級語言本身也存在有豐富的函數和數據信息、齊全的運算符、可移植性好、易讀易寫等優點。這樣將匯編語言與高級語言結合在一起運用到計算機程序編寫實踐中,不僅可以取長補短實現優勢互補,提高工作效率,還節省了計算機的空間占有量。
另外,在計算機程序編寫的實踐應用中,匯編語言除了與高級語言可以相互結合使用實現優勢互補外,匯編語言和DELPHI語言、C語言之間也可以結合使用,以實現計算機程序編寫過程的最大高效便利化。
(二)匯編語言與DELPHI語言的結合運用
匯編語言與DELPHI語言在進行計算機程序編寫是相互結合使用,主要是在DELPHI語言編寫的程序中運用一定的數據信息將DELPHI語言程序融入到匯編語言編寫程序中去,實現兩種語言程序相互結合。
匯編語言編寫程序與DELPHI語言編寫程序之間在進行參數信息的相互傳達時,可以由DELPHI語言編寫程序向匯編語言程序進行傳遞,也可以由匯編語言程序向DELPHI語言編寫程序進行傳遞。
DELPHI語言編寫程序向匯編語言程序進行參數傳遞時,首先在DELPHI語言編寫程序選出匯編語言程序中或者編寫過程中的正確參數信息,然后在對這些參數信息進行匯編過程中直接運用其變量參數數據,其中存在的所運用變量參數之間語法不相同情況是由于變量參數在被傳送的過程中,相互傳遞數據信息其實是地址。
匯編語言程序向DELPHI語言編寫程序進行參數傳遞時,對匯編語言程序中的固定數據信息參數的傳遞有一定的特殊要求,匯編語言程序向DELPHI語言編寫程序的參數傳遞過程則是運用指針的方式進行數據值的傳遞的。
(三)匯編語言與DELPHI語言的結合運用
篇8
【關鍵詞】匯編語言程序設計 現狀 問題 改革
隨著我國國際化的發展進程越來越快,我國對高等院校教育水平的重視度也越來越高。為了加快接軌國際高等教育的進程,在近幾年中,我國對教育事業的投入力度不斷加強,提高了對學生實際動手能力以及創新能力的培養力度。《匯編語言程序設計》課程教學是高校計算機、通信、電子以及自動化等相關專業課程中的基礎課程,對學生在學習過程中的創新能力以及實踐能力的提高有一定的促進作用。另外,在對教師對問題進行研究的過程中,對提高其相應的科研水平以及意識也有一定的積極影響。
一、《匯編語言程序設計》課程教學的現狀以及存在的問題
1.相應的教材內容單一陳舊,無法激發學生的學習興趣
《匯編語言程序設計》課程在我國所有高等院校相關計算機專業的課程中都占有重要地位,然而隨著時代的飛速發展,計算機的相關配置也得到了相應的發展。在《匯編語言程序設計》教學中,其硬件教學中有些相關教材內容與計算機的發展現狀不相符,存在一定程度的滯后性。在某些新開發的匯編得到廣泛使用的時候,大多數學校的相關專業的匯編語言教材依舊還停留在以前的版本中,跟不上實際的發展進程。
2.沒有明確的教學目的,對課程重要性認識不足
《匯編語言程序設計》課程教學是高校計算機、通信、電子以及自動化等相關專業課程中的基礎課程,對學生在學習過程中的創新能力以及實踐能力的提高有一定的促進作用。在對《匯編語言程序設計》課程的學習過程中,大多時候得不到學生以及教師重視,對其學習的重要性認識不足。而且,大多數老師在對這門課程進行教學的過程中,受到相應教學的課時以及大綱限制,在課堂教學過程中過于偏重對具體指令的相關應用以及功能的講解,從而缺少了對各個課程之間的特點串聯。這樣的問題導致教師在教學過程中,對學生的學習興趣不能充分的調動,從而導致學生對正確的學習方法不能很好的掌握。
3.教學方法偏差,教學手段存在缺陷
在對《匯編語言程序設計》課程進行教學的過程中,其在相應的教學方法上存在一定程度的偏差,從而導致一些編程中非法指令經常性出現。而且,教師在對這門課程進行教學的過程中,教學手段太過單一,在教學過程中主要就通過多媒體對課堂內容進行講解。在教學過程中對多媒體的運用雖然存在直觀生動以及信息量大等相關優勢,但其也在一定程度上使學生產生了學習惰性。
二、對《匯編語言程序設計》課程教學中相應的問題進行改革
1.加強對課程重要性的認識
在對《匯編語言程序設計》課程進行教學之前,對其相應的重要性進行講解,從而使學生對匯編語言的具體特點進行充分掌握,對匯編語言相較于高級語言的具體優勢進行具體明確,使學生對其在應用領域中必要性有充分的了解。在對《匯編語言程序設計》課程進行學習的過程中,要注意對其實用性的具體教學,使學生能夠做到對具體知識的學以致用,注重對教學內容相關知識點的訓練和拓展。另外,教師在教學過程中,還要注重對學生知識面的拓寬,從而使學生在對匯編語言的學習興趣得到相應的提高。
2.采用多樣化教學,提高學生學習興趣
在對《匯編語言程序設計》課程進行學習的過程中,想要對相應的指令進行掌握,就要對其相關的尋址方式進行具體的理解和掌握。在對匯編語言進行教學的過程中,由于其相較高級語言而言,沒有足夠的易讀性,不容易學生的理解,所以,在教學的時候要掌握多樣化的教學方法以及教學手段,從而使學生在對其進行學習的過程中的學習興趣得到最大的提高,培養學生學習的自主性,使其對匯編語言的相關知識的理解和記憶更容易清晰地掌握。
3.增加實踐環節,提高學生具體的實踐能力
在對《匯編語言程序設計》課程進行學習的過程中,對學生具體動手實踐課程進行加強,使學生在具體實踐的過程中對教材上的知識點進行具體的理解和掌握。在實際動手過程中學習實踐理論,使實踐與理論達到很好的結合,從而提升學生的學習效果。其中,在實踐的過程中,教師要注意對具體實驗內容的控制,對實驗的重點著重突出,避免實驗的時間太過漫長。除此之外,還要注意積極引導學生多多參與相關實踐項目,在一定程度上為他們提供一些參與實際研究項目的機會。
三、結束語
綜上所述,隨著時代的飛速發展,我國對高等院校教育水平的重視度也越來越高,計算機的相關配置也得到了相應的發展。《匯編語言程序設計》課程作為計算機、通信、電子以及自動化等相關專業課程中的基礎課程,其硬件教學中有些相關教材內容與計算機的發展現狀不相符,存在一定程度的滯后性。為了提高學生在學習過程中的創新性以及實際動手能力,對《匯編語言程序設計》教學課程的教學效果進行相應的提高和改善,從而使學生在學習的過程中對其課程中相應的知識內容進行更清晰精準的掌握。
參考文獻:
[1]陳燕俐,許建.“匯編語言程序設計”課程教學改革探索 [J].中國電力教育,2012,10(04):193-194.
[2]李黎.《匯編語言程序設計》課程教學改革探究 [J].產業與科技論壇,2013,15(08):197-198.
[3]陶雪麗,郭鳳英.匯編語言程序設計課程教學改革與實踐 [J].中國教育技術裝備,2012,25(01):192-193.
篇9
關鍵詞:整合; 微機原理與接口技術; 匯編語言
1.前 言
《微型計算機原理及應用》與《匯編語言程序設計》是計算機應用專業的兩門較重要的基礎課程,是軟件專業的必修專業課。它是后繼計算機語言課、操作系統、數據庫原理等課程的基礎,也是教學難度和學習難度較大的兩門課程。原來的兩門課程雖側重點不同,但有些內容也有重復現象,況且兩者有密切聯系,如果分開開設,則不能使學生對計算機的組成框架及系統語言有總體的認識,教學效果也不好。這對本來就難學的《匯編語言》與《微機原理與接口技術》的老師和學生無疑都是一個挑戰。面對這種困難, 結合著我們對學生的接受能力以及認知規律的了解, 我們嘗試將這兩門課程整合為一門《匯編語言與接口技術》, 將它們放在一起可減少兩門課程的為數不少的重復內容, 從整體上看學生的課時減少了, 可是對這兩門課的學習時間卻沒有減少, 使教學更加方便, 而且學生的學習效果也會有所提高。我們從以下幾方面論述了這項課程改革的必要性。
1.1我校課時壓縮迫使課程改革.
[1]好多高校都在加大課程整合的力度, 減少課程總學分, 拓寬基礎, 加強通識教育。在這種趨勢下,《匯編語言程序設計》的課時不斷被壓縮。課時減少后, 教師既要介紹復雜的指令系統, 又要介紹程序結構, 難免會顧此失彼。通常學生學習結束后, 還不明白這門語言的用途, 并且容易產生厭學情緒, 對后續課程《微機原理與接口技術》產生畏懼心理。從內容上看《匯編語言程序設計》和《微機原理與接口技術》都對計算機的組成與工作原理、匯編語言源程序的基本構成以及與外部設備的接口問題進行了講述, 有很多相連之處。因此, 將這兩門課程合并, 優化兩課內容, 有利于整個教學計劃的安排, 也有利于教學。
2.合理安排匯編語言與微機原理與接口技術的課程內容.
《微型計算機原理及應用》與《匯編語言程序設計》有好多知識點是重疊的,《匯編語言程序設計》中的內容主要是微處理器的結構、8086指令系統和匯編語言程序設計,《微型計算機原理及應用》把這些知識點都包含進去。 (如表 1 所示)
[2]將兩門課程合二為一勢必要對教學內容進行壓縮, 那么選擇什么樣的教學內容較為合適呢? 我們采用的教材是《微機原理、匯編語言與接口技術》該書通過80286、80386、80486、Pentium和Itanium(安騰)微處理器和IBM PC機的硬件和軟件分析以及總線技術,闡明微型計算機的組成原理以存儲器、輸入輸出接口芯片與微型計算機的接口方法。同時還包括匯編語言程序設計和接口技術兩部分內容。匯編語言程序設計是微機應用系統的系統軟件和應用軟件的設計基礎,接口技術是微機應用系統硬件組成的基礎。該書內容較全面,實例豐富。學習微型計算機的匯編語言程序設計和接口技術必須理論聯系實際。該書在介紹基本概念的同時,列舉了大量典型而有意義的例題和習題。更加注重實驗環節。
[3]這門課程實踐環節尤為重要,實驗是實踐環節的一個重要組成部分。可以提前幾周把實驗題目布置下去,讓學生充分準備。一般我們對實驗的要求是:硬件原理圖、流程圖、調試成功的匯編語言程序。從我們實驗課堂來看學生都很重視,而且大家對實驗的興趣也非常濃厚,都能積極地參與到實驗中去。通過實驗的實戰練兵,可以進一步鞏固所學理論知識,使學生對微機原理系統有了系統的認識,通過實驗,使學生對這門課從理論到實踐跨出了關鍵性的一步。這是一個升華的過程,是一個質的飛躍,為學生今后的畢業設計乃至將來的工作打下了良好的基礎。
3.考試方法.
按照教改計劃確定的培養目標和對學生在知識與能力等方面的要求,教師在給學生期末總成績時,本著重平時、輕期末,既注重課堂教學又重視實踐教學的原則進行考核。考核辦法:平時成績+期末試卷成績=總成績。平時成績:作業+課堂表現+實驗(20分),共計30分;期末試卷成績:70分,加大平時的考核力度,作業和課堂表現可以側重于知識的掌握,實驗和期末成績既有知識的掌握、知識的運用、又有綜合性和創造性。這種方式,可以促進學生時時注重學習,有利于學風和考風的好轉,可以杜絕僅憑期末一次考試就一錘定音的方式。
4.結束語.
通過計算機專業課程的整合,開拓了整體教學的新視野,同時也給我們許多新的啟示,給教學工作增添了活力。課程優化是我們教改工作的具體體現,今后,我們還需進一步研究與探討課程整合的新思路,以培養出更優秀人才。
參考文獻:
[1]許穎梅. 對匯編語言和微機原理課程整合的探討[J]. 福建電腦,2007.01.
篇10
數據傳輸通信中,常常因傳輸差錯造成誤碼錯碼,尤其在無線通信中,空中的突發或隨機干擾噪聲會造成編碼差錯。為了提高傳輸的正確率,往往采用一些校驗方法,以檢驗糾正傳輸差錯。通信中校驗的方法很多,其中的BCH編碼有其獨特的優點:不僅可以檢糾突發差錯,還能檢糾隨機差錯,被廣泛地采用在微機級的通信中。但對更低層的單片機級的數據傳輸通信糾錯,往往采用奇偶校驗等簡單的校驗方法。BCH校驗因其算法復雜,尤其是動態實時的無線通信中,單片機的通信往往無法采用BCH解碼檢糾。
筆者近幾年在工業測控和無線通信系統開發,摸索了BCH解碼檢糾在實時的、動態的、單片機級的通信中的算法,并取得十分突出的效果。以下以BCH(31:21)碼為例進行探討。
1 BCH碼結構
BCH碼是一種檢糾能力較強的循環碼。它由信息多項式M(X)和校驗多項式J(X)組成,如以T(X)表示整個BCH(31:21)碼字的31位碼組多項式,則:
T(X)=M(X)+J(X) (1)
在31位BCH碼的后面再加上1位,以保證整個碼字32位中“1”的個數為偶數。該位稱偶校驗位。這樣就形成BCH(31:21)加1位偶校驗位的標準碼字,其結構為:
其中校驗多項式J(X)由公式(2)計算:
X0X1……X20X21……X30X31T(X)J(X)偶校驗位J(X)=M(X)/S(X) (2)
式中S(X)是BCH(31:21)碼的生成多項式,見式(3):
生成多項式S(X)的值在BCH(31:21)碼的值是固定的。
BCH碼是一種循環碼,循環碼是利用除法來糾錯的。由于任一碼組多項式T(X)都能被生成多項式S(X)整除,所以在接收端可以將接收碼組R(X)用S(X)去除。若在傳輸中未發生錯誤,接收碼與發送碼相同,即R(X)=T(X),故接收碼組R(X)必定能被生成多項式S(X)整除;若碼組在傳輸中發生錯誤,即R(X)≠T(X),R(X)被S(X)除時,可能除不盡而有余項Y(X),因此,可根據余項是否為零來判斷碼中有無錯誤(檢錯),如有余項,通過一定的運算就可以確定錯誤位置,從而加以糾正(糾錯)。
這里R(X)被S(X)除,是32位被11除,這在非實時靜態的微機級實現非常簡單;但在實時的、動態的、單片機級的通信中實現要快速巧妙的算法才能實現,否則,現有的碼未檢錯及糾錯完畢,下一個碼已經到了。因為動態中位和位的時距t往往只有幾十μs,以9.6b/s的短信為例,t=104μs。在這104μs中要完成檢錯、定位和糾錯三個算法程序,才是一個完整的解碼檢糾過程。
2 檢錯
根據上述原理,檢錯過程也就是求算R(X)被S(X)除的余項Y(X)的過程,如余項Y(X)=0,則R(X)=T(X),傳輸無差錯;如余項Y(X)≠0,則R(X)≠T(X),檢出傳輸差錯。
在算法語言中,所有的運算總歸于二種運算:加和減。這是電子計算機的二進制基本電路特性所決定的,也是匯編語言唯一的算術運算方法。為此,這里把除法用模二加法再加右移位實現。
已知:S(X)=11101101001
R(X)=r3r4r5r6 (ri為8位寄存器)
調用下面的模二加法右移子程序,得到R(X)/S(X)的余項Y(X)=r3r4。
;32位/16位模二加法右移子程序
m2add:mov r7,#00
m2ddgx:mov a,r3
xrl a,#0edh ;S(x)的高位=oed(h)
mov r3a
mov a,r4
cpl acc.5 ;S(x)的低3位=001(b)
mov r4,a
mov a,r3
acc7e10:jb acc.7m2addgx ;R(x)的最高位為“0”,則R(x)右移
mov a,r6
rlc a
mov r6,a
mov a,r5
rlc a
mov r5,a
mov a,r4
rlc a
mov r4,a
mov a,r3
rlc a
mov r3,a
mov r7
cjne r7,#10h,acc7e10 ;右移總次數為16次
ret
余項Y(X)的高8位在r3寄存器中,低3位在r4的高3位。
3 定位
如果Y(X)=r3r4≠0,表示接收到的碼組R(X)有差錯,下一步則由Y(X)的值推算差錯在R(X)中的位置。
理論上要找出R(X)中差錯的位置,必須計算出差錯校驗子C(X)。在實踐中,校驗子C(X)的計算不僅費時間,而且多位檢糾還需多個校驗子C(X)。為此,經過幾年的實踐,把Y(X)(即r3r4)直接作為綜合校驗子,通過快速查表找到差錯位置。查找程序的大小和檢糾差錯位數有關,這里以檢糾4位差錯為例,說明定位糾錯的方法。
;4位差錯位址查找子程序
bitposi:mov b,0 ;對R(X)高位至低位的移動計數
mov r2,#1fh ;設表格長度
bto a: mov a,b
inc b
acall tabsub ;調用表格子程序,讀入表格值
clr c
subb a,r3 ;Y(X)中的r3 和表格值比較
jnz binc1 :不相等,轉出
mov a,b ;相等,繼續
acall tabsub
clr
subb a,r4 ;Y(X)中的r4和表格值比較
jnz r2decl:不相等,轉出
setb f0 ;相等,置標志位返回
ret
bincl:inc b
r2decl:djnz r2,btoa
ret ;表格查畢,沒有相等的值,不置標志位返回
從查找子程序返回的B寄存器的值,即為差錯在R(X)中從高位到低位的位數值。
;4位差錯表格子程序
tabsub:inc a
movc a,@a+pc;將相對位置的表格送入a寄存器
ret
db 0ebh ;表格開始,長度為查找子程序中
db 00 ;r2寄存器的預置值
db 76h
.
.
.
4 糾錯
找到了差錯在R(X)位置,就可以糾錯了。