[{"data":1,"prerenderedAt":2301},["ShallowReactive",2],{"\u002Fposts\u002F7e2ce93":3,"surround-\u002Fposts\u002F7e2ce93":2295},{"id":4,"title":5,"body":6,"categories":2272,"date":2274,"description":2275,"donation":2276,"draft":2277,"extension":2278,"image":2279,"meta":2280,"navigation":2276,"path":2282,"permalink":2282,"published":2279,"readingTime":2283,"recommend":2279,"references":2279,"seo":2288,"sitemap":2289,"stem":2290,"tags":2291,"type":2293,"updated":2274,"__hash__":2294},"content\u002Fposts\u002F2026\u002Ftec_2008.md","TEC-2008教学计算机完整知识汇总",{"type":7,"value":8,"toc":2210},"minimark",[9,14,19,23,27,107,111,122,147,151,162,231,234,238,241,244,282,285,307,310,340,342,346,350,353,474,478,586,590,616,1001,1005,1024,1297,1299,1303,1307,1313,1321,1323,1327,1332,1338,1340,1344,1349,1352,1358,1361,1367,1371,1850,1852,1856,1861,1867,1878,1895,1897,1901,1916,1919,1925,1928,1934,1936,1940,1945,1948,1954,1957,1963,1966,1972,1975,1977,1981,1986,1990,1996,1999,2005,2008,2014,2017,2023,2025,2029,2033,2039,2045,2051,2055,2060,2066,2071,2075,2085,2091,2093,2097,2101,2105,2114,2117,2123,2126,2129,2132,2138,2142,2167,2169,2173],[10,11,13],"h2",{"id":12},"一基础概念","一、基础概念",[15,16,18],"h3",{"id":17},"_11-标志位czvs","1.1 标志位（C\u002FZ\u002FV\u002FS）",[20,21,22],"p",{},"标志位用于记录运算结果的状态，供条件转移指令判断使用。",[24,25,26],"h4",{"id":26},"标志位定义",[28,29,30,46],"table",{},[31,32,33],"thead",{},[34,35,36,40,43],"tr",{},[37,38,39],"th",{},"标志位",[37,41,42],{},"全称",[37,44,45],{},"含义说明",[47,48,49,65,79,93],"tbody",{},[34,50,51,55,58],{},[52,53,54],"td",{},"C",[52,56,57],{},"Carry 进位",[52,59,60,61,64],{},"- 加法：最高位产生进位，C=1；无进位，C=0",[62,63],"br",{},"- 减法：最高位产生借位，C=1；无借位，C=0",[34,66,67,70,73],{},[52,68,69],{},"Z",[52,71,72],{},"Zero 零",[52,74,75,76,78],{},"- 运算结果为 0，Z=1",[62,77],{},"- 运算结果不为 0，Z=0",[34,80,81,84,87],{},[52,82,83],{},"V",[52,85,86],{},"oVerflow 溢出",[52,88,89,90,92],{},"- 有符号数运算结果溢出，V=1",[62,91],{},"- 有符号数运算结果不溢出，V=0",[34,94,95,98,101],{},[52,96,97],{},"S",[52,99,100],{},"Sign 符号",[52,102,103,104,106],{},"- 运算结果为正数（最高位为0），S=0",[62,105],{},"- 运算结果为负数（最高位为1），S=1",[24,108,110],{"id":109},"标志位示例二进制加法","标志位示例：二进制加法",[112,113,119],"pre",{"className":114,"code":116,"language":117,"meta":118},[115],"language-text","0101  (二进制数1)\n+ 0011  (二进制数2)\n-------\n 1000  (二进制和)\n","text","",[120,121,116],"code",{"__ignoreMap":118},[123,124,125,129,137,140],"ul",{},[126,127,128],"li",{},"进位标志位（C）：无进位产生，C=0",[126,130,131,132,136],{},"溢出标志位（V）：0101（+5）与 0011（+3）均为正数，结果 1000 符号位为 1（负数），发生有符号数溢出，",[133,134,135],"strong",{},"V=1","（4 位有符号数范围为 −8～+7，5+3=8 超出上界）",[126,138,139],{},"零标志位（Z）：结果不为 0，Z=0",[126,141,142,143,146],{},"符号标志位（S）：结果 1000 符号位为 1，",[133,144,145],{},"S=1","（结果被解释为负数）",[24,148,150],{"id":149},"进位-c-和溢出-v-的区别","进位 (C) 和溢出 (V) 的区别",[20,152,153,154,157,158,161],{},"进位是",[133,155,156],{},"无符号数","运算的溢出，溢出是",[133,159,160],{},"有符号数","运算的溢出，二者相互独立：",[163,164,165,188,210],"ol",{},[126,166,167,170,176],{},[133,168,169],{},"示例 1：无进位无溢出",[112,171,174],{"className":172,"code":173,"language":117,"meta":118},[115],"0011  (3)\n+ 0011  (3)\n-------\n  0110  (6) 正确\n",[120,175,173],{"__ignoreMap":118},[123,177,178],{},[126,179,180,181,184,185],{},"无进位，",[120,182,183],{"code":183},"C=0","；无溢出，",[120,186,187],{"code":187},"V=0",[126,189,190,193,199],{},[133,191,192],{},"示例 2：有进位无溢出",[112,194,197],{"className":195,"code":196,"language":117,"meta":118},[115],"1111  (-1)\n+ 0111  (7)\n-------\n 1 0110 (6) 正确\n ---\n 进位\n",[120,198,196],{"__ignoreMap":118},[123,200,201],{},[126,202,203,204,207,208],{},"有进位，",[120,205,206],{"code":206},"C=1","；不产生溢出，",[120,209,187],{"code":187},[126,211,212,215,221],{},[133,213,214],{},"示例 3：有进位有溢出",[112,216,219],{"className":217,"code":218,"language":117,"meta":118},[115],"1100  (-4)\n+ 1000  (-8)\n-------\n 1 0100 (截断后为+4，实际结果为-12) 溢出\n --\n 进位\n",[120,220,218],{"__ignoreMap":118},[123,222,223],{},[126,224,203,225,227,228,230],{},[120,226,206],{"code":206},"；产生溢出：",[120,229,135],{"code":135},"（负数 + 负数 = 正数，违反有符号数运算规则）",[232,233],"hr",{},[15,235,237],{"id":236},"_12-指令格式与寻址方式","1.2 指令格式与寻址方式",[20,239,240],{},"TEC-2008 是 16 位教学计算机，支持单字和双字指令。",[24,242,243],{"id":243},"指令格式结构",[28,245,246,247],{},"\n  ",[47,248,249,246,260,246,265,246,270,246,277],{},[34,250,251,252,251,257,246],{},"\n    ",[52,253,256],{"rowSpan":254,"style":255},3,"vertical-align:middle","8位操作码",[52,258,259],{},"4位目的寄存器 DR | 4位源寄存器 SR",[34,261,262],{},[52,263,264],{},"8位 I\u002FO 端口地址",[34,266,267],{},[52,268,269],{},"8位相对转移指令偏移量",[34,271,272],{},[52,273,276],{"colSpan":274,"align":275},"2","center","↓",[34,278,279],{},[52,280,281],{"colSpan":274},"立即数 \u002F 直接地址 \u002F 变址偏移量（双字指令的第二个字）",[24,283,284],{"id":284},"说明",[123,286,287,301],{},[126,288,289,292,293],{},[133,290,291],{},"单字指令","：16 位，最高 8 位为操作码；最低 8 位分两种用法：\n",[163,294,295,298],{},[126,296,297],{},"运算指令：拆分为 4 位目的寄存器 + 4 位源寄存器",[126,299,300],{},"IO\u002F转移指令：作为完整 8 位端口地址或转移偏移量",[126,302,303,306],{},[133,304,305],{},"双字指令","：32 位，第二个字用于存放 16 位立即数、直接地址或变址偏移量。",[24,308,309],{"id":309},"支持的寻址方式",[123,311,312,315,322,325,328,331,334,337],{},[126,313,314],{},"寄存器寻址",[126,316,317,318,321],{},"寄存器间接寻址（",[120,319,320],{"code":320},"[寄存器]","，以寄存器值为内存地址）",[126,323,324],{},"立即数寻址",[126,326,327],{},"直接地址寻址",[126,329,330],{},"变址寻址",[126,332,333],{},"相对寻址",[126,335,336],{},"堆栈寻址",[126,338,339],{},"IO 端口地址",[232,341],{},[10,343,345],{"id":344},"二完整指令系统","二、完整指令系统",[15,347,349],{"id":348},"_21-指令分类","2.1 指令分类",[20,351,352],{},"TEC-2008 共支持 29 条基本指令，分为 6 大类：",[163,354,355,374,391,402,440,463],{},[126,356,357,360,361,364,365,364,368,364,371],{},[133,358,359],{},"数据移动指令 4 条","：",[120,362,363],{"code":363},"MVRR","、",[120,366,367],{"code":367},"MVRD",[120,369,370],{"code":370},"LDRR",[120,372,373],{"code":373},"STRR",[126,375,376,360,379,364,382,364,385,364,388],{},[133,377,378],{},"堆栈操作指令 4 条",[120,380,381],{"code":381},"PUSH",[120,383,384],{"code":384},"POP",[120,386,387],{"code":387},"PSHF",[120,389,390],{"code":390},"POPF",[126,392,393,360,396,364,399],{},[133,394,395],{},"输入输出指令 2 条",[120,397,398],{"code":398},"IN",[120,400,401],{"code":401},"OUT",[126,403,404,360,407,364,410,364,413,364,416,364,419,364,422,364,425,364,428,364,431,364,434,364,437],{},[133,405,406],{},"算术逻辑运算指令 11 条",[120,408,409],{"code":409},"ADD",[120,411,412],{"code":412},"SUB",[120,414,415],{"code":415},"AND",[120,417,418],{"code":418},"XOR",[120,420,421],{"code":421},"TEST",[120,423,424],{"code":424},"CMP",[120,426,427],{"code":427},"OR",[120,429,430],{"code":430},"DEC",[120,432,433],{"code":433},"INC",[120,435,436],{"code":436},"SHL",[120,438,439],{"code":439},"SHR",[126,441,442,360,445,364,448,364,451,364,454,364,457,364,460],{},[133,443,444],{},"转移指令 6 条",[120,446,447],{"code":447},"JMPA",[120,449,450],{"code":450},"JR",[120,452,453],{"code":453},"JRC",[120,455,456],{"code":456},"JRNC",[120,458,459],{"code":459},"JRZ",[120,461,462],{"code":462},"JRNZ",[126,464,465,360,468,364,471],{},[133,466,467],{},"子程序调用与返回指令 2 条",[120,469,470],{"code":470},"CALA",[120,472,473],{"code":473},"RET",[15,475,477],{"id":476},"_22-指令命名规则","2.2 指令命名规则",[28,479,480,490],{},[31,481,482],{},[34,483,484,487],{},[37,485,486],{},"缩写",[37,488,489],{},"全称说明",[47,491,492,500,508,516,524,532,540,547,554,562,570,578],{},[34,493,494,497],{},[52,495,496],{},"MV",[52,498,499],{},"MOVE",[34,501,502,505],{},[52,503,504],{},"LD",[52,506,507],{},"LOAD",[34,509,510,513],{},[52,511,512],{},"ST",[52,514,515],{},"STORE",[34,517,518,521],{},[52,519,520],{},"SH",[52,522,523],{},"SHIFT",[34,525,526,529],{},[52,527,528],{},"JMP",[52,530,531],{},"JUMP",[34,533,534,537],{},[52,535,536],{},"CAL",[52,538,539],{},"CALL",[34,541,542,544],{},[52,543,473],{},[52,545,546],{},"RETURN",[34,548,549,551],{},[52,550,450],{},[52,552,553],{},"JUMP RELATIVE",[34,555,556,559],{},[52,557,558],{},"R",[52,560,561],{},"REGISTER",[34,563,564,567],{},[52,565,566],{},"D",[52,568,569],{},"DATA",[34,571,572,575],{},[52,573,574],{},"A",[52,576,577],{},"ADDRESS",[34,579,580,583],{},[52,581,582],{},"F",[52,584,585],{},"FLAGS",[15,587,589],{"id":588},"_23-a-组指令","2.3 A 组指令",[20,591,592,593,360,596,599,600,603,604,607,608,611,612,615],{},"A 组指令为单字运算与相对转移指令，",[133,594,595],{},"8 位操作码范围",[120,597,598],{"code":598},"000xxxxx"," 或 ",[120,601,602],{"code":602},"0100xxxx","。\n",[133,605,606],{},"注","：CZVS 列中，",[120,609,610],{"code":610},"*"," 表示影响该标志位，",[120,613,614],{"code":614},"."," 表示不影响标志位，顺序为 C、Z、V、S。",[28,617,618,637],{},[31,619,620],{},[34,621,622,625,628,631,634],{},[37,623,624],{},"指令格式",[37,626,627],{},"汇编语句",[37,629,630],{},"操作数个数",[37,632,633],{},"CZVS",[37,635,636],{},"功能说明",[47,638,639,661,682,704,726,747,768,789,811,833,854,877,899,918,939,959,980],{},[34,640,641,646,651,653,656],{},[52,642,643],{},[120,644,645],{"code":645},"00000000 DR SR",[52,647,648],{},[120,649,650],{"code":650},"ADD DR, SR",[52,652,274],{},[52,654,655],{},"****",[52,657,658],{},[120,659,660],{"code":660},"DR ← DR + SR",[34,662,663,668,673,675,677],{},[52,664,665],{},[120,666,667],{"code":667},"00000001 DR SR",[52,669,670],{},[120,671,672],{"code":672},"SUB DR, SR",[52,674,274],{},[52,676,655],{},[52,678,679],{},[120,680,681],{"code":681},"DR ← DR - SR",[34,683,684,689,694,696,699],{},[52,685,686],{},[120,687,688],{"code":688},"00000010 DR SR",[52,690,691],{},[120,692,693],{"code":693},"AND DR, SR",[52,695,274],{},[52,697,698],{},".*..",[52,700,701],{},[120,702,703],{"code":703},"DR ← DR and SR",[34,705,706,711,716,718,720],{},[52,707,708],{},[120,709,710],{"code":710},"00000011 DR SR",[52,712,713],{},[120,714,715],{"code":715},"CMP DR, SR",[52,717,274],{},[52,719,655],{},[52,721,722,725],{},[120,723,724],{"code":724},"DR - SR","（不存结果，仅更新标志位）",[34,727,728,733,738,740,742],{},[52,729,730],{},[120,731,732],{"code":732},"00000100 DR SR",[52,734,735],{},[120,736,737],{"code":737},"XOR DR, SR",[52,739,274],{},[52,741,698],{},[52,743,744],{},[120,745,746],{"code":746},"DR ← DR xor SR",[34,748,749,754,759,761,763],{},[52,750,751],{},[120,752,753],{"code":753},"00000101 DR SR",[52,755,756],{},[120,757,758],{"code":758},"TEST DR, SR",[52,760,274],{},[52,762,655],{},[52,764,765,725],{},[120,766,767],{"code":767},"DR and SR",[34,769,770,775,780,782,784],{},[52,771,772],{},[120,773,774],{"code":774},"00000110 DR SR",[52,776,777],{},[120,778,779],{"code":779},"OR DR, SR",[52,781,274],{},[52,783,698],{},[52,785,786],{},[120,787,788],{"code":788},"DR ← DR or SR",[34,790,791,796,801,803,806],{},[52,792,793],{},[120,794,795],{"code":795},"00000111 DR SR",[52,797,798],{},[120,799,800],{"code":800},"MVRR DR, SR",[52,802,274],{},[52,804,805],{},"....",[52,807,808],{},[120,809,810],{"code":810},"DR ← SR",[34,812,813,818,823,826,828],{},[52,814,815],{},[120,816,817],{"code":817},"00001000 DR0000",[52,819,820],{},[120,821,822],{"code":822},"DEC DR",[52,824,825],{},"1",[52,827,655],{},[52,829,830],{},[120,831,832],{"code":832},"DR ← DR - 1",[34,834,835,840,845,847,849],{},[52,836,837],{},[120,838,839],{"code":839},"00001001 DR0000",[52,841,842],{},[120,843,844],{"code":844},"INC DR",[52,846,825],{},[52,848,655],{},[52,850,851],{},[120,852,853],{"code":853},"DR ← DR + 1",[34,855,856,861,866,868,871],{},[52,857,858],{},[120,859,860],{"code":860},"00001010 DR0000",[52,862,863],{},[120,864,865],{"code":865},"SHL DR",[52,867,825],{},[52,869,870],{},"*...",[52,872,873,876],{},[120,874,875],{"code":875},"DR, C ← DR * 2","（逻辑左移，最高位移入C）",[34,878,879,884,889,891,893],{},[52,880,881],{},[120,882,883],{"code":883},"00001011 DR0000",[52,885,886],{},[120,887,888],{"code":888},"SHR DR",[52,890,825],{},[52,892,870],{},[52,894,895,898],{},[120,896,897],{"code":897},"DR, C ← DR \u002F 2","（逻辑右移，最低位移入C）",[34,900,901,906,911,913,915],{},[52,902,903],{},[120,904,905],{"code":905},"01000001 OFFSET",[52,907,908],{},[120,909,910],{"code":910},"JR ADR",[52,912,825],{},[52,914,805],{},[52,916,917],{},"无条件相对跳转到 ADR",[34,919,920,925,930,932,934],{},[52,921,922],{},[120,923,924],{"code":924},"01000100 OFFSET",[52,926,927],{},[120,928,929],{"code":929},"JRC ADR",[52,931,825],{},[52,933,805],{},[52,935,936,938],{},[120,937,206],{"code":206},"时相对跳转到 ADR",[34,940,941,946,951,953,955],{},[52,942,943],{},[120,944,945],{"code":945},"01000101 OFFSET",[52,947,948],{},[120,949,950],{"code":950},"JRNC ADR",[52,952,825],{},[52,954,805],{},[52,956,957,938],{},[120,958,183],{"code":183},[34,960,961,966,971,973,975],{},[52,962,963],{},[120,964,965],{"code":965},"01000110 OFFSET",[52,967,968],{},[120,969,970],{"code":970},"JRZ ADR",[52,972,825],{},[52,974,805],{},[52,976,977,938],{},[120,978,979],{"code":979},"Z=1",[34,981,982,987,992,994,996],{},[52,983,984],{},[120,985,986],{"code":986},"01000111 OFFSET",[52,988,989],{},[120,990,991],{"code":991},"JRNZ ADR",[52,993,825],{},[52,995,805],{},[52,997,998,938],{},[120,999,1000],{"code":1000},"Z=0",[15,1002,1004],{"id":1003},"_24-bd-组指令","2.4 B\u002FD 组指令",[20,1006,1007,1008,360,1010,1013,1014,1017,1018,607,1020,611,1022,615],{},"B\u002FD 组指令为内存操作、IO、堆栈、子程序等指令，",[133,1009,595],{},[120,1011,1012],{"code":1012},"1000xxxx","（B组）或 ",[120,1015,1016],{"code":1016},"1100xxxx","（D组）。\n",[133,1019,606],{},[120,1021,610],{"code":610},[120,1023,614],{"code":614},[28,1025,1026,1040],{},[31,1027,1028],{},[34,1029,1030,1032,1034,1036,1038],{},[37,1031,624],{},[37,1033,627],{},[37,1035,630],{},[37,1037,633],{},[37,1039,636],{},[47,1041,1042,1066,1088,1110,1132,1151,1170,1192,1213,1237,1258,1276],{},[34,1043,1044,1054,1059,1061,1063],{},[52,1045,1046,1049,1050,1053],{},[120,1047,1048],{"code":1048},"10000000 00000000"," ",[120,1051,1052],{"code":1052},"ADR","(16 位)",[52,1055,1056],{},[120,1057,1058],{"code":1058},"JMPA ADR",[52,1060,825],{},[52,1062,805],{},[52,1064,1065],{},"无条件绝对跳转到 ADR",[34,1067,1068,1073,1078,1080,1082],{},[52,1069,1070],{},[120,1071,1072],{"code":1072},"10000001 DR SR",[52,1074,1075],{},[120,1076,1077],{"code":1077},"LDRR DR, [SR]",[52,1079,274],{},[52,1081,805],{},[52,1083,1084,1087],{},[120,1085,1086],{"code":1086},"DR ← [SR]","（寄存器间接寻址，从内存加载）",[34,1089,1090,1095,1100,1102,1104],{},[52,1091,1092],{},[120,1093,1094],{"code":1094},"10000010 I\u002FO PORT",[52,1096,1097],{},[120,1098,1099],{"code":1099},"IN I\u002FO PORT",[52,1101,825],{},[52,1103,805],{},[52,1105,1106,1109],{},[120,1107,1108],{"code":1108},"R0 ← [I\u002FO PORT]","（从端口读入，固定存入R0）",[34,1111,1112,1117,1122,1124,1126],{},[52,1113,1114],{},[120,1115,1116],{"code":1116},"10000011 DR SR",[52,1118,1119],{},[120,1120,1121],{"code":1121},"STRR [DR], SR",[52,1123,274],{},[52,1125,805],{},[52,1127,1128,1131],{},[120,1129,1130],{"code":1130},"[DR] ← SR","（寄存器间接寻址，写入内存）",[34,1133,1134,1139,1143,1146,1148],{},[52,1135,1136],{},[120,1137,1138],{"code":1138},"10000100 00000000",[52,1140,1141],{},[120,1142,387],{"code":387},[52,1144,1145],{},"0",[52,1147,805],{},[52,1149,1150],{},"标志寄存器FLAG入栈",[34,1152,1153,1158,1163,1165,1167],{},[52,1154,1155],{},[120,1156,1157],{"code":1157},"10000101 0000 SR",[52,1159,1160],{},[120,1161,1162],{"code":1162},"PUSH SR",[52,1164,825],{},[52,1166,805],{},[52,1168,1169],{},"寄存器SR的值入栈",[34,1171,1172,1177,1182,1184,1186],{},[52,1173,1174],{},[120,1175,1176],{"code":1176},"10000110 I\u002FO PORT",[52,1178,1179],{},[120,1180,1181],{"code":1181},"OUT I\u002FO PORT",[52,1183,825],{},[52,1185,805],{},[52,1187,1188,1191],{},[120,1189,1190],{"code":1190},"[I\u002FO PORT] ← R0","（向端口输出，固定取自R0）",[34,1193,1194,1199,1204,1206,1208],{},[52,1195,1196],{},[120,1197,1198],{"code":1198},"10000111 DR0000",[52,1200,1201],{},[120,1202,1203],{"code":1203},"POP DR",[52,1205,825],{},[52,1207,805],{},[52,1209,1210],{},[120,1211,1212],{"code":1212},"DR ← 栈顶出栈数据",[34,1214,1215,1222,1227,1229,1231],{},[52,1216,1217,1049,1220,1053],{},[120,1218,1219],{"code":1219},"10001000 DR0000",[120,1221,569],{"code":569},[52,1223,1224],{},[120,1225,1226],{"code":1226},"MVRD DR, DATA",[52,1228,274],{},[52,1230,805],{},[52,1232,1233,1236],{},[120,1234,1235],{"code":1235},"DR ← DATA","（加载16位立即数）",[34,1238,1239,1244,1248,1250,1252],{},[52,1240,1241],{},[120,1242,1243],{"code":1243},"10001100 00000000",[52,1245,1246],{},[120,1247,390],{"code":390},[52,1249,1145],{},[52,1251,655],{},[52,1253,1254,1257],{},[120,1255,1256],{"code":1256},"FLAG ← 栈顶出栈数据","（恢复全部标志位）",[34,1259,1260,1265,1269,1271,1273],{},[52,1261,1262],{},[120,1263,1264],{"code":1264},"10001111 00000000",[52,1266,1267],{},[120,1268,473],{"code":473},[52,1270,1145],{},[52,1272,805],{},[52,1274,1275],{},"子程序返回",[34,1277,1278,1285,1290,1292,1294],{},[52,1279,1280,1049,1283,1053],{},[120,1281,1282],{"code":1282},"11001110 00000000",[120,1284,1052],{"code":1052},[52,1286,1287],{},[120,1288,1289],{"code":1289},"CALA ADR",[52,1291,825],{},[52,1293,805],{},[52,1295,1296],{},"调用首地址为 ADR 的子程序",[232,1298],{},[10,1300,1302],{"id":1301},"三汇编程序设计示例","三、汇编程序设计示例",[15,1304,1306],{"id":1305},"_31-例-1输出单个字符-6","3.1 例 1：输出单个字符 '6'",[20,1308,1309,1312],{},[133,1310,1311],{},"功能","：在屏幕上输出显示一个字符 '6'。",[112,1314,1319],{"className":1315,"code":1317,"language":1318,"meta":118},[1316],"language-asm","A 2000        ; 地址从16进制的2000开始（内存RAM区的起始地址）\n2000: MVRD R0, 36 ; 把字符'6'的ASCII码送入R0\n2002: OUT  80     ; 输出显示字符'6'，80为串口数据端口地址\n2003: RET         ; 每个用户程序都必须用RET指令结束\n2004:              ; 按回车键即结束源程序的输入过程\n","asm",[120,1320,1317],{"__ignoreMap":118},[232,1322],{},[15,1324,1326],{"id":1325},"_32-例-2计算-1-到-10-的累加和","3.2 例 2：计算 1 到 10 的累加和",[20,1328,1329,1331],{},[133,1330,1311],{},"：计算 1 到 10 的累加和，运行后用 R 命令查看 R1 中的结果。",[112,1333,1336],{"className":1334,"code":1335,"language":1318,"meta":118},[1316],"A 2060\nMVRD R1, 0000  ; 置累加和的初值为0\nMVRD R2, 000A  ; 最大的加数（10）\nSUB  R3, R3    ; 预置参加累加的数为0\n(2065) INC  R3 ; 得到下一个参加累加的数\nADD  R1, R3    ; 累加计算\nCMP  R3, R2    ; 判断是否累加完\nJRNZ 2065      ; 未完，开始下一轮累加\nRET\n",[120,1337,1335],{"__ignoreMap":118},[232,1339],{},[15,1341,1343],{"id":1342},"_33-例-3循环输出-ascii-可打印字符","3.3 例 3：循环输出 ASCII 可打印字符",[20,1345,1346,1348],{},[133,1347,1311],{},"：在显示器屏幕上循环显示 95 个（包括空格字符）可打印字符。",[24,1350,1351],{"id":1351},"程序代码",[112,1353,1356],{"className":1354,"code":1355,"language":1318,"meta":118},[1316],"A 2000  ; 从内存的2000单元开始建立用户的第一个程序\n2000: MVRD R1,7E  ; 向寄存器传送直接数，7E是'~'的ASCII码\n2002: MVRD R0,20  ; 20是空格的ASCII码，从空格开始输出\n2004: OUT 80  ; 通过串行接口输出R0低位字节内容到显示器屏幕\n2005: PUSH R0  ; 保存R0寄存器的内容到堆栈中\n2006: IN 81  ; 读串口状态端口，bit0=1表示输出完成\n2007: SHR R0  ; R0寄存器的内容右移一位，bit0移入进位标志C\n2008: JRNC 2006  ; C≠1则输出未完成，继续查询\n2009: POP R0  ; 从堆栈中恢复R0寄存器的原内容\n200A: CMP R0,R1  ; 比较两个寄存器的内容，相等则Z=1\n200B: JRZ 200E  ; Z=1则跳转到程序结束\n200C: INC R0  ; R0自增，取下一个字符\n200D: JR 2004  ; 无条件跳转继续输出\n200E: RET  ; 子程序返回指令，教学计算机的用户程序必须用RET结束\n",[120,1357,1355],{"__ignoreMap":118},[24,1359,1360],{"id":1360},"运行结果",[112,1362,1365],{"className":1363,"code":1364,"language":117,"meta":118},[115],">G 2000\n!\"#$%&'()*+,-.\u002F0123456789:;\u003C=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmno\npqrstuvwxyz{|}~\nR0=007E  R1=007E  R2=20F5  R3=0000  SP=2780  PC=2200  R6=0000  R7=0000  R8=0000\nR9=0000  R10=0000  R11=0000  R12=0000  R13=0000  R14=2612  R15=0000  F=11000000\n",[120,1366,1364],{"__ignoreMap":118},[24,1368,1370],{"id":1369},"ascii-码字符集","ASCII 码字符集",[28,1372,1373,1404],{},[31,1374,1375],{},[34,1376,1377,1380,1383,1386,1389,1392,1395,1398,1401],{},[37,1378,1379],{},"L\\H",[37,1381,1382],{},"000",[37,1384,1385],{},"001",[37,1387,1388],{},"010",[37,1390,1391],{},"011",[37,1393,1394],{},"100",[37,1396,1397],{},"101",[37,1399,1400],{},"110",[37,1402,1403],{},"111",[47,1405,1406,1433,1459,1486,1513,1540,1568,1595,1623,1652,1681,1707,1736,1764,1793,1821],{},[34,1407,1408,1411,1414,1417,1420,1422,1425,1428,1431],{},[52,1409,1410],{},"0000",[52,1412,1413],{},"NUL",[52,1415,1416],{},"DLE",[52,1418,1419],{},"SP",[52,1421,1145],{},[52,1423,1424],{},"@",[52,1426,1427],{},"P",[52,1429,1430],{},"`",[52,1432,20],{},[34,1434,1435,1438,1441,1444,1447,1449,1451,1454,1456],{},[52,1436,1437],{},"0001",[52,1439,1440],{},"SOH",[52,1442,1443],{},"DC1",[52,1445,1446],{},"!",[52,1448,825],{},[52,1450,574],{},[52,1452,1453],{},"Q",[52,1455,574],{},[52,1457,1458],{},"q",[34,1460,1461,1464,1467,1470,1473,1475,1478,1480,1483],{},[52,1462,1463],{},"0010",[52,1465,1466],{},"STX",[52,1468,1469],{},"DC2",[52,1471,1472],{},"\"",[52,1474,274],{},[52,1476,1477],{},"B",[52,1479,558],{},[52,1481,1482],{},"b",[52,1484,1485],{},"r",[34,1487,1488,1491,1494,1497,1500,1503,1505,1507,1510],{},[52,1489,1490],{},"0011",[52,1492,1493],{},"ETX",[52,1495,1496],{},"DC3",[52,1498,1499],{},"#",[52,1501,1502],{},"3",[52,1504,54],{},[52,1506,97],{},[52,1508,1509],{},"c",[52,1511,1512],{},"s",[34,1514,1515,1518,1521,1524,1527,1530,1532,1535,1537],{},[52,1516,1517],{},"0100",[52,1519,1520],{},"EOT",[52,1522,1523],{},"DC4",[52,1525,1526],{},"$",[52,1528,1529],{},"4",[52,1531,566],{},[52,1533,1534],{},"T",[52,1536,566],{},[52,1538,1539],{},"t",[34,1541,1542,1545,1548,1551,1554,1557,1560,1563,1566],{},[52,1543,1544],{},"0101",[52,1546,1547],{},"ENQ",[52,1549,1550],{},"NAK",[52,1552,1553],{},"%",[52,1555,1556],{},"5",[52,1558,1559],{},"E",[52,1561,1562],{},"U",[52,1564,1565],{},"e",[52,1567,1562],{},[34,1569,1570,1573,1576,1579,1582,1585,1587,1589,1592],{},[52,1571,1572],{},"0110",[52,1574,1575],{},"ACK",[52,1577,1578],{},"SYN",[52,1580,1581],{},"&",[52,1583,1584],{},"6",[52,1586,582],{},[52,1588,83],{},[52,1590,1591],{},"f",[52,1593,1594],{},"v",[34,1596,1597,1600,1603,1606,1609,1612,1615,1618,1620],{},[52,1598,1599],{},"0111",[52,1601,1602],{},"BEL",[52,1604,1605],{},"ETB",[52,1607,1608],{},"'",[52,1610,1611],{},"7",[52,1613,1614],{},"G",[52,1616,1617],{},"W",[52,1619,1614],{},[52,1621,1622],{},"w",[34,1624,1625,1628,1631,1634,1637,1640,1643,1646,1649],{},[52,1626,1627],{},"1000",[52,1629,1630],{},"BS",[52,1632,1633],{},"CAN",[52,1635,1636],{},"(",[52,1638,1639],{},"8",[52,1641,1642],{},"H",[52,1644,1645],{},"X",[52,1647,1648],{},"h",[52,1650,1651],{},"x",[34,1653,1654,1657,1660,1663,1666,1669,1672,1675,1678],{},[52,1655,1656],{},"1001",[52,1658,1659],{},"HT",[52,1661,1662],{},"EM",[52,1664,1665],{},")",[52,1667,1668],{},"9",[52,1670,1671],{},"I",[52,1673,1674],{},"Y",[52,1676,1677],{},"i",[52,1679,1680],{},"y",[34,1682,1683,1686,1689,1691,1693,1696,1699,1701,1704],{},[52,1684,1685],{},"1010",[52,1687,1688],{},"LF",[52,1690,412],{},[52,1692,610],{},[52,1694,1695],{},":",[52,1697,1698],{},"J",[52,1700,69],{},[52,1702,1703],{},"j",[52,1705,1706],{},"z",[34,1708,1709,1712,1715,1718,1721,1724,1727,1730,1733],{},[52,1710,1711],{},"1011",[52,1713,1714],{},"VT",[52,1716,1717],{},"ESC",[52,1719,1720],{},"+",[52,1722,1723],{},";",[52,1725,1726],{},"K",[52,1728,1729],{},"[",[52,1731,1732],{},"k",[52,1734,1735],{},"{",[34,1737,1738,1741,1744,1747,1750,1753,1756,1759,1762],{},[52,1739,1740],{},"1100",[52,1742,1743],{},"FF",[52,1745,1746],{},"FS",[52,1748,1749],{},",",[52,1751,1752],{},"\u003C",[52,1754,1755],{},"L",[52,1757,1758],{},"|l",[52,1760,1761],{},"|",[52,1763],{},[34,1765,1766,1769,1772,1775,1778,1781,1784,1787,1790],{},[52,1767,1768],{},"1101",[52,1770,1771],{},"CR",[52,1773,1774],{},"GS",[52,1776,1777],{},"-",[52,1779,1780],{},"=",[52,1782,1783],{},"M",[52,1785,1786],{},"]",[52,1788,1789],{},"m",[52,1791,1792],{},"}",[34,1794,1795,1798,1801,1804,1806,1809,1812,1815,1818],{},[52,1796,1797],{},"1110",[52,1799,1800],{},"SO",[52,1802,1803],{},"RS",[52,1805,614],{},[52,1807,1808],{},">",[52,1810,1811],{},"N",[52,1813,1814],{},"^",[52,1816,1817],{},"n",[52,1819,1820],{},"~",[34,1822,1823,1826,1829,1832,1835,1838,1841,1844,1847],{},[52,1824,1825],{},"1111",[52,1827,1828],{},"SI",[52,1830,1831],{},"US",[52,1833,1834],{},"\u002F",[52,1836,1837],{},"?",[52,1839,1840],{},"O",[52,1842,1843],{},"_",[52,1845,1846],{},"o",[52,1848,1849],{},"DEL",[232,1851],{},[15,1853,1855],{"id":1854},"_34-例-4数字字符输入过滤","3.4 例 4：数字字符输入过滤",[20,1857,1858,1860],{},[133,1859,1311],{},"：从键盘上键入多个属于 '0' 到 '9' 的数字符并在屏幕上显示，遇非数字符结束程序。",[112,1862,1865],{"className":1863,"code":1864,"language":1318,"meta":118},[1316],"A 2040\nIN   81  ; 读串口状态端口，bit1=1表示有键盘输入\nSHR  R0  ; 第一次右移，bit0移入C\nSHR  R0  ; 第二次右移，bit1移入C\nJRNC 2040  ; 无输入则循环检测（C=0时跳转）\n(2044) IN   80  ; 把输入字符读到R0低位字节\nMVRD R1, 00FF\nAND  R0, R1  ; 将R0的高位字节清0\nMVRD R2, 0030   ; '0'的ASCII码\nMVRD R3, 0039   ; '9'的ASCII码\nCMP  R0, R2  ; 判输入字符是否小于'0'\nJRNC 2053  ; 小于'0'，跳转到程序结束处\nCMP  R3, R0  ; 判输入字符是否大于'9'\nJRNC 2053  ; 大于'9'，跳转到程序结束处\nOUT  80  ; 输出刚输入的数字符\nJMPA 2044  ; 转去等待下一个字符输入\n(2053) RET\n",[120,1866,1864],{"__ignoreMap":118},[1868,1869,1870],"blockquote",{},[20,1871,1872,1875,1876,360],{},[133,1873,1874],{},"注意","：以上代码结构需对照实验讲义核实，(2044) 标签之前的指令地址在笔记中未完整记录。\n",[133,1877,284],{},[123,1879,1880],{},[126,1881,1882,1884,1885,1888,1889,1891,1892,1894],{},[120,1883,424],{"code":424}," 实际执行减法（不存结果）。无符号比较时，",[120,1886,1887],{"code":1887},"R0 \u003C R2"," 发生借位，",[120,1890,183],{"code":183},"；否则 ",[120,1893,206],{"code":206},"。",[232,1896],{},[15,1898,1900],{"id":1899},"_35-例-5内存读写与大小写转换","3.5 例 5：内存读写与大小写转换",[20,1902,1903,1905,1906,1909,1910,1912,1913,1915],{},[133,1904,1311],{},"：读出指定内存中的大写字母字符，将其显示到屏幕上，转换为小写字母后再写回存储器的原存储单元。\n",[133,1907,1908],{},"操作步骤","：用 ",[120,1911,1559],{"code":1559}," 命令送入 6 个字符 'A'~'F' 到内存 20F0 开始的存储区域中，运行后用 ",[120,1914,566],{"code":566}," 命令查看。",[24,1917,1918],{"id":1918},"主程序",[112,1920,1923],{"className":1921,"code":1922,"language":1318,"meta":118},[1316],"A 2080\nMVRD  R3,  0006  ; 指定被读数据的个数\nMVRD  R2,  20F0  ; 指定被读、写数据内存区首地址\n(2084) LDRR  R0,  [R2]  ; 寄存器间接寻址，读内存字符到R0\nCALA  2100  ; 调用子程序，入口地址为2100\nDEC   R3  ; 剩余字符数减1\nJRZ   208B  ; 个数为0则结束程序\nINC   R2  ; 内存地址自增\nJR    2084  ; 循环处理下一个字符\n(208B) RET\n",[120,1924,1922],{"__ignoreMap":118},[24,1926,1927],{"id":1927},"子程序",[112,1929,1932],{"className":1930,"code":1931,"language":1318,"meta":118},[1316],"A 2100  ; 子程序从2100单元开始\nOUT   80  ; 输出R0中的字符\nMVRD  R1, 0020  ; 大写转小写的偏移量\nADD   R0, R1  ; 转换为小写字母\nSTRR  [R2], R0  ; 写回原内存单元\n(2105) IN    81  ; 查询串口输出状态\nSHR   R0\nJRNC  2105  ; 输出未完成则等待\nRET  ; 子程序返回\n",[120,1933,1931],{"__ignoreMap":118},[232,1935],{},[15,1937,1939],{"id":1938},"_36-例-6子程序调用大小写转换","3.6 例 6：子程序调用：大小写转换",[20,1941,1942,1944],{},[133,1943,1311],{},"：主程序完成从键盘读入字符并显示，调用子程序将大写字母转为小写并再次显示。",[24,1946,1918],{"id":1947},"主程序-1",[112,1949,1952],{"className":1950,"code":1951,"language":1318,"meta":118},[1316],"A 2040\n2040: IN  81  ; 检测键盘输入\n2041: SHR R0\n2042: SHR R0\n2043: JRNC 2040\n2044: IN  80  ; 读取输入字符到R0\n2045: OUT 80  ; 显示原字符\n2046: PUSH R0  ; 保存R0\n2047: IN 81  ; 等待输出完成\n2048: SHR R0\n2049: JRNC 2047\n204A: POP R0  ; 恢复R0\n204B: CALA 2050  ; 调用转换子程序\n204D: JMPA 2040  ; 循环读取\n204F: RET\n",[120,1953,1951],{"__ignoreMap":118},[24,1955,1927],{"id":1956},"子程序-1",[112,1958,1961],{"className":1959,"code":1960,"language":1318,"meta":118},[1316],"2050: MVRD R1,20  ; 大写转小写偏移量\n2052: ADD  R0,R1  ; 转换字符编码\n2053: OUT  80  ; 显示小写字符\n2054: RET  ; 子程序返回\n",[120,1962,1960],{"__ignoreMap":118},[24,1964,1360],{"id":1965},"运行结果-1",[112,1967,1970],{"className":1968,"code":1969,"language":117,"meta":118},[115],">G 2040\nAaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz\n",[120,1971,1969],{"__ignoreMap":118},[20,1973,1974],{},"说明：程序无输入判断逻辑，会持续运行。",[232,1976],{},[15,1978,1980],{"id":1979},"_37-例-7批量内存读写测试","3.7 例 7：批量内存读写测试",[20,1982,1983,1985],{},[133,1984,1311],{},"：将 A~F 写入内存 2240 开始的区域，并显示出来。",[24,1987,1989],{"id":1988},"程序录入错误版本","程序录入（错误版本）",[112,1991,1994],{"className":1992,"code":1993,"language":1318,"meta":118},[1316],">A 2220\n2220: MVRD R3, 6\n2222: MVRD R2, 223f\n2224: MVRD R1, 40\n2226: INC R2\n2227: INC R1\n2228: STRR R2, R1  ; 错误：寄存器间接寻址必须加[]\n      ^Error\n2228: STRR [R2], R1  ; 正确写法\n2229: LDRR R0, [R2]\n222A: out 80\n222B: IN 81\n222C: SHR R0\n222D: JRNC 202b  ; 错误：相对跳转地址超出范围\n      ^Error\n222D: JRNC 222b  ; 正确写法\n222E: DEC R3\n222F: JRNC 2226  ; 错误：应使用JRNZ判断循环\n2230: RET\n",[120,1995,1993],{"__ignoreMap":118},[24,1997,1998],{"id":1998},"运行前内存",[112,2000,2003],{"className":2001,"code":2002,"language":117,"meta":118},[115],">D 2240\n2240 0000 0000 0000 0000 0000 0000 0000 0000\n",[120,2004,2002],{"__ignoreMap":118},[24,2006,1360],{"id":2007},"运行结果-2",[112,2009,2012],{"className":2010,"code":2011,"language":117,"meta":118},[115],">G 2220\nABCDEF\n",[120,2013,2011],{"__ignoreMap":118},[24,2015,2016],{"id":2016},"运行后内存",[112,2018,2021],{"className":2019,"code":2020,"language":117,"meta":118},[115],">D 2240\n2240 0041 0042 0043 0044 0045 0046 0000 0000\n",[120,2022,2020],{"__ignoreMap":118},[232,2024],{},[15,2026,2028],{"id":2027},"_38-输入输出轮询机制","3.8 输入输出轮询机制",[24,2030,2032],{"id":2031},"_1-输出完成等待循环","1. 输出完成等待循环",[20,2034,2035,2038],{},[133,2036,2037],{},"串口状态定义","：81端口bit0=1表示输出完成。",[112,2040,2043],{"className":2041,"code":2042,"language":1318,"meta":118},[1316],"(2028) IN   81  ; 读取串口输出状态\nSHR  R0  ; bit0移入进位标志C\nJRNC 2028  ; C=0表示未完成，循环等待\n",[120,2044,2042],{"__ignoreMap":118},[20,2046,2047,2050],{},[133,2048,2049],{},"测试建议","：去掉这三行后，字符可能输出不完整或乱码。",[24,2052,2054],{"id":2053},"_2-键盘输入检测循环","2. 键盘输入检测循环",[20,2056,2057,2059],{},[133,2058,2037],{},"：81端口bit1=1表示有键盘输入。",[112,2061,2064],{"className":2062,"code":2063,"language":1318,"meta":118},[1316],"(2044) IN  81  ; 读取键盘输入状态\nSHR R0  ; 第一次右移\nSHR R0  ; 第二次右移，bit1移入C\nJRNC 2044  ; C=0表示无输入，循环检测\n",[120,2065,2063],{"__ignoreMap":118},[20,2067,2068,2070],{},[133,2069,2049],{},"：去掉这4行后，程序会直接读取旧数据，无法正常响应按键。",[24,2072,2074],{"id":2073},"_3-pushpop-保护寄存器的作用","3. PUSH\u002FPOP 保护寄存器的作用",[20,2076,2077,2080,2081,2084],{},[120,2078,2079],{"code":2079},"OUT 80"," 输出后需轮询 ",[120,2082,2083],{"code":2083},"IN 81","，该指令会覆盖R0中的字符数据，因此用堆栈保存恢复：",[112,2086,2089],{"className":2087,"code":2088,"language":1318,"meta":118},[1316],"PUSH R0  ; 保存待显示的字符\nIN  81   ; 读取状态，覆盖R0\nSHR R0\nJRNC 2028\nPOP R0   ; 恢复原字符\n",[120,2090,2088],{"__ignoreMap":118},[232,2092],{},[10,2094,2096],{"id":2095},"四程序调试与问题排查","四、程序调试与问题排查",[15,2098,2100],{"id":2099},"_41-常见错误与修正","4.1 常见错误与修正",[24,2102,2104],{"id":2103},"错误示例跳转指令写错","错误示例：跳转指令写错",[20,2106,2107,2108,2110,2111,2113],{},"批量内存读写程序中，将",[120,2109,462],{"code":462},"写成",[120,2112,456],{"code":456},"，导致循环只执行一次。",[24,2115,2116],{"id":2116},"错误版本反汇编",[112,2118,2121],{"className":2119,"code":2120,"language":1318,"meta":118},[1316],">U 2220\n2220: MVRD  R3,   0006\n2222: MVRD  R2,   223F\n2224: MVRD  R1,   0040\n2226: INC   R2\n2227: INC   R1\n2228: STRR  [R2],  R1\n2229: LDRR  R0,   [R2]\n222A: OUT   0080\n222B: IN    0081\n222C: SHR   R0\n222D: JRNC  222B\n222E: DEC   R3\n222F: JRNC  2226  ; 错误：应该用JRNZ\n2230: RET\n",[120,2122,2120],{"__ignoreMap":118},[24,2124,2125],{"id":2125},"错误原因",[20,2127,2128],{},"DEC R3 后 R3≠0，Z=0；无借位C=1，JRNC判断C=0不成立，不跳转。",[24,2130,2131],{"id":2131},"修正方法",[112,2133,2136],{"className":2134,"code":2135,"language":117,"meta":118},[115],">A 222F\n222F: JRNZ 2226\n",[120,2137,2135],{"__ignoreMap":118},[15,2139,2141],{"id":2140},"_42-其他常见错误","4.2 其他常见错误",[163,2143,2144,2161],{},[126,2145,2146,2149,2150,2153,2154,2157,2158],{},[133,2147,2148],{},"STRR 指令遗漏括号","：寄存器间接寻址必须加",[120,2151,2152],{"code":2152},"[]","，错误",[120,2155,2156],{"code":2156},"STRR R2, R1","→正确",[120,2159,2160],{"code":2160},"STRR [R2], R1",[126,2162,2163,2166],{},[133,2164,2165],{},"相对跳转地址越界","：JR类指令偏移量为8位，超出范围需用JMPA绝对跳转",[232,2168],{},[10,2170,2172],{"id":2171},"五常用命令说明","五、常用命令说明",[123,2174,2175,2181,2187,2193,2199,2205],{},[126,2176,2177,2180],{},[120,2178,2179],{"code":2179},"A 地址","：从指定地址开始汇编输入程序",[126,2182,2183,2186],{},[120,2184,2185],{"code":2185},"U 地址","：反汇编指定地址开始的指令",[126,2188,2189,2192],{},[120,2190,2191],{"code":2191},"D 地址","：查看指定地址开始的内存内容",[126,2194,2195,2198],{},[120,2196,2197],{"code":2197},"E 地址","：修改指定地址开始的内存内容",[126,2200,2201,2204],{},[120,2202,2203],{"code":2203},"G 地址","：从指定地址开始运行程序",[126,2206,2207,2209],{},[120,2208,558],{"code":558},"：查看当前寄存器的状态",{"title":118,"searchDepth":2211,"depth":2211,"links":2212},4,[2213,2226,2232,2262,2271],{"id":12,"depth":2214,"text":13,"children":2215},2,[2216,2221],{"id":17,"depth":254,"text":18,"children":2217},[2218,2219,2220],{"id":26,"depth":2211,"text":26},{"id":109,"depth":2211,"text":110},{"id":149,"depth":2211,"text":150},{"id":236,"depth":254,"text":237,"children":2222},[2223,2224,2225],{"id":243,"depth":2211,"text":243},{"id":284,"depth":2211,"text":284},{"id":309,"depth":2211,"text":309},{"id":344,"depth":2214,"text":345,"children":2227},[2228,2229,2230,2231],{"id":348,"depth":254,"text":349},{"id":476,"depth":254,"text":477},{"id":588,"depth":254,"text":589},{"id":1003,"depth":254,"text":1004},{"id":1301,"depth":2214,"text":1302,"children":2233},[2234,2235,2236,2241,2242,2246,2251,2257],{"id":1305,"depth":254,"text":1306},{"id":1325,"depth":254,"text":1326},{"id":1342,"depth":254,"text":1343,"children":2237},[2238,2239,2240],{"id":1351,"depth":2211,"text":1351},{"id":1360,"depth":2211,"text":1360},{"id":1369,"depth":2211,"text":1370},{"id":1854,"depth":254,"text":1855},{"id":1899,"depth":254,"text":1900,"children":2243},[2244,2245],{"id":1918,"depth":2211,"text":1918},{"id":1927,"depth":2211,"text":1927},{"id":1938,"depth":254,"text":1939,"children":2247},[2248,2249,2250],{"id":1947,"depth":2211,"text":1918},{"id":1956,"depth":2211,"text":1927},{"id":1965,"depth":2211,"text":1360},{"id":1979,"depth":254,"text":1980,"children":2252},[2253,2254,2255,2256],{"id":1988,"depth":2211,"text":1989},{"id":1998,"depth":2211,"text":1998},{"id":2007,"depth":2211,"text":1360},{"id":2016,"depth":2211,"text":2016},{"id":2027,"depth":254,"text":2028,"children":2258},[2259,2260,2261],{"id":2031,"depth":2211,"text":2032},{"id":2053,"depth":2211,"text":2054},{"id":2073,"depth":2211,"text":2074},{"id":2095,"depth":2214,"text":2096,"children":2263},[2264,2270],{"id":2099,"depth":254,"text":2100,"children":2265},[2266,2267,2268,2269],{"id":2103,"depth":2211,"text":2104},{"id":2116,"depth":2211,"text":2116},{"id":2125,"depth":2211,"text":2125},{"id":2131,"depth":2211,"text":2131},{"id":2140,"depth":254,"text":2141},{"id":2171,"depth":2214,"text":2172},[2273],"笔记","2026-04-20 00:02:29","本文为课堂学习笔记整理，具体指令行为以实验讲义和上机验证为准。",true,false,"md",null,{"slots":2281},{},"\u002Fposts\u002F7e2ce93",{"text":2284,"minutes":2285,"time":2286,"words":2287},"16 min read",15.67,940200,3134,{"title":5,"description":2275},{"loc":2282},"posts\u002F2026\u002Ftec_2008",[2292],"汇编","tech","fanYgTZIcTagevSAvpuh0AIIGk1l5hC_Dzgr4OudHYU",[2296,2279],{"title":2297,"path":2298,"stem":2299,"date":2300,"type":2293,"children":-1},"如何使用 ollama 和 open-webui 搭建自己的本地 AI 助手","\u002Fposts\u002Ff1249d8","posts\u002F2026\u002Follama","2026-03-01 21:40:21",1776683517303]