Thông báo

Collapse
No announcement yet.

Ai có kinh nghiệm sử dụng lệnh push , pop?

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

  • Ai có kinh nghiệm sử dụng lệnh push , pop?

    bạn nào đã làm việc với lệnh push , pop thì chia sẻ kinh nghiệm cho mình với, trong sách Tống viết ít quá!
    cho mình hỏi thêm con 74373 kích mức mấy thì nó chốt(chân \ LE)

  • #2
    Nguyên văn bởi ongtho Xem bài viết
    bạn nào đã làm việc với lệnh push , pop thì chia sẻ kinh nghiệm cho mình với, trong sách Tống viết ít quá!
    cho mình hỏi thêm con 74373 kích mức mấy thì nó chốt(chân \ LE)
    Giải thích bằng ví dụ cho dễ hiểu nha:
    PUSH ACC ; Lưu giá trị của thanh ghi A vào đỉnh của ngăn xếp
    hoặc
    PUSH 00H ; Lưu giá trị của thanh ghi R0 vào đỉnh của ngăn xếp
    Con trỏ ngăn xếp SP sẽ được tăng lên 1.

    POP ACC ; Lấy giá trị của đỉnh ngăn xếp gán cho thanh ghi A
    hoặc
    POP 00H ; Lấy giá trị của đỉnh ngăn xếp gán cho thanh ghi R0
    Con trỏ ngăn xếp sẽ bị giảm đi 1.

    Nguyên lý của ngăn xếp là FILO (First In Last Out - Vào Trước Ra Sau). Bạn đọc thêm phần ngăn xếp để hiểu rõ hơn về nguyên lý làm việc của nó.

    Chỉ đơn giản vậy thôi.
    Ứng dụng thường thấy của 2 lệnh này là để bảo toàn giá trị các thanh ghi khi ta tác động đến nó trong một đoạn chương trình và khi kết thúc đoạn chương trình đó ta muốn trả lại giá trị cũ của nó trước khi bắt đầu thực hiện đoạn chương trình đó!
    Ví dụ ta dùng lệnh gọi chương trình con chẳng hạn:

    Code:
    ...
    mov A, #00H
    CALL CTRINH_CON
    ...
    
    CTRINH_CON:
     mov A, #10H
     ret
    Kết thúc chương trình con thì giá trị của thanh ghi A sẽ là 10H
    Bạn muốn sau khi kết thúc chương trình con mà giá trị của A vẫn là 00, tức giá trị trước đó thì

    Code:
    CTRINH_CON:
     push ACC
     mov A, #10H
     pop ACC
     ret
    Ngoài ra chip tự động dùng lệnh PUSH và POP khi vào (để lưu lại thanh ghi PC - Program Counter) và ra khỏi các chương trình con (để trả về giá trị cũ vào PC).

    Còn về con 373 thì mức chốt của nó là mức 1, xem datasheet sẽ rõ, mà bạn nên dùng con 573 vì chân cẳng của nó đẹp hơn!
    Chúc thành công!

    Comment


    • #3
      Theo tôi biết hì con 373 chân /LE mức 1 cho qua, mức 0 chốt lại.
      Lệnh push dùng đê cất nội dung 1 thanh ghi nào đó vào ngăn xếp.
      VD: Push acc ; cất a
      Push dph ; cất dph
      push dpl ; cất dpl
      mỗi lần dùng push thì con tro ngăn xếp sẽ tăng lên 1.
      Và khi lấy ra thì dùng lệnh pop. như trong VD trên:
      pop dpl ; lấy lại giá trị của dpl
      pop dph ; lấy lại giá trị của dph
      pop acc ; lây lại giá trị của A.
      Chú ý là vào trước ra sao như trong VD trên A cất vào trước thì lấy ra sao.

      Comment


      • #4
        cảm ơn các bạn nhiều!

        vậy là hiểu thêm một tẹo rồi... thanks a lot!

        Comment


        • #5
          Nguyên văn bởi big_sky Xem bài viết
          Theo tôi biết hì con 373 chân /LE mức 1 cho qua, mức 0 chốt lại.
          Lệnh push dùng đê cất nội dung 1 thanh ghi nào đó vào ngăn xếp.
          VD: Push acc ; cất a
          Push dph ; cất dph
          push dpl ; cất dpl
          mỗi lần dùng push thì con tro ngăn xếp sẽ tăng lên 1.
          Và khi lấy ra thì dùng lệnh pop. như trong VD trên:
          pop dpl ; lấy lại giá trị của dpl
          pop dph ; lấy lại giá trị của dph
          pop acc ; lây lại giá trị của A.
          Chú ý là vào trước ra sao như trong VD trên A cất vào trước thì lấy ra sao.
          Theo tôi thế này thì tổng quát hơn về Puss, pop. Dựa trên Ví dụ của Big_sky:

          Code:
          cất nội dung 1 thanh ghi nào đó vào ngăn xếp.
          VD: Push acc              ; cất a
                Push dph              ; cất dph
                push dpl               ; cất dpl
          Khi lấy ra, giả sử có 1 thanh ghi xxx nào đó thì ta có thể:
          pop xxx ; lấy lại giá trị của dpl (đã lưu trong ngăn xếp) vào thanh ghi xxx
          pop xxx ; lấy lại giá trị của dph trả về xxx
          pop xxx ; lây lại giá trị của cc trả về xxx


          Có gì không phải mong được các bác chỉ giáo

          PT.
          Núi cao bởi có đất bồi
          Núi chê đất thấp, núi ngồi ở đâu?
          Muôn dòng sông đổ biển sâu
          Biển chê sông nhỏ, biển đâu nước còn?

          Comment


          • #6
            Nguyên văn bởi phanta Xem bài viết
            Theo tôi thế này thì tổng quát hơn về Puss, pop. Dựa trên Ví dụ của Big_sky:

            Code:
            cất nội dung 1 thanh ghi nào đó vào ngăn xếp.
            VD: Push acc              ; cất a
                  Push dph              ; cất dph
                  push dpl               ; cất dpl
            Khi lấy ra, giả sử có 1 thanh ghi xxx nào đó thì ta có thể:
            pop xxx ; lấy lại giá trị của dpl (đã lưu trong ngăn xếp) vào thanh ghi xxx
            pop xxx ; lấy lại giá trị của dph trả về xxx
            pop xxx ; lây lại giá trị của cc trả về xxx


            Có gì không phải mong được các bác chỉ giáo

            PT.
            Nếu như ta viết như thế này:
            Push acc ; cất a
            Push dph ; cất dph
            push dpl ; cất dpl[/CODE]
            sau đó lấy ra là:
            pop acc
            pop acc
            pop acc
            thì thanh ghi A có được lấy lần lượt các giá trị acc, dph, dpl ko

            Comment

            Về tác giả

            Collapse

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

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

            Collapse

            Đang tải...
            X