PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > MPASM

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

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
Prev Previous Post   Next Post Next
Old 11-07-2009, 12:25 PM   #1
DIEP
Đệ 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
DIEP vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 02:40 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam