{"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":298,"pdf_page":314,"physical_index":314,"physical_index_base":0,"printed_page_status":"recognized","page_sha256":"229b7fc813a883982392ffaee55ba9edc3a07242eab6c4bb0fefe5abf8169fa7"},"chapter":"编码隐匿在计算机软硬件背后的语言","content":"对HL中。8080中的乘法子程序如下：\n\n注意，上述子程序的第一行有一个标志Multiply。当然，实际上这个标志对应着子程序在存储器中的起始地址。该子程序在开始处使用了两个PUSH指令，这是因为通常在子程序的起始处要保存程序用到的寄存器。\n\n保存寄存器后，子程序下面要做的是把寄存器H和L置 $0 _ { \\circ }$ 尽管可以使用MVI（转移立即数）指令代替SUB指令来实现该操作，但这样会用到4个字节而不是2个字节的指令。子程序执行成功后，运算结果会保存到寄存器对HL中。\n\n接下来子程序把寄存器B中的数（即乘数）转移到累加器A，并判断该数是否为 $\\mathbf { 0 } _ { \\circ }$ 如果为0，则乘法子程序结束，因为乘数为 $0 _ { \\circ }$ 由于寄存器H和L已经为0，所以子程序可以使用 JZ（JumpIf Zero）指令跳转到程序最后的两条 POP指令。\n\n如果乘数不是0，子程序会把寄存器B置为 $\\mathbf { 0 } _ { \\circ }$ 现在寄存器对 BC存放的是16 位的被乘数，而累加器中存放的是乘数。接下来DAD指令会把BC（被乘数）加到HL（运算结果）中。A中的乘数减1，如果结果不为0，则执行JNZ（非零跳转）指令，该指令会使BC再次加到HL。这个循环会继续执行，直到循环的次数等于乘数为止（当然也可以利用8080的移位指令编写一个更有效率的乘法子程序)。\n\n编码——隐匿在计算机软硬件背后的语言\n\n298","previous_page":297,"next_page":299}