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

155 ศ. ดร.มงคล เดชนคริ นทร์ วารสารราชบัณฑิตยสถาน ปีที่ ๓๘ ฉบับที่ ๓ ก.ค.-ก.ย. ๒๕๕๖ 15) GET_NUM รูทีนนี้รับจ� ำนวนฐานสิบหกที่ประกอบด้วยตัวเลขหลายหลัก จากแผงแป้น กดของพีซีที่ต่ออยู่กับแผงวงจรไมโครคอนโทรลเลอร์ มาเก็บไว้ในเรจิสเตอร์ DX ถ้าผู้ใช้ป้อนข้อมูลตัวเลข มากกว่า ๔ ตัว รูทีนนี้จะรับเฉพาะตัวเลข ๔ ตัวท้ายสุดเท่านั้น และถ้าผู้ใช้ป้อนตัวเลขน้อยกว่า ๔ ตัว รูทีนจะเติม 0 ไว้ข้างหน้าเพื่อให้ข้อมูลออกมีตัวเลขครบ ๔ ตัว รูทีนจะเลิกรับข้อมูลตัวเลขเมื่อผู้ใช้กด แป้นปัดแคร่ (CR) หรือแป้นอักขระว่าง (space bar) หากผู้ใช้กดแป้นปัดแคร่หรือแป้นอักขระว่างโดยที่ไม่ ได้ป้อนตัวเลขไว้ก่อน รูทีนนี้จะตั้งค่าในเรจิสเตอร์ DX เป็น 0000 และตั้งค่าในเรจิสเตอร์ BH เป็น “0” ส� ำหรับกรณีอื่น ๆ รูทีนจะตั้งค่าใน BH เป็น “1” รายการชุดค� ำสั่งภาษาแอสเซมบลีของรูทีน GET_NUM (Antonakos, 1996: 507-508) เป็นดังนี้ 16) S_END รูทีนนี้อ่านวลีที่ประกอบด้วยอักขระแอสกีจากหน่วยเก็บข้อมูลแล้วส่งไปแสดงบน จอของพีซีที่ต่ออยู่กับแผงไมโครคอนโทรลเลอร์ วลีของอักขระดังกล่าวต้องปิดท้ายด้วย “$” นอกจากนี้ รูทีนจะใช้เรจิสเตอร์ SI เป็นตัวชี้ต� ำแหน่งของอักขระที่เกี่ยวข้องด้วย รายการชุดค� ำสั่งภาษาแอสเซมบลี ของรูทีน S_END (Antonakos, 1996: 508) เป็นดังนี้ 15) GET_NUM รูทีนนี้รับจํานวนฐานสิบหกที่ประกอบด วยตัวเลขหลายหลัก จากแผงแป นกดของพีซี ที่ต ออยู กับแผงวงจรไมโครคอนโทรลเลอร มาเก็บไว ในเรจิสเตอร ถ าผู ใช ป อนข อมูลตัวเลข มากกว า ๔ ตัว รูทีนนี้จะรับเฉพาะตัวเลข ๔ ตัวท ายสุดเท านั้น และถ าผู ใช ป อนตัวเลขน อยกว า ๔ ตัว รูทีนจะเติม 0 ไว ข างหน าเพื่อให ข อมูลออกมีตัวเลขค บ ๔ ตัว รูทีนจะเลิกรับข อมูลตัวเลขเมื่อ ผู ใช กดแป นป ดแคร (CR) หรือแป นอักขระว าง (space bar) หากผู ใช กดแป นป ดแคร หรือแป น อักขระว างโดยที่ไม ได ป อนตัวเลขไว ก อน รูทีนนี้จะตั้งค าในเรจิสเตอร DX เป น 0000 และตั้งค า ในเรจิสเตอร BH เป น “0” สําหรับกรณีอื่น ๆ รูทีนจะตั้งค าใน BH เป น “1” รายการชุดคําสั่ง ภาษาแอสเซมบลีของรูทีน GET_NUM (Antonakos, 1996: 507-508) เป นดังนี้ ; Routine to get multi (last 4) digit hex no. from kbd & store in DX ; input terminated with a <cr> or a <sp> ; no input before <cr> ==> BH=0, else BH=1 ; Sample inputs: 3A7<cr> ==> Sample outputs: DX=03A7, BH=1 ; "-----------": 12345<cr> ==> "------------": DX=2345, BH=1 ; "-----------": <cr> ==> "------------": DX=0000, BH=0 GET_NUM PROC NEAR TOP_N: MOV BH,'0' ; initialize BH MOV DX,0 GT_NM: CALL C_IN ; get a char CMP AL,13 ; <cr>? JZ GT_BYE ; yes, then poise to return CALL C_OUT ; not <cr>, so echo it to PC CMP AL,20H ; <sp>? JZ GT_BYE ; yes, then poise to return MOV BH,'1' ; not <sp>, so set BH CALL CH_CASE ; capitalize a letter CMP AL,'0' ; char below 0? JC BAD_NM ; yes, no good char CMP AL,'9'+1 ; char below and including 9? JC OK_SUB ; yes, so remove ascii bias CMP AL,'A' ; char below A? JC BAD_NM ; yes, no good char CMP AL,'F'+1 ; char below and including F? JNC BAD_NM ; no, it's no good SUB AL,7 ; remove numeric-to-alpha bias OK_SUB: SUB AL,30H ; remove numeric bias SHL DX,1 ; shift data in DX to higher nibble SHL DX,1 SHL DX,1 SHL DX,1 ADD DL,AL ; add lo byte to DX JMP GT_NM ; repeat as necessary GT_BYE: CLC ; clear carry flag RET BAD_NM: CALL ERROR 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

RkJQdWJsaXNoZXIy NTk0NjM=