{"resolved":true,"match_type":"uuid","source_type":"original_book","book_id":"38270854-596f-4a26-8183-db8c968c6020","title":"编码 隐匿在计算机软硬件背后的语言","author":null,"edition":null,"publisher":null,"year":null,"isbn":"9787121181184","requested_by":"printed_page","book":{"source_type":"original_book","book_id":"38270854-596f-4a26-8183-db8c968c6020","id":"38270854-596f-4a26-8183-db8c968c6020","uuid":"38270854-596f-4a26-8183-db8c968c6020","title":"编码 隐匿在计算机软硬件背后的语言","normalized_title":"编码隐匿在计算机软硬件背后的语言","author":null,"edition":null,"publisher":null,"year":null,"isbn":"9787121181184","isbns":["9787121181184","0123456789","6044921875","3039331000","0000000000","0000000000000"],"parsed":true,"ai_readable":true,"document_type":"book","page_count":438,"navigation_url":"https://workshop.closeclaw.top/ai/book/38270854-596f-4a26-8183-db8c968c6020","title_url":"https://workshop.closeclaw.top/ai/title/%E7%BC%96%E7%A0%81%20%E9%9A%90%E5%8C%BF%E5%9C%A8%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%BD%AF%E7%A1%AC%E4%BB%B6%E8%83%8C%E5%90%8E%E7%9A%84%E8%AF%AD%E8%A8%80","fixed_page_url_template":"https://workshop.closeclaw.top/ai/book/38270854-596f-4a26-8183-db8c968c6020/page/{printed_page}","path_api_url_template":"https://workshop.closeclaw.top/api/ai/book/38270854-596f-4a26-8183-db8c968c6020/page/{printed_page}","read_url":"https://workshop.closeclaw.top/api/ai/read/38270854-596f-4a26-8183-db8c968c6020","page_url":"https://workshop.closeclaw.top/api/ai/books/38270854-596f-4a26-8183-db8c968c6020/page","search_url":"https://workshop.closeclaw.top/api/ai/books/38270854-596f-4a26-8183-db8c968c6020/search"},"page":{"printed_page":315,"pdf_page":331,"physical_index":331,"physical_index_base":0,"printed_page_status":"recognized","page_sha256":"237acc80b19fcaa59c075d83afd0da8a0ed9e135495d71ccf7314d0f550346b3"},"chapter":"编码隐匿在计算机软硬件背后的语言","content":"像这样一段字符串：\n\n$$\nH e l l o , y o u !\n$$\n\n转换成ASCII码，用十六进制数表示如下：\n\n$$\n4 8 6 5 6 C 6 \\mathrm { F } 2 \\mathrm { C } 2 0 7 9 6 \\mathrm { F } 7 5 2 1\n$$\n\n这段编码中，除了普通的字符，逗号（编码2C）、空格（编码20）和感叹号（编码21）容易遗漏，需要额外注意。我们再来看一个例子：\n\n$$\nI a m \\ I 2 y e a r s o l d .\n$$\n\n它用 ASCII 码表示为：\n\n49 20 61 6D 20 31 32 20 79 65 61 72 73 20 6F 6C 64 2E\n\n有意思的是数字12的表示方法。在这段编码串中，它被表示成十六进制数31h和32h，也就是数字1和2的ASCII码的组合。当数字12以文本流的身份出现时，不应该用十六进制码 01h和 02h，或者BCD码12h，或者0Ch来表示。因为这些编码在 ASCII码中表示其他的意思。\n\n在 ASCII码中，一个大写字母与其对应的小写字母的ASCII码值相差20h。这种规律大大简化了程序代码的编写，例如一段将特定的字符串变成大写的程序。假设有一个字符串存放在内存的某个区域，每个字符占据一个字节。下面是一段8080子程序，初始状态下字符串的首地址存放在寄存器HL中；寄存器C存放字符串的长度，也就是字符的个数。\n\nCapitalize: MOV A, C ；c表示剩余的字符数CPI A, 00h ；与0进行比较JZ AllDone ；如果剩余的字符数为0，程序结束MOV A, [HL] ；取得下一个字符CPI A, 61h ；判断A代表的字符的ASCII码是否比a'小JC Skipit ；如果比a'小，就跳过CPI A, 78h ；判断是否比′z′大JNC SkipIt ；如果是，则跳过SBI A, 20h ；判断是否是小写，如果是，则减20hMOV [HL], A ；保存修改过的字符  \nSkipIt: INX HL ；指向下一个字符DCR C ；计数器减一\n\n20 ASCII 码和字符转换\n\n315","previous_page":314,"next_page":316}