【正文】
lling module EXTRN VALUE1:WORD EXTRN VALUE2:WORD EXTRN SUM:WORD PUBLIC SUBPROG1 .MODEL SMALL .CODE SUBPROG1 PROC FAR SUB BX, BX 。call subprog2 to mul value1*value2 MOV AH, 4CH INT 21H MAIN ENDP END MAIN 。 .CODE MAIN PROC FAR MOV AX, DATA MOV DS, AX CALL SUBPROG1 。 .STACK 64 。one file will contain the main module: EXTRN SUBPROG1: FAR EXTRN SUBPROG2: FAR PUBLIC VALUE1,VALUE2,SUM,PRODUCT 。read in ASCII code CODE ENDS END 例 2: 1)問題定義 要求把通貨膨脹因子 03H加入到具有 8個(gè)元素價(jià)格數(shù)組的每個(gè)價(jià)格中,而其中每一個(gè)價(jià)格是以壓縮式 BCD(每個(gè)字節(jié)中有兩個(gè) BCD數(shù))形式存放在一個(gè)字節(jié)存儲單元中,價(jià)格的范圍在 1到 99分之間。if strobe is low then keep looking MOV DX, 0FFF8H 。read keyboard strobe AND AL, 01 。FFF8HASCII data input port CODE SEGMENT ASSUME CS: CODE MOV DX, 0FFFAH 。point DX at strobe port 5)選擇指令 IN Jcc IN 6)編寫程序 。對于本例假設(shè)一個(gè)有效 ASCⅡ 碼已在并行數(shù)據(jù)線上時(shí),選通信號趨向于高。當(dāng)經(jīng)過一段時(shí)間數(shù)據(jù)已駐留在這些數(shù)據(jù)線上后,鍵盤中的電路發(fā)出一個(gè)壓鍵選通信號,以指示 8位數(shù)據(jù)線上的數(shù)據(jù)已經(jīng)有效。下圖說明了這種鍵盤的并行數(shù)據(jù)線和選通線是怎樣與微機(jī)端口連接的。這個(gè)數(shù)據(jù)準(zhǔn)備信號通常被稱為選通。point DX to output port OUT DX, AL 。temp again HEATER_OFF: MOV AL, 00H 。turn heater on JMP TEMP_IN 。else load code for heater on MOV DX, 0FFFAH 。if temp =100 then JAE HEATER_OFF 。point at input port IN AL, DX 。initialize port FFFAH for output MOV AL, 99H 。 ports: uses FFF8H for temperature data input 。initialize port FFFAH for output MOV AL, 99H 。當(dāng)然如果溶液的溫度因過度加熱而足夠高時(shí),則不需要打開加熱器。如果溶液溫度等于或者高于 1000C,則繼續(xù)進(jìn)行下一步的處理。 2. 算法設(shè)計(jì): 3. 輸入溫度值 4. IF 溫度 300C THEN 5. 打開黃燈 6. ELSE IF 溫度 400C THEN 7. 打開綠燈 8. ELSE 打開紅燈 9. 讀傳感器 T 3 0 ?打 開 黃 燈T 4 0 ?打 開 紅 燈打 開 綠 燈YNYN讀 溫 度 值讀 傳 感 器 CODE SEGMENT ASSUME CS:CODE MOV DX, 0FFFEH MOV AL, 99H OUT DX, AL MOV DX, 0FFF8H IN AL, DX MOV DX, 0FFFAH CMP AL, 30 JB YELLOW CMP AL, 40 JB GREEN RED: MOV AL, 04H OUT DX, AL JMP EXIT YELLOW: MOV AL, 01H OUT DX, AL JMP EXIT GREEN: MOV AL, 02H OUT DX, AL EXIT: MOV DX, 0FFFCH IN AL, DX CODE ENDS END C O N D I T I O N?S T A T E M E N T ( S )YNW H I L E D O L O O P 流 程 圖3. 循環(huán)結(jié)構(gòu) WHILE – DO LOOP WHILE condition DO statement (s) WHILE not 24 samples DO Read data sample from sensor Add correction factor of + 7 Store result in memory Wait 1 hour. 例 1: 1. 定義問題 2. 假設(shè)在一個(gè)化學(xué)處理控制過程中,只有當(dāng)溶液溫度上升到 1000C后,才能繼續(xù)進(jìn)行下一步的處理。如果溫度低于 300C,則打開黃燈以告訴操作員溶液的溫度不夠。read ph sensor CODE ENDS END 輸 入 溫度 值T 〉 = 3 0 C ?打 開 黃 燈打 開 綠 燈AYN讀 傳 感 器輸入溫度值 IF 溫度〉 =300C THEN 打開綠燈 ELSE 打開黃燈 讀傳感器 CMP AL, 30 JAE GREEN JMP YELLOW GREEN: MOV AL, 02H MOV DX, 0FFFAH OUT DX, AL JMP EXIT YELLOW: MOV AL, 01H MOV DX, 0FFFAH OUT DX, AL EXIT: MOV DX, 0FFFCH IN AL, DX CODE ENDS END 2. 多重 IFTHENELSE結(jié)構(gòu): IF condition THEN statement(s)1 ELSE IF condition THEN statement(s)2 ELSE statement(s)3 M O N D A Y ?M A K E C E L E R YS O U PT U E S D A Y ?S U N D A Y ?M A K EM U S H R O O MS O U PM A K EM I N E S T R O N ES O U PYNYNY 1. 問題定義: 2. 有一臺控制印刷線路板制造機(jī)器的 8086微機(jī)。go to next mainline instruction GREEN: MOV AL, 02H MOV DX, 0FFFAH OUT DX, AL EXIT: MOV DX, 0FFFCH 。point DX at output port OUT DX, AL 。else light green lamp YELLOW: MOV AL, 01H 。if temp30 then light yellow 。register and load control word OUT DX, AL 。initialize 8086 port FFFAH as output port, FFF8H as input. MOV DX, 0FFFEH 。PORTS: Use FFF8Htemperature input 。register and load control word OUT DX, AL 。 2. 算法設(shè)計(jì): 3. 輸入溫度值 4. IF 溫度 300C THEN 5. 打開黃燈 6. ELSE 7. 打開綠燈 8. 讀傳感器 輸 入 溫度 值T 3 0 C ?打 開 黃 燈打 開 綠 燈AY N讀 傳 感 器 3. 數(shù)據(jù)結(jié)構(gòu): AL ( IN AL, DX ) 4. 初始化表: MOV DX, 0FFFEH 。如果溫度低于 300C,則打開黃燈以告訴操作員溶液的溫度不夠。 I F t e m p e r a t u r e l e s s t h a n 7 0 d e g r e e sT H E N t u r n o n h e a t e rE L S E t u r n o f f h e a t e rC O N D I T I O N?S T A T E M E N T ( S ) 2S T A T E M E N T ( S ) 1Y NI F T H E N E L S E 流 程 圖I F C O N D I T I O N T H E N S T A T E M E N T ( S ) 1E L S E S T A T E M E N T ( S ) 2 偽 代 碼2. 分支結(jié)構(gòu) (IFTHENELSE) 1. 問題定義: 2. 有一臺控制印刷線路板制造機(jī)器的 8086微機(jī)。 ORG 0010H VAL_ASC DB ‘ 47’ VAL_BCD DB ? 。 AND dest, source ASCII 4 0011 0100 屏蔽 0000 1111 結(jié)果 0000 0100 2)用循環(huán)位移指令左移四位。 在一個(gè)字節(jié)中組合兩個(gè) BCD數(shù)。 轉(zhuǎn)換第二個(gè) ASCII碼到非壓縮 BCD數(shù)。DIV 02 immed mode not allowed!! 6. 編寫程序: DATA SEGMENT HI_TEMP DB 92H LO_TEMP DB 52H AV_TEMP DB ? DATA ENDS CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE, DS:DATA MOV AX, DATA MOV DS, AX MOV AL, HI_TEMP ADD AL, LO_TEMP MOV AH, 00H ADC AH, 00H MOV BL, 02 DIV BL MOV AV_TEMP, AL MOV 4CH INT 21H MAIN ENDP CODE ENDS END MAIN 結(jié)構(gòu)化程序設(shè)計(jì) 1. 順序結(jié)構(gòu) Read temperature from sensor Add correction factor of +7 Store corrected value in memory S T A T E M E N T ( 1 )S T A T E M E N T ( 2 )流 程 圖S T A T E M E N T ( 1 )S T A T E M E N T ( 2 )偽 代 碼 例題: 1. 定義問題: 將 ASCII碼‘ 47’轉(zhuǎn)換成壓縮 BCD碼。查指令表并閱讀細(xì)節(jié) ADC dest, source 。實(shí)際值可能是從傳感器讀取的數(shù)值 LO_TEMP DB 52H AV_TEMP DB ? DATA ENDS 4. 初始化表: MOV AX, DATA MOV DS, AX 5. 選擇指令: 選擇算法中每一主