計算機組成原理實驗四
上機實驗04 邏輯運算程式設計實驗
1.瞭解組合語言的邏輯運算指令;
2.熟悉組合語言中邏輯運算指令的使用方法;
3.掌握利用匯編語言邏輯運算指令實現程式設計的方法。
二、軟硬體環境
1.硬體環境:微機CPU 486以上,500MB以上硬碟,32M以上記憶體;
2.軟體環境:裝有MASM 5.0、DEBUG、LINK和EDIT等應用程式。
三、實驗涉及的主要知識單元
1.邏輯非指令NOT
格式:NOT OPD
操作形式:OPD←。
描述:
指令的功能是把運算元中的每位變反,即:1←0,0←1。將目的地址中的內容逐位取反後送入目的地址。運算元不能用立即數,指令執行後對標誌位無影響,也可用於求補。
舉例:
MOV AX,
NOT AX ;(AX)=EDCBH
2.邏輯與指令AND
格式:AND 目的運算元,源運算元
操作形式:DOPD ← DOPD∧SOPD。
描述:
(1)邏輯與運演算法則為1∧1=1,1∧0=0,0∧1=0,0∧0=0。
(2)指令的功能是把源運算元中的每位二進位制與目的運算元中的相應二進位制進行邏輯乘運算操作,操作結果存入目的運算元中。
(3)受影響的標誌位:CF、OF為0,PF、SF和ZF根據運算定, AF無定義。
(4)利用AND指令與0或1相與可對運算元的某些位進行遮蔽和保留操作。
舉例:
將AL中第0位和第7位清零。
MOV AL,0FFH
AND AL,7EH
3.邏輯或指令OR
格式:OR 目的運算元,源運算元
操作形式:DOPD ← DOPD∨SOPD
描述:
(1)邏輯或運演算法則:1∨1=1,1∨0=1,0∨1=1,0∨0=0。
(2)指令的功能是把源運算元中的每位二進位制與目的運算元中的相應二進位制進行邏輯加運算操作,操作結果存入目的運算元中。
(3)受影響的標誌位:CF、OF為0,PF、SF和ZF根據運算定, AF無定義。
(4)利用OR指令與1或0相或,可對運算元置1操作,和保留原位不變。
舉例:
將AL中第0位和第7位置1。
MOV AL,0
OR AL,81H
4.邏輯異或指令XOR
格式:XOR目的運算元,源運算元
操作形式:DOPD ← DOPDSOPD
描述:
(1)邏輯異或運演算法則:11=0,10=1,01=1,00=0。
(2)指令的功能是把源運算元中的每位二進位制與目的運算元中的相應二進位制進行邏輯“異或”操作,操作結果存入目的運算元中
(3)受影響的標誌位:CF、OF為0,PF、SF和ZF根據運算定, AF無定義。
(4)利用該指令與1和0相異或,分別可以運算元對應位變反和保持不變。
(5)對運算元自身異或運算可對暫存器和CF、OF置0。
舉例:
(1)將AL中的0、7位變反
XOR AL,81H
(2)將AX清零
XOR AX,AX
5.邏輯測試指令TEST
格式:TEST 目的運算元,源運算元
操作形式:DOPD∧SOPD。
描述:
(1)該指令與指令AND的區別在於,兩運算元相與後不儲存結果。
(2)指令的功能是把源運算元的每位二進位制與目的運算元中的相應二進位制進行邏輯“與”操作,根據所得結果設定有關標誌位,為隨後的條件轉移指令提供條件,由於不儲存差值,所以不會改變指令中的運算元。
(3)受影響的標誌位:CF、OF為0,PF、SF和ZF根據運算定, AF無定義。
舉例:
(1)TEST AX,100B;B表示二進位制
JNZ AA ;如果AX右數第三位為1,JNZ將跳轉到AA處。
(2)測試暫存器是否為空
TEST AX,AX
JZ AA
如果AX為零,則ZF標誌為1,JZ將跳轉到AA處。
1、實驗內容
(1)用A命令編寫程式片段,實現邏輯非,邏輯與,邏輯或,邏輯異或,邏輯測試運算;(2)得到實際的結果,用T或P命令檢視結果正確性。
(3)實驗例子,邏輯非:NOT 14H
邏輯與:32H AND 0FH
邏輯或:32H OR 0FH
邏輯異或:32H XOR 0FH
(4)進行邏輯測試運算中,注意狀態和標誌位的變化,並記錄。
2、實驗步驟
(1)預習邏輯運算中的基本指令知識,根據實驗內容,整理思路;
(2)利用在DEBUG除錯中的A命令輸入對應程式片段;
(3)對寫好的程式片段,利用DEBUG的T、P命令或G命令檢視資料區,核對實驗結果。
1、實驗要求
(1)寫出實現每個邏輯運算的例子答案;
(2)記錄具體實現邏輯運算例子的實驗步驟;
(3)回答思考問題;
(4)記錄實驗結果。
2、實驗提示
(1) 進入DEBUG除錯環境,用A命令輸入程式片段如圖3-1所示。
(2)圖3-1是實現的是邏輯非的運算驗證。然後,用P或T命令檢視暫存器AX內容的
實驗結果分析
;***************************************************** ;寫出下面程式各語句執行後暫存器和狀態字的值 DATA SEGMENT STR DB 'HELLO WORLD!',13,10,'$' DATA ENDS STACK SEGMENT STACK DB 20 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK | |||||
START: | 暫存器AX | 暫存器BX | 暫存器CX | 暫存器CX | 狀態標誌 |
MOV AX,0FF03H | FF03 | 0000 | 0000 | 0000 | NV UP EI PL NZ NA PO NC |
MOV BX,0H | FF03 | 0000 | 0000 | 0000 | NV UP EI PL NZ NA PO NC |
MOV CX,5H | FF03 | 0000 | 0005 | 0000 | NV UP EI PL NZ NA PO NC |
MOV DX,0AH | FF03 | 0000 | 0005 | 000A | NV UP EI PL NZ NA PO NCT |
NOT AX | 00FC | 0000 | 0005 | 000A | NV UP EI PL NZ NA PO NC |
AND AX,0FF0H | 00F0 | 0000 | 0005 | 000A | NV UP EI PL NZ NA PE NC |
OR BX,AX | 00F0 | 00F0 | 0005 | 000A | NV UP EI PL NZ NA PE NC |
OR DX,CX | 00F0 | 00F0 | 0005 | 000F | NV UP EI PL NZ NA PE NC |
XOR AX,0033H | 00C3 | 00F0 | 0005 | 000F | NV UP EI PL NZ NA PE NC |
XOR AX,AX | 0000 | 00F0 | 0005 | 000F | NV UP EI PL ZR NA PE NC |
MOV AX,DATA | 141B | 00F0 | 0005 | 000F | NV UP EI PL ZR NA PE NC |
MOV DS,AX | 141B | 00F0 | 0005 | 000F | NV UP EI PL ZR NA PE NC |
LOOP1: | |||||
SUB AX,1H | 141A | 00F0 | 0005 | 000F | NV UP EI PL NZ NA PO NC |
TEST AX,AX | 141A | 00F0 | 0005 | 000F | NV UP EI PL NZ NA PO NC |
JNZ LOOP1 | 141A | 00F0 | 0005 | 000F | NV UP EI PL NZ NA PO NC |
MOV DX,OFFSET STR | 0000 | 00F0 | 0005 | 000F | NV UP EI PL ZR NA PE NC |
MOV AH,09 | 0900 | 00F0 | 0005 | 0000 | NV UP EI PL ZR NA PE NC |
INT 21H | 0900 | 00F0 | 0005 | 0000 | NV UP EI PL ZR NA PE NC |
MOV AH,4CH | 4C24 | 00F0 | 0005 | 0000 | NV UP EI PL ZR NA PE NC |
INT 21H | 4C24 | 00F0 | 0005 | 0000 | NV UP DI ZR NA PE NC |
CODE ENDS | |||||
END START |