|
Tài trợ cho PIC Vietnam |
MPASM Lập trình bằng hợp ngữ là một việc làm vô cùng vất vả, tuy nhiên, để hiểu và làm việc với vi điều khiển, hợp ngữ trở thành một công cụ khá đắc lực ... |
|
Ðiều Chỉnh | Xếp Bài |
11-07-2009, 12:25 PM | #1 |
Đệ tử 1 túi
Tham gia ngày: Oct 2007
Bài gửi: 15
: |
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 |
|
|