第一篇:微機實驗報告要求
實驗報告的撰寫要求
一、封面(統一要求)
二、報告內容:
① 題目
② 程序框圖
③ 硬件原理圖(在做硬件實驗時需此步驟)
④ 源程序(左邊為實驗前預習的源程序,右邊為實驗后調試正確的)
⑤ 指令分析(分析源程序中用到的條件轉移、邏輯、移位、算術運算等指令在程序段
中的作用)
⑥ 結果記錄及分析
三、收獲感想??梢詮囊韵聨讉€方面總結
① 進一步掌握并理解x86指令系統的功能及應用
② 加深對尋址方式的理解。
③ 了解程序設計過程,掌握x86程序設計的基本方法。
④ 掌握編程、調試方法(包括排除程序錯誤、決解問題的方法)。
⑤ 通過編程設計、軟件調試,進一步了解和掌握x86軟、硬件的工作原理,為下一步
硬件實驗打下良好的基礎。
第二篇:微機實驗報告
自動化 學院 物聯網 專業 1 班 學號
姓名 協作者 教師評定
實驗一 操作訓練及數碼轉換實驗
一、實驗目的
1)掌握80x86微機原理及接口技術教學實驗系統的操作,熟悉Wmd86聯級集成開發調試軟件的操作環境。
2)掌握不同進制數及數碼相互轉換的程序設計方法。
二、實驗設備
PC一臺,td-pite微機/單片機教學實驗裝置一套。
三、實驗內容與步驟 實驗程序:
1、STAK SEGMENT STACK
DW 64 DUP(?)STACK ENDS DATA SEGMENT
ORG 0500H DATA1 DB 00H, 01H,02H,03H,04H,05H,06H,07H,08H,09H,10H
DB 11H,12H,13H,14H,15H
ORG 0600H DATA2 DB 16 DUP(?)DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET DATA1
MOV DI, OFFSET DATA2
MOV CX,0010H A1: MOV AL,[SI]
MOV [DI],AL
INC SI
INC DI
LOOP A1
MOV AH,4CH INT 21H CODE ENDS END START 編譯連接后使用U命令查看DS地址為0208 使用G命令運行再用D命令查看結果正確
2、將ASCLL碼表示的十進制數轉換成二進制數 參考程序 略 利用E命令修改0500開始的數據輸入34 35 后G命令運行再用D命令查看結果為DATA:0510 2D正確輸入為12 95時對應結果為0C 5F 編程練習一:
1)編程實現將十進制數的ASCLL碼轉換成BCD碼 要求:用E命令從鍵盤輸入的五位十進制數的ASCLL碼已存放在0500H起始的內存單元內(例25H、30H、32H、34H、65H),把它轉換成BCD碼后,再分別存入050AH起始的內存單元內。若輸入的不是十進制數的ASCLL碼,則對應的結果的存放單元內容為“FF” 程序代碼:
STACK SEGMENT STACK DW 64 DUP(?)STACK ENDS DATA SEGMENT ORG 0500H DATA1 DB 25H,30H,32H,34H,65H ORG 050AH DATA2 DB 5 DUP(?)DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX, DATA MOV DS, AX MOV SI,OFFSET DATA1 MOV DI,OFFSET DATA2 MOV CL,5 A1: MOV AL, [SI] CMP AL,30H JB A2 CMP AL,39H JA A2 AND AL, 0FH MOV [DI], AL JMP NEXT A2: MOV BYTE PTR [DI], 0FFH JMP NEXT NEXT: INC SI INC DI DEC CL JNZ A1 MOV AH,4CH INT 21H CODE ENDS END START 實驗結果:
自動化 學院 物聯網 專業 1 班 學號
姓名 協作者 教師評定
實驗二:運算類編程實驗
一、實驗目的
1)掌握使用運算類指令編程及調試方法。
2)掌握運算類指令對各狀態標志位的影響及其測試方法。3)學習使用軟件監視變量的方法。
二、實驗設備
PC一臺,td-pite微機/單片機教學實驗裝置一套。
三、實驗內容及步驟
4、除法運算
題目:十進制的除法。被除數和除數均已非壓縮BCD數形式存放在內存中。試驗程序:
STACK SEGMENT STACK DW 64 DUP(?)STACK ENDS DATA SEGMENT DATA1 DB 2 DUP(?)DATA2 DB 1 DUP(?)RESULT DB 2 DUP(?)DATA ENDS CODE SEGMENT ASSUME CS: CODE,DS:DATA START: MOV AX, DATA MOV DS, AX CALL INIT MOV SI, OFFSET DATA2 MOV BL, [SI] MOV SI,OFFSET DATA1 MOV DI, OFFSET RESULT MOV CL,0AH MOV AL,[SI] MUL CL ADD AL,[SI+01H] MOV AH,00H DIV BL MOV AH , 00H DIV CL MOV [DI],AX MOV AH,4CH INT 21H INIT: MOV SI,OFFSET RESULT MOV CX,0002H MOV AX,00H A1:MOV [SI],AL INC SI LOOP A1 RET CODE ENDS END START 用e命令賦值被除數09 02 除數04 g命令運行 d命令查看0072:0003 顯示02 03 運行結果:
編程練習
2)已知在起始地址為0500H的內存單元中,存放一串數據:10H,20H,30H,40H,50H,60H.請編程求其平均值,并把平均值轉換成BCD數存入0500H單元中。程序代碼:
STACK SEGMENT STACK DW 64 DUP(?)STACK ENDS DATA SEGMENT ORG 0500H DATA1 DW 10H,20H,30H,40H,50H,60H ORG 0510H DATA2 DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE ,DS:DATA START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET DATA1 MOV DI,OFFSET DATA2 MOV AX,[SI] MOV CL, 5 A1: MOV BX,[SI+2] ADD AX,BX INC SI INC SI DEC CL JNZ A1 MOV BL,06H DIV BL MOV BL,0AH DIV BL MOV BH,AH MOV BL,10H MUL BL ADD AL,BH MOV [DI],AL MOV AH,4CH INT 21H CODE ENDS END START 用g命令運行再用d命令查看0772:0510中內容為56
自動化 學院 物聯網 專業 1 班 學號311300 姓名 協作者 教師評定
實驗三:分支、循環及子程序設計實驗
一、實驗目的
1)了解分支、循環子程序等程序的基本結構。
2)掌握分支程序、循環結構程序的設計和調試方法。3)掌握子程序的定義和調試方法。
二、實驗設備
PC一臺,td-pite微機/單片機教學實驗裝置一套。
三、實驗內容和步驟 3.名次表 程序代碼:
STACK SEGMENT STACK DW 64 DUP(?)STACK ENDS DATA SEGMENT ORG 0100H DATA1 DB 10 DUP(?)ORG 0200H DATA2 DB 10 DUP(?)DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV SI,OFFSET DATA1 MOV CX,000AH MOV DI,OFFSET DATA2 A1: CALL AA1 MOV AL,0AH SUB AL,CL INC AL MOV BX,DX MOV [BX+DI],AL LOOP A1 MOV AH,4CH INT 21H AA1: PUSH CX MOV CX,000AH MOV AL, 00H MOV BX,0100H MOV SI,BX A2: CMP AL,[SI] JAE A3 MOV AL,[SI] MOV DX,SI SUB DX,BX A3: INC SI LOOP A2 ADD BX,DX MOV AL,00H MOV [BX],AL POP CX RET CODE ENDS END START 實驗步驟:
匯編連接生成exe文件
用e命令輸入:3CH,40H,47H,61H,4FH,5DH,52H,30H,56H,45H,等十個成績。再用g命令運行d命令查看0722:0200.編程練習
2)有3個8位二進制數連續存放在0200H開始的內存單元中,設他們之中至少有兩個數是相同的。編寫程序找出與這兩個數不同的數,把該數所在地址送到0204H單元,若三個數都相同則送0FFFFH到0204單元。程序代碼:
STACK SEGMENT STACK DW 64 DUP(?)STACK ENDS DATA SEGMENT ORG 0200H DATA1 DB ? DATA2 DB ? DATA3 DB ? ORG 0204H DATA4 DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS ,AX LEA SI,DATA1 LEA SI,DATA4 MOV AL,[SI] MOV AH,[SI+1] MOV BL,[SI+2] CMP AL,AH JZ A1 CMP AL,BL JZ A2 MOV [DI],SI JMP A4 A2: ADD SI,1 MOV [DI],SI JMP A4 A1: CMP AL,BL JZ A3 ADD SI,2 MOV [DI],SI JMP A4 A3: MOV [DI] ,0FFFFH A4:MOV AH,4CH INT 21H CODE ENDS END START 實驗步驟:e0772:0200命令輸入數據01 01 01g命令運行 的命令查看得到
運行結果:
第三篇:微機實驗報告
微機實驗報告
曾東明
實驗一 輸出字符‘A’
一、實驗目的
1.通過這個簡單的例子熟悉在微機上建立、匯編、鏈接和運行8086/8088匯編語言程序的過程。
2.掌握字符的顯示方法。3.學習DOS系統功能調用。
二、實驗內容
輸出字符?A?,程序流程圖如圖1-1所示。
圖1-1輸出字符?A?程序流程圖
源程序如下:
CODE
SEGMENT
ASSUME
CS:CODE
MOV
DL, 'A'
MOV
AH, 2
INT
21H
MOV
AH, 4CH
INT
21H
CODE
ENDS
END
三、實驗設備
PC機一臺,MASM匯編程序
四、實驗步驟
1.用記事本將源程序輸入,并存盤。
注意:源程序是用匯編語言語句編寫的程序,并不能為機器所識別。源程序的擴展名為.ASM 2.用宏匯編程序將.ASM源程序匯編成機器碼的目標文件(OBJ文件)3.用LINK程序產生執行文件(EXE文件)4.執行程序
實驗結果:
五、心得體會
第一次經歷了匯編語言的上機過程,對在計算機上進行匯編語言程序設計的步驟不是很熟悉,對命令提示符的一些操作命令不懂,后來查閱了一些資料,比如可以在window7下按住shift,點擊鼠標右鍵,在彈出的窗口里就可以打開命令提示符了。
六、思考題
1.請說出一個完整的匯編程序從編寫到運行所需的步驟。(1)用編輯程序建立ASM源程序文件
(2)用宏匯編程序將.ASM源程序匯編成機器碼的目標文件(OBJ文件)(3)用LINK程序產生執行文件(EXE文件)(4)在DOS命令行直接鍵入文件名執行該文件 2.修改源程序,改變屏幕顯示的內容。修改的源程序: CODE
SEGMENT
ASSUME
CS:CODE
MOV
DL, 'D'
MOV
AH, 2
INT
21H
MOV
AH, 4CH
INT
21H
CODE
ENDS
END
實驗二 數據的顯示實驗
一、實驗目的
1.掌握屏幕上顯示各種進制數據的方法。
2.掌握將內存中的二進制數轉換為十進制、十六進制數的方法。
3.學會子程序的編寫、調用及數據傳遞方法。
二、實驗內容
1.把BX中的無符號二進制數轉換成十進制數,在屏幕上顯示出來。
2.把BX中的帶符號二進制數轉換成十進制數,在屏幕上顯示出來。
3.求一個數據塊(由10個單字節的無符號數組成)中的最大元素,并將結果以十進制數的形式在屏幕上顯示出來。
4.求一個數據塊(由20個單字節的帶符號數組成)中的正數之和(和不超過字)和負數之和(和不超過字),并在屏幕上用十進制數的形式分別顯示出兩個和。
5.將寄存器BX中的二進制數轉換成十六進制數,并在屏幕上顯示出來。從高到低依次取出4位二進制數變為ASCII碼輸出即可。
三、實驗設備:
PC機一臺、masm匯編程序
四、實驗步驟:
依照前面介紹的方法,對每一個實驗內容對應的程序進行編輯、編譯、連接和運行,直到達到實驗要求。
1.實驗內容1(1)實驗內容1的流程圖,如圖所示:
(2)實驗內容1的程序:
CODE SEGMENT
ASSUME
CS: CODE
DEC_DIV MACRO
MOV
AX, BX
MOV
DX, 0
DIV
CX
MOV
BX, DX
MOV
DL, AL
ADD
DL, 30H
MOV
AH, 2
INT
21H
ENDM
START: MOV
BX, 0FFFH
MOV
CX, 1000
DEC_DIV
MOV
CX, 100
DEC_DIV
MOV
CX, 10
DEC_DIV
MOV
CX, 1
DEC_DIV
MOV
AH, 4CH
INT
21H
CODE ENDS
END
START(3)實驗結果:
2.實驗內容2(1)實驗容1的程序: DATA SEGMENT A DW 1000 B DW 100 C DW 10 D DW 1 DATA ENDS CODE SEGMENT
ASSUME
CS: CODE,DS:DATA
START: MOV
AX,DATA
MOV
DS,AX
MOV
BX, 0FFEFH;-0017的補碼是0FFEFH
OR BX,BX
JNS NEXT
NEG BX
AND BH,7FH
MOV DL,2DH
MOV AH,2
INT 21H
NEXT:
MOV
SI,OFFSET A
CALL
DEC_DIV
MOV
SI,OFFSET B
CALL
DEC_DIV
MOV
SI,OFFSET C
CALL
DEC_DIV
MOV
SI,OFFSET D
CALL
DEC_DIV
MOV
AH, 4CH
INT
21H
DEC_DIV PROC
NEAR
MOV CX, [SI]
MOV
AX, BX
MOV
DX, 0
DIV
CX
MOV
BX, DX
MOV
DL, AL
ADD
DL, 30H
MOV
AH, 2
INT
21H
RET
DEC_DIV ENDP
CODE ENDS
END
START(2)實驗結果:
3.實驗內容3(1)實驗內容3的流程圖,如圖所示:
(2)實驗3的程序: DATA
SEGMENT
BLOCK
DB 1,0,5,7,10,30,100,127,90,80
RESULT
DB
?,?
BUF
DB
'MAX IS:$' DATA
ENDS CODE
SEGMENT
ASSUME
CS:CODE,DS:DATA
BEGIN
PROC
FAR
MOV
AX, DATA
MOV
DS, AX
MOV
CX, 9
LEA
SI, BLOCK
MOV
AL, [SI]
X1: INC
SI
CMP
AL, [SI]
JAE
X2
MOV
AL, [SI]
X2: LOOP
X1
MOV
RESULT, AL
MOV DX, OFFSET BUF
MOV AH, 9
INT 21H
MOV
BL,RESULT
CBW
MOV
CX, 1000
CALL
DEC_DIV
MOV
CX, 100 CALL
DEC_DIV MOV
CX, 10 CALL
DEC_DIV
MOV
CX, 1
CALL
DEC_DIV
MOV
AH, 4CH
INT
21H
DEC_DIV PROC
NEAR
MOV
AX, BX
MOV
DX, 0
DIV
CX
MOV
BX, DX
MOV
DL, AL
ADD
DL, 30H
MOV
AH, 2
INT
21H
RET
DEC_DIV ENDP
BEGIN
ENDP
CODE
ENDS
END
BEGIN(3)實驗3的運行結果:
4.實驗內容4(1)實驗內容4的流程圖,如圖所示:
(2)實驗內容4程序: DATA
SEGMENT
BLOCK DB
-1,-2,-3,-4,-5,-6,-7,-8,-9,-10
DB
11,12,13,14,15,16,17,18,19,20
POSIT DW
?
NEGAT DW
?
BUF1
DB
'POSIT:$'
BUF2
DB
'NEGAT:$'
DATA
ENDS
CODE SEGMENT
ASSUME
CS:CODE,DS:DATA
START PROC
MOV
AX, DATA
MOV
DS, AX
MOV
BX, OFFSET BLOCK
MOV
SI, 0
MOV
DI, 0
MOV
CX, 20
X1: MOV
AL, [BX]
CBW
CMP
AX, 0
JGE
X3
ADD
DI, AX
JMP
X2
X3: ADD
SI, AX
X2: INC
BX
LOOP
X1
MOV
POSIT, SI
MOV
NEGAT, DI
MOV DX, OFFSET BUF1
MOV AH, 9
INT 21H
MOV
BX,POSIT
MOV
CX, 1000
CALL
DEC_DIV
MOV
CX, 100
CALL
DEC_DIV
MOV
CX, 10
CALL
DEC_DIV
MOV
CX, 1
CALL
DEC_DIV
MOV
DL,0AH
MOV
AH,2
INT
21H
MOV DX, OFFSET BUF2
MOV AH, 9
INT 21H
MOV BX,NEGAT
NEG BX
AND BH,01111111B
MOV DL,2DH;顯示負號
MOV AH,2
INT 21H
MOV
CX, 1000
CALL
DEC_DIV
MOV
CX, 100
CALL
DEC_DIV
MOV
CX, 10
CALL
DEC_DIV
MOV
CX, 1
CALL
DEC_DIV
MOV
AH, 4CH
INT
21H
DEC_DIV PROC
NEAR
MOV
AX, BX
MOV
DX, 0
DIV
CX
MOV
BX, DX
MOV
DL, AL
ADD
DL, 30H
MOV
AH, 2
INT
21H
RET
DEC_DIV ENDP
CODE ENDS
END
START
(3)實驗結果:
5.實驗內容5(1)實驗內容5的流程圖,如圖所示:
圖2-4 內容5流程圖
(2)實驗內容5的源程序,參考如下:
CODE
SEGMENT
ASSUME
CS:CODE
BINHEX PROC
FAR
MOV
CH,4
MOV
BX,1000
ROTATE: MOV
CL,4
ROL
BX,CL
MOV
DL,BL
AND
DL,0FH
ADD
DL,30H
CMP
DL,3AH
JL
OUTPUT
ADD
DL,7
OUTPUT: MOV
AH,2
INT
21H
DEC
CH
JNE
ROTATE MOV
DL,'H' MOV
AH,2 INT
21H
MOV
AH,4CH
INT
21H
BINHEX ENDP
CODE ENDS
END
BINHEX(3)實驗結果:
五、心得體會 實驗內容1:
宏定義必須先定義,后調用,自己剛開始時把宏定義放在調用的后面,導致程序出錯??戳松a的LIST給出的源程序和目標程序,發現每個宏調用處,通過宏擴展,宏體中的指令的機器代碼被插入到宏調用處,不節省內存單元,但相對于子程序,簡化了源程序。
實驗內容2:
剛開始的時候給BX寄存器送負值,比如-17,我寫成了1000 0000 0001 0001 即 MOV BX,8011H,后來發現顯示出來的數不是-17。經過思考,懂得原來負數的表示要用補碼,下面是兩種LIST 文件里對應地方的目標程序和源程序,可以看出轉化為目標程序的時候,用補碼表示。0000 BB FFEF 0000 BB FFEF
START: MOV
BX,-0011H
START: MOV
BX, 0FFEFH
實驗內容3:求一個數據塊中最大元素的時候,把數據塊中的第一個元素AL中,并通過循環把其余的元素和AL比較,如果新元素較大的話就取代原來的元素放到AL中。比較完成后,把最大的元素放到預先為其保留的地址中,注意要控制的次數CX,是數據塊的個數減一。
LOOP 標號
功能相當于
DEC CX JNZ 標號 實驗內容4:
回車和換行的效果不一樣。顯示字符串的時候要注意用$。
因為要將正數與負數分別累加,這時候需要分支,而分支的條件有很多種,比如跟0比較大小,比如通過提取符合位來判斷,只要能正確實現分支都可以。實驗內容5:
16位的二進制數,4位一組可以顯示為4位十六進制數,從高到低依次取出4位二進制數變成ASCⅡ碼輸出即可。
要注意ASICC代碼中,1-9的ASICC代碼要比1-9的二進制值大30H,A-F的ASICC代碼要比1-9的二進制值大37H,所以對不同的四位二進制,要加個判斷分支,才能找到相應得ASICC代碼。
六、思考題
1.請總結顯示寄存器或者內存中的十進制和十六進制數據的方法。十進制顯示的方法:
先判斷是正數負數,是負數要把它轉化成負數的絕對值,并在前面加一個負號。
把BX中的數按位由高到低轉化成十進制數,即依次對其除以10000、1000、100、10、1,將獲得的商放到 DL中,加30H變成ASCⅡ碼,調用DOS系統中斷INT 21H的2號功能顯示出來;對于每一位十進制數的獲得和顯示,實驗通過編制子程序DEC_DIV并不斷調用來實現。
十六進制的顯示方法:
16位的二進制數,4位一組可以顯示為4位十六進制數,從高到低依次取出4位二進制數變成ASCⅡ碼輸出即可,可以用循環左移的指令POL,循環左移四位,并提取這四位。
2.請總結子程序編寫、調用及參數傳遞的要點。子程序定義格式如下:
過程名
PROC [NEAR/FAR]
RET
過程名
ENDP 調用的時候用
CALL 過程名
參數傳遞有三種方法:(1)通過寄存器傳遞參數,這種方式適合于傳遞參數較少的一些簡單程序。(2)通過地址表傳遞參數地址,這種方式適合于參數較多的情況,但要求事先建立一個用來傳送參數的地址。(3)通過堆棧傳遞參數。為了利用堆棧傳遞參數,必須在主程序中調用子程序之前的地方,把這些參數壓入堆棧后利用在子程序中的指令從堆棧彈出而取得參數。同樣,要從子程序傳遞回調用程序的參數也被壓入堆棧內,然后由主程序中的指令把這些參數從堆棧中取出。
3.修改源程序,改變屏幕顯示的內容。1:
2:
3:
4:
5:
實驗三 從鍵盤上輸入數據實驗
一、實驗目的
1.掌握從鍵盤上輸入數據的方法。
2.鍵盤上輸入的是ASCII字符,掌握如何將ASCII字符轉換為機內數字。
二、實驗內容
1.從鍵盤上輸入一個十進制數(0~65535),轉換成二進制數并放入寄存器BX中。2.從鍵盤上輸入0~65535范圍的一個十進制數,在屏幕上顯示出相 PC機一臺、masm匯編程序
三、實驗設備 PC機一臺、masm匯編程序
四、實驗步驟:
依照上次實驗步驟,對每一個實驗內容對應的程序進行編輯、編譯、連接和運行,直到達到實驗要求。
1.實驗內容1的程序: CODE SEGMENT
ASSUME
CS:CODE
START PROC
CALL
DECBIN
MOV
DL,0DH
MOV
AH,2
INT
21H
CALL
XIANSHI
MOV
AH,4CH
INT
21H
START ENDP
DECBIN PROC
NEAR
MOV
CX,10
MOV
BX,0
LOP1: MOV
AH,1
INT
21H
CMP
AL,30H
JL
EXIT
CMP
AL,39H
JG
EXIT
SUB
AL,30H
MOV
AH,00H
XCHG
AX,BX
MUL
CX
ADD
BX,AX
JMP
LOP1
EXIT: RET
DECBIN ENDP
XIANSHI PROC
NEAR
LP1: MOV
CX,10000
CALL
DEC_DIV
MOV
CX,1000
CALL
DEC_DIV
MOV
CX,100
CALL
DEC_DIV
MOV
CX,10
CALL
DEC_DIV
MOV
CX,1
CALL
DEC_DIV
RET
XIANSHI ENDP
DEC_DIV PROC
NEAR
MOV
AX,BX
MOV
DX,0
DIV
CX
MOV
BX,DX
MOV
DL,AL
ADD
DL,30H
MOV
AH,2
INT
21H
RET
DEC_DIV ENDP
CODE ENDS
END
START
(2)運行結果:
輸入11111后,程序顯示如圖所示:
2.實驗內容2(1)實驗內容2的程序: STACK SEGMENT DB 20 DUP(?)STACK ENDS CODE SEGMENT
ASSUME
CS:CODE,SS:STACK
START PROC
MOV AX,STACK
MOV SS,AX
CALL
DECBIN
CALL
XIANSH
MOV
DL,0AH
MOV
AH,2
INT
21H
MOV
CH,4
CALL
ROTATE
MOV
AH,4CH
INT
21H
START ENDP
XIANSHI PROC
NEAR
PUSH BX
LP1: MOV
CX,10000
CALL
DEC_DIV
MOV
CX,1000
CALL
DEC_DIV
MOV
CX,100
CALL
DEC_DIV
MOV
CX,10
CALL
DEC_DIV
MOV
CX,1
CALL
DEC_DIV
POP BX
RET
XIANSHI ENDP
DEC_DIV PROC
NEAR
MOV
AX,BX
MOV
DX,0
DIV
CX
MOV
BX,DX
MOV
DL,AL
DECBIN PROC
NEAR ADD
DL,30H MOV
AH,2 INT
21H RET
DEC_DIV ENDP
MOV
MOV
LOP1: MOV
INT
CMP
JL
CMP
JG
SUB
MOV
XCHG
MUL
ADD
JMP
EXIT:
RET
DECBIN ENDP ROTATE PROC
LOP2: MOV
ROL
MOV
AND
ADD
CMP
JL
ADD
OUTPUT: MOV
INT
DEC
JNE
MOV
MOV
INT
RET
CX,10 BX,0 AH,1 21H AL,30H EXIT AL,39H EXIT AL,30H AH,00H AX,BX CX BX,AX LOP1 CL,4 BX,CL DL,BL DL,0FH
DL,30H DL,3AH
OUTPUT;小于轉移 DL,7 AH,2 21H CH LOP2 DL,'H' AH,2 21H
ROTATE ENDP
CODE ENDS
END
START
(2)運行結果:
輸入00010,顯示結果如圖3-4所示:
五、心得體會
在寫實驗二的時候,調用子程序的地方比較多,可是調用子程序的時候,沒有對寄存器的數據進行保護,導致程序的執行結果不正確,后來用壓棧會保護寄存器里的數據,并用出棧來恢復寄存器的數據,使程序的執行結果正確。
六、思考題
1.請總結從鍵盤上輸入字符的方法。
從鍵盤上輸入一個十進制數(0~65535),轉換成二進制數并放入寄存器BX中。對于輸入的字符,先判斷它是不是1~9的數字字符,若不是,直接跳出循環,若是的話,將ASCⅡ碼轉化成對應數值并存到AX中,對于下一個輸入的數值,判斷完成后,通過將AX和BX內容交換并將AX中的數*10,再累加實現。
2.請總結將二進制數轉換為十六進制數并顯示的方法。
16位的二進制數,4位一組可以顯示為4位十六進制數,從高到低依次取出4位二進制數變成ASCⅡ碼輸出即可,可以用循環左移的指令POL,循環左移四位,并提取這四位。
3.修改源程序,改變屏幕顯示的內容。
實驗內容1:輸入22222,顯示
實驗內容2:輸入12,顯示
實驗四
字符串的顯示實驗
一、實驗目的: 掌握字符串的顯示方法。
二、實驗內容: 1.在內存中存有一個字符串,以0為結尾,程序開始輸出“HELLO”然后等待從鍵盤輸入一個字符,在字符串中尋找該字符,若找到,輸出“yes”;若找不到,輸出“no”,然后再輸入下一個字符。
2.實驗內容1的程序是一個無限循環的程序,若按“ESC”鍵,讓程序推出循環,使系統返回DOS。已知“ESC”鍵的鍵值是1BH。按照上面的要求對實驗內容1的程序進行修改,然后再重新匯編、鏈接和運行。
三、實驗設備: PC機一臺、masm匯編程序
四、實驗步驟:
1.實驗內容1(1)實驗內容1程序: DATA
SEGMENT
STR1 DB
'HELLO',0DH,0AH,'$'
STR2 DB
20H,'YES',0DH,0AH,'$'
STR3 DB
20H,'NO',0DH,0AH,'$'
STR4 DB
'1 2 3 0 4 5 A B a=!?',00H
DATA
ENDS
CODE SEGMENT
ASSUME
CS:CODE,DS:DATA
START PROC
FAR
MOV
AX,DATA
MOV
DS,AX
MOV
DX,OFFSET STR1
MOV
AH,9
INT
21H
LOOP1: MOV
AH,1
INT
21H
MOV
BX,OFFSET STR4
GON: MOV
AH,[BX]
CMP
AH,0
JZ
NO
INC
BX
CMP
AH,AL
JNZ
GON
MOV
DX,OFFSET STR2
GO: MOV
AH,9
INT
21H
JMP
LOOP1
NO: MOV
DX,OFFSET STR3
JMP
GO
START ENDP
CODE ENDS
END
START(2)運行結果
2、實驗內容2(1)實驗內容2程序: DATA
SEGMENT
STR1 DB
'HELLO',0DH,0AH,'$'
STR2 DB
20H,'YES',0DH,0AH,'$'
STR3 DB
20H,'NO',0DH,0AH,'$'
STR4 DB
'1 2 3 0 4 5 A B a=!?',00H
DATA
ENDS
CODE SEGMENT
ASSUME
CS:CODE,DS:DATA
START PROC
FAR
MOV
AX,DATA
MOV
DS,AX MOV
DX,OFFSET STR1 MOV
AH,9 INT
21H
LOOP1: MOV
AH,1
INT
21H
CMP
AL,1BH
JZ
EXIT
MOV
BX,OFFSET STR4
GON: MOV
AH,[BX]
CMP
AH,0
JZ
NO
INC
BX
CMP
AH,AL
JNZ
GON
MOV
DX,OFFSET STR2
GO: MOV
AH,9
INT
21H
JMP
LOOP1
NO: MOV
DX,OFFSET STR3
JMP
GO
EXIT:
MOV
AH, 4CH
INT
21H
START ENDP
CODE ENDS
END
START(2)運行結果:
五、心得體會
通過這次實驗,掌握了字符算的顯示方法。該程序要用到DOS系統功能調用的9號子程序,9號子程序的功能是在屏幕上輸出一個字符串,字符串要以字符“$”做為結尾符,但“$”在屏幕上不顯示。
六、思考題
1.請總結字符串的顯示方法。
該程序要用到DOS系統功能調用的9號子程序,9號子程序的功能是在屏幕上輸出一個字符串,字符串要以字符“$”做為結尾符,但“$”在屏幕上不顯示。
調用9號子程序的格式是:
MOV
DX,字符串起始地址(入口參數)
MOV
AH,9
INT
21H 9號子程序遇到 “0DH”處理成回車;
遇到 “0AH”處理成換行;
遇到 “20H”處理成空格。
2.鞏固匯編語言分支程序設計的方法。
許多實際問題并不能設計成順序程序,需要根據不同的條件作出不同的處理。把不同的處理方法編制成各自的處理程序段,運行時由機器根據不同的條件自動作出選擇判斷,繞過某些指令,僅執行相應的處理程序段。按這種方式編制的程序,稱之為分支程序。分支程序是機器利用改變標志位的指令和轉移指令來實現的。
轉移指令有JMP和Jcc兩類。前者是無條件轉移指令,后者是條件轉移指令。
第四篇:微機原理實驗報告
學號: 學生姓名: 打印日期: 評分: 評語:
實驗報告
COURSE PAPER 8255控制開關狀態顯示
學院 :機電工程與自動化學院
一、實驗目的;
(本課程設計是在完成《微機原理與接口技術使用教程》知識后進行的一次綜合性訓練。通過本課程設計,既可以鞏固對所學知識的理解和掌握,又可以培養解決實際問題的本領,也能夠提高運用文字圖表表達設計思想和對Proteus與Emu8086應用的能力。
二、實驗要求;
(1)功能要求:設定8255的PA口為開關量輸入,PB口為開關量輸出,要求能隨時將PA口的開關狀態通過PB口的數碼管顯示出來,如開關為0000,則數碼管顯示為0;若開關為1111,則數碼管顯示為F。
(2)具體參數:將8255A的端口A設置為方式0并作為輸入口,讀取開關量,PB口設置為方式0作為輸出口。并設定A、B、C口和控制口的地址為60H、62H、64H、66H。LED為共陰極連接方式。
(3)用Proteus畫出實現上述功能的8086和8255及LED相關連接的硬件電路,編寫相關程序,結合emu8086,完成仿真調試,給出硬件電路圖、程序代碼和仿真結果圖。
三、實驗說明;
? 利用前期實驗建立組態控制 ? 組態軟件的操作界面和主要功能; ? 混料罐工程或交通燈工程工程組態
四、實驗步驟;(1)硬件設計
8255A的四個端口地址為60H、62H、64H、66H。其二進制碼分別為0110 0000H、0110 0010H、0110 0100H、0110 0110H。則可以判斷,8255A的A0與A1端口應該與8086的A1和A2端口對應。8086的A7、A4、A3、A0為0,A6、A5為1時,8255A接受指令。為完成上述操作,可以使用138譯碼器。8255A的A端口作為輸入口,連接四位開關;B端口作為輸出口,連接一個共陰極的LED顯示管。
(2)硬件電路圖
(3)匯編語言設計 assume cs:code code segment start: MOV DX,066H MOV AL,90H OUT DX,AL
AA: MOV BX, OFFSET TABL MOV DX,060H IN AL,DX AND AL,0FH XLAT MOV DX,062H OUT DX,AL JMP AA
TABL: DB 3FH,06H,5BH,4FH DB 66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH DB 39H,5EH,79H,71H
code ends end start(4)實驗結果
五、實驗心得;
通過對proteus及emu8086軟件的應用,可以使我將從課堂與書本上學習到的知識,以模擬的方式,制作成成品。在本次課外項目中,我對于8255A的工作方式以及8086如何控制其他元器件輸入輸出數據有了清晰的認識。通過使用模擬軟件,我有了更多的方式去深入了解課本上的知識。
第五篇:微機組裝實驗報告
微機組裝實驗報告
一、實驗內容
1、了解計算機的硬件系統
2、在規定的時間內完成一臺計算機的完全拆卸并且完全還原的組裝拆卸訓練
二、實驗目的1、熟悉計算機的基本配置及各部件的功能
2、掌握計算機的組裝過程
三、實驗過程及步驟
1、安裝CPU(首先把主板放好,并把主板CPU插座上的固定桿輕微地向外側掰,在向外掰的同時把固定杠提起,此時CPU插座會發生輕微地位移,CPU就可以插入了。在插入之前,應該事先找到CPU表面上的小三角標志,也要找到主板CPU插座上的小三角標志兩者對齊安裝即可,當CPU插入完成后,固定桿按照逆過程重新歸位,CPU也就安裝完成了。)
2、散熱器的安裝(CPU安裝完成后,將少許導熱硅脂均勻涂抹在CPU表面上。接下來吧CPU的散熱器平穩地放置在主板固定支架內,并將扣具的小掛鉤放在支架上的卡口內,用力下壓扣具的另一頭,使小掛鉤滑入到支架的另一個卡口內。另一個扣具按照同樣的方式進行安裝,始終保證散熱器的平穩就可以完成了之后再找到CPU散熱器的電源線,對應的找到主板上的三腳插針,將電源線插好后CPU散熱器的安裝就完成了。)
3、內存的安裝(在安裝內存錢,首先需要把內部插槽兩端的卡子想兩側掰開,然后把內存平行放到插槽中并向下用力壓入,此時內存就夠可以與插槽兩端的卡子配合并穩定地插入到插槽內,卡子也會相應地回復到原位。在安裝內存時需要特別注意,內存金手指那一段有一個不對稱的缺口,這一缺口剛好與內部插槽相對應。插入內存時一定要事先觀察內存插槽,以免誤用蠻力安裝,造成內存的損壞。)
4、電源的安裝(電源的一面通常有四個螺絲孔,安裝電源時把這個有四個螺絲孔的一面對準機箱上的電源固定位,將四個螺絲孔對齊,并擰上,然后依次按照對角方式擰緊四個螺絲,這樣安裝保證的絕對穩固。)
5、主板的安裝(把主板放入到機箱內部,有各種借口的那一面對應機箱后面的安裝位。首先傾斜地放入主板,然后再將主板放平,主板上固定螺絲孔要對應著機箱內部的螺絲柱,按照安裝電源的方式,擰緊六個螺絲即可,安裝主板的這個步驟中有兩個需要注意,第一點就是螺絲的大小是否合適,有些機箱配置的螺絲大小不一,應該找到與主板最為合適的螺絲擰入。第二點就是個別的劣質機箱,螺絲的安裝位跟主板無法相對應,如果無法擰緊時,最好不要采取強硬措施,以避免主板變形損壞。)
6顯卡的安裝(當前主流顯卡大多采用PCI-E接口設計,這個與主板上灰褐色的插槽相對應,顯卡安裝時,應該先試著把有金手指的那面插入,然后雙手平行向下按下。)
7、硬盤的安裝(硬盤的安裝位置要看準了,它通常在機箱內部的3.5英寸驅動器安裝位上。)
四、遇到的問題及解決
對于內部數據線的連接不熟悉。解決方法,用筆記錄每一根電源線的連接。
五、實驗新得及體會
通過學習計算機組裝,我了解了計算機方面的一些基礎知識,也了解到了CPU,主板,內存等配件的基本結構,原來在計算機方面不是很懂得的我,開始漸漸的深入了解它,相信我今后能更好的使用它。這次計算機組裝實驗,讓我真正將理論和實踐融為一體,既鞏固了舊知識,又掌握了新知識,在提高了我的動手能力的同時也讓我深深感受到了自己在實際運用中的專業知識的匱乏,今后我會多多動手積累經驗。