![]() |
Hỏi về lệnh trừ và chia trong asm
Tôi chạy thử đoạn code sau bằng MPLAB SIM :
RPM_HI equ 0Ch RPM_LO equ 0Dh MATH equ 0Eh org 0x00 LOOP movlw 0x58 ; Gán giá trị 88d vào RPM_LO movwf RPM_LO movlw 0x02 ; Gán giá trị 2d vào RPM_HI movwf RPM_HI movlw 0x4A ; Gán gía trị 74d vào w subwf RPM_LO,F ; rpmlo = rpmlo - 74 btfss STATUS,C ; Test bit C .Nếu rpmlo > 74 -> C = 1 ,Nếu rpmlo < 74 -> C = 0 . decf RPM_HI,F ; ;------------------------------------- ; Chia cho 4 ;------------------------------------- bcf STATUS,C ; rrf RPM_HI,F rrf RPM_LO,F ; / 2 ; bcf STATUS,C rrf RPM_HI,F rrf RPM_LO,F ; / 4 ; movlw .131 movwf MATH ; gán 131 vào thanh ghi map movf RPM_LO,W ; Đọc gía trị rpmlo sau khi đã chia subwf MATH,W ; W = 131 - rpm_lo clrf MATH movlw 0x00 movwf STATUS goto LOOP end Theo tôi hiểu khi thực hiện lệnh subwf RPM_LO,F thì kết quả phải là RPM_LO = 88-74 = 14 nhưng sao kết quả trên MPLAB SIM lại là 8 ? hoặc khi đến lệnh chia 2 : rrf RPM_HI , RRF RPM_LO , RPM_HI đang là 2 chia 2 = 1 ->đúng nhưng RPM_LO đang là 8 sao chia 2 lại bằng 0 . Xin các bạn vui lòng giải thích .Cám ơn |
Múi giờ GMT. Hiện tại là 10:53 AM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam