Bảng ASCII nhìn theo 4 cột (2017)
(garbagecollected.org)- Nếu chia ASCII thành 7 bit gồm 2 bit cao (nhóm) và 5 bit thấp (giá trị) rồi sắp xếp thành bảng 4 cột, mối quan hệ giữa ký tự điều khiển và ký tự có thể in ra sẽ lộ rõ ngay lập tức
- Phím
CTRLhoạt động bằng cách đưa các bit cao của ký tự đầu vào về 0, từ đó tạo ra ký tự điều khiển (control character) có cùng 5 bit thấp - Ví dụ, khi nhấn CTRL với
[(10 11011) sẽ thu đượcESC(00 11011), điều này có thể giải thích bằng phép toán bit AND - Lý do
^Jlà xuống dòng,^Hlà backspace,^Ilà tab cũng xuất phát từ cùng một cấu trúc; cách hiển thị^M(CR) trong file văn bản Windows cũng theo đúng nguyên lý đó - Các bảng ASCII thông thường che khuất mẫu này, nhưng nếu chia cột theo từng 32 ký tự thì ý đồ thiết kế sẽ hiện ra rất rõ
Phát hiện về bảng ASCII 4 cột
- Người dùng Hacker News soneil đã đăng một phiên bản bảng ASCII được bố trí thành 4 cột theo đơn vị 32 ký tự
- Cách bố trí này cho thấy ngay việc chuyển đổi chữ hoa/chữ thường chỉ khác một bit, và bảng chữ cái có dạng
40h + giá trị thứ tự(chữ thường là60h) - Vì sao
^\[lại là ESC cũng có thể kiểm tra ngay từ bảng này
Cấu trúc mã hóa 7 bit của ASCII
- ASCII là mã hóa 7 bit, trong đó 2 bit đầu biểu thị 4 nhóm, còn 5 bit sau biểu thị 32 giá trị
- Nhóm
00: ký tự điều khiển (NUL, SOH, STX, ESC, v.v.) - Nhóm
01: ký tự đặc biệt và chữ số (Spc, !, ", #, v.v.) - Nhóm
10: chữ cái in hoa (@, A, B, C, v.v.) - Nhóm
11: chữ cái in thường (`, a, b, c, v.v.)
- Nhóm
- Các ký tự nằm trên cùng một hàng có 5 bit thấp giống hệt nhau, chỉ khác ở bit nhóm
Bảng ASCII 4 cột
| Bit | 00 (điều khiển) | 01 (đặc biệt/số) | 10 (in hoa) | 11 (in thường) |
|---|---|---|---|---|
| 00000 | NUL | Spc | @ | ` |
| 00001 | SOH | ! | A | a |
| 00010 | STX | " | B | b |
| 00011 | ETX | # | C | c |
| 00100 | EOT | $ | D | d |
| 00101 | ENQ | % | E | e |
| 00110 | ACK | & | F | f |
| 00111 | BEL | ' | G | g |
| 01000 | BS | ( | H | h |
| 01001 | TAB | ) | I | i |
| 01010 | LF | * | J | j |
| 01011 | VT | + | K | k |
| 01100 | FF | , | L | l |
| 01101 | CR | - | M | m |
| 01110 | SO | . | N | n |
| 01111 | SI | / | O | o |
| 10000 | DLE | 0 | P | p |
| 10001 | DC1 | 1 | Q | q |
| 10010 | DC2 | 2 | R | r |
| 10011 | DC3 | 3 | S | s |
| 10100 | DC4 | 4 | T | t |
| 10101 | NAK | 5 | U | u |
| 10110 | SYN | 6 | V | v |
| 10111 | ETB | 7 | W | w |
| 11000 | CAN | 8 | X | x |
| 11001 | EM | 9 | Y | y |
| 11010 | SUB | : | Z | z |
| 11011 | ESC | ; | [ | { |
| 11100 | FS | < | \ | | |
| 11101 | GS | = | ] | } |
| 11110 | RS | > | ^ | ~ |
| 11111 | US | ? | _ | DEL |
Cách hoạt động của phím CTRL
- Khi nhấn phím
CTRL, các bit cao của ký tự đầu vào được đặt về 0, khiến ký tự chuyển sang nhóm ký tự điều khiển (00) - Điều này có thể biểu diễn bằng phép toán bit AND:
10 11011([) AND00 11111(CTRL) =00 11011(ESC)
- Vì vậy, việc
CTRL+[tạo ra ESC không phải là gán ngẫu nhiên mà là một thiết kế dựa trên phép toán bit
Ví dụ thực tiễn
^J(CTRL+J) là LF (xuống dòng),^H(CTRL+H) là BS (backspace),^I(CTRL+I) là TAB- Khi kiểm tra file văn bản Windows bằng
cat -A, bạn sẽ thấy^M, vì xuống dòng của Windows dùng kiểu CR+LF - Việc người dùng vim trong terminal dùng
CTRL+[thay cho ESC cũng bắt nguồn từ cấu trúc bit này
Chưa có bình luận nào.