【正文】
MOV DS, AX 5. 選擇指令: 1)用 AND指令完成屏蔽操作。 ROL dest, CL 3)用 OR指令組裝字節(jié) OR dest, source OR AL, BL 6. 編寫(xiě)程序: Key ASCII Unpacked BCD Packed BCD 4 34 0000 0100 7 37 0000 0111 0100 0111(47H) 。 MOV AX, WORD PTR VAL_ASC AND AX, 0F0FH XCHG AH, AL MOV CL, 4 ROL AH, CL OR AL, AH MOV VAL_BCD, AL 。其作用是檢查溫度傳感器,然后按照從傳感器讀到的溫度值打開(kāi)綠燈或黃燈。如果溫度高于或等于 300C,則打開(kāi)綠燈。point DX to port control MOV AL, 99H 。to initialize ports 5. 選擇指令: IN OUT CMP Jcc 6. 編寫(xiě)程序: 。FFFAHlamp control output (yellow=bit 0, green=bit 1 ) CODE SEGMENT ASSUME CS:CODE 。point DX to port control MOV AL, 99H 。to initialize ports MOV DX, 0FFF8H IN AL, DX CMP AL, 30 JB YELLOW 。lamp JMP GREEN 。load code to light yellow lamp MOV DX, 0FFFAH 。send code to light yellow lamp JMP EXIT 。next mainline instruction IN AL, DX 。其作用是檢查溫度傳感器,然后按照從傳感器讀到的溫度值打開(kāi)綠燈、黃燈或紅燈。如果溫度高于或等于300C但低于 400C,則打開(kāi)綠燈 ,否則,打開(kāi)紅燈。如果溶液溫度低于 1000C,則需打開(kāi)一個(gè)加熱器并等待溫度上升到 1000C。由于打開(kāi)加熱器前需要測(cè)設(shè)條件(溫度),因此 WHILEDO結(jié)構(gòu)適合于解決這樣的問(wèn)題。 2. 算法設(shè)計(jì) (a) 輸入溫度值 WHILE 溫度 =100 DO 關(guān)閉加熱器 打開(kāi)加熱器 T = 1 0 0 ?打 開(kāi) 加 熱 器YN輸 入 溫 度 值開(kāi) 始A關(guān) 閉 加 熱 器 3. 數(shù)據(jù)結(jié)構(gòu) AL ( IN AL, DX ) 4. 初始化表 MOV DX, 0FFFEH 。and port FFF8H for input OUT DX, AL 5. 選擇指令 IN CMP Jcc OUT 6. 編寫(xiě)程序 。 FFFAH for heater control output, 0= off, 1= on CODE SEGMENT ASSUME CS: CODE MOV DX, 0FFFEH 。and port FFF8H for input OUT DX, AL TEMP_IN: MOV DX, 0FFF8H 。input temperaure data CMP AL, 100 。turn heater off MOV AL, 01H 。point DX to output port OUT DX, AL 。WHILE temp 100 read 。load code for heater off MOV DX, 0FFFAH 。turn heater off CODE ENDS END ( a ) 加熱器控制程序清單 算法設(shè)計(jì) (b) 輸入溫度值 WHILE 溫度 100 DO 打開(kāi)加熱器 關(guān)閉加熱器 TEMP_IN: MOV DX, 0FFF8H IN AL, DX CMP AL, 100 JB HEATER_ON JMP HEATER_OFF HEATER_ON: MOV AL, 01H MOV DX, 0FFFAH OUT DX, AL JMP TEMP_IN HEATER_OFF: MOV AL, 00H MOV DX, 0FFFAH OUT DX, AL CODE ENDS END 3. 循環(huán)結(jié)構(gòu): REPEAT—UNTIL REPEAT 動(dòng)作 UNTIL 某些條件實(shí)現(xiàn) REPEAT Get data sample from sensor Add correction of+7 Store result in a memory location Wait 1 hour UNTIL 24 samples taken S T A T E M E N T ( S )C O N D I T I O N?YNR E P E A T U N T I L 流 程 圖 例 1: 1)問(wèn)題定義: 許多與微機(jī)接口的系統(tǒng)的工作是首先在并行信號(hào)線上輸出數(shù)據(jù),然后再輸出以單獨(dú)信號(hào)用以指示有效數(shù)據(jù)在并行線上。一個(gè) ASCⅡ編碼計(jì)算機(jī)鍵盤(pán)就是一種選通數(shù)據(jù)系統(tǒng)的例子。當(dāng)在鍵盤(pán)上敲入某個(gè)鍵時(shí),鍵盤(pán)中的電路將檢測(cè)敲入的鍵,然后將該鍵的 ASCⅡ 碼發(fā)送到連接端口 FFF8H的 8位數(shù)據(jù)線上。選通信號(hào)可以是有效高信號(hào)或有效低信號(hào)。 D 0 D 1 D 2 D 3 D 4 D 5 D 6 D 7A S C I I鍵 盤(pán) 選 通D 0D 1D 2D 3D 4D 5D 6D 7端 口F F F 8 H8 2 5 5D 0D 1D 2D 3D 4D 5D 6D 7端 口F F F A H8 2 5 5數(shù) 據(jù) 總線 到8 0 8 6選 通 信 號(hào) 連 接 于 微 機(jī)端 口 上 的 A S C I I 鍵 盤(pán) 2)算法設(shè)計(jì) REPEAT 讀鍵盤(pán)選通信號(hào) UNTIL 選通信號(hào) =1 從鍵盤(pán)讀 ASCII碼 選 通 = 1 ?YN開(kāi) 始A讀 選 通讀A S C I I 碼 3)數(shù)據(jù)結(jié)構(gòu) AL ( IN AL, DX ) 4)初始化表 MOV DX, 0FFFAH 。uses FFFAH Strobe signal input on LSB 。point DX at strobe port LOOK: IN AL, DX 。mask extra bits and set flags JZ LOOK 。else point DX at data port IN AL, DX 。 2)算法設(shè)計(jì): REPEAT 從數(shù)組中得到一價(jià)格 加入通貨膨脹因子 結(jié)果調(diào)整為正確的 BCD數(shù) 將結(jié)果放回?cái)?shù)組中 UNTIL 所有價(jià)格均已處理 開(kāi) 始加 入 通 貨膨 脹 因 子結(jié) 果 調(diào) 整為 B C D 數(shù)結(jié) 果 放 回到 數(shù) 組 中最 后 一 個(gè) ?AYN讀 入 一 價(jià) 格 3 92 02 81 52 61 92 71 62 93 65 52 74 23 84 12 9A R R A Y SD SC O S T 數(shù) 組 的 開(kāi)始 位 置P R I C E S 數(shù) 組 的開(kāi) 始 位 移 量P R I C E S 數(shù) 組 的開(kāi) 始 位 置B X = 預(yù) 期 P R I C E S數(shù) 組 元 素 的 偏 置R A MARRAYS SEGMENT COST DB 20H, 28H, 15H, 26H, 19H, 27H, 16H, 29H PRICE DB 36H, 55H, 27H, 42H, 38H, 41H, 29H, 39H ARRAYS ENDS 4)初始化表 MOV AX, ARRAYS MOV DS, AX 3)數(shù)據(jù)結(jié)構(gòu) 5)選擇指令: MOV ADD DAA Jcc 6)編寫(xiě)程序: ARRAYS SEGMENT COST DB 20H, 28H, 15H, 26H, 19H, 27H, 16H, 29H PRICE DB 36H, 55H, 27H, 42H, 38H, 41H, 29H, 39H ARRAYS ENDS CODE SEGMENT ASSUME CS: CODE, DS: ARRAYS START: MOV AX, ARRAYS MOV DS, AX LEA BX, PRICES MOV CX, 0008H DO_NEXT: MOV AL, [BX] ADD AL, 03H DAA MOV [BX], AL INC BX DEC CX JNZ DO_NEXT CODE ENDS END START 4. 子程序設(shè)計(jì): (1)模塊化的程序設(shè)計(jì) 主 模 塊模 塊 1 模 塊 2 模 塊 N 。declare data here to be shared .MODEL SMALL 。 .DATA VALUE1 DW 2050 VALUE2 DW 500 SUM DW 2 DUP(?) PRODUCT DW 2 DUP(?) 。call subprog1 to add value1+value2 CALL SUBPROG2 。this program finds the sum of two externally defined words and stores 。initialize carry count MOV AX, VALUE1 MOV DX, VALUE2 ADD AX, DX ADC BX, 00 MOV SUM, AX MOV SUM+2, BX RET SUBPROG1 ENDP END 。stores the product in a location defined by the calling module EXTRN VALUE1: WORD EXTRN VALUE2: WORD EXTRN PRODUCT: WORD PUBLIC SUBPROG2 .MODEL SMALL .CODE SUBPROG2 PROC FAR MOV AX, VALUE1 MOV CX, VALUE2 MUL AX, CX MOV PRODUCT, AX MOV PRODUCT+2, DX RET SUBPROG2 ENDP END (2) 調(diào)用過(guò)程 近過(guò)程的調(diào)用 1)運(yùn)行機(jī)制 2)數(shù)據(jù)保存 R A MF F F F F H0 0 0 0 0 HX X X X 0 HX X X X 0 HX X X X 0 HC o d e s e g m e n t6 4 kD a t as e g m e n t6 4 kS t a c ks e g m e n t6 4 kE x t r as e g m e n t6 4 k[ B X ][ S P ][ B X ]I PC P U[ S I ][ D I ][ B P ][ D