Thông báo

Collapse
No announcement yet.

Thắc mắc về câu lệnh ASM

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

  • Thắc mắc về câu lệnh ASM

    DELAY: MOV R7,#248 ; Nạp trị 248 vào thanh nhớ r7
    DJNZ R7,$ ; Cho giảm r7 theo bước -1 cho đến 0.
    RET ; Quay lại dòng lệnh sau lệnh call
    END; dừng biên dịch.
    Mấy bác cho e hỏi, giả sử trị = 0 (vì djnz không đc khác 0) vậy nó sẽ quay về đếm lại từ 248 hay là nhảy về lệnh start. Bấy lâu nay lập trình không chú ý cái này. Xin cảm ơn

  • #2
    Lâu rồi ko viết ASM nên phản xạ ko được tốt nhưng vẫn cố gắng giải thích đoạn mã của bạn như sau:
    /////////////////////////////////
    lcall delay://ví dụ đây là chỗ gọi chương trình delay
    ...
    ...
    DELAY: MOV R7,#248 ; //lúc này r7=248
    DJNZ R7,$ ; //đợi thằng r7=0
    RET ; //khi r7=0 thì nhảy về nơi đã gọi (lcall delay nếu lại gặp lệnh gọi chương trình con delay nữa thì nó mới nhảy tới chương trình delay tiếp tục chu kỳ)
    END;

    bạn đã chú thích "RET ; Quay lại dòng lệnh sau lệnh call" rồi mà bạn còn hỏi thế là sao? sau lệnh " ret" chương trình sẽ bắt đầu thực hiện những lệnh sao Lcall nghĩa là chỗ mấy dấu chấm đó .

    Comment


    • #3
      Vậy e hỏi nếu r7=0 vậy nó nhảy đi đâu, hổng lẽ nạp lại trị 255 và bắt đầu giảm xuống

      Comment


      • #4
        Lệnh DJNZ là giảm rồi kiểm tra, nếu khác không thì nhảy, nếu bằng không thì thực hiện câu lệnh phía sau. Nghĩa là nếu mov r7 = 0 lúc đầu thì đầu tiên nó giảm và tràn qua 255, (thực hiện 256 lần)
        TaiDangAtm

        Comment

        Về tác giả

        Collapse

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

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

        Collapse

        Đang tải...
        X