Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 5 của 5
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Bản chất của các phép toán ( +, -, *, / )

    Xin chào tất cả mọi người,
    hiện mình đang có 1 thắc mắc nhỏ, bác nào biết xin vui lòng chỉ giúp.
    Mình đang hỏi trong phạm vi nhúng nha.
    Ví dụ mình có 3 biến:
    // Phạm vi của short: 0x8000 ~ 0x7FFF
    short a,b,c;
    c = a + b;
    Nếu a = 0x7FFF, b = 0x7FFF thì kết quả c nhận vào là 0xFFFE tức là -2 (bị overflow). Ý mình muốn hỏi ở đây là trước khi kết quả được gán về cho c (2byte) thì sẽ có 1 thanh ghi dùng để chứa kết quả của a+b. Vậy thanh ghi này là 2 byte hay 4 byte hay là lớn hơn???
    Nếu được bác nào xin giải thích dùm cơ chế + trong nhúng không? Cách làm việc của các thanh ghi?
    Xin cảm ơn nhiều.

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Chỉ có dịch ra ASM thì mới biết được thôi.

    p/s: thanh ghi có thể truy cập bằng ASM, còn C compiler chỉ dịch ra ASM thôi [IMG]images/smilies/smile.png[/IMG]

  3. #3
    Cảm ơn bạn đã góp ý. Ý mình muốn hỏi là:
    Nói cụ thể hơn là:
    long c;
    short a,b;
    c = a+b;
    Nếu a là Maximum (tức a = 32767) và b là Maximum (tức b = 32767) thì kết quả của c sẽ là -2 (overflow) hay là 65534 (ko overflow)??
    Thanks.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    -2 nhóe.
    Vì kết quả của phép cộng 2 số short phải là (signed) short (tức là -2), sau đó đc sign-extended vào long.

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình không còn theo ASM nữa, nhưng nói sơ qua như thế này, một phép cộng ( theo như ASM hiểu ở mức độ thanh ghi), nếu như có tràn số, thì thanh ghi cờ tràn sẽ được bật.
    Nói tới đây có thể bạn đã hiểu là ngoài các thanh ghi đa dụng, CPU còn bao gồm hàng loạt thanh ghi khác nữa.
    Tràn số học thuộc về trách nhiệm của người lập trình, sử dụng cờ tràn hay không là theo phép toán mà bạn muốn.
    Nói sau cùng, kết quả là một số âm nào đó hay là một giới hạn 65535 là tùy theo chương trình bạn nghĩ nó là số âm đó hay là giới hạn 65535 đều được.
    Nếu bạn muốn hiểu kỹ hơn, hãy tìm hiểu ở các tài liệu lập trình hệ thống với ASM (đề tài số bù 1).

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •