Thông báo

Collapse
No announcement yet.

gọi hàm có tham số trong lập trình ASM

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

  • gọi hàm có tham số trong lập trình ASM

    Các bác cho em hỏi, nếu em gọi hàm trong ASM bình thường như 1 thủ tục thì không sao nhưng bây giờ em muốn truyền 1 tham số cho hàm,
    chẳng hạn như hàm delay(long timedelay) với timedelay là 1 tham số tùy chọn thì làm thế nào được ạ. Chứ nếu mỗi thời gian delay khác nhau thì em lại viết 1 thủ tục thì hơi mệt.
    Em cảm ơn các bac nhiều.

  • #2
    Bạn có thể đưa tạm số truyền vào các thanh ghi R trước khi gọi hàm, trong đoạn mã viết hàm thì xử lí dữ liệu với các thanh ghi này.
    vd (8051):

    main:
    MOV R7,#100
    CALL DELAY_MS ;gọi hàm trễ 100ms
    ...

    DELAY_MS:
    CALL DELAY_1000us
    DJNZ R7,DELAY_MS
    RET
    !e

    Comment


    • #3
      Lâu lâu mới có 1 câu hỏi hay
      Nói chung lập trình ASM trong AVR hay bất kể con gì đó, kể cả con 386 thì người lập trình vẫn phải loay hoay theo cách tư duy của mình sao cho chíp hiểu được mình đang định làm gì.
      Trước hết bạn hãy nhìn hình sau:
      Đây là code của sol.exe và chúng ta thấy nó gọi một số hàm GDI và API của WIN

      Rõ ràng trình biên dịch cũng đã tổ chức truyền các tham số, và phần lớn bằng 1 cách an toàn và hợp lý nhất.

      mov a, tham số 1
      push a
      mov a, tham số 2
      push a
      ...
      call function
      ...
      function:
      pop a; lấy tham số 1
      pop a; lấy tham số 2

      ngoài ra sau call function còn có thể có 1 đống lệnh pop để lấy các giá trị sau hàm tùy theo hàm được gọi thực hiện tác vụ gì đó.

      Đương nhiên còn có nhiều cách khác nữa, chẳng hạn như tham số static hoặc thanh ghi trực tiếp nhưng rất hạn hữu trong thực tế vì có thể số lượng thanh ghi hoặc bộ nhớ của các biến tĩnh mà chúng ta ít gặp.
      Nói túm lại là sử dụng push và pop là có thể giải quyết được vấn đề này, tuy đơn giản nhưng rất tốt vì nó khá linh hoạt trong khi bạn viết chương trình.
      Chúc vui/
      Last edited by phuongmd; 23-05-2010, 22:47.
      TEL: 098.3603646
      QUADROTOR QUADCOPTER MULTIROTOR QUAD QUAD Made in Vietnam

      Comment

      Về tác giả

      Collapse

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

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

      Collapse

      Đang tải...
      X