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

ซอฟต์แวร์ระบบส� ำหรั บแผงวงจรไมโครคอนโทรลเลอร์เพื่ อการเรี ยนรู้ 154 The Journal of the Royal Institute of Thailand Vol. 38 No. 3 July-Sep 2013 13) GET_WRD รูทีนนี้เรียกใช้รูทีน GET_BYT รวม ๒ ครั้ง เพื่อรับอักขระแอสกี ๔ ตัวจาก ช่องทางเข้าของสัญญาณอนุกรม แล้วแปลงให้เป็นข้อมูลฐานสิบหกขนาด ๑๖ บิตและใส่ไว้ในเรจิสเตอร์ AX รายการชุดค� ำสั่งภาษาแอสเซมบลีของรูทีน GET_WRD (Antonakos, 1996: 506-507) เป็นดังนี้ 14) CON_V รูทีนนี้แปลงอักขระแอสกีในช่วง “0”-“9” หรือไม่เช่นนั้นก็ในช่วง “A”-“F” ให้ เป็นข้อมูลฐานสองขนาด ๔ บิต แล้วเก็บผลที่ได้ไว้ใน ๔ บิตล่างของเรจิสเตอร์ AL รายการชุดค� ำสั่งภาษา แอสเซมบลีของรูทีน CON_V (Antonakos, 1996: 507) เป็นดังนี้ ; Routine to read 2 chars from serial port & ; convert them to 2 hex digits GET_BYT PROC NEAR PUSH BX ; save reg BX CALL C_IN ; get a char CALL C_OUT ; echo it to PC CALL CON_V ; convert from ascii to 4-bit binary SHL AL,1 ; move result into high nibble SHL AL,1 SHL AL,1 SHL AL,1 MOV BL,AL ; save hi nibble in BL CALL C_IN ; get 2nd char CALL C_OUT ; echo it to PC CALL CON_V ; convert to 4-bit binary OR AL,BL ; combine with hi nibble MOV BX,C_SUM ; storage addr of chksm ADD BYTE PTR[BX],AL ; add new value to C_SUM POP BX ; retrieve reg BX RET GET_BYT ENDP 13) GET_WRD รูทีนนี้เรียกใช รูทีน GET_BYT รวม ๒ ครั้ง เพื่อรับอักขระแอสกี ๔ ตัวจากช อง ทางเข าของสัญญาณอนุกรม แล วแปลงให เป นข อมูลฐานสิบหกขนาด ๑๖ บิตและใส ไว ใน เรจิสเตอร AX รายการชุดคําสั่งภาษาแอสเซมบลีของรูทีน GET_WRD (Antonakos, 1996: 506- 507) เป นดังนี้ ; Routine to read 4 chars from serial port and output them in AX GET_WRD PROC NEAR PUSH BX ; save register BX CALL GET_BYT ; get 1st byte in AL MOV BH,AL ; save it in BH CALL GET_BYT ; get 2nd byte in AL MOV AH,BH ; final result in AX POP BX ; retrieve register BX RET GET_WRD ENDP 14) CON_V รูทีนนี้แปลงอักขระแอสกีในช วง “0”-“9” หรือไม เช นนั้นก็ในช วง “A”-“F” ให เป นข อมูล ฐานสองขนาด ๔ บิต แล วเก็บผลที่ได ไว ใน ๔ บิตล างของเรจิสเตอร AL รายการชุดคําสั่ง ภาษาแอสเซมบลีของรูทีน CON_V (Antonakos, 1996: 507) เป นดังนี้ ; Routine to convert ascii character (0-9, A-F) into 4-bit binary in AL CON_V PROC NEAR SUB AL,'0' ; remove ascii bias CMP AL,10 ; test for 'A'-'F' JC NO_SUB7 ; not a letter, don't subtract 7 from it SUB AL,7 ; remove alphabet bias NO_SUB7: RET CON_V ENDP - 9 - ; Routine to read 2 chars from serial port & ; convert them to 2 hex digits GET_BYT PROC NEAR PUSH BX ; save reg BX CALL C_IN ; get a char CALL C_OUT ; echo it to PC CALL CON_V ; convert from ascii to 4-bit binary SHL AL,1 ; move result into high nibble SHL AL,1 SHL AL,1 SHL AL,1 MOV BL,AL ; save hi nibble in BL CALL C_IN ; get 2nd char CALL C_OUT ; echo it to PC CALL CON_V ; convert to 4-bit binary OR AL,BL ; combine with hi nibble MOV BX,C_SUM ; storage addr of chksm ADD BYTE PTR[BX],AL ; add new value to C_SUM POP BX ; retrieve reg BX RET GET_BYT ENDP 13) GET_WRD รูทีนนี้เรียกใช รูทีน GET_BYT รวม ๒ ครั้ง เพื่อรับอักขระแอสกี ๔ ตัวจากช อง ทางเข าของสัญญาณอนุกรม แล วแปลงให เป นข อมูลฐานสิบหกขนาด ๑๖ บิตและใส ไว ใน เรจิสเตอร AX รายการชุดคําสั่งภาษาแอสเซมบลีของรูทีน GET_WRD (Antonakos, 1996: 506- 507) เป นดังนี้ ; Routine to read 4 chars from serial port and output them in AX GET_WRD PROC NEAR PUSH BX ; save register BX CALL GET_BYT ; get 1st byte in AL MOV BH,AL ; save it in BH CALL GET_BYT ; get 2nd byte in AL MOV AH,BH ; final result in AX POP BX ; retrieve register BX RET GET_WRD ENDP 14) CON_V รูทีนนี้แปลงอักขระแอสกีในช วง “0”-“9” หรือไม เช นนั้นก็ในช วง “A”-“F” ให เป นข อมูล ฐานสองขนาด ๔ บิต แล วเก็บผลที่ได ไว ใน ๔ บิตล างของเรจิสเตอร AL รายการชุดคําสั่ง ภาษาแอสเซมบลีของรูทีน CON_V (Antonakos, 1996: 507) เป นดังนี้ ; Routine to convert ascii character (0-9, A-F) into 4-bit binary in AL CON_V PROC NEAR SUB AL,'0' ; remove ascii bias CMP AL,10 ; test for 'A'-'F' JC NO_SUB7 ; not le ter, don't subtract 7 from it SUB AL,7 ; remove alphabet bias NO_SUB7: RET CON_V ENDP - 9 - ; Routine to read 2 chars from serial port & ; convert them to 2 hex digits GET_BYT PROC NEAR PUSH BX ; save reg BX CALL C_IN ; get a char CALL C_OUT ; echo it to PC CALL CON_V ; convert from ascii to 4-bit binary SHL AL,1 ; move result into high nibble SHL A ,1 SHL A ,1 SHL AL,1 MOV BL,AL ; save hi nibble in BL CALL C_IN ; get 2nd char CALL C_OUT ; echo it to PC CALL CON_V ; convert to 4-bit binary OR AL,BL ; combine with hi nibble MOV BX,C_SUM ; storage addr of chksm ADD BYTE PTR[BX],AL ; add new value to C_SUM POP BX ; retrieve reg BX RET GET_BYT ENDP 13) GET_WRD รูทีนนี้เรียกใช รูทีน GET_BYT รวม ๒ ครั้ง เพื่อรับอักขระแอสกี ๔ ตัวจากช อง ทางเข าของสัญญาณอนุกรม แล วแปลงให เป นข อมูลฐานสิบหกขนาด ๑๖ บิตและใส ไว ใน เรจิสเตอร AX รายการชุดคําสั่งภาษาแอสเซมบลีของรูทีน GET_WRD (Antonakos, 1996: 506- 507) เป นดังนี้ ; Routine to read 4 chars from serial port and output them in AX GET_WRD PROC NEAR PUSH BX ; save register BX CALL GET_BYT ; get 1st byte in AL MOV BH,AL ; save it in BH CALL GET_BYT ; get 2nd byte in AL MOV AH,BH ; final result in AX POP BX ; retrieve register BX RET GET_WRD ENDP 14) CON_V รูทีนนี้แปลงอักขระแอสกีในช วง “0”-“9” หรือไม เช นนั้นก็ในช วง “A”-“F” ให เป นข อมูล ฐานสองขนาด ๔ บิต แล วเก็บผลที่ได ไว ใน ๔ บิตล างของเรจิสเตอร AL รายการชุดคําสั่ง ภาษาแอสเซมบลีของรูทีน CON_V (Antonakos, 1996: 507) เป นดังนี้ ; Routine to convert ascii character (0-9, A-F) into 4-bit binary in AL CON_V PROC NEAR SUB AL,'0' ; remove ascii bias CMP AL,10 ; test for 'A'-'F' JC NO_SUB7 ; not a letter, don't subtract 7 from it SUB AL,7 ; remove alphabet bias NO SUB7: RET CON_V ENDP

RkJQdWJsaXNoZXIy NTk0NjM=