สำนักงานราชบัณฑิตยสภา

ซอฟต์แวร์ระบบส� ำหรั บแผงวงจรไมโครคอนโทรลเลอร์เพื่ อการเรี ยนรู้ 156 The Journal of the Royal Institute of Thailand Vol. 38 No. 3 July-Sep 2013 17) ENVIR รูทีนนี้เก็บข้อมูลของเรจิสเตอร์และตัวบ่งชี้ (flag) ทั้งหมดไว้ในหน่วยความจ� ำชุด พิเศษชุดหนึ่งทันทีที่โพรเซสเซอร์ได้รับค� ำสั่งขัดจังหวะ INT 95H หน่วยความจ� ำชุดพิเศษดังกล่าวเริ่มต้น ที่ต� ำแหน่งที่อยู่ R_AX (= 7F00H) และสิ้นสุดที่ต� ำแหน่ง ๑ ไบต์ต่อจากต� ำแหน่งที่อยู่ C_SUM (= 7F24H) ดังที่แสดงไว้ในรายการชุดค� ำสั่งของซอฟต์แวร์ระบบในภาคผนวกของบทความนี้ เมื่อรูทีนนี้ท� ำงาน เสร็จ รูทีนถัดจากนี้ คือ D_ENV จะรับช่วงท� ำงาน เพื่อแสดงค่าของข้อมูลทั้งหมดที่รูทีน ENVIR ได้เก็บไว้ รายการชุดค� ำสั่งภาษาแอสเซมบลีของรูทีน ENVIR (Antonakos, 1996: 508-509) เป็นดังนี้ - 10 - CMP AL,'0' ; char below 0? JC BAD_NM ; yes, no good char JMP TOP_N ; start all over GET_NUM ENDP 16) S_END รูทีนนี้อ านวลีที่ประกอบด วยอักขระแอสกีจากหน วยเก็บข อมูลแล วส งไปแสดงบนจอของ พีซีที่ต ออยู กับแผงไมโครคอนโทรลเลอร วลีของอักขระดังกล าวต องป ดท ายด วย “$” นอกจากนี้ รูทีนจะใช เรจิสเตอร SI เป นตัวชี้ตําแหน งของอักขระที่เกี่ย ข องด วย รายกา ชุดคําสั่ง ภาษาแอสเซมบลีของรูทีน S_END (Antonakos, 1996: 508) เป นดังนี้ ; Routine to read ascii char from mem and send it to PC ; char string is pointed to by SI & ends with $ S_END PROC NEAR S_NXT: MOV AL,[SI] ; get a char CMP AL,'$' ; end of string? JZ S_QWT ; yes, so let's quit CALL C_OUT ; not end char, so send it INC SI ; get next char JMP S_NXT ; repeat reading char S_QWT: RET S_END ENDP 17) ENVIR รูทีนนี้เก็บข อมูลของเรจิสเตอร และตัวบ งชี้ (flag) ทั้งหมดไว ในหน วยความจําชุดพิเศษชุด หนึ่งทันทีที่โพรเซสเซอร ได รับคําสั่งขัดจังหวะ INT 95H หน วยความจําชุดพิเศษดังกล าวเริ่มต นที่ ตําแหน งที่อยู R_AX (= 7F00H) และสิ้นสุดที่ตําแหน ง ๑ ไบต ต อจากตําแหน งที่อยู C_SUM (= 7F24H) ดังที่แสดงไว ในรายการชุดคําสั่งของซอฟต แวร ระบบในภาคผนวกของบทความนี้ เมื่อ รูทีนนี้ทํางาน เสร็จ รูทีนถัดจากนี้ คือ D_ENV จะรับช วงทํางาน เพื่อแสดงค าของข อมูลทั้งหมดที่ รูทีน ENVIR ได เก็บไว รายการชุดคําสั่งภาษาแอสเซมบลีของรูทีน ENVIR (Antonakos, 1996: 508-509) เป นดังนี้ ; Routine to save monitor prog's regs & flags on re-entry ; all 11 regs are 2-byte wrds, stored lo byte first ; store begins at R_AX (loc 7F00 in RAM) ; flags stored at locs 7F22 & 7F23 ENVIR PROC NEAR ; save regs & flags from previous usr prog PUSHF ; save flags on stack (0) ; save BX first PUSH BX ; push (1) PUSH AX ; save AX on stack (2) MOV AX,DS PUSH AX ; save DS on stack (3) MOV AX,0 MOV DS,AX ; data seg for monitor prog MOV AX,ES PUSH AX ; save ES on stack (4) MOV AX,0 MOV ES,AX ; extra seg for monitor prog POP AX ; retrieve old ES [4] MOV BX,R_ES ; store addr for ES MOV WORD PTR[BX],AX ; save old ES in store POP AX ; retrieve old DS [3] MOV BX,R_DS ; store addr for DS MOV WORD PTR[BX],AX ; save old DS in store POP AX ; retrieve old AX [2] MOV BX,R_AX ; store addr for AX MOV WORD PTR[BX],AX ; save old AX in store MOV WORD PTR[BX+4],CX MOV WORD PTR[BX+6],DX MOV WORD PTR[BX+8],BP MOV WORD PTR[BX+10],SI MOV WORD PTR[BX+12],DI POP AX ; retrieve BX in AX [1] MOV WORD PTR[BX+2],AX ; save BX POP AX ; dec SP by 1 POP BX ; dec SP by 1 again MOV CX,BX ; save BX in CX MOV BX,R_SP ; store addr for SP MOV WORD PTR[BX],SP ; save SP in store MOV BX,CX ; retrieve BX from CX PUSH BX ; restore stack contents PUSH AX MOV BX,R_SS ; store addr for SS MOV WORD PTR[BX],SS ; save SS in store POP AX ; retrieve flags [0] MOV BX,F_LAGS ; store addr for flags MOV WORD PTR[BX],AX ; save flags in store 18) D_ENV รูทีนนี้แสดงข อมูลในเรจิสเตอร ทั้งหมด (AX, BX, CX, DX, BP, SI, DI, SP, DS, SS, ES) ที่รูทีน ENVIR ได เก็บไว ในหน วยความจําชุดพิเศษ เมื่อรูทีนนี้ทํางานเสร็จ รูทีนถัดจากนี้ คือ D_FLG จะรับช วงทํางานต อไป เพื่อแสดงค าของข อมูลตัวบ งชี้ทั้งหมดที่รูทีน ENVIR ได เก็บไว

RkJQdWJsaXNoZXIy NTk0NjM=