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

157 ศ. ดร.มงคล เดชนคริ นทร์ วารสารราชบัณฑิตยสถาน ปีที่ ๓๘ ฉบับที่ ๓ ก.ค.-ก.ย. ๒๕๕๖ 18) D_ENV รูทีนนี้แสดงข้อมูลในเรจิสเตอร์ทั้งหมด (AX, BX, CX, DX, BP, SI, DI, SP, DS, SS, ES) ที่รูทีน ENVIR ได้เก็บไว้ในหน่วยความจ� ำชุดพิเศษ เมื่อรูทีนนี้ท� ำงานเสร็จ รูทีนถัดจากนี้ คือ D_FLG จะรับช่วงท� ำงานต่อไป เพื่อแสดงค่าของข้อมูลตัวบ่งชี้ทั้งหมดที่รูทีน ENVIR ได้เก็บไว้ รายการชุดค� ำสั่ง ภาษาแอสเซมบลีของรูทีน D_ENV (Antonakos, 1996: 509) เป็นดังนี้ หมายเหตุ รูทีน D_ENV ใช้ตารางข้อมูลชื่อของเรจิสเตอร์ต่าง ๆ จากต� ำแหน่งที่อยู่ R_LETS คือ R_LETS DB ‘AXBXCXDXBPSIDISPDSSSES’ 19) D_FLG รูทีนนี้แสดงสถานะของตัวบ่งชี้ทางเลขคณิตทั้งหมด ๕ ตัว คือ S (sign), Z (zero), A (auxiliary), P (parity) และ C (carry) รายการชุดค� ำสั่งภาษาแอสเซมบลีของรูทีน D _FLG (Antonakos, 1996: 510) เป็นดังนี้ หมายเหตุ รูทีน D_FLG ใช้ตารางข้อมูลรวม ๓ ตาราง คือ FL_MSG DB 13,10,’Flags: $’ F_SYM DB ‘SZAPC’ F_MASK DB 80H,40H,10H,4,1 ; Routine to display reg contents stored by ENVIR D_ENV: MOV SI,0 ; init ptr to reg data MOV CX,11 ; 11 regs in all CALL CRLF ; begin new line T_DR: MOV AL,R_LETS[SI] ; reg name, 1st char CALL C_OUT ; display it MOV AL,R_LETS[SI+1] ; reg name, 2nd char CALL C_OUT MOV AL,':' CALL C_OUT MOV BX,R_AX ; store addr for AX MOV DX,WORD PTR[BX+SI] ; get reg data CALL H_OUT ; send 4-digit hex no. CALL BLANK ; followed by 2 blanks CALL BLANK ADD SI,2 ; go to next reg MOV AX,SI ; format the display AND AL,07H ; remove 5 ms bits of the byte JNZ ADJST CALL CRLF ADJST: LOOP T_DR หมายเหตุ รูทีน D_ENV ใช ตารางข อมูลชื่อของเรจิสเตอร ต าง ๆ จากตําแหน งที่อยู R_LETS คือ R_LETS DB 'AXBXCXDXBPSIDISPDSSSES' 19) D_FLG รูทีนนี้แสดงสถานะของตัวบ งชี้ทางเลขคณิตทั้งหมด ๕ ตัว คือ S (sign), Z (zero), A (auxiliary), P (parity) และ C (carry) รายการชุดคําสั่งภาษาแอสเซมบลีของรูทีน D_FLG (Antonakos, 1996: 510) เป นดังนี้ ; Routine to display 5 flags D_FLG: LEA SI,FL_MSG ; offset addr of flag message CALL S_END ; send message to PC MOV SI,0 ; ptr to tables MOV CX,5 ; count for 5 flags N_FLG: MOV AL,F_SYM[SI] ; flag name (SZAPC) CALL C_OUT ; send char to PC MOV AL,'=' CALL C_OUT MOV BX,F_LAGS ; store addr for flags MOV AX,WORD PTR[BX] ; get flag byte AND AL,F_MASK[SI] ; extract specified flag MOV AL,'0' ; this does not alter flags JZ NOT_1 ; flag status = 0 INC AL ; flag status = 1 NOT_1: CALL C_OUT ; display status CALL BLANK ; followed by 2 blanks CALL BLANK INC SI ; go to next flag LOOP N_FLG ; repeat RET ENVIR ENDP หมายเหตุ รูทีน D_FLG ใช ตารางข อมูลรวม ๓ ตาราง คือ FL_MSG DB 13,10,'Flags: $' F_SYM DB 'SZAPC' ; Routine to display reg contents stored by ENVIR D_ENV: MOV SI,0 ; init ptr to reg data MOV CX,11 ; 11 regs in all CALL CRLF ; begin new line T_DR: MOV AL,R_LETS[SI] ; reg name, 1st char CALL C_OUT ; display it MOV AL,R_LETS[SI+1] ; reg name, 2nd char CALL C_OUT MOV AL,':' CALL C_OUT MOV BX,R_AX ; store addr for AX MOV DX,WORD PTR[BX+SI] ; get reg data CALL H_OUT ; send 4-digit hex no. CALL BLANK ; followed by 2 blanks CALL BLANK ADD SI,2 ; go to next reg MOV AX,SI ; format the display AND AL,07H ; remove 5 ms bits of the byte JNZ ADJST CALL CRLF ADJST: LOOP T_DR หมายเหตุ รูทีน D_ENV ใช ตารางข อมูลชื่อของเรจิสเตอร ต าง ๆ จากตําแหน งที่อยู R_LETS คือ R_LETS DB 'AXBXCXDXBPSIDISPDSSSES' 19) D_FLG รูทีนนี้แสดงสถานะของตัวบ งชี้ทางเลขคณิตทั้งหมด ๕ ตัว คือ S (sign), Z (zero), A (auxiliary), P (parity) และ C (carry) รายการชุดคําสั่งภาษาแอสเซมบลีของรูทีน D_FLG (Antonakos, 1996: 510) เป นดังนี้ ; Routine to display 5 flags D_FLG: LEA SI,FL_MSG ; offset addr of flag message CALL S_END ; send message to PC MOV SI,0 ; ptr to tables MOV CX,5 ; count for 5 flags N_FLG: MOV AL,F_SYM[SI] ; flag name (SZAPC) CALL C_OUT ; send char to PC MOV AL,'=' CALL C_OUT MOV BX,F_LAGS ; store addr for flags MOV AX,WORD PTR[BX] ; get flag byte AND AL,F_MASK[SI] ; extract specified flag MOV AL,'0' ; this does not alter flags JZ NOT_1 ; flag status = 0 INC AL ; flag status = 1 NOT_1: CALL C_OUT ; display status CALL BLANK ; followed by 2 blanks CALL BLANK INC SI ; go to next flag LOOP N_FLG ; repeat RET ENVIR ENDP หมายเหตุ รูทีน D_FLG ใช ตารางข อมูลรวม ๓ ตาราง คือ FL_MSG DB 13,10,'Flags: $' F_SYM DB 'SZAPC' F_MASK DB 80H,40H,10H,4,1

RkJQdWJsaXNoZXIy NTk0NjM=