【正文】
如果溶液溫度等于或者高于 1000C,則繼續(xù)進(jìn)行下一步的處理。initialize port FFFAH for output MOV AL, 99H 。turn heater on JMP TEMP_IN 。下圖說(shuō)明了這種鍵盤的并行數(shù)據(jù)線和選通線是怎樣與微機(jī)端口連接的。FFF8HASCII data input port CODE SEGMENT ASSUME CS: CODE MOV DX, 0FFFAH 。one file will contain the main module: EXTRN SUBPROG1: FAR EXTRN SUBPROG2: FAR PUBLIC VALUE1,VALUE2,SUM,PRODUCT 。the sum in a location defined by the calling module EXTRN VALUE1:WORD EXTRN VALUE2:WORD EXTRN SUM:WORD PUBLIC SUBPROG1 .MODEL SMALL .CODE SUBPROG1 PROC FAR SUB BX, BX 。 4. 算法設(shè)計(jì): 5. 將 BCD數(shù) 17分裂成兩個(gè)半字節(jié) 6. 保存低半字節(jié)(不需乘 1) 7. 用 0AH乘高半字節(jié) 8. 將結(jié)果和低半字節(jié)相加 9. 例如: 4596=4*1000+5*100+9*10+6*1 10. 1000=03E8H 4000=4*03E8H=0FA0H 11. 100=0064H 500=5*0064H=01F4H 12. 10=000AH 90=9*000AH=005AH 13. 1=0001H 6=1*0001H=0006H 14. 4596 11F4H DATA SEGMENT BCD_IN DB 17H BIN_VAL DB ? DATA ENDS STACK SEGMENT DW 100 DUP (0) STACK ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA, SS: STACK START: MOV AX, DATA MOV DS, AX MOV AX, STACK MOV SS, AX MOV AL, BCD_IN CALL BCD_BIN MOV BIN_VAL, AL NOP BCD_BIN PROC NEAR PUSHF PUSH BX PUSH CX MOV BL, AL AND BL, 0FH AND AL, 0F0H MOV CL, 04 ROR AL, CL MOV BH, 0AH MUL BH ADD AL, BL POP CX POP BX POPF RET BCD_BIN ENDP CODE ENDS END START ( a)用寄存器傳遞參數(shù)實(shí)例 2. 用一般存儲(chǔ)單元傳遞參數(shù) 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 I ][ S I ]A H A LB H B LC H C LD H D LB PS ID IS PF l a gI PC SD SS SE S* 1 0 H DATA SEGMENT BCD_IN DB 17H BIN_VAL DB ? DATA ENDS STACK SEGMENT DW 100 DUP (0) STACK ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA, SS: STACK START: MOV AX, DATA MOV DS, AX MOV AX, STACK MOV SS, AX CALL BCD_BIN NOP NOP BCD_BIN PROC NEAR PUSHF PUSH AX PUSH BX PUSH CX MOV AL, BCD_IN MOV BL, AL AND BL, 0FH AND AL, 0F0H MOV CL, 04 ROR AL, CL MOV BH, 0AH MUL BH ADD AL, BL MOV BIN_VALUE, AL POP CX POP BX POP AX POPF RET BCD_BIN ENDP CODE ENDS END START ( b)用有名存儲(chǔ)單元傳遞參數(shù)的實(shí)例 3. 用指針傳遞參數(shù) 指針?lè)椒梢詡鬟f指向數(shù)據(jù)存放在任何存儲(chǔ)單元的過(guò)程指針,也能傳遞指向零散值或指向數(shù)組或串的指針,因而這種方法具有更大的靈活性。 void main( ) { get_temp ( tempc )。 scanf (“ %d ” ,ptr )。 DOS 系統(tǒng)功能調(diào)用和 BIOS 的服務(wù)子程序,使得程序設(shè)計(jì)人員不必涉及硬件就可以使用系統(tǒng)的硬件,尤其是 I / O 的使用與管理 。選擇哪種方法很大程度上依賴于特定程序,沒(méi)有標(biāo)準(zhǔn)規(guī)則,不過(guò)有幾條建議。 printf ( “ The temperature in Celsius is %d \n” , temp )。 int *present=headcount。this program finds the product of two externally defined words and 。 .STACK 64 。read keyboard strobe AND AL, 01 。當(dāng)經(jīng)過(guò)一段時(shí)間數(shù)據(jù)已駐留在這些數(shù)據(jù)線上后,鍵盤中的電路發(fā)出一個(gè)壓鍵選通信號(hào),以指示 8位數(shù)據(jù)線上的數(shù)據(jù)已經(jīng)有效。temp again HEATER_OFF: MOV AL, 00H 。point at input port IN AL, DX 。當(dāng)然如果溶液的溫度因過(guò)度加熱而足夠高時(shí),則不需要打開(kāi)加熱器。read ph sensor CODE ENDS END 輸 入 溫度 值T 〉 = 3 0 C ?打 開(kāi) 黃 燈打 開(kāi) 綠 燈AYN讀 傳 感 器輸入溫度值 IF 溫度〉 =300C THEN 打開(kāi)綠燈 ELSE 打開(kāi)黃燈 讀傳感器 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. 問(wèn)題定義: 2. 有一臺(tái)控制印刷線路板制造機(jī)器的 8086微機(jī)。if temp30 then light yellow 。register and load control word OUT DX, AL 。 ORG 0010H VAL_ASC DB ‘ 47’ VAL_BCD DB ? 。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. 定義問(wèn)題: 將 ASCII碼‘ 47’轉(zhuǎn)換成壓縮 BCD碼。 初始化表 : 數(shù)據(jù)段寄存器 DS 堆棧段寄存器 SS 附加段寄存器 ES 堆棧段指針 SP 8255A可編程并行端口 8259A優(yōu)先級(jí)中斷控制器 8254可編程計(jì)數(shù)器 8251可編程串行端口 初始化數(shù)據(jù)變量 設(shè)置中斷允許標(biāo)志 ( 3)選擇實(shí)現(xiàn)算法中每一主要?jiǎng)幼魉枰闹噶?,并決定數(shù)據(jù)在這些指令中的存放形式。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 。declare data here to be shared .MODEL SMALL 。這個(gè)翻譯過(guò)程稱為匯編,完成匯編任務(wù)的程序稱為匯編程序,見(jiàn)圖 。 由于高級(jí)語(yǔ)言程序是在未考慮機(jī)器的結(jié)構(gòu)特點(diǎn)的條件下編寫的,因而它就不能充分利用某種具體 CPU所具有的某些特性,而通過(guò)編譯或解釋程序生成的目標(biāo)程序往往比較冗長(zhǎng), 占有較多的內(nèi)存空間,執(zhí)行時(shí)間也比較長(zhǎng),這就限制了它在某些場(chǎng)合下的運(yùn)用。 程序設(shè)計(jì)概述 客 觀 世 界 的對(duì) 象 和 操 作程 序 設(shè) 計(jì) 語(yǔ) 言的 對(duì) 象 和 操 作問(wèn) 題 空 間解 空 間客 觀 世 界 的 算 法計(jì) 算 機(jī) 的 算 法程序員對(duì)問(wèn)題的表達(dá)人們對(duì)結(jié)果的解釋H . L e d g a r d 模 型客 觀 世 界 的 對(duì) 象輸 出 數(shù) 據(jù) 1. 機(jī)器語(yǔ)言 (Machine