Thông báo

Collapse
No announcement yet.

so sánh lớn hơn,nhỏ hơn trong ASM

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #16
    Nguyên văn bởi thaithanhtam Xem bài viết
    có bác nào biết cách viết asm để so sánh lớn hơn hay nhỏ hơn giá trị định sẵn không?làm ơn cho mình xin code.CÁM ƠN NHIỀU !!!!!!!!
    với bạn tôi nghĩ bạn nên đọc kĩ lý thuyết về asm bởi đây chỉ là một trong những thứ rất nhỏ của asm...


    tôi sẽ lấy một ví dụ rất đơn giản và trực quan để bạn hiểu....

    so sánh số "1"và "2" rõ ràng bạn biết kết quả của nó rùi !! vấn đề là làm thế nào..... có rất nhiều giải pháp để so sánh với nhứng lệnh số học.. nó thuần túy là toán thôi bạn tự ngĩ thêm như chia....chẳng hạn.. hay lệnh trừ.....

    nhưng những cách đó tuy cho cờ nhớ nhưng lại thay đổi kết quả của toán hạng nguồn và đích ....... nó không cần thiết nếu mình chỉ cần so sánh.........oke vậy thì nên dùng lệnh :"cjne "sẽ tốt hơn........

    trở lại ví dụ trên tôi đang nói tôi sẽ làm như thế này nhé......

    mov A,#2 ;đưa số 2 vào thanh ghi A
    cjne A,#1,$+3 ; so sánh số "2" với "1"
    jc label
    bạn để ý lệnh cjne nó sẽ lấy nội dung của thanh ghi A lúc này trừ đi cho số một .....rõ ràng nếu A<1--->có cờ nhớ tức (C=1),,,,còn ngược lại nó sẽ không có cờ nhớ tức( C=0 ) nhưng nhớ là chỉ trong phạm vi đó thôi nhé nó chỉ lấy cờ nhớ có hoặc không còn sau lệnh này thì thanh ghi A vân không thay đổi là nó có giá trị là 2....

    còn cái "$+3" là cái nhãn bắt buộc của cấu trúc nhảy " JXXXX" chứ "J" tức là jump đó bạn.......

    cái nhãn "label" tùy bạn bạn có thể đặt tên của bạn cũng được nhưng nhớ nó cũng có luật đó....

    cái "$+3" là kết quả so sánh dẫu có như thế nào nó cũng làm lệnh kế tiếp...bạn lưu ý nhé......

    cụ thể trong ví dụ này nó sẽ nhảy đến lệnh "jc label" có nghĩa là nó sẽ nhảy đến cái nhãn mà bạn đặt tên...nếu có cờ nhớ là (C=1) /..... còn ở nhãn đó bạn làm gì thì tùy bạn.........

    ngược lại nếu không có cờ nhớ.....(C=0) thì lệnh "jc lable" trong ví dụ trên không được thỏa mãn nó sẽ bị bỏ qua để làm lệnh kế tiếp sau lệnh "jc label"

    nó chỉ là ví dụ đơn giản mong bạn hiểu cách so sánh 2 giá trị với nhau... còn khá nhiều cấu trúc so sánh dạng trên nhưng nguồn và đích co thể là địa chỉ gián tiếp.... địa chỉ trực tiếp,.. thanh ghi...... bạn tự tìm hiểu thêm......

    tui nghĩ asm học cũng không khó nó giống như c vậy mọi thứ đều dựa trên sự logíc......mỗi một cấu trúc bạn học thì nên chịu khó hiểu cái cách nó hoạt động.... để từ đó sẽ nhớ rất lâu....... và có thể hiểu đước các biến thể.....như lệnh jcne chẳng hạn.. có khoảng gần cả chục cái...gì đó bạn nên tổng hợp và biết cách so sánh giữa các cấu trúc.....chào bạn .....

    Comment


    • #17
      Cảm ơn Mongdu Nhiều Lắm,nhân Tiện Cho Mình Hỏi
      Có Cách Nào Vừa Xử Lý Delay Vừa Nhận Lệnh Từ Các Port I/o Không ?
      Với 89c51

      Comment


      • #18
        Nguyên văn bởi thaithanhtam Xem bài viết
        Cảm ơn Mongdu Nhiều Lắm,nhân Tiện Cho Mình Hỏi
        Có Cách Nào Vừa Xử Lý Delay Vừa Nhận Lệnh Từ Các Port I/o Không ?
        Với 89c51
        Đâu thể gọi Delay là xử lý, delay là hoãn thời gian xử lý thì đúng hơn. Do đó, xử lý mọi việc bình thường, đoạn nào cần delay (ví dụ như sau 1s thì bật tắt led 1 lần) thì dùng Ngắt của Timer, sau chừng đó thời gian thì tác động thôi
        Diễn đàn Vi điều khiển:

        Comment


        • #19
          mình muốn hỏi là khi vxl đang thực hiện chương trình delay thi có lệnh từ các chan i/o nó có nhận & thi hành lệnh không?

          Comment


          • #20
            Nguyên văn bởi thaithanhtam Xem bài viết
            mình muốn hỏi là khi vxl đang thực hiện chương trình delay thi có lệnh từ các chan i/o nó có nhận & thi hành lệnh không?
            Tại một thời điểm chỉ thực hiện duy nhất 1 lệnh
            Các lệnh từ I/O là gì nhỉ, theo mình biết chỉ có ngắt cứng từ I/O mới tạm gọi là lệnh, vậy thì VXL dừng việc thực hiện delay, và thực hiện trình phục vụ ngắt đó, vẫn theo nguyên tắc, 1 thời điểm chỉ thực hiện duy nhất 1 lệnh, từ mấy con Core Dual...
            Diễn đàn Vi điều khiển:

            Comment


            • #21
              Nguyên văn bởi thaithanhtam Xem bài viết
              mình muốn hỏi là khi vxl đang thực hiện chương trình delay thi có lệnh từ các chan i/o nó có nhận & thi hành lệnh không?
              Mình thấy:
              Nếu delay dùng các vòng lặp thì không
              Nếu delay dùng timer thì nếu đang xử lí lệnh từ các chân i/o, nó sẽ vẫn làm tiếp.
              !e

              Comment


              • #22
                Minh gợi ý bạn cách này để kiểm tra >,< ,= nhé.
                Mình sẽ nói cách tổng quát.
                Bạn dùng lệnh sau:
                subb A,Rn;(lệnh trừ có nhớ)
                JC nhayden(lam gi do)
                ;Khi a <Rn và thực hiện lệnh subb co C =1 và gặp lệnh JC sẽ nhay đến nhãn.
                CJNE A,#0,nhay(A>Rn);
                -----tiếp chương trình A= Rn----------------
                ---------------------
                đặt mấy cái nhãn trên xuống hàng này nhé
                ******************************
                Tóm lại:
                Sau lệnh subb nếu thấy cờ c = 1 nghĩa là kết quả là số âm đấy
                Nếu c=0 sẽ có 2 trường hợp
                1/Kết quả =0
                2/Kết quả >0

                Vậy là bạn đã có thể biết được số này < hay > hay = số kia rồi nhỉ.
                Nếu đúng nhớ cảm ơn mình nhé.
                chúc bạn thành công.

                Comment


                • #23
                  Sorry.Minh gởi lộn phòng rồi.
                  Mình gửi chương trình so sánh cho bạn Thaithanhtam

                  Comment


                  • #24
                    Minh gợi ý bạn cách này để kiểm tra >,< ,= nhé.
                    Mình sẽ nói cách tổng quát.
                    Bạn dùng lệnh sau:
                    subb A,Rn;(lệnh trừ có nhớ)
                    JC nhayden(lam gi do)
                    ;Khi a <Rn và thực hiện lệnh subb co C =1 và gặp lệnh JC sẽ nhay đến nhãn.
                    CJNE A,#0,nhay(A>Rn);
                    -----tiếp chương trình A= Rn----------------
                    ---------------------
                    đặt mấy cái nhãn trên xuống hàng này nhé
                    ******************************
                    Tóm lại:
                    Sau lệnh subb nếu thấy cờ c = 1 nghĩa là kết quả là số âm đấy
                    Nếu c=0 sẽ có 2 trường hợp
                    1/Kết quả =0
                    2/Kết quả >0

                    Vậy là bạn đã có thể biết được số này < hay > hay = số kia rồi nhỉ.
                    Nếu đúng nhớ cảm ơn mình nhé.
                    chúc bạn thành công.

                    Comment


                    • #25
                      Có lẽ bạn hỏi ko rõ ràng lắm.Nhưng mình hiểu ý bạn rồi.
                      Khi găp lệnh truy xuất đến các chân I/o(8051).Cho dù lệnh đó nằm trong chương trình delay thông thường hay trong chương trình con ngắt thì lệnh đều phải được thực thi.Diều này có nghĩa là ta có thể kiểm tra hay xuất dữ liệu ra các chân I/o thoải mái.
                      Vdu:Trong chương trình con delay bạn cứ CLR một chân nào đó xuống mức 0 thử xem(Nhớ gắn led vào chân đó để kiểm chứng nhé).
                      Về vấn đề này con 8951 rất dễ chịu.

                      Comment


                      • #26
                        mình đang viết chương trình quét phím ma trận nhưng ko biêt làm the nào để khi ấn 3 phím liên tiếp no dịch sang trái được mong sư giúp đỡ của mọi người hôm nay mình chưa mang theo chương trình. Mình viết bằng ASM . Mình cần sự giúp đỡ của mọi người. Có thể liên lạc với mình bằng số điện thoại 0962259564 mình sẽ gọi lai .

                        Comment


                        • #27
                          lệnh :
                          MOV R5,#40
                          MOV A,B LT 40
                          có nghĩa là j mấy anh

                          Comment


                          • #28
                            bạn cho mình hỏi thêm là nếu so sánh bằng thì dùngleenhhj như thế nào ạ

                            Comment


                            • #29
                              Nguyên văn bởi khachieu210 Xem bài viết
                              bạn cho mình hỏi thêm là nếu so sánh bằng thì dùngleenhhj như thế nào ạ
                              Giả sử mình có 1 biến A, mình muốn so sánh : nếu A = 1 thì xuất mức 1 ra P0.1, ngược lại thì A # 1 thì xuất mức 0 ra P0.1 :

                              Code:
                                   A    EQU    30H       ;ĐỊNH NGHĨA BIẾN A LÀ Ô NHỚ 30H
                              
                              ORG    0000H               ;BẮT ĐẦU CHƯƠNG TRÌNH CHÍNH
                              
                                  MOV    P0,#00H        ;XUẤT MỨC 0 RA TẤT CẢ CÁC CHÂN Ở PORT 0
                                  MOV    P1,#00H        ;XUẤT MỨC 0 RA TẤT CẢ CÁC CHÂN Ở PORT 1
                                  MOV    P2,#00H        ;XUẤT MỨC 0 RA TẤT CẢ CÁC CHÂN Ở PORT 2
                                  MOV    P3,#00H        ;XUẤT MỨC 0 RA TẤT CẢ CÁC CHÂN Ở PORT 3
                                  MOV    A,#0             ;NẠP SỐ 0 KHỞI ĐẦU CHO BIẾN A
                              
                              MAIN:                          ;NHÃN TÊN LÀ MAIN
                              
                                  CJNE    A,#1,LABEL    ;SO SÁNH : NẾU A # 1 THÌ NHẢY ĐẾN NHÃN LABEL, NGƯỢC LẠI A = 1 THÌ THỰC HIỆN LỆNH DƯỚI
                                  SETB    P0.1             ;XUẤT MỨC 1 RA CHÂN P0.1
                                  JMP      MAIN            ;NHẢY VỀ NHÃN MAIN VÔ ĐIỀU KIỆN
                              LABEL:                         ;NHÃN TÊN LÀ LABEL
                                  CLR      P0.1             ;XUẤT MỨC 0 RA CHÂN P0.1
                                  
                                  JMP      MAIN            ;NHẢY VỀ NHÃN MAIN VÔ ĐIỀU KIỆN
                              END                             ;KẾT THÚC CHƯƠNG TRÌNH
                              Last edited by tramng; 07-05-2014, 17:53.

                              Comment

                              Về tác giả

                              Collapse

                              thaithanhtam Tìm hiểu thêm về thaithanhtam

                              Bài viết mới nhất

                              Collapse

                              Đang tải...
                              X