匯編語言與接口技術實驗_第1頁
匯編語言與接口技術實驗_第2頁
匯編語言與接口技術實驗_第3頁
匯編語言與接口技術實驗_第4頁
匯編語言與接口技術實驗_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

匯編語言與接口技術實驗課件第1頁,課件共79頁,創(chuàng)作于2023年2月匯編語言調(diào)試環(huán)境使用說明

利用Editplus和匯編相關軟件建立起基于Windows-XP平臺的匯編語言集成調(diào)試環(huán)境,對我們學習匯編語言、開發(fā)匯編軟件將十分方便,它將我們學習匯編程序時的編輯、編譯、調(diào)試等工具集成于一體。一、Editplus的安裝和必要設置:

1、將壓縮軟件“EDITPLUS.RAR”解壓到c:\EDitPLUS目錄下

2、用鼠標點擊圖標:

安裝EDITPLUS到C:\EDITPLUS目錄下。

3、用鼠標點擊圖標:

完成注冊碼的輸入。

4、將壓縮軟件“MASM615.RAR”解壓到c:\EDitPLUS目錄下,即完成安裝。

5、用鼠標雙擊桌面上的圖標:

或選

開始

程序

EDITPLUS

EDITPLUS2,出現(xiàn)如下界面:第2頁,課件共79頁,創(chuàng)作于2023年2月文件夾下的源程序列表(匯編程序文件的后綴為ASM或SRC)選擇用戶編程文件夾用戶程序編輯區(qū)輸出窗口文件列表中文件名后綴第3頁,課件共79頁,創(chuàng)作于2023年2月每個窗口的大小可由鼠標進行縮放輸出窗口可由鼠標控制進行縮放,其他窗口同樣第4頁,課件共79頁,創(chuàng)作于2023年2月安裝Editplus主要菜單的設置第一次安裝Editplus必須進行必要的設置第5頁,課件共79頁,創(chuàng)作于2023年2月首先對“文件”中的“設置與語法”規(guī)則進行設置匯編程序文件名的后綴一般為“asm”或“src”為“匯編語言”添加文件類型第6頁,課件共79頁,創(chuàng)作于2023年2月其次對“文件”中的“模板”進行設置為“匯編語言”添加模板匯編語言模板的文件名第7頁,課件共79頁,創(chuàng)作于2023年2月設置用戶工具用戶工具應添加:編譯(匯編)工具調(diào)試工具幫助文件(可選)請記?。壕幾g(匯編)工具的參數(shù)設置第8頁,課件共79頁,創(chuàng)作于2023年2月請記?。赫{(diào)試工具的參數(shù)設置第9頁,課件共79頁,創(chuàng)作于2023年2月幫助文件根據(jù)需要顆可選第10頁,課件共79頁,創(chuàng)作于2023年2月以上設置完成后關閉Editplus,重新啟動Editplus,即可以對匯編語言程序進行編輯、編譯、調(diào)試及運行第11頁,課件共79頁,創(chuàng)作于2023年2月從源程序列表中打開要編輯、調(diào)試的文件第12頁,課件共79頁,創(chuàng)作于2023年2月主要菜單的使用對源程序的編譯和連接對目標程序的調(diào)試幫助文件第13頁,課件共79頁,創(chuàng)作于2023年2月源程序調(diào)試軟件的使用

源程序窗口寄存器窗口命令行窗口第14頁,課件共79頁,創(chuàng)作于2023年2月源程序調(diào)試工具常用命令介紹窗口介紹:源程序調(diào)試工具的窗口共有十個:

0.HelpALT+01.LocalsALT+12.WatchALT+23.Source1ALT+3(★★★★★)

4.Source2ALT+45.Memory1ALT+5(★★★

6.Memory2ALT+67.RegisterALT+7(★★★★★)

8.8087ALT+89.CommandALT+9(★★★★★)用鼠標點擊Windows菜單可看到這10個窗口,要打開某個窗口,用鼠標選擇對應項即可。激活窗口:將鼠標移動到當前窗口并點擊鼠標左鍵,此時該窗口邊框變亮,表明當前窗口被激活。移動窗口:將鼠標放在被激活窗口左邊框線或上邊框線上,并按住鼠標左鍵移動鼠標,則可移動當前窗口的位置。關閉窗口:將鼠標放在被激活窗口的左上方邊框“?”處,單擊鼠標左鍵則關閉當前窗口。第15頁,課件共79頁,創(chuàng)作于2023年2月功能鍵:F2:寄存器窗口的開/關F3:在源程序方式和匯編方式之間切換F4:切換到輸出屏幕F5:執(zhí)行到下一個斷點或到程序結束(沒斷點)F6:激活各調(diào)試窗口F7:在光標所在行設置一個臨時斷點,并執(zhí)行到該行F8:執(zhí)行跟蹤命令F9:在光標所在行設置或清除一個斷點(雙擊鼠標左鍵功能相同)F10:執(zhí)行ProgramStep命令PgUp:上卷一頁PgDn:下卷一頁Home:上卷到文件或命令緩沖區(qū)頂部End:下卷到文件或命令緩沖區(qū)底部命令行常用命令的使用:T:相當于F8

P:相當于F10G:相當于F5

D[type]:顯示內(nèi)存內(nèi)容E[type]:修改內(nèi)存內(nèi)容R[寄存器名]:顯示并修改寄存器內(nèi)容Q:退出調(diào)試工具第16頁,課件共79頁,創(chuàng)作于2023年2月實驗一

BCD碼的運算

一.實驗目的

1.熟悉在Ediplus集成環(huán)境下編輯、編譯、調(diào)試編語言程序的全過程。

2.掌握匯編語言程序結構中數(shù)據(jù)段、堆棧段、代碼段定義及內(nèi)存分配方法。

3.學會源程序調(diào)試工具主要命令的使用方法。

4.掌握用組合BCD碼表示數(shù)據(jù)的方法,并熟悉其加、減、乘、除運算。二.實驗內(nèi)容

1.多位十進制數(shù)加法。

2.兩位十進制數(shù)乘法。三.實驗要求

1.多位十進制數(shù)加法:在內(nèi)存中以DATA1和DATA2為首址,各分配5個字節(jié)單元,分別存入兩個8位組合BCD碼數(shù)據(jù)(低位在前),將兩數(shù)相加,結果送回到DATA2處。

2.兩位十進制數(shù)乘法:將被乘數(shù)和乘數(shù)以組合BCD碼形式分別存放于DATA1和DATA2定義的字節(jié)單元中,經(jīng)乘法運算,乘積存入DATA3定義的兩個內(nèi)存單元中。

3.用匯編調(diào)試工具查看運算結果,進行手工驗證;并且用匯編調(diào)試工具中的相關修改DATA1和DATA2,并重新執(zhí)行。第17頁,課件共79頁,創(chuàng)作于2023年2月關于BCD碼擴充知識Intel助記符使用術語“ASCII”

稱作不壓縮的BCD碼,而使用“十進制數(shù)”則稱為壓縮BCD碼。不壓縮的BCD碼不壓縮的BCD碼由在每一個字節(jié)的低四位包含一個十進制數(shù)字的字節(jié)組成,Intel系列處理器提供了調(diào)整不壓縮值的四種算術操作指令:加法操作后調(diào)整———AAA;AsciiAdjustforAddition減法操作后調(diào)整———AAS;AsciiAdjustforSubtraction乘法操作后調(diào)整———AAM;AsciiAdjustforMultiply除法操作后調(diào)整———AAD;AsciiAdjustforDivision壓縮的BCD碼壓縮的BCD碼由包含兩個十進制數(shù)字的字節(jié)組成:一個在高四位,另一個在低四位,Intel系列處理器提供了對進行加和運算的壓縮BCD數(shù)調(diào)整指令:加法操作后調(diào)整———DAA;DecimalAdjustforAddition減法操作后調(diào)整———DAS;DecimalAdjustforSubtraction今天實驗所講的“BCD碼的運算”是指壓縮BCD碼的運算。搞清計算機中壓縮BCD碼、十六進制碼的概念舉例:在內(nèi)存中定義了兩個數(shù)據(jù),分別為data1=78H、data2=78H,其中data1為組合的BCD碼,data2為16進制數(shù),則有:

data1的十進制、十六進制為:78(十進制),4EH(十六進制)

data2的十進制、十六進制為:120(十進制),78H(十六進制)第18頁,課件共79頁,創(chuàng)作于2023年2月多位十進制數(shù)加法

.modelsmall.datadata1db11h,22h,33h,44h,00hdata2db99h,88h,77h,66h,00h.code.startupmovsi,offsetdata1;設指針

movdi,offsetdata2 clc ;清進位

movcx,5 ;設加法次數(shù)lop: moval,[si] ;取第一加數(shù)

adcal,[di] ;取第二加數(shù)

daa ;十進制調(diào)整

mov[di],al;結果存入指定單元

incsi ;指針加1incdi looplop ;循環(huán)

.exitend

流程圖:開始SIData1首址DIData2首址清進位設加法次數(shù)十進制調(diào)整;部分和回送指向下單元數(shù)AL第一加數(shù)ALAL+第二加數(shù)CX-1=0?結束YN第19頁,課件共79頁,創(chuàng)作于2023年2月兩位十進制數(shù)乘法:如34*56=?

編程思路:1.把56循環(huán)疊加34次;每疊加一次進行一次BCD

碼的加法調(diào)整;

2.34為組合的BCD碼,在計算機中的存放形式

為:00110100b

3.必須將組合BCD碼34H轉換成十六進制才可進

行循環(huán)疊加:

34H(BCD碼)

30H+4

30H/10H*0AH+4

34(d)

22H

第20頁,課件共79頁,創(chuàng)作于2023年2月兩位十進制數(shù)乘法流程圖:開始BL第一乘數(shù)BH第一乘數(shù)分離出第一乘數(shù)的“個位”分離出第一乘數(shù)的“十位”第一乘數(shù)的“十位”移到“個位”后,再乘10合成得到16進制的第一乘數(shù)CX16進制的第一乘數(shù)BCD碼轉換成16進制數(shù)11AX0清進位BL第二乘數(shù)第二乘數(shù)做加法次數(shù)十進制調(diào)整AL與AH內(nèi)容交換ALAL+0+CFALAL+BLAL與AH內(nèi)容交換十進制調(diào)整CX-1=0?NY存儲結果結束第21頁,課件共79頁,創(chuàng)作于2023年2月

一、實驗目的

掌握循環(huán)結構程序的設計、調(diào)試。二、實驗內(nèi)容1.多字節(jié)無符號數(shù)加法。2.設計一軟件延時器,并在屏幕上顯示軟件延時倒計時及正計時過程。3.試編寫一個程序,延時大約1秒,在屏幕上按99、98、97、96、……、00的順序顯示倒計時的全過程。(可選作)

實驗三循環(huán)結構程序第22頁,課件共79頁,創(chuàng)作于2023年2月三、實驗要求1.多字節(jié)無符號加法:在DATAS中存放10個雙字節(jié)無符號數(shù),用循環(huán)結構設計程序,通過程序運算,把這10個雙字節(jié)無符號數(shù)相加,其和存入RESULT定義的四個字節(jié)單元當中,要求用16位寄存器完成編程(范例為用32寄存器實現(xiàn))。2.設計一軟件延時器,并在屏幕上顯示16進制(F—0)倒計時及正計時及(0—F)過程。(范例:做一延時約1秒的軟件延時器,在屏幕上按9、8、…0順序顯示軟件延時倒計時過程。)對于“學號”為奇數(shù)的同學在計算機屏幕上的顯示如圖1所示。對于“學號”為偶數(shù)的同學在計算機屏幕上的顯示如圖2所示。3.可參考實驗2的編程完成編程。FEDCBA98765432100123456789ABCDEF0FEDCBA9876A5B4C3D2E1F0圖1圖2第23頁,課件共79頁,創(chuàng)作于2023年2月補充知識:關于循環(huán)語句的高級語法目前的MASM中引入了一系列的偽指令,涉及條件測試、分支和循環(huán)語句,有了它們,匯編語言有了和高級語言一樣的結構。關于循環(huán)語句的偽指令有:

.while條件測試表達式指令

[.break[.if退出.while條件]][.continue].endw;-----------------------------------.repeat

指令

[.break[.if退出.while條件]][.continue].until條件測試表達式(或.untilcxz[條件測試表達式])第24頁,課件共79頁,創(chuàng)作于2023年2月通過今天的實驗應順便掌握子程(過程)序的編寫及調(diào)用子程序結構:

procedure_namePROC[距離][USES寄存器列表]LOCAL局部變量列表

·

·

匯編語言指令

·RET;子程序的返回

procedure_nameENDP

;子程序的結束距離:NEAR,FAR,NEAR16,NEAR32,FAR16,FAR32。缺省為NEAR

USES寄存器列表:由編譯器在子程序指令開始前自動安排PUSH這些寄存器的指令,并在RET前自動安排POP指令,用于保護執(zhí)行環(huán)境。注意在子程序中也可用80386以后的指令PUSHA、POPA、PUSHAD、POPAD也十分方便。

LOCAL局部變量列表:局部變量列表必須放到子程序中所有匯編語句的最前面。常用的局部變量類型有:byte、word、dword等。

}第25頁,課件共79頁,創(chuàng)作于2023年2月擴充知識關于空操作(NOP)指令空操作(NOP)是所有指令中最簡單的,正如它的名字所暗示的那樣:無論在情況下它什么也不操作。NOP不影響標志、寄存器及存儲單元,它僅僅讓指令指針(IP)增加。

NOP有許多用途,如,在你不想重新匯編程序而刪除一條指令時,可以用90H(NOP)來填充相應的單元;又如我們本實驗所用到的,在你要測試程序的最后一條指令后加入一條NOP指令,然后在此設置一條斷點,以次方便用戶程序的調(diào)試。當然隨著編程水平的提高,還有其他用途,這里不做深入講解。了解DOS下的系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用:系統(tǒng)功能調(diào)用是DOS為方便匯編語言編寫而提供的一組約80個功能調(diào)用的常用子程序,它分為設備管理、文件管理和目錄管理等幾類。DOS規(guī)定用軟中斷指令INT21H進入各功能調(diào)用子程序的總入口,再為每個功能調(diào)用規(guī)定一個功能號,以便進入相應各用子程序的入口。系統(tǒng)功能調(diào)用的使用方法:指定的寄存器入口參數(shù)AH調(diào)用功能的功能號INT21H第26頁,課件共79頁,創(chuàng)作于2023年2月EX1:從鍵盤輸入單字符

MOVAH,01H;1號功能調(diào)用

INT21H將鍵盤輸入字符的ASCII碼送到AL。EX2:從鍵盤輸入字符串

BUFDB10DUP(?)

LEADX,BUFMOVAH,0AH;0A號功能調(diào)用

INT21H將鍵盤輸入的字符串寫到RAM中去,擊回車鍵表示字符串結束。字符數(shù)與予留空間的關系為:少補零多丟失。EX3:輸出單字符

MOVDL,’M’MOVAH,02H;2號功能調(diào)用

INT21H將DL中字符從屏幕上顯示出來。EX4:輸出字符串

BUFDB‘Thankyou$’

MOVDX,OFFSETBUFMOVAH,09H;9號功能調(diào)用

INT21H將指定RAM緩沖區(qū)中的字符串從屏幕上顯示出來。‘$’為字符串結束符。EX5:直接控制臺輸入/輸出單字符

MOVDL,0FFH;DL=0FFH時,

MOVAH,06H;6號功能調(diào)用

INT21H;將鍵盤輸入字符送到AL中。

MOVDL,’M’;DL≠0FFH時,

MOVAH,06H;6號功能調(diào)用

INT21H;將DL中字符送到屏幕上顯示?!?7頁,課件共79頁,創(chuàng)作于2023年2月多字節(jié)無符號數(shù)加法

.MODELSMALL.586.DATADATASDW1111H,2222H,3333H,4444H,5555HDW6666H,7777H,8888H,9999H,0AAAAHRESULTDD?.CODE.STARTUPMOVSI,OFFSETDATAS ;設指針

MOVCX,10 ;累加次數(shù)

MOVEAX,0 ;清累加器

CLC

;清進位LOP:MOVBX,[SI]

;取加數(shù)到BX

MOVZXEBX,BX ;將BX擴展成32位

ADCEAX,EBX ;帶進位加

INCSI ;改指針

INCSI

LOOPLOP ;循環(huán)加

MOVRESULT,EAX ;存結果

.EXIT

END開始SIDATAS的首址CX累加次數(shù)EAX0清進位BXSI所指加數(shù)將BX擴展為32位EAXEAX+EBX+CFSI指向下一加數(shù)CX-1=0?NY存結果

結束第28頁,課件共79頁,創(chuàng)作于2023年2月軟件延時器.modelsmall.datamydatadb10dup(20h)numdb39h,0dh,0ah,'$'.code.startup movcx,0ah ;設循環(huán)次數(shù)lop: movah,09h ;顯示功能調(diào)用

leadx,mydata int21h callnearptrdelay;調(diào)用延時子程序

decnum ;修改顯示數(shù)字

looplopnop .exitnopDelayprocnearusescx;延時子程序

movbx,06ffh;設第二時常數(shù)Delay1:movcx,0h loop$ ;自身循環(huán)CX次

decbx ;第二時常數(shù)減1 jnzdelay1 ;不為零循環(huán)

retDelayendpend開始CX循環(huán)次數(shù)字符串顯示功能調(diào)用延時子程序調(diào)用顯示數(shù)字修改CX-1=0?NY結束主程序流程:延時子程序流程:延時子程序定義BX第二時常數(shù)CX第一時常數(shù)CX-1=0?NYBX-1BX=0?NY子程序返回子程序結束關鍵詞第29頁,課件共79頁,創(chuàng)作于2023年2月實驗四

排序程序

一.實驗目的

1.學習無符號數(shù)比較大小指令;

2.掌握多重循環(huán)編程方法;

3.掌握匯編語言編寫排序程序的思路和方法。二.實驗內(nèi)容

1.單字節(jié)無符號數(shù)排序。

2.去極值濾波。三.實驗要求

1.單字節(jié)無符號數(shù)排序:在DATANUM單元存放雙字節(jié)無符號數(shù),表示要排序數(shù)據(jù)的個數(shù),而從DATAS單元開始存放要排序的單字節(jié)無符號數(shù)據(jù),數(shù)據(jù)個數(shù)至少10個。程序運行之后,這些數(shù)據(jù)按照由大到小的順序仍然存放于DATAS單元開始的單元。

2.去極值濾波:某控制系統(tǒng)為了抗干擾,采用去極值濾波法處理采集數(shù)據(jù),取連續(xù)6個A/D采樣值(12位——雙字節(jié),低12位),要求去掉最大值和最小值,將余下4個數(shù)求平均值,用該平均值代表當前時刻系統(tǒng)狀態(tài)的真值。試編一程序完成這個濾波過程。第30頁,課件共79頁,創(chuàng)作于2023年2月單字節(jié)無符號數(shù)排序流程圖:開始數(shù)據(jù)指針SI置0累加器前數(shù)

前數(shù)與后數(shù)比較前數(shù)≤后數(shù)?前、后數(shù)交換數(shù)據(jù)指針SI指向下一數(shù)YNCX-1=0?NYYBX-1=0?N結束CXBXBX數(shù)據(jù)個數(shù)-1第31頁,課件共79頁,創(chuàng)作于2023年2月.modelsmall.datadatanumdw10datasdb21h,13h,4h,5h,7h,6h,0F9h,20h,9h,11h.code.startupmovbx,datanum;取數(shù)據(jù)的個數(shù)到BXdecbx;BX-1為循環(huán)次數(shù)lop0:movcx,bx;設內(nèi)循環(huán)次數(shù)movsi,0;設置尋址的偏移量SI=0lop: moval,datas[si];取一個數(shù)Acmpal,datas[si+1];取下一個數(shù)B,比較A和Bjbejh;若A≤B,轉到JHxchgal,datas[si+1];若A>B,交換A,Bmovdatas[si],aljh:incsi;偏移量SI+1looplop;CX-1≠0,繼續(xù)內(nèi)循環(huán)decbx;CX-1=0,內(nèi)循環(huán)結束,外循環(huán)次數(shù)BX-1jnzlop0;BX≠0,繼續(xù)外循環(huán).exit;BX=0,排序結束end

第32頁,課件共79頁,創(chuàng)作于2023年2月去極值濾波注意與前面程序排序筆筒的地方:此排序為字的排序(16位),所以比較為16位數(shù)據(jù)比較,指針的移動為兩個字節(jié)。開始調(diào)排序子程序?qū)?shù)據(jù)進行排序?qū)ε磐晷虻臄?shù)據(jù)掐頭去尾求和求均值保存結果結束第33頁,課件共79頁,創(chuàng)作于2023年2月.modelsmall.586.datadatanumdb6datas dw0123h,0abch,0234hdw0345h,0456h,0567h.code .startup callpx ;排序

movsi,offsetdatas+2;掐頭去尾送指針

movcx,4 ;送累加次數(shù)

clc ;清進位

movax,0 ;取首數(shù)qh: adcax,[si] ;累加

incsi incsi loopqh shrax,2;除4 mov[datas],ax;存結果到DATAS首位

nop.exitnoppx procnearmovbl,datanum;取字長

decblmovbh,0lop0:movcx,bx ;送比較次數(shù)

movsi,0lop: movax,datas[si];送前數(shù)

cmpax,datas[si+2];與后數(shù)比較

jbejh;若大于則跳轉到jhxchgax,datas[si+2];交換

movdatas[si],axjh:incsi incsilooplopnext:decbl;修改比較次數(shù)

jzfinish jmplop0finish:nop;結束

ret pxendpend第34頁,課件共79頁,創(chuàng)作于2023年2月實驗五分支程序一、實驗目的掌握分支程序編程方法,復雜分支程序的查表法等。二、實驗內(nèi)容

1、

學生課程成績分段統(tǒng)計。

2、

鍵盤及屏幕顯示功能調(diào)用。三、實驗要求

1、

學生課程成績分段統(tǒng)計:用一個字節(jié)表示每個學生的學號,另一個字節(jié)存放壓縮BCD碼,表示學生的課程成績(最低0分,最高99分),規(guī)定當課程成績?yōu)?F0H表示作弊,當課程成績?yōu)?F1H表示缺考,當學生的學號為0FFH時表示學生成績統(tǒng)計的結束符。學生成績在內(nèi)存的存放形式為“學號,成績”,每個學生占兩個字節(jié),從內(nèi)存SCORE為首址開始存放。要求學生人數(shù)不少于10個,試編程序,按0~9、10~19、20~29、……、80~89、90~99及作弊、缺考等12種情況把學生的課程成績進行分段統(tǒng)計,將統(tǒng)計結果存入以COUNT為首址的12個單元中。

2、試編一程序掃描鍵盤,當B鍵按下時,在屏幕上顯示0~9循環(huán)計數(shù);S鍵按下時停止計數(shù);再按B鍵繼續(xù)計數(shù)過程。E鍵按下時退出程序。

3、定義三個字節(jié)的正數(shù)(A、B、C),判斷是否能構成三角形,如能,則顯示“Yes!”,不能,則“No!”。(要構成三角形,必須滿足兩邊之和大于第三邊,即:B+C>A或A+C>B或A+B>C)*定義三組字節(jié)的正數(shù)(A1、B1、C1),(A2、B2、C2),(A3、B3、C3),請編程序判斷這三組數(shù)據(jù)能否構成三個三角形,將三組數(shù)據(jù)判斷的結果用“Yes!”或“No!”顯示出來,用來表示能否構成三角形。

4、用DEBUG調(diào)試程序預置數(shù)據(jù)和查看程序運行結果,以驗證程序正確性。

第35頁,課件共79頁,創(chuàng)作于2023年2月分支程序常由比較指令(CMP)和條件轉移指令共同實現(xiàn)。

條件轉移分帶符號轉移和不帶符號轉移。

轉移指令的記憶技巧:

字母含義

J轉移

G大于(帶符號比較)

L小于(帶符號比較)

A高于(無符號比較)

B低于(無符號比較)

E等于

N不

應注意的問題:

條件轉移的跳轉范圍為:+128~

-127。

選擇合適的轉移指令,否則不能轉移到一定的程序分支,特別要注意區(qū)分有符號數(shù)和無符號數(shù)的使用條件。

要為每個分支安排的出口,否則導致程序運行混亂。

在分支較多時,編程時各個分支的先后次序應與流程圖一致,以減少編程出錯的機會并便于檢查。

在調(diào)試分支程序時,要假設各種可能的輸入數(shù)據(jù),并沿每個分支走一邊,以檢查程序的正確性。

第36頁,課件共79頁,創(chuàng)作于2023年2月學生課程成績分段統(tǒng)計開始設置學號、成績指針取學號取成績是結束標志?取十分位,并將十分值擴展為16位送DI,對DI所指統(tǒng)計區(qū)段統(tǒng)計值加1是作弊?是缺考?修改指針CX-1=0?CX統(tǒng)計上限作弊統(tǒng)計區(qū)段統(tǒng)計值加1缺考統(tǒng)計區(qū)段統(tǒng)計值加1結束YYYYNNNN第37頁,課件共79頁,創(chuàng)作于2023年2月

.modelsmall.586.datascoredb1,10h,2,20h,3,30h,4,40h,5,50h,6,77h,7,70h db8,80h,9,90h,10h,08,11h,0f0h,12h,0f1h,0ffhcountdb12dup(?).code.startupmovcx,20 ;送統(tǒng)計上限

movsi,0 ;SCORE統(tǒng)計指針statistic:moval,score[si];取學號

cmpal,0ffh;判是否為結束

jesta_end ;轉統(tǒng)計結束

movbl,score[si+1];取成績

cmpbl,0f0h ;是否作弊

jefake ;是,轉作弊處理

cmpbl,0f1h ;是否缺考

jemiss ;是,轉缺考處理

shrbl,4 ;取十分位

movzxdi,bl;將十分值擴展為16位送DIinccount[di];相應區(qū)段統(tǒng)計值加1down:incsi;改指針

incsiloopstatistic ;循環(huán)sta_end:nop ;結束

.exitfake:inccount[10] ;作弊處理

jmpdown miss:inccount[11] ;缺考處理

jmpdown end第38頁,課件共79頁,創(chuàng)作于2023年2月鍵盤及屏幕顯示功能調(diào)用開始顯示提示信息置處理指針為“停止”調(diào)延時、鍵盤掃描程序有鍵動?轉處理指針處B鍵?S鍵?E鍵?轉處理指針處結束置處理指針為“計數(shù)”置處理指針為“停止”NYYYYNNN處理指針為“計數(shù)”處理指針為“停止”計數(shù)顯示第39頁,課件共79頁,創(chuàng)作于2023年2月延時、鍵盤掃描程序子程序定義BX第二時常數(shù)CX第一時常數(shù)CX-1=0?NYBX-1BX=0?NY子程序返回監(jiān)測鍵動有鍵動?做鍵動標志bx=1NY第40頁,課件共79頁,創(chuàng)作于2023年2月.modelsmall.dataMess1db'pressbbutton---count',0dh,0ahmess2db'presssbutton---stop',0dh,0ahMess3db'pressebutton---exit',0dh,0ah,'$'countdb20h,20h,20h,20h,20h,30h,0dh,'$'.code.startup movah,09h ;顯示提示信息

movdx,offsetmess1 int21h leasi,stop ;設處理指針scan:callnearptrdelay;調(diào)延時、鍵掃程序

orbx,bx ;判有無鍵動

jnzscan1 ;有鍵動,轉鍵處理

jmpsi ;無鍵動,轉當前處理程序scan1:cmpal,'b‘;鍵處理程序

jeb_proc cmpal,'s' jes_proc cmpal,'e' jee_proc calldelay jmpsib_proc:leasi,count_ ;B鍵處理

jmpscans_proc:leasi,stop ;S鍵處理

jmpscane_proc:nop ;E鍵處理

nop.exitcount_:inccount+5 ;修改顯示數(shù)字

moval,3ah ;比較超限

cmpal,count+5 jadown ;若不超限,調(diào)顯示

movcount+5,30h ;超限,設啟始值down:movah,09h ;顯示功能調(diào)用

leadx,count int21h jmpscanstop:jmpscan nopDelayprocnearusescx ;延時子程序

movbx,380h ;設第二時常數(shù)delay1:movcx,0h loop$ ;自身循環(huán)CX次

movdl,0ffh ;監(jiān)測鍵動

movah,06h int21h jnzkey_ret;若有鍵動,延時終止,轉鍵處理

decbx ;第二時常數(shù)減1 jnzdelay1 ;不為零循環(huán)

jmpdelay_retkey_ret:movbx,1 ;做鍵動標志delay_ret:retDelay endpend第41頁,課件共79頁,創(chuàng)作于2023年2月硬件實驗部分本部分共進行3次實驗,實驗內(nèi)容如下:1實驗六

并行接口技術實驗

2實驗七8254定時/計數(shù)器實驗3實驗九

A/D轉換實驗

(下面根據(jù)實驗臺實物介紹實驗臺)第42頁,課件共79頁,創(chuàng)作于2023年2月特別說明:為了方便實驗,實驗臺設計時已將除片選信號線(CS)外的所有相關總線全部連好,并在每一個實驗電路附近予留有實驗內(nèi)容要求的連線插孔。實驗時只要將相應插孔用單股導線對應相連即可組成完整的實驗電路。在給出的實驗電路圖中,線路所帶小圓圈即表示連線插孔。硬件實驗注意事項:1.在實驗臺確保斷電的條件下,方可連接電路;2.線路連接完成、檢查確認沒有錯誤后,再開通實驗臺電源;3.用單股導線連接電路時,要將單股導線線頭整直,并確認線頭沒有斷裂,以防單股導線端頭斷裂在插孔內(nèi),影響下次試驗的進行;4.實驗完成后,首先關斷實驗臺電源,再用手捏住導線的根部,一根一根拔出,并把導線整好放入實驗箱右邊的線盒內(nèi)并蓋好實驗箱才可離開。5.實驗報告必須畫出原理框圖,并概述其工作原理。第43頁,課件共79頁,創(chuàng)作于2023年2月實驗六

并行接口技術實驗

一.實驗目的

1.掌握8255A并行接口的基本使用方法。

2.理解數(shù)碼管掃描顯示原理,學習數(shù)碼管掃描顯示方法。二.實驗內(nèi)容

1.用8255A作為并行接口,從8255A的A口的PA4—PA7輸入四個開關量,B口通過74HC573與數(shù)碼管的段位相連(a、b、c、d、e、f、g、dp分別對應B口的PB0、PB1、PB2、PB3、PB4、PB5、PB6、PB7)。試編寫一個程序,從8255A的A口讀入將這四個開關量的值,并根據(jù)其值的大小,通過8255A的B口連接的數(shù)碼管顯示出相應的十六進制值,即當A口輸入為“0000xxxx”時,B口輸出所數(shù)碼管顯示“0”,·

·

·

·

·

·,當A口輸入為“1111xxxx”時,B口輸出所數(shù)碼管顯示“F”

。

2.設8255A的A口B口均為輸出方式,A口通過ULN2003驅(qū)動器接數(shù)碼管的位選端;B口通過74HC573與數(shù)碼管的段位相連(a、b、c、d、e、f、g、dp分別對應B口的PB0、PB1、PB2、PB3、PB4、PB5、PB6、PB7)。試編一動態(tài)掃描程序,讓6個數(shù)碼管“同時”點亮,顯示每位學生自己的學號。(參考程序顯示“123456”)3.參考程序2,編寫一個倒計時程序(延時約1秒-2秒)的軟件延時器,用兩位LED動態(tài)顯示出2F、2E、…00倒計時過程。三.實驗電路及設計

1.實驗電路圖第44頁,課件共79頁,創(chuàng)作于2023年2月第45頁,課件共79頁,創(chuàng)作于2023年2月第46頁,課件共79頁,創(chuàng)作于2023年2月2.實驗連線(1)邏輯電平開關輸出孔K1~K6對應連接到8255A的PA0~PA5;(2)8255A的PB0~PB5對應連接到數(shù)碼管的位選端JM1~JM6;(3)數(shù)據(jù)總線D0、D1、D2、D3、D4、D5、D6、D7對應連接到數(shù)碼管的字劃端a、b、c、d、e、f、g、dp;(4)8255A的片選端CS8255連到譯碼控制單元的0E200H--

0E203H;3.8255A的端口地址

PA口:0E200H

,PB口:0E201H,PC口:0E202H,控制寄存器:0E203H4.數(shù)碼管編碼表

“0”-3FH“1”-06H“2”-5BH“3”-4FH

“4”-66H“5”-6DH“6”-7DH“7”-07H

“8”-7FH“9”-6FH“A”-77H“B”-7CH

“C”-39H“D”-5EH“E”-79H“F”-71H

第47頁,課件共79頁,創(chuàng)作于2023年2月有關問題的說明數(shù)碼管(共陰):ABCDEFGDPABCDEFGDP共陰地K數(shù)字DPGFEDCBA字型碼0001111113FH10000011006H2010110115BH……K不閉合,數(shù)碼管就點不亮第48頁,課件共79頁,創(chuàng)作于2023年2月多個數(shù)碼管掃描顯示:第49頁,課件共79頁,創(chuàng)作于2023年2月多個數(shù)碼管掃描顯示:限流電阻鎖存器JM3、JM2、JM1誰為‘1’,誰連接的數(shù)碼管就顯示鎖存器當前鎖存的值所謂掃描顯示是:對N個數(shù)碼管:1.給鎖存器送第1個數(shù)碼管顯示內(nèi)容,而后第1個數(shù)碼管公共端接低,延時2.給鎖存器送第2個數(shù)碼管顯示內(nèi)容,而后第2個數(shù)碼管公共端接低,延時…N.給鎖存器送第N個數(shù)碼管顯示內(nèi)容,而后第N個數(shù)碼管公共端接低,延時第N步后,再從1開始,周而復始。那么,JM3、JM2、JM1是互斥的了!連接數(shù)據(jù)總線D7~D0驅(qū)動器第50頁,課件共79頁,創(chuàng)作于2023年2月實驗6-1電路示意圖B口8255PA3PA2PA1PA0SK4SK3SK2SK1開關74HC573鎖存器限流電阻D-busD7…D0SMGLTCS8255PB0-PB7KCPU第51頁,課件共79頁,創(chuàng)作于2023年2月開始初始化8255點亮一位數(shù)碼管讀鍵盤有鍵按下否?讀8255A的A口數(shù)據(jù),屏蔽高4位查表,得到相應的字型碼通過8255A的B口輸出字型碼到LED顯示結束YN第52頁,課件共79頁,創(chuàng)作于2023年2月.modelsmallCs8255equ0E200h;片選地址CS1p_ctlequ90h;8255控制字---A口入,B口出.datatabledb3fh,6h,5bh,4fh,66h;0,1,2,3,4;字型表

db6dh,7dh,07h,7fh,6fh,77h;5,6,7,8,9,Adb7ch,39h,5eh,79h,71h;B,C,D,E,F.code.startupmovdx,cs8255+3;8255初始化

movax,p_ctloutdx,axlop:movah,06h;鍵入任意結束程序的執(zhí)行

movdl,0ffhint21h jnzscan_endmovdx,cs825;讀開關

inal,dxandal,0fhmovbx,offsettable;讀字型碼

xlatmovdx,cs8255+1;B口輸出

outdx,aljmplop ;循環(huán)掃描

scan_end:.exitend

實驗6-1源程序第53頁,課件共79頁,創(chuàng)作于2023年2月實驗6.2限流電阻

ULN2003驅(qū)動器COMDbusD7…D0CS573CS825574HC573鎖存器COMCOMCOMCOMCOMABCDEFGDPA口B口PB0-PB7K1K3K4K5K6K2第54頁,課件共79頁,創(chuàng)作于2023年2月開始初始化8255查表取顯示數(shù)字字型碼顯示字型碼送鎖存器(輸出)掃描位數(shù)≥6?調(diào)延時CL初始掃描位置ALCL(顯示數(shù)字)CL初始掃描位置讀鍵盤有鍵動?結束NYYN延時子程序流程(略)取對應數(shù)碼管字位、并輸出CL+1(下一掃描位置)第55頁,課件共79頁,創(chuàng)作于2023年2月.modelsmallCs8255equ0E200h;片選地址CS1p_ctlequ80h;8255控制字--A口輸出,B口輸出.datatabledb3fh,06h,5bh,4fh,66h;0,1,2,3,4;字型表

db6dh,7dh,07h,7fh,6fh;5,6,7,8,9.code.startupmovdx,cs8255+3;發(fā)控制字

moval,p_ctl outdx,al movcl,1;設掃描位置lop: moval,cl;取顯示數(shù)字

movbx,offsettable;讀字型碼

xlat movdx,cs8255+1;輸出字型碼

outdx,al moval,80hInccl roral,cl movdx,cs8255;輸出字位

outdx,al cmpcl,6 jbedown;若顯示位置大于6,返回啟始位置

movcl,1down: calldelay movah,06;判有鍵動,跳出循環(huán)

movdl,0ffh int21h jnzscan_end jmplop;循環(huán)掃描scan_end:nop.exitnopdelayprocnear;延時子程序

pushcx movbx,02hdelay1: movcx,0h loop$ decbx jnzdelay1popcx retdelay endpend第56頁,課件共79頁,創(chuàng)作于2023年2月實驗七

8254定時/計數(shù)器實驗

一.實驗目的

1.掌握8254定時/計數(shù)器的基本使用方法。

2.了解8254定時/計數(shù)器利用級連擴大計數(shù)范圍的方法。

3.了解多I/O芯片協(xié)同工作的原理和方法。二.實驗內(nèi)容

1.將8254定時器0設置為方式2(分頻),定時器1設置為方式3(方波),定時器0的CLK0端接1M或2M時鐘,定時器0的輸出脈沖作為定時器1的時鐘輸入。將定時器1的輸出脈沖接在一個LED燈上或風鳴器上。編程使8254工作,觀察燈的狀態(tài)或風鳴器聲響。

2.用8254做秒信號源,用8255A控制交通燈的紅綠變化,完成一交通燈控制系統(tǒng),使每10秒切換一次通行方向。三.實驗電路及設計

1.實驗電路圖

第57頁,課件共79頁,創(chuàng)作于2023年2月第58頁,課件共79頁,創(chuàng)作于2023年2月第59頁,課件共79頁,創(chuàng)作于2023年2月第60頁,課件共79頁,創(chuàng)作于2023年2月第61頁,課件共79頁,創(chuàng)作于2023年2月第62頁,課件共79頁,創(chuàng)作于2023年2月2.“實驗內(nèi)容1”實驗連線(1)8254的GATE0、GATE1接高電平;(2)8254T0的CLK0接1M或2M時鐘孔;(3)8254T1的CLK1接T0的OUT0;(4)8254的片選端CS8254連到譯碼控制單元的0E204H—0E207H;(5)8254T1的OUT1接LED燈。

3.“實驗內(nèi)容2”實驗連線以下連線假設8255A的A口為輸入方式、B口為輸出方式,8255A的PA1

連接8254T1的OUT1,8255A的B口控制交通燈的八只LED燈。(1)連線同“實驗內(nèi)容1”的(1)~(4);(2)8254T1的OUT1接8255A的PA1孔;(3)8255A的PB7~PB0對應連接到dp、g、f、e、d、c、b、a,它們對應交通燈的Wr、Er、Wg、Eg、Nr、Sr、Ng、Sg燈;(4)交通燈八只LED發(fā)光管的公共控制端JTD孔接高電平;(5)8255A的片選端CS8255連到譯碼控制單元的CS1(0E200H)。

第63頁,課件共79頁,創(chuàng)作于2023年2月4.8254和8255A的端口地址

8254的端口地址(CS2):定時器0分頻系數(shù)寄存器:0E204H,定時器1分頻系數(shù)寄存器:0E205H,控制寄存器:0E207H。

8255A的端口地址(CS1):

PA口:0E200H,PB口:0E201H,PC口:0E202H,控制寄存器:0E203H。

第64頁,課件共79頁,創(chuàng)作于2023年2月實驗7.1開始初始化T0初始化T1裝T0低字節(jié)計數(shù)初值結束裝T0高字節(jié)計數(shù)初值裝T1低字節(jié)計數(shù)初值裝T1高字節(jié)計數(shù)初值第65頁,課件共79頁,創(chuàng)作于2023年2月;cs8253----CS2(0E204H—0E207H);clk0---1M;out0-----CLK1;out1----BJ或DL1;gate0---K1,令k1="1";gate1---K2,令k2="1";-------------------------------.MODELSMALLCS8253EQU0E204HT0_CTLEQU00110100B;對T0兩次讀寫,先低后高。T0為方式2(分頻)

T1_CTLEQU01110110B;對T1兩次讀寫,先低后高。T1為方式3(方波).DATAT0_DATA

DB

0FFH,040HT1_DATA

DB

0FFH,0.CODE

.STARTUP MOVDX,CS8253+3;初始化T0 MOVAL,T0_CTL OUTDX,AL MOVDX,CS8253;給T0低字節(jié)裝計數(shù)初值

MOVAL,T0_DATA OUTDX,AL MOVAL,T0_DATA+1;給T0高字節(jié)裝計數(shù)初值

OUTDX,AL;----------------------------------- MOVDX,CS8253+3;初始化T1 MOVAL,T1_CTL OUTDX,AL MOVDX,CS8253+1 MOVAL,T1_DATA;給T1低字節(jié)裝計數(shù)初值

OUTDX,AL MOVAL,T1_DATA+1;給T1高字節(jié)裝計數(shù)初值

OUTDX,AL .EXIT END

第66頁,課件共79頁,創(chuàng)作于2023年2月開始8254T0初始化給8254T0裝初值8254T1初始化給8254T1裝初值8255初始化為A口入、B口出8255B口輸出方向初值讀8255PA1、測試8255PA1PA1=1?讀8255PA1、測試8255PA1PA1=0?11控制換向8255B口輸出方向值檢查鍵盤有鍵盤動?結束YYYNNN實驗7.2第67頁,課件共79頁,創(chuàng)作于2023年2月;cs8254----CS2:0E204H--0E207H;clk0---1M;out0--->clk1;out1--->8255_PA1;gate0---k1;gate1---k2;JTD-------+5V;CS8255---CS1:0E200H--0E203H(8255芯片的片選信號,即片選地址);(PB7..PB0)----(RE,RS,RW,RN,GE,GS,GW,GN);----------------------------------------- .MODELSMALL CS8254 EQU0E204H;計數(shù)器0寄存器地址,CS2 T0_CTLEQU00110101B;控制字:選擇計數(shù)器0,讀/寫雙字節(jié),先低后高,方式2,十進制計數(shù)

T1_CTLEQU01110111B;控制字:選擇計數(shù)器1,讀/寫雙字節(jié),先低后高,方式3,十進制計數(shù)

CS8255EQU0E200H;8255的A口地址,CS1 P_CTLEQU90H;8255的方式控制字A,B口均工作在方式0,A口輸入,B口輸出

.DATA T0_DATADB00H,50H;計數(shù)器0的計數(shù)值為5000H T1_DATADB00H,20H;計數(shù)器1的計數(shù)值為2000H dir_datadb01011010b;交通燈方向初值,0表明燈熄滅,1表明燈點亮,

;高半字節(jié)為紅,低半字節(jié)為綠;順序為東南西北

;D7--東紅,D6--南紅,D5--西紅,D4--北紅

;D3--東綠,D2--南綠,D1--西綠,D0--北綠

.CODE.STARTUP;-----------------------------------------------------------------------------------MOVDX,CS8254+3;寫控制字(8254控制寄存器地址0E204H,即T8254+3)

MOVAL,T0_CTL OUTDX,AL;------------------------------------------------------------------------------------MOVDX,CS8254;寫計數(shù)器0的計數(shù)值

MOVAL,T0_DATA;寫低字節(jié)

OUTDX,AL; MOVAL,T0_DATA+1;寫高字節(jié)

OUTDX,AL;;-----------------------------------------------------------------------------------MOVDX,CS8254+3;寫8254控制字(8254控制寄存器地址0E204H,即T8254+3)

MOVAL,T1_CTL OUTDX,AL;----------------------------------------------------------------------------------MOVDX,CS8254+1;寫計數(shù)器1的計數(shù)值

MOVAL,T1_DATA;寫低字節(jié)

OUTDX,AL; MOVAL,T1_DATA+1;寫高字節(jié)

OUTDX,AL;;----------------------------------------------------------------------------------movdx,CS8255+3;8255初始化---A入

moval,p_ctl outdx,al第68頁,課件共79頁,創(chuàng)作于2023年2月

movdx,cS8255+1;設方向初值

moval,

溫馨提示

  • 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

提交評論