-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlocal-search.xml
More file actions
579 lines (279 loc) · 295 KB
/
Copy pathlocal-search.xml
File metadata and controls
579 lines (279 loc) · 295 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>局外人</title>
<link href="/2024/05/29/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E5%B1%80%E5%A4%96%E4%BA%BA/"/>
<url>/2024/05/29/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E5%B1%80%E5%A4%96%E4%BA%BA/</url>
<content type="html"><![CDATA[<p><strong>写在最前的读后感</strong><br>第一次完整读完的加缪的作品,在此之前听说过他的《西西弗神话》,也对他的“荒谬”思想有所耳闻。<br>以现如今的主流视角来看,主人公默尔索是不讨喜的;他冷漠,无趣,“没有主见”,对一切似乎都是无所谓的态度;他很像我一个朋友的朋友,也能够让我看到一点自己的影子。在阅读前半部分时我并不完全理解为什么加缪会对默尔索予如此高的评价,他那么冷漠、不通人情,“做不做都可以”,“并没有多大意义”,对母亲的死淡然的令人无语。。。最后也为此被以“法兰西人民”的名义判处了死刑。<br>但他果真不关心母亲吗,“爱,跟常人一样”,他在母亲的葬礼上没有落一滴眼泪,第二天就去“寻欢作乐”,但后文中他也多次想到了自己的母亲。他并非不感伤,而是觉得“所有身心健康的人,都或多或少设想期待过自己所爱的人的死亡。”这是残酷的,也是清醒的。<br>进入第二部的审判环节,加缪为人所知的那种“荒谬”则直接显现了出来,最直接的就是检察官控诉的荒谬,他关注的不是默尔索杀了人,而是他在母亲的葬礼上如何冷漠,他如何“没有任何一条在人类灵魂中占神圣地位的道德原则”,与另一起弑父案一起炒作,并且号称“一个在精神心理上杀死了自己母亲的人,与一个谋害了自己父亲的人,都是以同样的罪名自绝于人类社会”。他是一个出色的演说家,但不会是一位合格的检察官。默尔索的辩护律师,高喊到“这就是这场审讯的形象,所有一切都是真的,但又没有任何东西是真的!”,他看起来是全场唯一清醒的人,但却让默尔索非必要不要发言。至于“和蔼可亲”的法官,早在默尔索坚决不信奉上帝时就已经给他定下了罪行。被审判的主角,默尔索,在这场审判游戏里成了唯一的“局外人”。当形式正义大于实际正义,当先有了审判的结果再做出判决,那个对世界“没有什么看法”的局外人究竟是主动置于局外还是被迫如此。这真是一个问题。<br>最震撼的莫过于结尾的内心独白:</p><blockquote><p>现在我面对着这个充满了星光与默示的夜,第一次向这个冷漠的世界敞开了我的心扉。我体验到这个世界如此像我,如此友爱融洽,觉得自己过去曾经是幸福的,现在仍然是幸福的。为了善始善终,功德圆满,为了不感到自己属于另类,我期望处决我的那天,有很多人前来看热闹,他们都向我发出仇恨的叫喊声。</p></blockquote><p>他没有为自己的审判结果过多辩解,只是说了声“没有”。他对神甫皈依上帝的劝说不屑一顾,“我已经没有时间去对我不感兴趣的事情再产生兴趣。”他已两手空空,一无所有,但对自己的生命,对自己即将到来的死亡很有把握,比上帝的代言人,排异的传教者有把握的多。诚如加缪所言,默尔索当真是一个,没有英雄行为,却愿意为真理而死的人。</p><p><strong>序:《局外人》的社会现实内涵与人性内涵</strong></p><ul><li><p>毕竟时序的优势并不保证地位的优势</p></li><li><p>加缪没有重复对司法冤屈度的追求,而致力于司法对人性残杀度的揭示</p></li><li><p>如果说,从司法程序来看,默尔索是死于他作为当事人却被置于局外的这样一个法律的荒诞,那么,从量罪定刑的法律基本准则来看,他则是死于意识形态、世俗观念的荒诞。</p></li><li><p>他的命运并不取决于那件命案的客观事实本身,而是取决于人们如何看待他这个人,取决于人们对他那些生活,对他的生活方式,甚至生活趣味的看法,实际上也就是取决于某种观念与意识形态。</p></li><li><p>执行刑前任务的神父几乎是在强行逼迫可怜的默尔索死前皈依上帝表示忏悔,当然是作为人类公敌、社会公敌的忏悔,以完成这头羔羊对祭坛的完整奉献。</p></li><li><p>在入世进取心强的人看来,默尔索的性格与生活态度显然是不足取的。说得好一点,是随和温顺,好说话,不计较,安分,实在;说得不好一点,是冷淡、孤僻、不通人情、不懂规矩、作风散漫、放浪形骸、是无主心轴、无志气、无奋斗精神、无激情、无头脑、无出息、温吞吞、肉乎乎、懒洋洋、庸庸碌碌、浑浑噩噩……总而言之是现代社会中没有适应能力与生存能力的人。</p></li><li><p>“他不耍花招,从这个意义上说,他是他所生活的那个社会里的局外人”,“他拒绝说谎……是什么,他就说是什么。他拒绝矫饰自己的感情,于是社会就感到受到了威胁”,“他是穷人,是坦诚的人,喜爱光明正大”,“一个无任何英雄行为而自愿为真理而死的人”。</p></li><li><p>我不是这里的人,也不是别处的。世界只是一片陌生的景物,我的精神在此无依无靠。一切与己无关”。</p></li></ul><p><strong>第一部</strong></p><p><strong>一</strong></p><ul><li>我走出门外,太阳已经高高升起。在那些把马朗戈与大海隔开的山丘之上,天空中红光漫漫。越过山丘吹过来的风,带来了一股咸盐的气味。看来,这一定是个晴天。我很久没有到乡下来了。要是没有妈妈这档子事,能去散散步该有多么愉快。</li></ul><p><strong>二</strong></p><ul><li><p>我在人群中认出了那位优雅的先生。他家的几个孩子哭泣着跟在父母的后头。这时,附近的电影院一股脑儿将所有的观众都倾泻在大街上。</p></li><li><p>我想,这又是一个忙忙乱乱的星期天,妈妈已经下葬入土,而我明天又该上班了,生活仍是老样子,没有任何变化。</p></li></ul><p><strong>三</strong></p><ul><li><p>我什么话也没有说,他就问我愿不愿意做他的朋友。我说做不做都可以。</p></li><li><p>尚未得到我的指点之前,他想知道我对整个这桩事有什么看法。我回答说,我没有什么看法,不过我觉得这桩事挺有趣。</p></li><li><p>我对他说,我永远也不可能知道该怎么做,但我很理解他要惩罚那个女人的心理。</p></li></ul><p><strong>四</strong></p><ul><li><p>我把窗户大大敞开,感受着夏夜在我们的棕色皮肤上流走,真是妙不可言。</p></li><li><p>她问我爱不爱她。我对她说,这种话毫无意义,但我似乎觉得并不爱。</p></li></ul><p><strong>五</strong></p><ul><li><p>人们永远也无法改变生活,什么样的生活都差不多,而我在这里的生活并不使我厌烦。</p></li><li><p>它真正的病是衰老,而衰老是治不好的。</p></li></ul><p><strong>六</strong></p><ul><li><p>光天化日之下强烈的阳光,照在我脸上,就像打了我一个耳光。</p></li><li><p>确实不错,他妻子跟玛丽已经在说说笑笑了。这时,我萌生出要结婚的念头,这也许是我生平的第一次。</p></li><li><p>子弹打进去,没有显露出什么,这就像我在苦难之门上急促地叩了四下。</p></li></ul><p><strong>第二章</strong></p><p><strong>一</strong></p><ul><li>所有身心健康的人,都或多或少设想期待过自己所爱的人的死亡。</li></ul><p><strong>二</strong></p><ul><li><p>只有我身旁的小个子青年与他母亲之间,仍是无声无息,就像孤立于喧嚣海洋中的一个寂静的小岛。</p></li><li><p>于是我悟出了,一个人即使只生活过一天,他也可以在监狱里待上一百年而不至于难以度日,他有足够的东西可供回忆,决不会感到烦闷无聊。从某种意义上来说,这也是一种愉快。</p></li><li><p>人生在世,永远也不该演戏作假。</p></li><li><p>我一直不理解,在何种程度上,既可说日子漫漫难挨,又可说苦短无多。日子,过起来当然就长,但是拖拖拉拉,日复一日,年复一年,最后就混淆成了一片。每个日子都丧失了自己的名字。对我来说,只有“昨天”与“明天”这样的字,才具有一定的意义。</p></li></ul><p><strong>三</strong></p><ul><li><p>不论是我妈妈还是我自己,并不期望从对方那里得到什么,而且也不期望从任何人那里得到什么,我们两人都已经习惯我们这种新式的生活。</p></li><li><p>他的声音如此响亮,他的目光如此扬扬得意,朝我一扫,使得我多年以来第一次产生了愚蠢的想哭的念头,因为我感到所有这些人是多么厌恶我。</p></li><li><p>这就是这场审讯的形象,所有一切都是真的,但又没有任何东西是真的!</p></li></ul><p><strong>四</strong></p><ul><li><p>可以说,人们好像是在把我完全撇开的情况下处理这桩案子。所有这一切都是在没有我参与的情况下进行的。我的命运由他们决定,而根本不征求我的意见。</p></li><li><p>但我难以理解,为什么一个普通人身上的优点,到了罪犯身上就成为了他十恶不赦的罪状。</p></li><li><p>但我感到自己的心已经对外封闭,甚至无法回答她的微笑。</p></li><li><p>因为庭长用一种奇怪的方式向我宣布,将要以法兰西人民的名义,在一个广场上将我斩首示众。</p></li></ul><p><strong>五</strong></p><ul><li><p>一个人对他所不了解的东西,总是会有一些夸张失真的想法。</p></li><li><p>不过,无论如何,对于我真正感兴趣的事我也许没有绝对把握,但对于我不感兴趣的事我是有绝对把握的,恰好,他跟我谈的事情正是我不感兴趣的。</p></li><li><p>而且我已经没有时间去对我不感兴趣的事情再产生兴趣。</p></li><li><p>既然注定只有一种命运选中了我,而成千上万的生活幸运儿都像他这位神甫一样跟我称兄道弟,那么他们所选择的生活,他们所确定的命运,他们所尊奉的上帝,对我又有什么重要?他懂吗?</p></li><li><p>田野上万籁作响,直传到我耳际。夜的气味,土地的气味,海水的气味,使我两鬓生凉。这夏夜奇妙的安静像潮水一样浸透了我的全身。这时,黑夜将尽,汽笛鸣叫起来了,它宣告着世人将开始新的行程,他们要去的天地从此与我永远无关痛痒。</p></li><li><p>现在我面对着这个充满了星光与默示的夜,第一次向这个冷漠的世界敞开了我的心扉。我体验到这个世界如此像我,如此友爱融洽,觉得自己过去曾经是幸福的,现在仍然是幸福的。</p></li></ul>]]></content>
<categories>
<category>读书笔记</category>
</categories>
<tags>
<tag>文学</tag>
<tag>哲思</tag>
<tag>加缪</tag>
</tags>
</entry>
<entry>
<title>纳尔奇思与歌尔得蒙</title>
<link href="/2024/05/24/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E7%BA%B3%E5%B0%94%E5%A5%87%E6%80%9D%E4%B8%8E%E6%AD%8C%E5%B0%94%E5%BE%97%E8%92%99/"/>
<url>/2024/05/24/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E7%BA%B3%E5%B0%94%E5%A5%87%E6%80%9D%E4%B8%8E%E6%AD%8C%E5%B0%94%E5%BE%97%E8%92%99/</url>
<content type="html"><![CDATA[<blockquote><p> 赫尔曼·黑塞</p></blockquote><h3 id="第一章"><a href="#第一章" class="headerlink" title="第一章"></a><strong>第一章</strong></h3><ul><li><p>决定一个人命运和使命的,并不会总是他的愿望,而还有一些别的东西,前定的东西。” </p></li><li><p>我这只是一厢情愿罢了。我无意于担任要职。可是到将来,这些职务会加在我身上。</p></li></ul><h3 id="第二章"><a href="#第二章" class="headerlink" title="第二章"></a><strong>第二章</strong></h3><ul><li><p>纳尔奇思是个思想家,遇事善于条分缕析,歌尔得蒙却似乎是个梦想家,有着一颗童心。然而差异尽管差异,却有一个共同之点把他们联系起来:两人都气质高贵,才华出众,品性超群,都受到命运特殊的关照。 </p></li><li><p>“再不准来了!”他的意志命令道。“明天再来吧!”他的心哀求道。</p></li></ul><h3 id="第三章"><a href="#第三章" class="headerlink" title="第三章"></a><strong>第三章</strong></h3><ul><li><p>也许他太爱这个金发少年了,而对他来说,这正是一种危险。须知,爱对于他来说并非自然的状态,而是一种奇怪的事。他不能容许自己爱得入迷,不能容许自己满足于这一双俊眼的顾盼,这一头光亮的金发的亲近;他不能容许自己享有这种爱,哪怕只有一瞬间感官的享受。 </p></li><li><p>所谓的善,我们知道,都存在于戒律里面,但上帝却不仅仅存在于戒律里面。嘿,戒律只体现上帝微乎其微的一部分。你可以恪守戒律,但却离上帝非常之远。 </p></li><li><p>但却违反了长期以来存在于我心中的、没有形成文字的、可又是最神圣的誓约。</p></li></ul><h3 id="第四章"><a href="#第四章" class="headerlink" title="第四章"></a><strong>第四章</strong></h3><ul><li><p>纳尔奇思看出他的朋友原来属于那种生命有缺陷的人。这种人出于无奈,或者受到某种蛊惑,不得不学会忘记自己过去的一部分。 </p></li><li><p>对于我们研究科学的人来说,没有什么比确定差别更重要,科学就是辨别的艺术。举例说,你在某一个人身上找出一些区别于其他人的特征,这就意味着你认识了他。” </p></li><li><p>咱俩的使命不是要走到一块儿,正如像太阳和月亮,或者陆地和海洋,它们也不需要走到一块儿。我们的目标不是相互说服,而是相互认识,并学会看出和尊重对方的本来面目,也即自身的反面和补充。 </p></li><li><p>你们的故乡是大地,我们的故乡是思维。你们的危险是沉溺在感官世界中,我们的危险是窒息在没有空气的太空里。你是艺术家,我是思想家。你酣眠在母亲的怀抱中,我清醒在沙漠里。照耀着我的是太阳,照耀着你的是月亮和星星;你的梦中人是少女,我的梦中人是少年男子……</p></li></ul><h3 id="第五章"><a href="#第五章" class="headerlink" title="第五章"></a><strong>第五章</strong></h3><ul><li><p>在母亲的世界里不只有全部的温柔,不只有蓝色的慈爱的目光,不只有预示着幸福的和悦的笑容,不只有亲昵的抚慰,也有一切恐惧和阴郁,一切欲望,一切罪孽,一切悲苦,一切的生和一切的死。 </p></li><li><p>你觉醒了,现在也看出了你与我之间的差别,看出了产生于母性的人与产生于父性的人的差别,看出了心灵与理智的差别。 </p></li><li><p>我的目标就是到能最好地造福世人的位置上去,找一片最能发挥自己特长和天赋的土壤,找一块尽量大的用武之地。除此别无抱负。</p></li></ul><h3 id="第六章"><a href="#第六章" class="headerlink" title="第六章"></a><strong>第六章</strong></h3><ul><li><p>人活着,在世界上到处奔波,或者骑着马穿过一座座森林,并且看见这样那样的事物,有的对他提出要求,有的使他产生希望,有的唤起他的渴慕。夜空中的一颗星星,一朵蓝色的铃铛花儿,一片芦苇环绕的绿意迎人的湖水,一个人或一头牛的眼睛,诸如此类,一看它们,他就觉得似乎立刻会发生什么见所未见但却渴望已久的奇迹,遮掩着一切东西的帷幕就会揭开。 </p></li><li><p>是生活自己到我身边来啦。 </p></li><li><p>爱一个女人,把自己交付给她,将她紧抱在怀里,感到自己被她紧紧搂在怀里,这与你称作‘热恋’而且略加讥笑的那种感情,难道不是一回事么。可这没有什么可讥笑的。对于我来说,这是走向生活之路,是使生命变得有意义的路。 </p></li><li><p>真是奇怪啊,真是美妙啊,世界也有这样一种无私的、完全精神化的爱!比起今天在阳光灿烂的野地里的那种爱,比起感官的陶醉和忘情嬉戏,这种爱是何等的不同啊!然而,两者同样是爱。 </p></li><li><p>他如今走到一个无须讲话的世界中来了,人们只用猫头鹰的啼叫相互引诱,语言是没有意义的。</p></li></ul><h3 id="第七章"><a href="#第七章" class="headerlink" title="第七章"></a><strong>第七章</strong></h3><ul><li>哦,人为什么竟如此无知?为什么竟不能和这一朵花交谈?可不是吗,连人与人之间也不能真诚交谈,除非碰上特别的幸运,两个人成了好朋友,乐于彼此披露心曲。是啊,幸好爱情无须言语,不然,它便会充满误解和愚妄了。</li></ul><h3 id="第八章"><a href="#第八章" class="headerlink" title="第八章"></a><strong>第八章</strong></h3><ul><li><p>种种源自于爱的思想情绪,像一群鸟儿似的绕着他飞来飞去,有的驯顺,有的反抗,有的互相争斗。 </p></li><li><p>尽管讲的全是些毫无意义的事,谁知一来一往,却用目光、音调以及小小的动作织出一张紧密而美丽的网来,不只是喻义丰富,而且还向空中散发出暖意。 </p></li><li><p>多么愚蠢啊,爱情是不用多嘴的,他本该沉默才是。 </p></li><li><p>你问我知不知道羞耻。知道,我当然知道羞耻。可是我爱你呀,而这爱情,却是不知什么羞耻不羞耻的。请别生气!” </p></li><li><p>你从森林中来到我身边;有朝一日,你又会离开这儿再回到森林去,以青苔为床,四处流浪。——可我的归宿又在何处呢?等你一走,我诚然还有个父亲,有个妹妹,有一间屋,有一扇窗,我可以坐在窗前想你,但是却不会再有归宿。 </p></li><li><p>以这样一种方式恋爱固然是愚蠢和困难的,复杂和伤脑筋的,但同时也是美妙的。妙就妙在这种爱的隐隐的伤感,以及它的痴心和无望。那一个个充满相思的不眠之夜,本来就很美。 </p></li><li><p>既爱她而又不能占有她,这是荒谬的,不合理的。 </p></li><li><p>天空升起彤云,曙光消退了,太阳没有露脸,空中又开始纷纷扬扬地飘起雪花来。</p></li></ul><h3 id="第九章"><a href="#第九章" class="headerlink" title="第九章"></a><strong>第九章</strong></h3><ul><li><p>痛苦与欢乐原来是相似的,好像一对同胞姊妹。 </p></li><li><p>歌尔得蒙看出,这是个老奸巨猾、久跑江湖的流浪汉,是个见多识广、饱尝饥寒,在为苟延残喘地生存下来的艰苦斗争中已变得既聪明又无耻的人。凡是长期过流浪生活的人,看来都会变成这个样子。他歌尔得蒙有朝一日是否也会变成这样呢? </p></li><li><p>可你瞧,小兄弟,人是会变老的,一张娃娃脸会长出胡子,积累起皱纹来,裤子也会磨出窟窿,不知不觉你就变老了,成为一个不受欢迎的客人,一双眼睛再闪耀不出青春和天真无邪的光辉,只能喷射着饥火;那时,人的心肠就会硬起来,得从世界上学会一些东西,否则他立刻得躺在粪堆上,一条条狗便会成群来咬他。 </p></li><li><p>不过尽管如此,他仍将无家可归,无所追求,永远不会获得真正的安全感,世界仍会谜一般美丽地、谜一般神秘地包围着他,他仍不得不在孤寂中侧耳倾听,听见这茫茫人世上唯有他自己的心跳声,它是那么的胆怯,那么的微弱。 </p></li><li><p>不到两年,他便把流浪汉生活的甜酸苦辣彻底尝了个遍:孤身独处,自由自在,倾听林涛的喧啸、野兽的嗥叫,萍水相逢的、朝三暮四的爱情,苦不堪言的死的磨难;有些日子在夏天的绿野上,有些日子在密林里,有些日子在雪原中,有些日子在可怕的死神旁。而所有经验中最强烈而奇特的,莫过于同死神搏斗,莫过于明知自己渺小、可悲、危在旦夕,却仍然坚持对死神做最后的抗争,并感觉到自己身上有这么一股子美好的、顽强的生的力量和韧劲。</p></li></ul><h3 id="第一十章"><a href="#第一十章" class="headerlink" title="第一十章"></a><strong>第一十章</strong></h3><ul><li><p>从站在那甜蜜、神圣的木雕圣像前的一刻起,他便拥有了自己从来不曾有过的东西:一个目标!过去,他嘲笑或嫉妒过拥有这种东西的人。如今,他自己也已经有了一个目标,也许还将达到这个目标;也许,他的整个散漫浪荡的生活,从此将会获得某种崇高的意义和价值。 </p></li><li><p>我发现不论在哪儿,人们身上的某种形式和某种线条,都是反复出现的,比如额头和膝盖,肩膀和臀部,总有某些相似之处。而所有这一切,又同一个人的气质和性格有着内在的相似性和一致性。 </p></li><li><p>在这儿重要的不是一个人能想出些什么,讲出些什么,而单单是他用自己的双手会做出什么。 </p></li><li><p>精神赋予他的头颅以一个高贵的形态,誓为精神服务的决心使他美丽而克制的嘴和略带哀戚的眼睛显得庄严、紧张,为求超凡入圣的苦斗使他瘦削的肩膀、细长的脖子和柔嫩的双手带上了灵气。 </p></li><li><p>他想到,他的生命和每一个人一样都在不断地流逝、变化以致终于消灭,可一个艺术家所创造的形象呢,却将持久不变地永远存在下去。 </p></li><li><p>也许,他想,也许所有艺术的根源,或者甚至所有精神劳动的根源,都是对于死亡的恐惧吧。我们害怕死亡,我们对生命之易逝、无常怀着忧惧,我们悲哀地看着花儿一次一次地凋谢,黄叶一次一次地飘零,内心深处便实实在在地感到我们自己也会消逝,我们自己也行将枯萎。然而,如果艺术家创造了形象,或者思想家探索出法则、创立起思想,那么,他们的建树作为,就都能从这巨大的死之舞中救出一些什么,留下一些比他们自己的生命延续得更久的东西。</p></li></ul><h3 id="第一十一章"><a href="#第一十一章" class="headerlink" title="第一十一章"></a><strong>第一十一章</strong></h3><ul><li><p>要知道确实有这样一些人,他们对于世界的美能够得到深刻伟大的感受,并在心中产生崇高的形象,可惜却怎么也找不到适当途径把这些形象再现出来,传达给其他人,使其他人也获得愉悦。 </p></li><li><p>当初,使他坚强和奋发的原因是爱。他刻苦学习不为别的,只为博取纳尔奇思的好感。因为纳尔奇思的友谊,只有通过获取他的尊重与赞赏才能赢得啊。 </p></li><li><p>在这样的时候他既不快活,也不忧伤,既不知生的欢娱,也不知生的无常。 </p></li><li><p>对于他,艺术和艺术家如果不能像太阳似的炽热,像风暴似的猛烈,而只能赏心悦目,带来小小的幸福感,那就毫无价值。 </p></li><li><p>正如爱的欢娱在最紧张、最幸福的高潮,已注定在下一个瞬间必然减弱和重新消失,内心的孤寂和愁闷也肯定会突然被欲望吞噬,重新转向生活的光明面。死和欢娱是一回事。你可以称生活之母为爱情或欢娱,也可以叫她是坟墓和腐朽。母亲夏娃啊,她既是幸福之源,也是死亡之源;她永远地在生,永远地在杀;在她身上,慈爱与残忍合二为一。 </p></li><li><p>艺术是父性世界和母性世界的结合体,是精神和血肉的结合体;它可以从最感性的事物出发引向最抽象的玄理,也可以始于纯粹的思维世界,止于血肉之躯。 </p></li><li><p>他现在不得不服从的,既非他的师傅,也非未来的前途,也不是生活的必需,而是艺术本身。艺术这位看上去很富于灵性的女神,她也需要这么多琐屑的东西啊!她需要头上有个屋顶,她需要工具、木头、黏土、颜料、金箔,她要求劳作和耐心。 </p></li><li><p>在他一生中,这样的事件也许还可能发生一次,也许就仅此一回而已。一位大喜之日的新郎,一位当日受封的骑士,一位初为人母的产妇,也会在心中同样地激动,有同样的幸福感和庄严感,同时却又已经掺杂进同样的隐忧,生怕这崇高而宝贵的时刻很快就会消逝,随后一切又将走入常轨,让平庸、琐屑的生活给淹没。 </p></li><li><p>您知道,我这雕像表现的不是我自己,而是我的一位爱友。带给这座像明朗和宁静的是他,而不是我。确确实实不是我创造了这个形象,是他自己把它灌输到了我心里。” </p></li><li><p>为了达到这一步,一个人仅仅心中有形象还不行,他的眼睛和手都得经受说不清多少次的训练。也许还得终身献身于艺术,放弃自由自在的生活,放弃见世面的机会,日后才能创造出这么一件美妙绝伦的作品。因为光有体验和观察不够,光有爱也不够,还必须有登峰造极的技术和能力。如此煞费苦心值得吗?这是个大问题。</p></li></ul><h3 id="第一十二章"><a href="#第一十二章" class="headerlink" title="第一十二章"></a><strong>第一十二章</strong></h3><ul><li><p>可是,他常常又像中了邪似的,心里突然会失去兴致和宁静;这种醉生梦死、自满自足、无所用心的麻木状态,突然从他身上消失了,使他陷入了孤寂和沉思之中,又重新开始独自游荡,以便考虑痛苦、死亡和忙忙碌碌的人生意义究竟何在,以便正视那无底的深渊 </p></li><li><p>歌尔得蒙仍在苦闷,沉思,对那些垂死的鱼和将谢的花,全怀着无望而揪心的爱,对人们像蠢猪似的浑浑噩噩、有眼无珠感到震惊。 </p></li><li><p>任何人的结局都会如此,任何物的结局也会如此;花开得快,谢得也快,红消香断后,雪便会落满枝头。 </p></li><li><p>人类之母一视同仁,她那不详的微笑就像天空中的月亮似的照临万物; </p></li><li><p>织成夜间的梦境的材料与此相似,一点微乎其微的东西可以包容世界的所有形象,一滴水的结晶可以寄寓全部人、兽、天使和魔鬼的身影,让他们随时能够活现于其中。 </p></li><li><p>因为它们缺少一点主要的特征:神秘。而最杰出的艺术品与梦境之间的共同点恰恰就是:神秘。 </p></li><li><p>也许他永远也表现不出她的形象,也许她永远只是梦幻,只是预感,只是诱惑,只是神圣的秘密的金色闪光。噢,不管怎样,他反正还是得追随她,他已把自己的命运托付到她的手里,她已是他的星辰。 </p></li><li><p>突然,他觉得在她那和善粗憨的脸上看见一种本能的表情,在她亲切的笑容中发现了一点司空见惯的、机械的、毫无神秘感的、有损他的尊严的神气。 </p></li><li><p>这就是人类之母,她无比古老,却也永远年轻,在她嘴上始终挂着忧伤、残忍却又充满慈爱的微笑 </p></li><li><p>每一件都自有某种特殊意义和特殊历史,都曾经为歌尔得蒙所珍爱,但现在在他眼里全成了讨厌的累赘,要知道任何一件他都带不走啊。</p></li></ul><h3 id="第一十三章"><a href="#第一十三章" class="headerlink" title="第一十三章"></a><strong>第一十三章</strong></h3><ul><li><p>存在是短暂的,所有的生命都在不断枯萎,在我们四周的宇宙里,充斥着冷酷无情的死亡。 </p></li><li><p>每一个人的生活都是通过分裂和矛盾才变得丰富多彩的。没有陶醉和纵乐,理性和明智何以存在;没有死神在背后窥视,感官的欢娱又有什么价值;没有两性之间永远还不清的孽债,又哪儿能产生爱? </p></li><li><p>其实,每次在梦中,每次在休息时望着一道道鲜花盛开或者枯萎萧索的山谷而堕入沉思的当儿,他仍然充满彻悟,仍然是一位艺术家,仍然痛感着一种想以精神力量将这过一天算一天的无意义生活改变和抛弃的渴望。 </p></li><li><p>别的人都躺在棺木和墓穴里,悄悄地、不露形迹地去完成自己最后一件可悲的任务,即腐烂和发臭。他们五个人却在自己家里,在关着门的房间中,在光天化日之下,肆无忌惮地、毫无遮掩地、不知羞耻地腐化了。 </p></li><li><p>他怀着紧张和阴郁的心情,穿行在死亡的国度里,精神完全集中在观察那些浩劫景象上,灵魂充满着深秋时节的惆怅,耳畔唯听见沉郁的死之歌。 </p></li><li><p>生命是美好的,幸福美好而又短暂,青春美好却易于凋萎。</p></li></ul><h3 id="第一十四章"><a href="#第一十四章" class="headerlink" title="第一十四章"></a><strong>第一十四章</strong></h3><ul><li><p>他分不清楚,自己注视着的是夜空中的稠云呢,还是他本身暗淡的内心世界。 </p></li><li><p>看着这番情景,歌尔得蒙不禁怦然心悸,恍惚间便想起了那些他曾常在鱼市上见过并寄予同情的垂死的鱼:它们的生命之火也是如此熄灭的,也是痉挛几下,一股冷气悠然掠过全身,便带走了它们的光泽和生命。 </p></li><li><p>他在她眼里看见了死亡,但不是无可奈何的死亡,而是心甘情愿的死亡,得到允许的死亡;这样的死亡乃是不声不响地、全心全意地听从大地之母的召唤。 </p></li><li><p>他默默地肃立在像前,仿佛感到一个早已逝去的时代的心脏还在其中跳动,那些多少个世纪之前业已死去的一代代人的恐惧与喜悦,仍然凝聚在石像中,呈现于他的眼前,抗拒着世事的无常。 </p></li><li><p>歌尔得蒙将把他们创造出来,使这些今天对他意味着爱情、痛苦、恐惧和激情的形象,站在将来生活着的人们面前,没有姓名,没有历史,静静地,默默地,成为人生的象征。</p></li></ul><h3 id="第一十五章"><a href="#第一十五章" class="headerlink" title="第一十五章"></a><strong>第一十五章</strong></h3><ul><li><p><strong>2024/05/24 发表想法</strong></p><p> 想起了Rey姐的 Will you still love me when I’m no longer young and beautiful</p><blockquote><p>原文:歌尔得蒙终于哭了起来,热泪滴在他的手上和膝上。他哭死去的师傅,哭莉丝贝特消失了的美貌,哭莱娜,哭罗伯特,哭犹太女郎,哭他自己业已枯萎的、虚度了的青春。 </p></blockquote></li><li><p>是啊,悲伤也会过去,痛苦和绝望也会过去,正如欢乐会消逝、淡忘,失去其深义与价值。终于会有这么一天,人们将不再能想起曾经使他们痛苦难受的是什么。是啊,痛苦也同样会凋谢,会枯萎。 </p></li><li><p>就在几天前,他还那么感伤,而感伤的原因困厄与痛苦,也同样容易消逝。可是眼下,它们不真正已经消逝了么,沉落了么,就如枝头金黄的秋叶 </p></li><li><p>我是你希望的一切</p></li></ul><h3 id="第一十六章"><a href="#第一十六章" class="headerlink" title="第一十六章"></a><strong>第一十六章</strong></h3><ul><li><p>唉,人生要是整个只有一种意义,享乐与事业两者可以兼得,而不为这干瘪的“要么这样——要么那样”所分裂该有多好!创造,但不以生活为代价!生活,但不放弃高尚的创造!这难道压根儿不可能么? </p></li><li><p>没有秘密,爱情能算什么呢!没有危险,爱情能算什么呢? </p></li><li><p>他也必须告别自己的手,自己的眼睛,告别饥和渴,告别面包和酒,告别谈情说爱,告别拨弄琴弦,告别睡梦和苏醒,告别一切。明朝,一只鸟儿从空中飞来,歌尔得蒙再也看不见它;一个姑娘站在窗口歌唱,他再也听不见她。河水仍在流,鱼儿仍在游,秋风仍在吹,黄叶仍在飞,太阳明亮,星空灿烂,年轻人结伴去参加舞会,远处的山峰已覆盖着初雪——一切一切都将继续进行,所有的树仍将投下绿荫,所有的人眼里仍将流露出欢乐或者忧愁,所有的狗仍将汪汪地吠,所有关在圈里的牛仍将哞哞地叫,可就是哪儿也不会再有他,一切都没有他的份,一切都与他没有关系。</p></li></ul><h3 id="第一十七章"><a href="#第一十七章" class="headerlink" title="第一十七章"></a><strong>第一十七章</strong></h3><ul><li><p>纳尔奇思不动声色。他朋友态度中的这点儿孩子气与倨傲劲儿,既使他开心,又叫他感动。但最为他理解和赞赏的,仍是隐藏在背后那使歌尔得蒙不肯哭着扑进他怀抱的自尊心。 </p></li><li><p>因为世界充满了死亡和恐怖,我便不断摘取这地狱中的鲜花,以安慰我的心。我寻欢作乐,以暂时忘记恐怖,但恐怖并不因此就减少一些。” </p></li><li><p>意义就在化无常为永恒。我看见,在人生的愚人游戏和死之舞中,遗留下来长存不衰的有一件东西:艺术品。尽管它们也可能在什么时候消失,或被烧毁,或者朽坏,或被打碎,可是它们毕竟比几代人的生命要长,能在须臾的彼岸,以形象构成一个无声的神圣王国。 </p></li><li><p>我相信,艺术的意义并不仅仅在于用石头、木料、颜色或别的存在物,从死亡手中夺取即将衰朽的东西,使之保存得更为久远。 </p></li><li><p>你不必为你那许许多多的罪孽再感到骄傲。 </p></li><li><p>他的整个一生仿佛仅仅是离别,逃遁,遗忘,最后落得两手空空,心灰意懒。</p></li></ul><h3 id="第一十八章"><a href="#第一十八章" class="headerlink" title="第一十八章"></a><strong>第一十八章</strong></h3><ul><li><p>思考与想象没任何关系。思考不借助形象,而借助概念和公式。刚好是在形象停止活动的地方,开始了哲学思维。 </p></li><li><p>一个人只有尽其天赋所能去努力实现自我,才能做他可以做的最崇高的和唯一有意义的事 </p></li><li><p>他自己也可以提出问题来,它们会必然地、不可避免地出现在他的心中。一个人要作为思想家去探索空间的问题,他就必须先用数学的方法演算和测量一些真实的和假定的空间。 </p></li><li><p>你认为思想毫无意义,但把思想用于实际的和可见的世界,却是有意义的。 </p></li><li><p>你可不能鄙弃思想本身,却又赞成其‘运用’啊! </p></li><li><p>内心偶尔感到的某种倦意,欲望与好奇心的衰减,一种灰溜溜的淡漠和厌烦情绪,诸如此类 </p></li><li><p>它们使他忧虑,然而是甜蜜的忧虑;他痴心而绝望地追求他的作品,好像追求一个寡情的女子;他和他的作品进行着无情而耐心的搏斗,就像一位钓着了条大梭子鱼的钓翁:鱼儿每挣扎一下,都给他一个教训,使他变得更加敏感。 </p></li><li><p>但是每次一祈祷,又使他变得纯洁无邪起来。工作时他常常气恼和焦躁得快要烧着似的,要不就兴奋得发狂,早晚的祈祷便有如一盆冰水,他沉浸在里面既冷却了兴奋的狂热,也冷却了绝望的焦灼。 </p></li><li><p>你在唱歌时,从未边唱边考虑是有用还是没有用,而是只顾专心地唱罢了。你在祈祷时同样应当这样。</p></li></ul><h3 id="第一十九章"><a href="#第一十九章" class="headerlink" title="第一十九章"></a><strong>第一十九章</strong></h3><ul><li><p>事实并不存在你所想的那种宁静。不错,宁静也是有的,但并非一种在我们心中长驻的宁静,而只是一种必须用不间断的斗争去争取、每日每时用斗争去争取的宁静。你没见过我斗争,既不了解我在研究学问时的斗争情况,也不了解我在祈祷室中的斗争情况。你不知道倒也好。你所能见到的,只是我不像你那样易于激动,于是认为这就是宁静。然而这是斗争,是同任何真正的生活一样的斗争和牺牲,你的生活也是如此。 </p></li><li><p>“也许是这样,”纳尔奇思说,“在这一点上,谁也不能完全理解谁。但对于所有怀着善良愿望的人们来说,有一点却是共同的:我们的作品到头来总是使我们羞愧,我们总是不得不重新做起,一次一次地重新奉献自己。” </p></li><li><p>从上帝的观点看,这种呆呆板板的枯燥生活,这种弃绝人世和感官的幸福,这种远远地回避着污秽与鲜血,这种向哲学与信仰的逃遁,难道就真比歌尔得蒙的生活来得好么?难道人生来真该过一种循规蹈矩的生活,一切时间和行动都让祈祷的钟声来支配么? </p></li><li><p>难道人身上的感官、欲望、血液的神秘冲动,犯罪和行乐的本能,产生绝望心理的能力,不也全是上帝的创造吗?每当院长想起他的朋友,这种种问题也便潆洄在他的脑海里。 </p></li><li><p>一个负有崇高使命的人,即使在生活狂热的混沌中沉溺得很深,浑身糊满血污尘垢,也不会变得渺小和卑劣,泯灭心中的神性。他即使无数次迷途在深沉的黑暗中,灵魂的圣殿里圣火仍然不会熄灭,他仍然不会丧失创造力。 </p></li><li><p>那是一部流浪汉和情人的历史,一部无家可归者和不忠实的男人的历史。只不过在这儿留下来的,全都是善良和忠诚,全都充满着生气勃勃的爱。这样的人生是多么神秘啊,它在流动中是如此浑浊、湍急,但最后剩下的结果却如此高贵、清澈!</p></li></ul><h3 id="第二十章"><a href="#第二十章" class="headerlink" title="第二十章"></a><strong>第二十章</strong></h3><ul><li><p>在他的脸上,有某种昔日英俊的歌尔得蒙不曾有过的神情,某种在极端的疲乏和憔悴中仍然流露出来的满足和恬淡。 </p></li><li><p>要是我终究还是知道了什么是爱,那就得归功于你。你是所有人中唯一我能够爱的人。你无法衡量这意味着什么。这意味着沙漠中的甘泉,荒原里的花树。我的心没有枯萎,我的灵魂中还留下了一个可以为圣恩所达到的地方,这完完全全得感谢你。” </p></li><li><p>我希望,死将是一个巨大的幸福,一个和初恋得到满足时一样巨大的幸福。我怎么也打消不了这样的想法:来接我的将不是手执刈草镰的死神,而是我的母亲,她将带领我回到虚无和纯洁中去。” </p></li><li><p>她无所不在。吉卜赛女郎莉赛是她,尼克劳斯师傅的美丽圣母像是她,生活是她,爱情是她,欢娱是她,恐惧、饥饿、性欲也是她。眼下她是死亡,她已经把手指伸进我的胸脯内。 </p></li><li><p>“可你打算将来怎样死呢,纳尔奇思,你没有母亲?人没有母亲就不能爱,没有母亲也不能死啊。”</p></li></ul>]]></content>
<categories>
<category>读书笔记</category>
</categories>
<tags>
<tag>文学</tag>
<tag>哲思</tag>
<tag>黑塞</tag>
</tags>
</entry>
<entry>
<title>遥远的向日葵地</title>
<link href="/2024/05/16/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E9%81%A5%E8%BF%9C%E7%9A%84%E5%90%91%E6%97%A5%E8%91%B5%E5%9C%B0/"/>
<url>/2024/05/16/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E9%81%A5%E8%BF%9C%E7%9A%84%E5%90%91%E6%97%A5%E8%91%B5%E5%9C%B0/</url>
<content type="html"><![CDATA[<p><strong>第1章 灾年</strong></p><ul><li>所谓“希望”,就是付出努力有可能比完全放弃强一点点。</li><li>总之,第四茬种子一无所知地出芽了,显得分外蓬勃。毕竟,它们是第一次来到这个世界。</li></ul><p><strong>第2章 丑丑和赛虎</strong> </p><ul><li>一个人一条狗,在空旷大地中走很远很远,直到很小很小。</li></ul><p><strong>第3章 蒙古包</strong></p><ul><li>于是鸡们便努力下蛋,以报不杀之恩。</li></ul><p><strong>第4章 浇地</strong></p><ul><li><span style="background-color: #ffebcd; color: black; padding: 2px;">大地最雄浑的力量不是地震,而是万物的生长啊……</span></li><li>整整三天三夜,整面葵花地都均匀浸透了,整个世界都饱和了。花蕾深处的女子才下定决心,选中了最终出场的一套华服。</li><li>她是最强大的一株植物,铁锨是最贵重的权杖。她脚踩雨靴,无所不至。像女王般自由、光荣、权势鼎盛。</li><li>我还能感觉到她眉目间的光芒,感觉到她浑身哗然畅行的光合作用,感觉到她贯通终生的耐心与希望。</li></ul><p><strong>第5章 水</strong></p><ul><li>在荒野中,窄窄一条水渠所聚拢的这么一点点生气,丝毫不输世间所有大江大河湖泊海洋的盛景。</li><li>秋天来临的时候,我们的葵花地金光灿烂、无边喧哗,无数次将我从梦中惊醒,却没有一次惊醒过他的故乡。</li></ul><p><strong>第6章 我</strong></p><ul><li>我去过很多地方,住过好多房子,睡过各种床。我想,这一切都是暂时的。所以,我从不曾畏惧过生活的改变与动荡。</li></ul><p><strong>第7章 擅于到来的人和擅于离别的人</strong></p><ul><li><span style="background-color: #ffcccc; color: black; padding: 2px;">世界上最强烈的希望就是“一线希望”吧?</span></li><li><span style="background-color: #ccffff; color: black; padding: 2px;">我又想,人是被时间磨损的吗?……不是的。人是被各种各样的离别磨损的。</span></li><li>然而,车刚驶出客运站就停了下来。高峰期堵车。<br>最后的仪式迟迟不能结束。我一直看着这辆车。我好恨它的平凡。</li></ul><p><strong>第8章 命运</strong></p><ul><li>可是大地永不改变。丰沃的森林不应被砍伐毁灭,贫瘠干涸之地也不应被强行垦耕或绿化。人的命运和自然的命运截然相反。我到了葵花地边,为这巨大的相反而惊骇。突然感到漂泊远不曾停止,感到往下还要经历更多的动荡。</li></ul><p><strong>第9章 繁盛</strong> </p><ul><li>后来这饥饿与畏惧渗入红色之中。</li><li>亲眼看着一点点长成的生命,再亲眼看着它们一点点枯萎,是耕种者千百年来共有的痛苦。</li></ul><p><strong>第10章 九天</strong></p><ul><li>是的,无能为力。我仅有的力量只够用来掩饰懦弱,我最大的坚强是继续不露声色地生活在家人中间。</li></ul><p><strong>第11章 永红公社</strong></p><ul><li><span style="background-color: #ffebcd; color: black; padding: 2px;">当我小的时候我什么都爱。当我长大了,我忘记了我其实什么都爱。</span></li><li>好像刚刚回了一趟童年,又赶在规定时间前离开。<br>接下来还有更为漫长的旅程。</li></ul><p><strong>第12章 打电话</strong></p><ul><li>而我只能在这边孤独地回答:“可以的,我能听到,你说,你接着说……”——像是冲着宇宙深处光年之外的事物孤独地回答。</li></ul><p><strong>第13章 地窝子</strong></p><ul><li>然而安全感正来源于黑。外部世界实在太亮了,夜晚都那么亮。万物没遮没拦。只有我们的地窝子,在无限开阖之中伸出双手把我们微微挡了一下。</li></ul><p><strong>第14章 外婆的世界</strong></p><ul><li>我觉得外婆最终不是死于病痛与衰老的,而是死于等待。</li><li><span style="background-color: #ccffff; color: black; padding: 2px;">她已经没有同路人了。她早已迷路。她在迷途中慢慢向死亡靠拢,慢慢与死亡和解。<br>我却只知一味拉扯她,不负责地同死亡争夺她。<br>我离她多远啊,我离她,比死亡离她还要远。</span></li><li>以世俗的,自私的情爱。</li><li>那是我今生今世所能拥有的最隆重的迎接。</li><li>我就是一个骗子,一个欲望大于能力的骗子。而被欺骗的外婆,拄着拐棍站在楼梯口等待。她脆弱不堪,她的愿望也脆弱不堪。我根本支撑不了她,拐棍也支撑不了她。其实我早就隐隐意识到了,唯有死亡才能令她展翅高飞。</li></ul><p><strong>第15章 外婆的葬礼</strong> </p><ul><li>都说“人死如灯灭”,可外婆死了以后,她的灯才慢慢亮起,慢慢照亮我们最真实的内心,和我们往后的道路。</li></ul><p><strong>第16章 回家</strong></p><ul><li>不过上次回家是什么时候?<br>上一次的那个家在哪里?</li></ul><p><strong>第17章 狗带稻种</strong></p><ul><li><span style="color:#6699ff">突然而至的激情涨满咽喉,却什么也说不出来。</span></li></ul><p><strong>第18章 稻草人</strong></p><ul><li>我仍然感激,我知道假人先生仍在其中静静站立。就在硬盘的某枚碎片里,仍伸展双臂,守护着脚下无边绿浪……</li><li>人生统统由之前从未曾有过,之后也绝不再发生的事情组成。</li></ul><p><strong>第19章 大地</strong> </p><ul><li>和许多人一样,也是爱祖国,爱家乡的。也爱着人间丰富、庞杂、又矛盾重重的所有滋味。</li><li>它暴露在阳光中,却更像是隐蔽在阳光中。</li><li>越走,越感到地心引心的强大。我一步比一步沉重,一次又一次地抗拒成为一颗种子。</li></ul><p><strong>第20章 闯祸精</strong></p><ul><li>她想了想,又说:“它陪伴了我。”</li></ul><p><strong>第21章 孤独</strong> </p><ul><li>她满满当当的荒野生活瞬间裂开巨大的空白。她一时间激动又茫然。</li><li>云慢慢变化,渐渐平凡。她心中的措辞却愈加华美。</li><li>睡眠是地球上第二巨大的事物。第一巨大的是安静。</li></ul><p><strong>第22章 我妈和我叔</strong></p><ul><li>风很大,两人互相搀扶着走在地里,顶风前行,满面尘土,头发蓬飞,俨然一对患难夫妻。<br>看到我端起相机,两人不约而同冲我挤眉弄眼扮起怪相。像全无所谓,又像在掩饰狼狈。</li></ul><p><strong>第25章 兔子</strong> </p><ul><li>我妈心中喜悦。被一只美丽的生命追随,活在世上的辛劳与悲哀暂时后退。</li><li>月球紧随地球在茫茫银河系间流浪,唯一的兔子和唯一的我妈在地球一隅的葵花海洋中漂流。谁也无法舍弃对方。</li><li><span style="background-color: #ffcccc; color: black; padding: 2px;">仿佛那是它第一次出现在世上,第一次满心涨满柔情地接受活在世上的命运。</span></li><li>站在唯有兔子能通过的那扇门面前,我沮丧于自己庞大的身躯和沉重的心事。</li></ul><p><strong>第26章 村庄</strong> </p><ul><li>睡一会儿,醒一会儿,迷迷糊糊直到天明。<br>似乎在经历之前睡在这张床上的那个人某个时期的辗转反侧。</li><li>上锁的时候,心里突然间涌起几分离别的惆怅。奇怪,这个房间明明只住了一晚,这个小村子也只停留了半天,竟有异样的熟悉感。</li></ul><p><strong>第27章 新家</strong></p><ul><li>未来的家,只在未来保护着我们。而在此刻,此刻的家满地零乱,此刻的辛苦与狼狈永远占据此刻不去。</li></ul><p><strong>第29章 客人</strong></p><ul><li>他的身后也站满了黑压压的祖先,加持于他的一言一行。</li></ul><p><strong>第30章 火炉</strong></p><ul><li>双手的力量不能改天换地,却恰好能维持个体的生命。恰好能令粮食从大地中产出,食物从火炉上诞生。</li></ul><p><strong>第31章 寂静</strong></p><ul><li>我浑身沉重,不能挪动一步。而兔子跳跃前行,它的轻盈与眼下的寂静是同一质地。</li><li>我无数次沉迷于荒野气息不能自拔,却永远不能说出这气息的万分之一。<br>我站在那里,复杂、混乱、喧嚣、贪婪。被寂静重重围裹,张口结舌。我无数次赞美荒野,仍不能撇清我和荒野的毫无关系。</li></ul><p><strong>第32章 手机</strong> </p><ul><li>顿时觉得与这支手机有关的过去岁月全部消失,与这支手机有关的未来也统统止步不前。</li></ul><p><strong>第33章 石头</strong></p><ul><li><span style="background-color: #ffebcd; color: black; padding: 2px;">由于我的喜欢,世界微微失衡。</span></li><li>但被我占有的石头从此之后真的就属于我了吗?<br>不是的,从此之后,它只是和我并列出现在这个世界上而已。</li><li>那些石头从表面看上去灰头土脸、普通至极。但剖开后,却有着透明而梦幻的内瓤。<br>我觉得很多时候,它所谓的“价值”并非在于它的美丽,而在于它的这种反差吧?</li></ul><p><strong>第34章 关于乌伦古</strong> </p><ul><li>乌伦古河是一条在最需要河的地方流过的河。</li></ul><p><strong>第36章 金色</strong></p><ul><li>你放弃的世界丝毫没有变化。你最迷恋的亮堂堂的盛况年年准时到来,毫不迟疑。</li><li>对一枚叶片来说是千里迢迢的路途。但对一个村庄来说,不过一夜之间,仅隔一场梦境</li><li>月亮的金色是黑暗的金色。每一个人都认为月亮与故乡有关,与童年有关。其实它只和夜晚有关。它把人间的一切的依恋拒之门外。<br>它最孤独,也最自由。</li></ul><p><strong>第37章 沙枣</strong></p><ul><li><span style="background-color: #ccffff; color: black; padding: 2px;">我怜惜它短暂的生命。差点儿忘了自己的生命也是短暂的。</span></li><li>沙枣花开了,这片荒野中所有的年轻的,无依无靠的爱情,终于在大地上停止了流浪。</li></ul><p><strong>第38章 洗澡</strong> </p><ul><li>我为人的力量而惊惧,又隐隐感到人的疯狂。</li><li>洗啊洗啊,好像不只为了洗净尘垢,还想要洗去一身的罪过。</li></ul><p><strong>第39章 我的无知和无能</strong></p><ul><li>眼下世界里,青草顶天而生,爬虫昼追日,夜逐月。风是透明的河流,雨是冰凉的流星。<br>只有我最简陋,最局促。</li><li><span style="color:#cc0099">我酝酿出一份巨大的悲哀,却流不出几行眼泪。我全面坦露自己的软弱,捶胸顿足,小丑般无理取闹。可万物充耳不闻。</span></li></ul><p><strong>第40章 各种名字</strong></p><ul><li>但有时候姑娘的名字里也会出现“别克”。我的好友二娇曾告诉我,她认识一个哈萨克姑娘就叫别克炸弹……她的哥哥叫别克坦克,她弟弟叫别克火箭。真的。<br>多么火爆的一家人。</li></ul><p><strong>第43章 等待</strong></p><ul><li><span style="background-color: #ffebcd; color: black; padding: 2px;">等待是植根于孤独之中的植物吧?孤独越强大,等待越茂盛。</span></li></ul><p><strong>第44章 赶牛</strong></p><ul><li>跑得肝儿疼,跑得猛喘气,嗓子眼火辣辣的,扁桃腺都发炎了。跑得肺叶跟扯风箱一样,差点扯爆。</li></ul><p><strong>第45章 力量</strong></p><ul><li>像死亡之后还紧紧拥抱孩子的母亲</li><li>是啊,只有土地的主人才真正做到爱惜土地吧?只有真正的农民,世世代代依附土地而生的人,才能真正地体谅土地。<br>真正的农民,每块地种上几年,就会缓几年再种。<br>或者每种几年伤地力的作物——如葵花,会再种几年能够改良土壤的作物——如苜蓿。</li></ul><p><strong>第46章 美景</strong></p><ul><li>它首先是个秘密,其次才是美景。</li><li>我想大声呼喊,又生怕暴露这一切似的苦苦压抑。又想哭诉,又想辩解,又想致歉。但最后开口的,却只有赞美。</li><li>像一个毫无罪过的人那样用力地赞美,装聋作哑一般赞美。</li><li>但是,心里却明白,这个世界根本不需要赞美。甚至根本不需要我。无论我多么需要着这一切。</li><li>我每天去向这处小小的,深藏的美景。心中有小小的依恋,猫须般轻轻触碰胸腔。有时会设想永远生活在此处的情景,但这种想法也脆弱如猫须。</li></ul><p><strong>第47章 散步</strong> </p><ul><li><span style="background-color: #ffebcd; color: black; padding: 2px;">我也眷恋那样的时刻。宁静,轻松,心中饱满得欲要盛放,脚步轻盈得快要起飞。那时的希望比平时的希望要隆重许多许多。</span></li></ul><p><strong>第48章 人间</strong></p><ul><li>但是,在岑寂荒野中相识的人又在城市的滚滚人流中相遇,自有一番特别的情谊。似乎,此时的热情安慰的是过去的孤独。</li><li><span style="background-color: #F0FFF0; color: black; padding: 2px;">我仍生活在人间。至少,在这么偏僻的地方,仍有人间的姻缘逐迹而来。蜜蜂般执着而灵敏。陷落于辛忙劳动中的人们,仍有花期般准时降临的情感与情欲。</span></li></ul><p><strong>后记</strong></p><ul><li>回想这段经历的时候,我有无数条路通向记忆中那片金色田野,却没有一条路可以走出。写这些文字时,我有无数种开头的方式,却怎么也找不到一个合适的结局。</li><li><span style="background-color: #ffebcd; color: black; padding: 2px;">它们远不止开花时节灿烂壮美的面目,更多的时候还有等待、忍受与离别的面目。</span></li><li>但所有人只热衷于捕捉向日葵金色的辉煌瞬间,无人在意金色之外的来龙去脉。</li><li>在做任何事情之前都感到还没做好准备,结束每件事情后仍患得患失。</li><li>曾经一直坚信的东西,往往写着写着就动摇了。以为已经完全忘记的,写到最后突然完整地涌出笔端。</li></ul>]]></content>
<categories>
<category>读书笔记</category>
</categories>
<tags>
<tag>文学</tag>
<tag>风土人情</tag>
<tag>李娟</tag>
</tags>
</entry>
<entry>
<title>Git&Github陌生操作</title>
<link href="/2024/03/14/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/git&github%20%E9%99%8C%E7%94%9F%E6%93%8D%E4%BD%9C/"/>
<url>/2024/03/14/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/git&github%20%E9%99%8C%E7%94%9F%E6%93%8D%E4%BD%9C/</url>
<content type="html"><</p><p><a href="https://blog.csdn.net/mandagod/article/details/115633164">git删除远程分支_git 删除远端分支-CSDN博客</a></p><p><a href="https://blog.csdn.net/qq_42780289/article/details/97945300">Git:合并分支—-git merge命令应用的三种情景-CSDN博客</a></p>]]></content>
<categories>
<category>Git</category>
</categories>
<tags>
<tag>技术向</tag>
<tag>git</tag>
</tags>
</entry>
<entry>
<title>嵌入式系统与接口技术</title>
<link href="/2024/02/23/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%B3%BB%E7%BB%9F%E4%B8%8E%E6%8E%A5%E5%8F%A3%E6%8A%80%E6%9C%AF/"/>
<url>/2024/02/23/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%B3%BB%E7%BB%9F%E4%B8%8E%E6%8E%A5%E5%8F%A3%E6%8A%80%E6%9C%AF/</url>
<content type="html"><![CDATA[<h1 id="计算机组成"><a href="#计算机组成" class="headerlink" title="计算机组成"></a>计算机组成</h1><h3 id="CPU组成"><a href="#CPU组成" class="headerlink" title="CPU组成"></a>CPU组成</h3><ul><li>ALU 运算器 二进制运算</li><li>CU 控制单元<br>晶体管->逻辑门->加法器->ALU<br>晶体管->存储器->锁存器…寄存器,…memory—>RAM<br>三态:高电压 低电压 高阻</li></ul><h3 id="冯·诺伊曼结构(普林斯顿结构)"><a href="#冯·诺伊曼结构(普林斯顿结构)" class="headerlink" title="冯·诺伊曼结构(普林斯顿结构)"></a>冯·诺伊曼结构(普林斯顿结构)</h3><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/Pasted%20image%2020240219111521.png"></p><p>指令程序和数据在同一个存储空间<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/Pasted%20image%2020240219111420.png"></p><h3 id="哈佛结构"><a href="#哈佛结构" class="headerlink" title="哈佛结构"></a>哈佛结构</h3><p>指令、数据存在不同地方(双存储器)<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/Pasted%20image%2020240219111428.png"></p><h2 id="计算机硬件结构"><a href="#计算机硬件结构" class="headerlink" title="计算机硬件结构"></a>计算机硬件结构</h2><h3 id="ALU(Arithmetic-Logical-Unit)算术逻辑单元"><a href="#ALU(Arithmetic-Logical-Unit)算术逻辑单元" class="headerlink" title="ALU(Arithmetic Logical Unit)算术逻辑单元"></a>ALU(Arithmetic Logical Unit)算术逻辑单元</h3><p>算数、逻辑运算<br>双输入 单输出<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/Pasted%20image%2020240219112745.png"></p><h3 id="存储器(读、写、访问):容量(字、字节)、字长"><a href="#存储器(读、写、访问):容量(字、字节)、字长" class="headerlink" title="存储器(读、写、访问):容量(字、字节)、字长"></a><strong>存储器</strong>(读、写、访问):容量(字、字节)、字长</h3><ul><li><p>位bit 0 or 1</p></li><li><p>字节byte 1byte=8bit 所有存储器的基本存储数据单元 B</p></li><li><p>1kB = 1024B;1MB = 1024kB;1GB = 1024MB;1TB = 1024GB</p></li><li><p>字word 一次可以直接处理的二进制数码的位数,通常取决于微处理器内部通用寄存器的位数和<strong>数据总线的宽度</strong><br>(地址总线的宽度决定了CPU可以寻址的内存空间大小,而数据总线的宽度决定了CPU可以一次性传输数据的大小。)</p></li><li><p>if 数据总线是32位的,1word ↔ 32bit</p></li><li><p>字长反映并行运算能力 longer stronger</p></li><li><p>双字double word、四倍字quad word</p></li><li><p>字数——存储器的地址范围[地址的个数],决定于所使用的地址总线位数</p></li><li><p>位数——存储器的数据范围[数据的宽度],决定于所使用的数据总线位数</p></li></ul><p>不同字长存储器的地址安排<br> 16位时同一行两个字节地址的最低1位不同<br> 32位时同一行4个字节地址的最低2位不同</p><p>主存 RAM(随机存取 静态SRAM 动态DRAM)+ROM(只读)</p><ul><li>高速缓存 Cache CPU内部的小容量局部高速存储器</li><li>外存 磁盘 U盘 磁带等</li></ul><h3 id="控制器:指令、程序"><a href="#控制器:指令、程序" class="headerlink" title="控制器:指令、程序"></a><strong>控制器</strong>:指令、程序</h3><p>内部主要功能部件:</p><ul><li><strong>指令寄存器</strong>:存放由存储器取得的指令。</li><li><strong>译码器</strong>:将指令中的操作码翻译成控制信号。</li><li><strong>时序节拍发生器</strong>:产生时序脉冲节拍信号,使计算机有节奏、有次序地工作。</li><li><strong>操作控制部件</strong>:将控制信号组合起来,控制各个部件完成相应的操作。</li><li><strong>指令计数器</strong>:计算并指出下一条指令的地址。</li></ul><p>控制器对指令进行<strong>译码</strong>,并根据指令的操作要求指挥所有其它部件的工作,为此它根据指令生成一系列时序控制信号,控制其它单元工作。<br>控制器不断地从存储器中<strong>读取指令</strong>,然后分析指令的含义(译码),并执行指令的操作,执行完成以后又从存储器中读取下一条指令。</p><p>一条计算机指令的功能有限,完成复杂的运算功能需要将多条指令组合起来构成指令序列。这样一个完成某种功能的指令序列称为<strong>程序</strong>。</p><ul><li>通常还把CPU、存储器和输入/输出接口电路和在一起构成的电路系统称为<strong>主机</strong>(也即微型计算机)</li></ul><h3 id="系统总线-各部件之间传送信息(BUS)"><a href="#系统总线-各部件之间传送信息(BUS)" class="headerlink" title="系统总线 各部件之间传送信息(BUS)"></a>系统<strong>总线</strong> 各部件之间传送信息(<strong>BUS</strong>)</h3><ul><li><p>地址总线 Address Bus<br> CPU用来向存储器或I/O端口传送地址 CPU单向发出<br> 位数n—>可直接寻址的内存,IO接口容量$2^n$</p></li><li><p>数据总线 Data Bus<br> CPU与存储器及外设交换数据的通路<br> 双向、三态<br> 位数与微处理器的位数相同</p></li><li><p>控制总线 Control Bus<br> 用来传输控制信号<br> 由两种方向的<strong>单向</strong>控制信号组成</p></li></ul><h3 id="总线:计算机中连接各个功能模块的纽带,是计算机各模块之间进行信息传输的公共线路。"><a href="#总线:计算机中连接各个功能模块的纽带,是计算机各模块之间进行信息传输的公共线路。" class="headerlink" title="总线:计算机中连接各个功能模块的纽带,是计算机各模块之间进行信息传输的公共线路。"></a><strong>总线</strong>:计算机中连接各个功能模块的纽带,是计算机各模块之间进行信息传输的<strong>公共线路</strong>。</h3><p>发射模块、接收模块<br>主设备:能启动总线服务的设备(如CPU)<br>从设备:只能等待启动命令的被动型设备</p><p> 按物理特性分类:<br> - 电缆式:通常采用扁平电缆连接线路板<br> - 主板式:在主机板上采用插槽方式供功能板插入。<br> - 背板式:在机箱中设置一个专门的总线插槽板。</p><p> 按连线数量分类:<br> - 串行总线:一条数据线进行数据传输<br> - 并行总线:8位、16位、32位、64位</p><p> 按连接的对象分类:<br> - 片总线:用于集成电路内部各功能单元的信息通路,属<strong>芯片级总线</strong><br> - 系统总线(也称内总线):用于计算机内部各插件板(部件)之间的互连,属板级总线。常用的总线标准有ISA、EISA、PCI、PCI-E等<br> - 外总线:用于计算机之间或主机与外设之间的通信,属<strong>设备级总线</strong>。常用的总线标准有RS-232C、RS-485、IEEE-488、USB总线等</p><p> 数据传输方向<br> - 单工:单向传输总线。<br> - 双工:双向传输总线。<br> - 半双工:只能在两个方向上轮流传输信息。<br> - 全双工:可在两个方向上同时传输信息。</p><p>定时(时钟)特征</p><ul><li>同步:数据传输速率是固定的。</li><li>异步:数据传输速率是可变的</li></ul><h3 id="总线结构"><a href="#总线结构" class="headerlink" title="总线结构"></a><strong>总线结构</strong></h3><h4 id="单总线结构"><a href="#单总线结构" class="headerlink" title="单总线结构"></a>单总线结构</h4><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240223200600.png" alt="image.png"></p><ul><li>各模块之间的信息传递都通过单总线进行。</li><li>优点:控制简单,易于扩充配置I/O设备。</li><li>缺点:所有设备都连在一组总线上,总线只能分时工作,使数据传输量受限。</li></ul><h4 id="面向CPU的双总线结构"><a href="#面向CPU的双总线结构" class="headerlink" title="面向CPU的双总线结构"></a>面向CPU的双总线结构</h4><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240223200648.png" alt="image.png"></p><ul><li>通过存储总线使CPU对主存进行读/写操作。通过I/O总线让CPU与I/O设备进行数据交换。</li></ul><ul><li>优点:提高了微机系统数据传输效率。</li><li>缺点:外设和主存之间没有直接通路,要通过CPU进行信息交换,降低了CPU的工作效率。</li></ul><h4 id="面向主存的双总线结构"><a href="#面向主存的双总线结构" class="headerlink" title="面向主存的双总线结构"></a>面向主存的双总线结构</h4><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240223200951.png" alt="image.png"><br>结合了以上2种结构的特点。提高了信息传送效率,同时也不降低CPU的工作效率。</p><h3 id="微机的性能指标"><a href="#微机的性能指标" class="headerlink" title="微机的性能指标"></a><strong>微机的性能指标</strong></h3><ul><li>主频:计算机的晶振频率,反映时钟周期的大小。</li><li>字长:CPU的数据位数,反映CPU并行处理能力。</li><li>内存容量:能存储信息的字节数。</li><li>存取周期:主存储器完成一次读写所需的时间。</li><li>响应时间:用户向计算机系统发出一个请求后,到系统对该请求做出响应并获得其结果所需的等待时间。</li><li>吞吐率:系统响应用户请求的速率。</li><li>运算速度:微机每秒所能执行的指令数。</li><li>MIPS(Million Instruction Per second):反映计算机每秒可执行的指令数。</li></ul><h3 id="输入输出设备:"><a href="#输入输出设备:" class="headerlink" title="输入输出设备:"></a><strong>输入输出设备</strong>:</h3><p>基本输入输出方式:设备的编址、数据的传送方式</p><p>IO设备与CPU之间的连接:IO接口<br> 解决:速度、信号电平、信号格式、时序等不匹配问题</p><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240223201513.png" alt="image.png"></p><h4 id="统一编址法"><a href="#统一编址法" class="headerlink" title="统一编址法"></a>统一编址法</h4><ul><li>存储器映像的外设寻址</li><li>将接口中的控制寄存器、数据寄存器、状态寄存器和内存单元一样看待</li><li>接口与存储器采用不同的地址</li><li>可以利用访存指令进行输入输出操作</li></ul><h4 id="单独编址法"><a href="#单独编址法" class="headerlink" title="单独编址法"></a>单独编址法</h4><p>两个地址空间<br>访问存储器/外围设备采用不同的指令</p><h3 id="中断方式"><a href="#中断方式" class="headerlink" title="中断方式"></a><strong>中断方式</strong></h3><ul><li>中断——在发生了一个外部的事件时调用相应的处理程序的过程<br> 中断服务程序</li><li>中断服务程序与中断时CPU正在运行的程序是相互独立的,相互不传递数据。</li><li>中断处理中的问题<br> 设备识别方式<br> 中断处理程序入口地址的形成<br> 中断裁决<br> 中断屏蔽<br> <img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240223202058.png" alt="image.png"><br> 多重中断</li><li>中断服务程序也可以被中断</li><li>中断嵌套<br>实现方法</li><li>给CPU及中断请求都设置优先级</li><li>多级中断</li></ul><p>嵌套中断响应过程:</p><ol><li>保存现场</li><li>关中断</li><li>识别中断</li><li>形成服务程序入口地址</li><li>执行服务程序<br> [可关中断阻止其他中断]<br> ……</li><li>恢复现场</li><li>开中断</li></ol><h2 id="计算机软件系统"><a href="#计算机软件系统" class="headerlink" title="计算机软件系统"></a><strong>计算机软件系统</strong></h2><ul><li>系统软件<ul><li>操作系统<ul><li>交互操作系统</li><li>实时操作系统</li><li>嵌入式操作系统 Embedded Operation System,EOS</li></ul></li><li>编译程序</li><li>解释程序</li></ul></li><li>应用软件</li><li>虚拟机 在实际硬件以上的机器层次都称为虚拟机,是由软件构成的外部特性</li></ul><h4 id="层次化结构"><a href="#层次化结构" class="headerlink" title="层次化结构"></a>层次化结构</h4><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240226100448.png" alt="image.png"><br><strong>Firmware</strong>:固定不变的常用软件固化在硬件中 (ROM) 成为<strong>固件</strong></p><h3 id="计算机语言"><a href="#计算机语言" class="headerlink" title="计算机语言"></a><strong>计算机语言</strong></h3><ul><li>机器语言 二进制代码</li><li>汇编语言 助记符</li><li>高级语言 与计算机结构无关 C等</li><li>应用语言 应用程序中使用 SQL HTML</li></ul><h3 id="定点数编码"><a href="#定点数编码" class="headerlink" title="定点数编码"></a><strong>定点数编码</strong></h3><h4 id="数制"><a href="#数制" class="headerlink" title="数制"></a><strong>数制</strong></h4><p>二进制——后缀B 1101.1010B<br>八进制——后缀Q或O 625.71Q<br>十进制——后缀D或省略 3.1415<br>十六进制——后缀H 0AE.3FH</p><p>$$<br>(𝑥)<em>{𝑁}=𝑥_𝑛 𝑥</em>{𝑛−1}⋯𝑥<em>1 𝑥_0 𝑥</em>{−1}⋯𝑥_{−𝑚}=∑_{𝑖=−𝑚}^𝑛(𝑥_𝑖×𝑁^𝑖 )<br>$$</p><ul><li>定点数:小数点位置固定不变的数</li><li>定点整数:小数点定在最低位数的右面</li><li>定点小数:小数点固定在最高位数的后面,即纯小数表示</li></ul><p>0: 30h 48D<br>A:41h 65D<br>a: 61h 97D<br>回车(CR):0DH<br>换行(LF):0AH</p><p>计算机以二进制数的形式存储数据,称为机器数</p><ul><li>无符号数</li><li>有符号数<br> 原码、反码、补码、移码<br> 1位符号位</li></ul><h3 id="原码-Sign-magnitude-representation"><a href="#原码-Sign-magnitude-representation" class="headerlink" title="原码 (Sign-magnitude representation)"></a>原码 (Sign-magnitude representation)</h3><ul><li><strong>表示方法</strong>:原码使用二进制的最高位作为符号位(0代表正,1代表负),其余位</li><li>表示数值的绝对值。</li><li><strong>例子</strong>:+7 的原码为 0111,-7 的原码为 1111(假设使用4位表示)。</li></ul><h3 id="反码-Ones’-complement"><a href="#反码-Ones’-complement" class="headerlink" title="反码 (Ones’ complement)"></a>反码 (Ones’ complement)</h3><ul><li><strong>正数的反码</strong>与原码相同。</li><li><strong>负数的反码</strong>是对原码除符号位外的所有位取反(0变1,1变0)。</li><li><strong>例子</strong>:+7 的反码为 0111(与原码相同),-7 的反码为 1000(4位表示)。</li></ul><h3 id="补码-Twos’-complement"><a href="#补码-Twos’-complement" class="headerlink" title="补码 (Twos’ complement)"></a>补码 (Twos’ complement)</h3><ul><li><p><strong>正数的补码</strong>与原码相同。</p></li><li><p><strong>负数的补码</strong>是其反码加1。</p></li><li><p><strong>转换方法</strong>:无论正负数,将一个数的补码再次取补码可以得到其原码。</p></li><li><p><strong>例子</strong>:+7 的补码为 0111(与原码相同),-7 的补码为 1001(4位表示)。</p></li><li><p><strong>原码转反码和补码</strong>:</p><ul><li>正数:原码、反码、补码相同。</li><li>负数:反码是原码非符号位取反;补码是反码加1。</li></ul></li><li><p><strong>反码转原码</strong>:</p><ul><li>正数:直接转换。</li><li>负数:反码非符号位取反。</li></ul></li><li><p><strong>补码转原码</strong>:</p><ul><li>正数:直接转换。</li><li>负数:补码减1后,非符号位取反。<br><strong>移码</strong>:在补码基础上加$2^n$<br>-5 1011(补) 0011(移)</li></ul></li></ul><p>补码可直接相加、减<br>$$<br>[x]_补+[y]_补=[x+y]_补<br>$$<br>$$<br>[x-y]_补=[x]_补-y_补=x_补+[-y]_补<br>$$<br><strong>字节存储顺序</strong> </p><ul><li>大数端(big Endian):高位字节置于低地址,低位字节置于高地址 </li><li>小数端(little Endian):低位字节置于低地址,高位字节置于高地址</li></ul><table><thead><tr><th>地址</th><th>数据</th></tr></thead><tbody><tr><td>4H</td><td>00H</td></tr><tr><td>5H</td><td>11H</td></tr><tr><td>6H</td><td>AAH</td></tr><tr><td>7H</td><td>BBH</td></tr></tbody></table><p>小数端:BBAA1100H<br>大数端:0011AABBH<br>Intel,ARM均小端格式 摩托罗拉古早为大端</p><h3 id="浮点数编码"><a href="#浮点数编码" class="headerlink" title="浮点数编码"></a><strong>浮点数编码</strong></h3><ul><li>组成:阶码E,尾数M,符号位S</li><li>E的编码:移码或补码<ul><li>移码:将数据的二进制编码加上一个常数(通常是 $2^{n-1}$)后的二进制代码作为该数据的编码。移码的特点:保持了数据原有的大小顺序,便于数据比较。</li></ul></li><li>S与M的编码:原码或补码</li></ul><table><thead><tr><th>S 符号位 0/1</th><th>E 阶码 移码表示</th><th>M 尾数</th><th></th></tr></thead></table><p>$$<br>N=(-1)^S\times M \times R^E<br>$$<br>R进制:多个二进制位构成一组,代表一个R进制位</p><h3 id="规范化浮点数(IEEE754)编码"><a href="#规范化浮点数(IEEE754)编码" class="headerlink" title="规范化浮点数(IEEE754)编码"></a><strong>规范化浮点数(IEEE754)编码</strong></h3><p>$$<br>N=(-1)^S\times 1.M \times 2^e<br>$$<br>S and M :原码 S=0为正<br>E=e+127(单精度) E=e+1023(双精度)</p><ul><li>在单精度浮点数中,指数位偏移量为127。<ul><li>对于一个非负指数,真实指数值加上偏移量就是该指数的编码值</li><li>对于一个负指数,真实指数值加上偏移量的补码就是该指数的编码值。<br>单精度 32bit</li></ul></li></ul><table><thead><tr><th>S</th><th>E</th><th>M</th></tr></thead><tbody><tr><td>31</td><td>30 (8) 23</td><td>22 (23) 0</td></tr></tbody></table><p>双精度 64bit</p><table><thead><tr><th>S</th><th>E</th><th>M</th></tr></thead><tbody><tr><td>63</td><td>62 (11) 52</td><td>51 (52) 0</td></tr></tbody></table><h4 id="浮点数的表示范围"><a href="#浮点数的表示范围" class="headerlink" title="浮点数的表示范围"></a><strong>浮点数的表示范围</strong></h4><ul><li>浮点数的溢出表现为阶码的溢出。浮点数的上溢:数据太大,以至于大于阶码所能表示的数据;浮点数的下溢:数据太小,以至于小于阶码所能表示的数值</li><li>浮点数表示法可以扩大数值表示的范围;浮点数表示法未增加表示数值的个数;绝对值越大,浮点数分布越稀疏;</li><li>阶码位数越多,数据表示的<strong>范围</strong>就越大;尾数位数越多,数据表示的<strong>精度</strong>越高<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240228110703.png" alt="image.png"></li></ul><h1 id="8086微机系统原理和结构"><a href="#8086微机系统原理和结构" class="headerlink" title="8086微机系统原理和结构"></a>8086微机系统原理和结构</h1><h2 id="8086-CPU特性"><a href="#8086-CPU特性" class="headerlink" title="8086 CPU特性"></a>8086 CPU特性</h2><ul><li>Intel公司于1977年推出</li><li>数据总线:16位</li></ul><ul><li>地址总线:20位</li></ul><ul><li>引脚功能复用</li><li>单总线、累加器结构</li></ul><ul><li>可控三态电路</li><li>总线分时复用</li></ul><h3 id="流水线技术"><a href="#流水线技术" class="headerlink" title="流水线技术"></a><strong>流水线技术</strong></h3><p>从8086/8088开始,CPU采用了一种新的结构来并行地完成这些工作。执行单元负责执行指令,总线接口单元负责取指令、取操作数和写结果。它们独立地、并行地完成各自相应的工作。当EU执行指令时,BIU便“预取”下一条要执行的指令,所以大多数情况下取指令的时间可“省掉”,从而加快了程序的运行速度。这种结果称为流水线结构。</p><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240311104718.png" alt="image.png"></p><h2 id="寄存器结构"><a href="#寄存器结构" class="headerlink" title="寄存器结构"></a>寄存器结构</h2><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240311105113.png" alt="image.png"></p><p>一般而言:寄存器数量越多,CPU功能越强</p><h3 id="通用寄存器"><a href="#通用寄存器" class="headerlink" title="通用寄存器"></a><strong>通用寄存器</strong></h3><p>16位 可将高8位 低8位分别作为两个独立的8位寄存器使用。</p><ol><li>AX:常用于存放算术逻辑运算中的操作数。所有的I/O指令都使用累加器与外设接口传送信息。</li><li>BX:常用来存放访问内存时的基地址。</li><li>CX:在循环和<strong>串操作</strong>指令中用做计数器。</li><li>DX:在寄存器间接寻址的I/O指令中存放I/O端口的地址。</li><li>在做双字长乘/除法运算时,DX与AX合起来存放一个双字长数(32位),DX存放高16位,AX存放低16位。</li></ol><h3 id="指针和变址寄存器"><a href="#指针和变址寄存器" class="headerlink" title="指针和变址寄存器"></a><strong>指针和变址寄存器</strong></h3><p> <strong>SP</strong>:在堆栈操作中用来存放栈顶的偏移地址,永远指向堆栈的栈顶。<br><strong>BP</strong>:一般也常用来存放访问内存时的基地址,通常是与SS配对使用(BX通常是与DS配对使用)。<br><strong>SI、DI</strong>:常在<strong>变址寻址方式</strong>中作为索引指针。在字符串操作指令中,要求用SI作为源变址寄存器,存放源操作数的偏移地址;DI作为目标变址寄存器,存放目标操作数的偏移地址。</p><h3 id="段寄存器"><a href="#段寄存器" class="headerlink" title="段寄存器"></a><strong>段寄存器</strong></h3><p><strong>CS</strong>: 代码段 内容是当前执行程序的指令代码段(的段基地址) 它和<strong>指令指针IP</strong>一起决定<strong>下一条</strong>所要执行指令的物理存储地址。<br><strong>DS</strong>: 数据段 存放数据字符(的段基地址)<br><strong>ES</strong>:附加段 在字符串操作时作为目标地址使用<br><strong>SS</strong>:堆栈段 用于存放需要保存的数据和地址。如在子程序调用或响应中断时保存返回主程序的地址和进入子程序后将要改变其值的寄存器的内容。</p><p>每一个存储单元的地址都是由它所在逻辑段的段基地址和段内的偏移地址两部分构成。</p><p>段基地址:逻辑段起始地址的高16位</p><p><em>堆栈的操作遵循先进后出的原则,操作的地址由SS(堆栈段基地址寄存器)和SP(堆栈指针寄存器)的内容指定。</em></p><h3 id="指令指针寄存器"><a href="#指令指针寄存器" class="headerlink" title="指令指针寄存器"></a><strong>指令指针寄存器</strong></h3><p><strong>IP</strong>: 用来存放<strong>下一条</strong>要执行指令的==偏移地址==</p><p>当CPU从CS段偏移地址为(IP)的内存单元中取出指令代码的一个字节后,IP自动加1,指向指令代码的下一个字节。</p><p><strong>用户程序不能直接访问IP</strong> (指令的操作数不能是IP)。 </p><p>物理地址 = 段地址 x 16 + 偏移地址<br>Physical Address=(CS×16)+IP</p><h3 id="标志寄存器"><a href="#标志寄存器" class="headerlink" title="标志寄存器"></a><strong>标志寄存器</strong></h3><p>也称程序状态字(PSW),16位寄存器,但只使用了其中9位<br>6 个状态标志 + 3个控制标志</p><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240313104418.png" alt="image.png"></p><h4 id="状态标志"><a href="#状态标志" class="headerlink" title="状态标志"></a><strong>状态标志</strong></h4><p>CF: 进位标志 有进/借则1 无则0<br>PF: 运算结果低8位中1的个数 偶则PF=1 奇则PF=0<br>AF: $AF=D_{3CY}$ 低四位向高四位有仅为或借位,则AF=1,否则AF=0 BCD运算则应调整<br>ZF: 当运算结果各位均为零时ZF=1,否则ZF=0<br>SF: $D_7=1$(byte) or $D_{15}=1$(word) 则为1 反映符号位(负为1)<br>OF: 算术运算的结果超出了带符号数的范围,即溢出时OF=1<br> 8位带符号数的范围是-128<del>+127,16位带符号数的范围是-32 768</del>+32 767。<br>$OF=D_{7CY}\oplus D_{6CY}$ or $OF=D_{15CY}\oplus D_{14CY}$<br>机器把所有数都当<strong>无符号数运算</strong>,把结果都当<strong>有符号数来设置标志</strong>。</p><p>无符号数加法 CF判断溢出<br>有符号数加法 OF判断溢出</p><ul><li>比较大小:<ul><li>对有符号数:<ul><li>无溢出时(OF=0):<ul><li>若 ZF=1,则两数相等</li><li>若 ZF=0 且 SF=0,则被减数大</li><li>若 ZF=0 且 SF=1,则减数大</li></ul></li><li>有溢出时(OF=1):<ul><li>若 SF=1,则被减数大</li><li>若 SF=0,则减数大</li></ul></li></ul></li><li>对无符号数:<ul><li>若ZF=1,则两数相等</li><li>若CF=0,则被减数大</li><li>若CF=1,则减数大</li></ul></li></ul></li></ul><h4 id="控制标志"><a href="#控制标志" class="headerlink" title="控制标志"></a><strong>控制标志</strong></h4><p>控制CPU状态<br>DF: 控制字符串操作中地址的步进方向<br> DF=0 地址增址; DF=1 地址减址<br>IF: IF=1,允许CPU响应外部可屏蔽中断。IF=0,禁止CPU响应外部可屏蔽中断。<br>TF: TF=1,CPU处于<em>单步工作方式</em>,即CPU每执行一条指令就自动地发生一个内部中断,CPU转去执行一个中断程序,常用于程序调试,又称为<strong>陷井标志</strong>。TF=0,CPU正常执行程序。 </p><h2 id="8086引脚定义及功能"><a href="#8086引脚定义及功能" class="headerlink" title="8086引脚定义及功能"></a>8086引脚定义及功能</h2><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240311104922.png" alt="image.png"></p><h3 id="概述"><a href="#概述" class="headerlink" title="概述"></a><strong>概述</strong></h3><p>8086和8088都具有40条引出线、采用<strong>双列直插式封装</strong>的集成电路芯片。<br>8086的许多引脚都具有双重定义和功能,采用分时复用方式工作,即在不同时刻,引脚上的信号具有不同的意义。</p><ul><li>每根引脚只传送一种信息</li><li>引脚电平的高低代表不同的信号,如$M/\overline{IO}$ ,在为低电平时,表示当前访问的是存储器;为高电平时,则表示访问输入/输出接口。</li><li>在不同的时间范围,引脚传送不同的信息,即分时复用。如 $AD0\sim AD15$,在某一时刻传送地址的低16位信号;另一时刻则传送16位数据。</li><li>在引脚作为输入端或输出端时传送不同的信息。如$RQ/\overline{GT_0}$ 端,作为输入端时,输入的是总线请求信号;为输出端时,则输出总线请求允许信号。</li><li>当CPU工作在不同模式时,引脚具有不同的名称和定义。8086微处理器有两种工作模式,<strong>最大模式</strong>和<strong>最小模式</strong>。两种工作模式下的引脚定义有一些区别,上图所示右边括号中的引脚名称就是CPU工作在最大模式时对应引脚的含义。</li></ul><h3 id="地址-数据总线"><a href="#地址-数据总线" class="headerlink" title="地址/数据总线"></a><strong>地址/数据总线</strong></h3><ul><li>20位地址线 16位数据线 分时复用 共同占用20根引脚</li><li>AD0~AD15地址、数据分时复用的双向信号线,三态。当 $ALE=1$ 时,这些引脚上传输的是地址信号;当 $\overline{DEN}=0$ 时,这些引脚上传输的是数据信号。</li><li>A16<del>A19/S3</del>S6 分时复用的地址/状态信号线,三态输出。在8086访问存储器时,读/写总线周期的第一个机器周期T1,从这4个引脚上送出最高4位地址A16<del>A19。而在总线周期的其他机器周期,这4个引脚送出状态信号S3</del>S6。这些状态信号里,S6始终为低电平;S5指示标志寄存器的中断允许标志位IP的状态;S4、S3的组合指示CPU当前正在使用的段寄存器。</li><li>CPU访问I/O端口时 这四根引脚不适用,全为低电平。</li></ul><table><thead><tr><th>S4</th><th>S3</th><th>正在使用的段寄存器</th></tr></thead><tbody><tr><td>0</td><td>0</td><td>ES</td></tr><tr><td>0</td><td>1</td><td>SS</td></tr><tr><td>1</td><td>0</td><td>CS or 未使用</td></tr><tr><td>1</td><td>1</td><td>DS</td></tr></tbody></table><h3 id="控制总线"><a href="#控制总线" class="headerlink" title="控制总线"></a><strong>控制总线</strong></h3><ul><li><p>总共16根 2种工作模式共用的有8根</p></li><li><p>$MN/\overline{MX}$工作方式控制输入。为高电平时,表示CPU工作在最小模式;为低电平时,表示CPU处于最大模式。</p></li><li><p>$\overline{RD}$ 读选通信号,三态,低电平有效。有效时,表示CPU正在对存储器或I/O接口进行读操作。</p></li><li><p>$READY$ 高电平有效。有效时,表示存储器或I/O设备已准备好,CPU可以进行数据传送。</p><ul><li>若存储器或I/O设备未准备好,则READY信号为低电平。CPU在T3周期采样READY信号,若其为低电平,CPU自动插入等待周期Tw(1个或多个),直到READY变为高电平后,CPU才脱离等待状态,完成数据传送过程。</li></ul></li><li><p>$INTR$ 可屏蔽中断请求输入信号,高电平有效。CPU在每条指令的最后一个周期采样该信号,以决定是否进入中断响应周期。可用软件屏蔽</p></li><li><p>$\overline{TEST}$ 测试信号输入引脚 低电平有效。当CPU执行WAIT指令时,每隔5个时钟周期对此引脚进行一次测试。若为高电平,CPU则继续处于空转状态进行等待,直到引脚变为低电平后,CPU才结束等待状态,继续执行下一条指令。</p></li><li><p>$NMI$ 非屏蔽中断请求输入信号,上升沿触发。这个引脚上的中断请求信号不能用软件屏蔽,CPU在当前指令执行结束后就进入中断过程。</p></li><li><p>$RESET$ 系统复位输入信号,高电平有效。为使CPU完成内部复位过程,该信号至少要在4个时钟周期内保持有效。当RESET返回低电平时,CPU将重新启动。</p></li><li><p>$\overline{BHE}/S_7$ 分时复用的控制 / 状态信号线,三态输出。在总线周期的第一个时钟周期输出 $\overline{BHE}$ 信号,其他时钟周期输出状态信号 S7。$\overline{BHE}$信号的意义是:当$\overline{BHE}$ 为低电平时,表示可使用高 8 位数据线 AD8∼AD15;否则只使用低 8 位数据线 AD0~AD7。$\overline{BHE}$ 信号和地址信号一样需要锁存,它同最低位地址信号 A0 的状态组合在一起表示的功能见下表。</p></li></ul><table><thead><tr><th>操作</th><th>$\overline{BHE}$</th><th>A0</th><th>使用的数据线</th></tr></thead><tbody><tr><td>读或写偶地址的一个字</td><td>0</td><td>0</td><td>AD15~AD0</td></tr><tr><td>读或写偶地址的一个字节</td><td>1</td><td>0</td><td>AD7~AD0</td></tr><tr><td>读或写奇地址的一个字节</td><td>0</td><td>1</td><td>AD15~AD8</td></tr><tr><td>/</td><td>1</td><td>1</td><td>无效</td></tr></tbody></table><h3 id="两种工作模式"><a href="#两种工作模式" class="headerlink" title="两种工作模式"></a><strong>两种工作模式</strong></h3><p><strong>最小模式</strong>:单微处理器模式,小系统所需全部控制信号都由CPU直接提供。<br><strong>最大模式</strong>:多微处理机模式,系统中除了有8086 CPU之外,还可接其他处理器构成多微处理器系统。<br>当$MN/\overline{MX}=1$ :最小模式;<br>当$MN/\overline{MX}=0$:最大模式。<br>两种工作模式下的部分引脚具有不同的功能。<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240313114822.png" alt="image.png"></p><h3 id="最小模式"><a href="#最小模式" class="headerlink" title="最小模式"></a><strong>最小模式</strong></h3><ul><li> $\overline{INTA}$中断响应输出端。当 CPU 响应从 $\overline{INTA}$ 端输入的中断请求时,由 $\overline{INTA}$端输出两个连续的负脉冲,可用做外部中断源的中断向量码的读选通信号。</li><li>$ALE$ 地址锁存允许信号,三态输出,高电平有效。当它为高电平时,表明 CPU地址线上有有效地址。可利用它的下降沿将地址信号 $A0\sim A19$ 和 $\overline{BHE}$信号锁存到地址锁存器中。</li><li>$\overline{DEN}$数据允许信号,三态,低电平有效。该信号有效时,表示数据总线上有有效数据。它在每次访问内存或 I/O 接口以及在中断响应期间有效。它常用做数据总线驱动器的片选信号。</li><li>$DT/\overline{R}$数据传送方向控制信号,三态。用于确定数据传送的方向。高电平时,CPU 向存储器或 I/O 端口发送数据;低电平时,CPU 从存储器或 I/O 接口接收数据。此信号用于控制总线收发器的传送方向。</li><li>$M\overline{IO}$ 输入 / 输出 / 存储器控制信号,三态。用来区分当前操作是访问存储器还是访问 I/O 端口。引脚输出为高电平时,表示访问存储器;为低电平时,则表示访问 I/O 端口。</li><li>$\overline{WR}$写信号输出,三态。此引脚输出为低电平时,表示 CPU 正在对存储器或 I/O 端口进行写操作。</li><li>HOLD 总线保持请求信号输入,高电平有效。当某一总线主控设备要占用系统总线时,通过此引脚向 CPU提出请求。</li><li>HLDA 总线保持响应信号输出,高电平有效。这是CPU 对 HOLD 请求的响应信号,当 CPU 收到有效的 HOLD 信号后,就会对其做出响应:一方面使 CPU 的所有三态输出的地址信号、数据信号和相应的控制信号变为高阻状态 ( 浮动状态 );同时还输出一个有效的 HLDA,表示处理器现在已放弃对总线的控制。当 CPU 检测到 HOLD信号变低电平后,就立即使 HLDA变低电平,同时恢复对总线的控制。</li></ul><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240313170938.png" alt="image.png"><br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240313171021.png" alt="image.png"><br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240313171137.png" alt="image.png"></p><h2 id="8086存储器组织"><a href="#8086存储器组织" class="headerlink" title="8086存储器组织"></a>8086存储器组织</h2><p><strong>存储容量的表示</strong>:表示存放二进制代码的个数,用包含多少个存储单元,而每个单元又包含多少位来表示。微机中常以:字(节)数×字(节)的位数来表示,如:1024×8b->1K×8b->1KB<br><strong>字节数据</strong>:一个数存放一单元如:11H->00010H单元<br><strong>字数据</strong>:用二个连续单元存放,规定由2个单元中地址较小的一个确定。 “低对低、高对高”的存放规律(小数端)<br>**机器指令(机器码)**:按字节顺序存放<br>如:MOV BX,AX 89C3H->00015H<br><strong>字符串</strong>:从低地址开始,以ASCII码顺序存放如:‘ABC’->00017H</p><h3 id="存储器访问"><a href="#存储器访问" class="headerlink" title="存储器访问"></a><strong>存储器访问</strong></h3><p><strong>奇</strong>地址存储器与数据总线<strong>高</strong>8位相连,<em><strong>偶</strong></em>地址存储器与数据总线<em><strong>低</strong></em>8位相连。(小端模式)<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240313171934.png" alt="image.png"></p><h3 id="存储器分段结构"><a href="#存储器分段结构" class="headerlink" title="存储器分段结构"></a><strong>存储器分段结构</strong></h3><ul><li><strong>分段管理</strong>:内部寄存器都是16位,不能直接输出20位地址。把1M分成许多个段,每一段最多可寻址216=64K个单元。</li><li>规定每个段的基地址的<strong>低4位为0</strong>,即<strong>能被16整除</strong>。段地址和偏移地址都是16位无符号数,所以分段并不是唯一的,可以<strong>相互重迭</strong>。</li><li>CPU内部仅有四个段寄存器,所以在某个特定时刻仅能访问四个段。</li><li>8086/8088存储器的分段结构:<strong>逻辑段</strong>长$2^{16}$=64k字节<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240313172217.png" alt="image.png"></li></ul><p>每个存储单元都可用地址的两种形式来表示</p><ul><li>物理地址:用唯一的20位二进制数表示,CPU访问时用物理地址。</li><li>逻辑地址:段地址:偏移地址,程序中使用逻辑地址。如:03C0:0010<br>段基址(段起始地址)=段地址<<4<br>20位物理地址=段地址<<4+偏移地址</li></ul><table><thead><tr><th>内存访问类型</th><th>默认段寄存器</th><th>可指定段寄存器</th><th>段内偏移地址来源</th></tr></thead><tbody><tr><td>取指令</td><td>CS</td><td>无</td><td>IP</td></tr><tr><td>取栈操作</td><td>SS</td><td>无</td><td>SP</td></tr><tr><td>源串</td><td>DS</td><td>CS,ES,SS</td><td>SI</td></tr><tr><td>目的串</td><td>ES</td><td>无</td><td>DI</td></tr><tr><td>BP用作基址寻址</td><td>SS</td><td>CS,ES,DS</td><td>按寻址方式计算得到的有效地址</td></tr><tr><td>一般数据存取</td><td>DS</td><td>CS,ES,SS</td><td>按寻址方式计算得到的有效地址<br></td></tr></tbody></table><blockquote><p>Exx 某可执行程序长度为2kB,已知CS=1063H,IP=0000H,该程序的末地址(物理地址)为</p><p>末地址=程序长度− 1=2K − 1=2048−1=0800H − 1=07FFH 末地址为:10630H+07FFH=10E2FH</p></blockquote><h3 id="数据存取"><a href="#数据存取" class="headerlink" title="数据存取"></a><strong>数据存取</strong></h3><p><strong>数据对准</strong><br>当CPU读/写一个字时,若字单元地址从偶地址开始,只需访问一次存储器;若字单元地址从奇地址开始,则需访问两次存储器。</p><p><strong>堆栈</strong><br>堆栈(STACK)是由若干个连续存储单元组成的、操作时遵循<strong>先进后出(FILO)</strong> 原则的一个存储器区,主要用于暂存中断和子程序调用时的现场数据及返回地址。(保护现场)</p><p>入栈和出栈都必须是**双字节数据(16位)**。进行一次入栈操作,SP减2;进行一次出栈操作,SP加2<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240313201842.png" alt="image.png"></p><h2 id="8086CPU时序"><a href="#8086CPU时序" class="headerlink" title="8086CPU时序"></a>8086CPU时序</h2><ul><li>微处理器是在统一的时钟信号CLK控制下,按照一定的<strong>时序</strong>来工作的。</li><li>8086时钟频率为5 MHz,一个时钟周期等于200 ns。</li><li>CPU的时序分为两种:<strong>时钟周期</strong>和<strong>总线周期</strong>。</li><li>8086CPU与内存或接口间的通信都是通过总线来进行的。通过总线对存储器或I/O接口进行一次访问所需的时间叫做一个<strong>总线周期</strong>,一个总线周期包括多个<strong>时钟周期</strong>。</li><li>CPU每执行一条指令至少要访问一次存储器(取指令),即至少要进行一次读存储器操作,占用一个读总线周期。</li><li>一条<strong>指令</strong>的执行需要若干个总线周期才能完成。而一个总线周期又由若干个时钟周期构成。</li><li>每个时钟脉冲的持续时间就称为一个时钟周期。8086 CPU的一个读(或写)总线周期至少包括<strong>4个</strong>时钟周期。</li><li>时钟周期越短,CPU执行的速度就越快。</li></ul><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240313202201.png" alt="image.png"></p><ul><li>8086 的数据总线和部分地址总线是分时复用的。在一个总线周期内,先利用总线传送地址,将地址锁存后,再利用同一总线传送数据。</li><li>8086 的数据总线和部分地址总线是分时复用的。在一个总线周期内,先利用总线传送地址,将地址锁存后,再利用同一总线传送数据。</li><li>在 T1 期间,BIU 部分将要访问的存储单元或输入/输出端口地址送上总线<ul><li>若为读周期,则在第二个时钟周期将总线置为高阻缓冲状态,以使 CPU 有时间从输出地址方式转换为输人数据方式。之后在 T3 到 T4 期间从总线读入数据到 CPU</li><li>若为写周期,则 CPU 就不必转换工作方式,在地址锁存后直接输出数据到总线上。</li></ul></li><li>只有在指令流队列出现2个以上空单元时要填补指令流队列或在执行指令的过程中需要申请一个总线周期时,BIU 部分才会进入执行总线周期的状态。在两个总线周期之间,有时可能会出现一些总线上没有信息传送的时钟周期,此时的总线状态称为<strong>空闲状态</strong>。</li></ul><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240313202507.png" alt="image.png"><br>最小模式下工作时序</p><ul><li>在 T1 期间,地址/状态复用信号线 A19/S6<del>A16/S3 和地址/数据复用信号线 AD15</del>AD0 分别送出地址 A19<del>A16 和 A15</del>A0,与此同时送出地址锁存允许信号 ALE。$\overline{BHE}$的状态由 $\overline{BHE}/S7$端输出。</li><li>外部电路在 T1 后期利用 ALE 的下降沿把地址信号锁存到地址锁存器中,从而在锁存器的输出端得到完整的 20 位地址信号 A19~A0。</li><li>读总线周期中,CPU 在 T3 到 T4 期间读入总线上的数据。在写总线周期中,CPU 从 T2 开始把数据送到总线上并维持到 T4。</li><li>某些情况下,当内存或接口的速度比较慢,使得在 4 个时钟周期里不能完成读/写操作时,可通过时钟发生器产生一个低电平信号送到 8086 的 READY 端。8086 在每个总线周期的 T3 开始处都要检查 READY 的状态。若此时 READY 为低电平,则CPU不执行 T4,而是在 T3 之后插入一个等待时钟周期 Tw,以等待存储器或 I/O 接口完成读/写操作。</li><li>在 Tw 的开始时刻,CPU 还要检查 READY 状态,若仍为低电平,则再插入一个 Tw。</li><li>此过程一直进行到某个 Tw 开始时,READY 已经变为高电平,这时下一个时钟周期就是总线周期的最后一个时钟周期 T4。</li><li>利用 READY 信号,CPU可以插入若干个 Tw,使总线周期延长,达到可靠地读/写内存和 I/O 接口的目的。</li></ul><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240313202931.png" alt="image.png"><br>最大模式下工作时序</p><h2 id="8086CPU寻址方式和指令系统"><a href="#8086CPU寻址方式和指令系统" class="headerlink" title="8086CPU寻址方式和指令系统"></a>8086CPU寻址方式和指令系统</h2><p>编程语言分:</p><ul><li>机器语言 二进制代码串</li><li>汇编语言 指令助记符、符号地址和标号等</li><li>高级语言</li></ul><h3 id="汇编语言程序开发过程:"><a href="#汇编语言程序开发过程:" class="headerlink" title="汇编语言程序开发过程:"></a><strong>汇编语言程序开发过程:</strong></h3><ol><li>编辑源程序生成*.ASMEDIT *.ASM</li><li>汇编生成目标程序*.OBJ: ML *.ASM; </li><li>连接生成可执行程序*.EXE: LINK *;</li><li>调试: DEBUG *.EXE</li><li>执行:可执行文件名</li></ol><h3 id="操作数寻址方式"><a href="#操作数寻址方式" class="headerlink" title="操作数寻址方式"></a><strong>操作数寻址方式</strong></h3><p>寻址方式:指令中给出操作数的方法。</p><p>立即数操作数: 立即寻址<br>寄存器操作数: 寄存器寻址<br>存储器操作数:<br> 直接寻址<br> 寄存器间接寻址<br> 寄存器相对寻址<br> 基址变址寻址<br> 相对基址变址寻址</p><ol><li>立即寻址<br> 操作数以常数的形式直接表示在指令中</li></ol><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs asm">MOV AL,5 ;AL<-5<br>MOV AX,1234H ;AX<-1234h<br>;AH=12H,AL=34H<br></code></pre></td></tr></table></figure><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240320102826.png" alt="image.png"><br>立即数在内存的代码段内,指令执行时不需再存取存储器。<br><strong><em>不能</em>直接对段寄存器用立即数赋值</strong><br>立即数<strong>不能</strong>作目的操作数<br>给存储器操作数[默认段寄存器为DS]用立即数赋值时,要指明WORD PTR或者BYTE PTR</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs asm">MOVBYTE PTR [300H], 5FH<br></code></pre></td></tr></table></figure><p>以A~F打头的数字出现在指令中时,前面要加数字0,以免与变量名等符号混淆</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs asm">MOVBX, 0F77H<br></code></pre></td></tr></table></figure><ol start="2"><li>寄存器寻址<br>(1) 格式:操作数是通用寄存器或段寄存器中的内容。<br> 寄存器可以是通用寄存器(AX,BX,CX,DX,SP,BP,SI,DI, AH,AL,BH,BL,CH,CL,DH,DL)、段地址寄存器( CS,SS,DS,ES)、标志寄存器<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs asm">INC CX;CX<-CX+1<br>MOV SS,AX;SS<-AX<br>ADD CL,BH;CL<-CL+BH<br></code></pre></td></tr></table></figure><strong>注意点:</strong></li></ol><ul><li>操作数在CPU内的寄存器中,执行时间短;只访问寄存器,不访问内存</li><li><strong>CS一般不要求用户赋值</strong>。否则语法无错,执行错</li><li>两个操作数的长度必须一致</li></ul><p>操作数在内存中除代码段以外的存储区中。<br><strong>物理地址=段寄存器<<4bit+EA</strong>(有效地址或偏移地址)<br>确定物理地址的关键:从指令中找出EA(由若干部分合成),再确定用哪个段寄存器。</p><ol start="3"><li>直接寻址<br><strong>格式</strong>:操作数表示成[立即数]、[变量名]或变量名<br>MOV AX,[3000H]<br>MOV AX,VALUE或MOV AX,[VALUE]<br>MOV AX,[VALUE+2]或MOV AX,[VALUE]+2<br>也可指明段寄存器(称段超越):<br>MOV AX,ES:[2000H] ;“:”称修改属性运算符<br>MOV AX,CS:VALUE</li></ol><p>AX一般不用于间接寻址<br><strong>物理地址</strong>:<br>$$PA=DS(或段超越指定的段寄存器)<<4+立即数或变量的偏移$$</p><ol start="4"><li><p>寄存器间接寻址<br><strong>格式</strong>:操作数表示成[BX]、[BP]、[SI]或[DI],寄存器内容是操作数的有效地址。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs asm">MOVBX,[DI]<br>MOV[SI],DS<br>MOV[BP],AX<br>MOVES:[DI],AX<br>MOVDX,DS:[BP]<br></code></pre></td></tr></table></figure></li><li><p>寄存器相对寻址<br><strong>格式</strong>:操作数表示成[BX/BP/SI/DI+立即数/变量名],是直接寻址和寄存器间接寻址的组合。注意:变量的值是偏移地址。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs asm">MOVBX,[SI+1003H]<br>MOVAL,[DI+TABLE] <br>MOVAL,TABLE[BX] <br>MOVAL,[BP]+TABLE <br>MOVBX,ES:[SI+1003H]<br>MOVTABLE[BP],AX<br></code></pre></td></tr></table></figure><p>物理地址:<br>$$<br>PA=DS<<4+(BX/SI/DI)+立即数或变量的偏移<br>$$<br>$$<br>PA=SS<<4+(BP)+立即数或变量的偏移</p></li></ol><p>$$</p><ol start="6"><li><p>基址变址寻址<br>格式:操作数表示成[BX/BP+SI/DI]</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs asm">MOVAX,[BX][DI]<br>MOVCL,[BP+DI]<br>MOVES:[BX][SI],AH;或 MOV [SI][BX],AH<br></code></pre></td></tr></table></figure><p>物理地址:(段寄存器缺省的情况)</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs asm">PA=DS<<4+BX+SI/DI<br>PA=SS<<4+BP+SI/DI<br></code></pre></td></tr></table></figure></li><li><p>相对基址变址寻址<br> (1) 格式:操作数表示成[BX/BP+SI/DI+立即数/变量名]</p> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs asm">MOVAX,COUNT[BX][SI]<br>MOVAX,COUNT[SI][BX]<br>MOVAX,[BX+COUNT][SI]<br>MOVAX,[BX+SI+COUNT]<br>MOVAX,[BX]COUNT[SI]<br>ADDVALUE[BX][DI],DX;<br></code></pre></td></tr></table></figure><p>(2) 物理地址:(缺省情况)<br> PA=DS<<4+BX+SI/DI+立即数或变量的偏移<br> PA=SS<<4+BP+SI/DI +立即数或变量的偏移</p></li><li><p>I/O端口寻址<br> 直接寻址:指令中直接给出8位端口地址,只能寻址256个端口<br> IN AL/AX,8位立即数(PORT)<br> OUT8位立即数(PORT),AL/AX<br>间接寻址:将16位端口地址放入DX<br> MOVDX,16位立即数<br> IN AL/AX,DX<br> OUTDX,AL/AX<br> IN AL,20H; [20H]->AL<br> MOVDX,210H<br> OUTDX,AL;AL->[210H]</p></li><li><p>隐含寻址<br>将一个操作数隐含在指令码中的寻址方式就称为隐含寻址。 </p><blockquote><p>例: 指令“MUL BL”的功能是把AL中的内容与BL中的内容相乘,乘积送到AX寄存器。即(AL)×(BL)→AX。这条指令隐含了被乘数AL及存放结果的累加器AX。</p></blockquote></li></ol><h3 id="转移地址寻址"><a href="#转移地址寻址" class="headerlink" title="转移地址寻址"></a><strong>转移地址寻址</strong></h3><ol><li>段内直接(相对)转移寻址<br>短转移:8位偏移<br>近转移:16位偏移</li></ol><p>(1)格式:操作码 [SHORT 或NEAR PTR] 近标号。<br> JMPNEXT;NEXT是一个短标号或近标号<br> CALLSUB;SUB是一个段内子过程名<br> 在DEBUG中不能用标号和过程名:<br> JMP110H; 执行CS:110处的指令<br>(2)转移的目标地址:<br> CS不变;IP=当前IP+指令中的8/16位偏移量<br>(3)注意:条件转移只能段内直接短转移。</p><ol start="2"><li>段内间接转移寻址:</li></ol><p>(1)格式:操作码 16位通用寄存器操作数/字类型存储器操作数<br> JMPBX<br> JMPAX<br> JMPSI<br> JMPTABLE[BX];TABLE是字变量<br> JMPWORD PTR[BP][DI]<br> JMP[BX];缺省表示是字</p><p>(2)转移的目标地址:<br> CS不变;IP=寄存器或连续2字节存储单元的内容</p><ol start="3"><li><p>段间直接转移寻址:<br>(1) 格式:操作码 [FAR PTR] 远标号<br> JMPLABEL;LABEL为远标号<br>(2) 转移的目标地址: CS=标号的段地址;IP=标号的偏移地址</p></li><li><p>段间间接转移寻址:<br>(1) 格式:操作码 FAR [PTR]或DWORD PTR 存储器操作数<br> JMPDWORD PTR[BP][SI]<br> JMPVAR;VAR是双字变量</p></li></ol><p>(2) 转移的目标地址:<br> CS=高2字节存储单元的内容;IP=低2字节存储单元的内容。 </p><h3 id="指令介绍"><a href="#指令介绍" class="headerlink" title="指令介绍"></a><strong>指令介绍</strong></h3><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240322190525.png" alt="image.png"></p><h4 id="MOV"><a href="#MOV" class="headerlink" title="MOV"></a><strong>MOV</strong></h4><p>(1)格式:MOVDST(目的操作数),SRC(源操作数)<br>(2)执行:DST<-SRC<br>(3)操作数类型:立即数,寄存器操作数和存储器操作数</p><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240322190709.png"></p><ul><li>使用 mov 指令读取内存时,只需提供偏移地址,而段地址是由 DS 寄存器提供的</li><li>8086CPU 不支持直接把数据放进段寄存器,对 DS 赋值需要用<strong>通用寄存器中转</strong>,比如<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs asm">mov bx, 1000H<br>mov ds, bx<br></code></pre></td></tr></table></figure></li><li>两个操作数不能全为存储器</li><li>两个操作数不能全为段寄存器</li><li>DST不能是立即数</li><li>源和目的类型必须一致</li><li>MOV 不影响标志位</li><li>读写内存操作可以这样写:<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs asm">mov ax, [0]<br>mov [0], cx<br></code></pre></td></tr></table></figure></li></ul><h4 id="PUSH、POP"><a href="#PUSH、POP" class="headerlink" title="PUSH、POP"></a><strong>PUSH、POP</strong></h4><ul><li>对于8086PC机,在编程时,可以根据需要,将一组内存单元定义为一个段。我们可以将一组长度为$N(N≤64KB)$、地址连续、起始地址为16的倍数的内存单元当作栈空间来使用,从而定义了一个<strong>栈段</strong>。</li><li>栈底放在高地址处,栈顶在低地址处。</li><li>CPU 并不会知道我们将一段内存当作栈空间,CPU只认被 SS:SP 指向的内存单元中的值作为栈顶。</li><li>栈里的数据是16位的,占两个内存单元</li><li>push指令执行时,先将SP=SP-2,再将要入栈的内容送入SS:SP指向的内存处,此时SS:SP指向新栈顶</li><li>pop指令执行时,先将SS:SP指向的数据送出,再SP=SP+2,此时SS:SP指向新栈顶</li><li>8086CPU 不保证我们对栈的操作不会超界。这也就是说,8086CPU 只知道栈顶在何处,而不知道我们安排的栈空间有多大。这点就好像CPU只知道当前要执行的指令在何处,而不知道要执行的指令有多少。</li><li>我们在编程的时候要自己操心栈顶超界的问题,要根据可能用到的最大栈空间,来安排栈的大小,防止入栈的数据太多而导致的超界;执行出栈操作的时候也要注意,以防栈空的时候继续出栈而导致的超界。</li><li>每次传送的数据为16位,16位数据在堆栈中的存放顺序按照“高高低低”原则。</li><li>用于保护数据:PUSH和POP指令保护和恢复寄存器和内存内容;CALL和RET或INT和IRET指令自动保护和恢复主程序断点处的段和偏移地址</li><li>不影响标志位。</li></ul><h4 id="XCHG"><a href="#XCHG" class="headerlink" title="XCHG"></a><strong>XCHG</strong></h4><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240322194517.png" alt="image.png"><br>格式:XCHGOPR1,OPR2(字节/字)<br>执行:OPR1<–>OPR2</p><h4 id="Others"><a href="#Others" class="headerlink" title="Others"></a><strong>Others</strong></h4><p><strong>LEA(取有效地址)</strong><br><strong>LDS、LES (将双字指针送寄存器和DS/ES)</strong><br><strong>LAHF、SAHF(字节)</strong><br><strong>PUSHF、POPF(字)</strong> </p><h4 id="算数"><a href="#算数" class="headerlink" title="算数"></a><strong>算数</strong></h4><p>加法==ADDADCINC== DAAAAA<br>减法==SUBSUBB DECNEGCMP== DASAAS<br>乘法MULIMULAAM<br>除法DIVIDIVCBWCWDAAD </p><p>上述指令基本上都影响标志位 </p><h4 id="逻辑"><a href="#逻辑" class="headerlink" title="逻辑"></a><strong>逻辑</strong></h4><p>逻辑运算ANDORXORNOTTEST<br>移位算术移位SALSAR<br> 逻辑移位SHLSHR<br> 循环移位ROLROR<br> 带借位的循环移位 RCLRCR</p><h4 id="串操作"><a href="#串操作" class="headerlink" title="串操作"></a><strong>串操作</strong></h4><h3 id="控制转移指令"><a href="#控制转移指令" class="headerlink" title="控制转移指令"></a><strong>控制转移指令</strong></h3><p>无条件跳转 JMP<br>条件跳转 JZ/JE JNZ/JNE JS JNS JO JNO JP/JPE JNP/JPO<br>(无符号数比较) JC/JB/JNAE JNC/JNB/JAE JBE/JNA JNBE/JA<br>(有符号数比较) JL/JNGE JNL/JGE JLE/JNG JNLE/JG JCXZ<br>循环 LOOP<br>过程调用和返回 CALL RET<br>软件中断和返回 INT IRET</p><p>(1)格式:<br> JMP 短标号/近标号/远标号/字寄存器/字存储器/双字存储器<br>(2)不影响标志</p><p>例:JMP SHORT LABEL ;段内直接转移<br> JMP BX ; 段内间接转移 ,IP←BX<br> JMP [BX]; 段内间接转移 ,IP←(BX)<br> JMP FAR PTR LABEL ;段间间接转移<br> JMP DWORD PTR [BX] ;段间间接转移 </p><h3 id="处理器控制"><a href="#处理器控制" class="headerlink" title="处理器控制"></a><strong>处理器控制</strong></h3><p>标志位操作 CLC STC CMCCLDSTD CLI STI<br>空操作NOP<br>外同步操作HLTESCWAIT LOCK</p><h3 id="指令周期"><a href="#指令周期" class="headerlink" title="指令周期"></a><strong>指令周期</strong></h3><p>8086指令的执行速率是由晶振控制产生的时钟决定的,每条指令执行都需要几个时钟周期。<br>8086CPU的工作频率5MHZ,一个时钟周期T=1/5MHZ=0.2µs</p><h3 id="复杂指令系统计算机-CISC-和精简指令系统计算机-RISC"><a href="#复杂指令系统计算机-CISC-和精简指令系统计算机-RISC" class="headerlink" title="复杂指令系统计算机( CISC)和精简指令系统计算机 (RISC)"></a><strong>复杂指令系统计算机( CISC)和精简指令系统计算机 (RISC)</strong></h3><p>复杂指令系统计算机(CISC)<br>Complex Instruction Set Computer<br>指令系统复杂:指令数目大于200条,寻址方式多,指令格式多。<br>指令串行执行:执行步骤多,需要多个时钟周期。<br>各种指令都可访问存储器。<br>有较多专用寄存器。<br>编译程序难以进行高效的代码优化。</p><p>精简指令系统计算机(RISC)<br>Reduced Instruction Set Computer<br>简化的指令系统<br>以寄存器-寄存器方式工作<br>采用流水技术<br>使用较多的通用寄存器以减少访存<br>采用优化编译技术<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240322195407.png" alt="image.png"></p><h2 id="8086CPU的中断"><a href="#8086CPU的中断" class="headerlink" title="8086CPU的中断"></a>8086CPU的中断</h2><p><strong>中断的概念</strong><br>CPU在正常执行程序的过程中,由于某种原因,使CPU暂停当前程序的执行,转去处理临时发生的事件,处理完毕再返回继续执行暂停的程序。 ——该过程称中断<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240322195607.png" alt="image.png"></p><ul><li><p>8086CPU具有一个简单而灵活的中断系统,可处理256种不同的中断请求。</p></li><li><p>根据中断源是来自CPU内部还是<strong>外部</strong>,通常将所有中断源分为两类:外部中断源和内部中断源,对应的中断称为<strong>外部中断</strong>或<strong>内部中断</strong>。<br> <strong>内部</strong><br> INT n 指令中断<br> CPU执行INT n 指令后,产生中断类型号N=n 的中断;<strong>中断向量表地址=4×n</strong><br> 例如:INT 21H,产生中断类型号为21H的中断,并从中断向量表的4×21H(即0:84H)单元取出中断服务程序的入口地址,转去执行<br> 除法错中断:除数为0或商超出寄存器范围。中断类型号N=0<br> 溢出中断指令INTO:在算术运算指令之后紧跟INTO指令,可检查溢出标志OF 。中断类型号N=4<br> 例如:测试加法的溢出<br> MOV AX,0009H MOV AX,9000H<br> ADD AX,0080H ADD AX,8000H<br> INTO INTO<br> : :<br> 无溢出,不中断,顺序 溢出,中断,转移</p><p> 单步中断<br> 当标志位TF=1时,每执行一条指令,CPU便产生中断类型号N=1的单步中断。单步中断用于 Debug调试程序<br> 断点中断<br> 当程序设置了断点时,CPU执行到断点处便产生中断类型号N=3的断点中断,并显示寄存器及单元内容,供Debug调试程序使用</p></li><li><p>外部中断中,通过可屏蔽中断请求引脚输入的中断请求信号称作<strong>可屏蔽中断</strong>请求,对这种中断请求CPU可响应,也可不响应,具体取决于标志寄存器中IF标志位的状态。通过<strong>不可屏蔽中断</strong>请求引脚输入的中断请求信号称作<strong>非屏蔽中断请求</strong>,这种中断请求CPU必须响应。<br> <strong>非屏蔽</strong><br> 由引脚NMI引入,边沿触发,上升沿之后维持两个时钟周期高电平有效,中断类型号N=2;不受中断标志位IF影响<br> 引起原因:RAM奇偶校验错误、I/O通道扩展板奇偶校验错误、协处理器8087中断请求<br> <strong>可屏蔽</strong><br> 引脚INTR引入,电平触发,高电平有效<br> 中断标志位<strong>IF=1时允许中断;IF=0时禁止中断</strong><br> 可用STI指令置位IF状态(开中断),CLI指令复位(关中断)<br> 引起原因:外部设备的中断请求</p></li><li><p><strong>硬件中断</strong>和<strong>软件中断</strong>是指引起中断的原因,硬件中断是由<strong>外设</strong>引发的,软件中断是执行<strong>中断指令</strong>产生的</p></li><li><p><strong>中断响应</strong>:CPU在每条指令的最后一个周期检测中断信号引脚,当条件满足时,CPU响应中断,向外设发中断响应信号,并保护断点,转向中断服务程序</p></li><li><p><strong>中断向量表</strong>:中断服务程序的入口地址存放处</p></li><li><p><strong>中断优先级</strong>:为了解决多个中断同时申请时响应的先后顺序问题,系统将所有的中断划分为四级,以0级为最高,依次降低,不同级别的中断同时申请时,CPU根据级别高低依次决定响应顺序。</p><ul><li>0 级——除单步中断以外的所有内部中断。</li><li>1 级——不可屏蔽中断。</li><li>2 级——可屏蔽中断。</li><li>3 级——单步中断。</li></ul></li><li><p>在实际系统中,常常遇到<strong>多个中断源</strong>同时请求中断的情况,这时 CPU 必须确定首先为哪一个中断源服务,以及服务的次序。解决的方法是排好中断处理的优先次序,即<strong>优先级</strong>,又称优先权。先响应优先级最高的中断请求。</p></li><li><p>另外,当 CPU 正在处理中断时,也要能响应优先级更高的中断请求,而屏蔽掉同级或较低级的中断请求即所谓<strong>多重中断</strong>的问题。</p></li></ul><h3 id="中断处理过程"><a href="#中断处理过程" class="headerlink" title="中断处理过程"></a><strong>中断处理过程</strong></h3><h4 id="可屏蔽中断"><a href="#可屏蔽中断" class="headerlink" title="可屏蔽中断"></a><strong>可屏蔽中断</strong></h4><p>CPU响应<strong>可屏蔽中断</strong>的条件:</p><ul><li>外设提出中断申请</li><li>本中断位未被屏蔽</li><li>中断允许<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240322200750.png" alt="image.png"></li></ul><p>(1) CPU响应可屏蔽中断<br>当中断接口电路中中断屏蔽触发器未被屏蔽时,外设可发出中断请求信号<br>CPU在每条指令的最后一个机器周期的最后一个T状态采样INTR引脚,若有中断请求信号且CPU内部中断允许触发器是开放的(IF=1),则CPU响应中断<br>CPU向外设接口发两个中断响应信号INTA;外设收到第二个INTA,往数据线送中断类型号</p><p>(2) CPU转入中断服务过程</p><ul><li>从数据总线读取由外设输入的中断类型号</li><li>标志寄存器PSW的值入栈;PSW中的中断允许标志IF和单步标志TF清0</li><li>保护断点,下一条指令的段地址CS和指令指针IP的值入栈</li><li>取中断向量表的中断入口地址,转入中断服务子程序;中断处理程序结束后,从堆栈依次弹出IP、CS和PSW,返回主程序断点处继续执行</li></ul><h4 id="非屏蔽中断请求NMI"><a href="#非屏蔽中断请求NMI" class="headerlink" title="非屏蔽中断请求NMI"></a><strong>非屏蔽中断请求NMI</strong></h4><p>CPU检测有NMI,不必判断IF标志,内部自动产生中断类型号N=2,并转入相应中断服务过程</p><h4 id="软件(内部)中断INT-n"><a href="#软件(内部)中断INT-n" class="headerlink" title="软件(内部)中断INT n"></a><strong>软件(内部)中断INT n</strong></h4><p>由软件设定,不受IF标志影响,CPU内部形成中断类型号N=n ,并转入相应中断服务过程<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240322201620.png" alt="image.png"></p><h3 id="中断向量表"><a href="#中断向量表" class="headerlink" title="中断向量表"></a><strong>中断向量表</strong></h3><p>也称中断服务程序入口地址表<br>中断向量表安排在内存的前1KB,即00000H~003FFH<br>每个服务程序入口地址CS:IP占用4个字节$(256*4=1KB)$,高字节存放段地址CS,低字节存放段内偏移IP,按中断类型号顺序存放<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240322201836.png" alt="image.png"></p><p>0~7->系统专用,<br> 8~FH->八级硬件中断,<br> 10H~1FH-> BIOS调用,<br> 20H~3FH-> DOS使用,<br> 40H~0FFH->可由用户程序使用。<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240322202026.png" alt="image.png"><br>(👆👆👆中断处理程序的STI可能是CLI)</p><h3 id="主程序的编程"><a href="#主程序的编程" class="headerlink" title="主程序的编程"></a><strong>主程序的编程</strong></h3><ol><li><p>主程序中的初始化<br>设置中断向量<br>设置8259A的中断屏蔽寄存器的中断屏蔽位<br>设置CPU中断允许位标志IF</p></li><li><p>硬件(外设接口)和CPU自动完成<br>外设向CPU INTR端发中断请求<br>执行完当前指令CPU发两个中断响应信号$\overline{INTA}$<br>CPU取中断类型号n<br>CPU将当前PSW、CS、IP入栈保护<br>清IF、TF,禁止外部中断和单步中断<br>从中断向量表取[4n]→IP,[4n+2]→CS<br>转向中断服务子程序</p></li></ol><h3 id="中断服务子程序"><a href="#中断服务子程序" class="headerlink" title="中断服务子程序"></a><strong>中断服务子程序</strong></h3><p><strong>中断服务子程序的编写</strong></p><ul><li>保护现场,用PUSH指令将各寄存器值入栈</li><li>若允许中断嵌套,则用STI开中断(置IF=1)</li><li>执行中断处理程序</li><li>用CLI关中断(清IF=0)</li><li>给中断命令寄存器送中断结束命令EOI【仅针对8259】</li><li>恢复现场,用POP指令将各寄存器值退栈恢复</li><li>用中断返回指令IRET返回主程序</li></ul><h3 id="中断响应时序"><a href="#中断响应时序" class="headerlink" title="中断响应时序"></a><strong>中断响应时序</strong></h3><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240322200910.png" alt="image.png"></p><h3 id="中断优先级和中断嵌套"><a href="#中断优先级和中断嵌套" class="headerlink" title="中断优先级和中断嵌套"></a><strong>中断优先级和中断嵌套</strong></h3><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240322202552.png" alt="image.png"></p><p>多中断源的中断流程增加了<strong>屏蔽本级和低级中断</strong>和<strong>开中断</strong>以允许嵌套<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240322202639.png" alt="image.png"></p><h4 id="软件查询确定中断优先级"><a href="#软件查询确定中断优先级" class="headerlink" title="软件查询确定中断优先级"></a><strong>软件查询确定中断优先级</strong></h4><p>软件查询中断方式,是将各个外设的中断请求信号通过或门后,送到 CPU 的 INTR 端,同时把几个外设的中断请求状态位组成一个端口,赋以<strong>端口号</strong>,如下图所示。任一外设有中断请求,CPU 响应中断后进入中断处理子程序,用软件读取端口内容,<strong>逐位查询端口</strong>的每位状态,查到哪个外设有请求中断,就转入哪个外设的中断服务程序。查询程序的次序,决定了外设优先级别的高低,先测试的中断源优先级别最高。当然在软件查询程序中也可用移位或屏蔽法来改变端口各位的测试次序,但查询时间较长,对中断源较多的情况不合适。<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240322202730.png" alt="image.png"></p><h4 id="硬件查询确定优先级——菊花链法"><a href="#硬件查询确定优先级——菊花链法" class="headerlink" title="硬件查询确定优先级——菊花链法"></a><strong>硬件查询确定优先级——菊花链法</strong></h4><p>越靠近CPU的外设,优先级越高<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240322202903.png" alt="image.png"><br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240322202945.png" alt="image.png"></p><h4 id="矢量中断优先级"><a href="#矢量中断优先级" class="headerlink" title="矢量中断优先级"></a><strong>矢量中断优先级</strong></h4><p>由优先级管理逻辑判别最高优先级中断请求<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240322203018.png" alt="image.png"></p><h4 id="中断嵌套"><a href="#中断嵌套" class="headerlink" title="中断嵌套"></a><strong>中断嵌套</strong></h4><p>高优先级的中断源能中断低优先级的中断处理<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240322203045.png" alt="image.png"></p><h3 id="中断实验编程说明"><a href="#中断实验编程说明" class="headerlink" title="中断实验编程说明"></a><strong>中断实验编程说明</strong></h3><ol><li>中断初始化<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs asm">MOV BL, IRQNum; 取得中断矢量号<br>CALL INT_INIT; 初始化中断向量表<br></code></pre></td></tr></table></figure></li></ol><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs asm">INT_INIT PROC [FAR];FAR可省略<br>CLI<br>MOV AX, 0<br>MOV ES, AX<br>XOR BH, BH<br>SHL BX, 1<br>SHL BX, 1<br>MOV AX, OFFSET MYIRQ<br>MOV ES:[BX], AX<br>MOV AX, SEG MYIRQ<br>MOV ES:[BX+2], AX<br>RET<br>INT_INIT ENDP<br></code></pre></td></tr></table></figure><ol start="2"><li>中端服务程序<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs asm">LEDON DB00000001b<br></code></pre></td></tr></table></figure></li></ol><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs asm">MYIRQ PROC [FAR]<br>PUSH DX<br>PUSH AX<br>; 读取C口数值,并把LEDON的值输出到PC7。<br>MOVDX, L8255PC; DX指向C端口<br>IN AL, DX; 读取C口数值<br>AND AL, 01111111b; 清除PC7<br>XOR[LEDON], 00000001b ; LED灯状态取反<br>JZ ISROut<br>OR AL, 10000000b; 置位PC7<br>ISROut:OUT DX, AL; 更新PC端口<br>POP AX<br>POP DX; 取回DX<br>IRET<br>MYIRQ ENDP<br></code></pre></td></tr></table></figure><h1 id="8086汇编语言程序设计"><a href="#8086汇编语言程序设计" class="headerlink" title="8086汇编语言程序设计"></a>8086汇编语言程序设计</h1><h2 id="汇编语言程序格式"><a href="#汇编语言程序格式" class="headerlink" title="汇编语言程序格式"></a>汇编语言程序格式</h2><ol><li>两种汇编程序开发模板<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs asm">.MODEL SMALL<br>.8086<br>.data<br>DA1 DB 'Welcome to this course!',0DH,0AH <br> DB 'This is a sample program.','$'<br>.stack 100h<br>.code<br>.startup ;初始化指令<br>MOV AH,9 ;DOS 9号功能调用<br> MOV DX,OFFSET DA1<br> INT 21H<br>.EXIT 0 ;程序结束,形成返回DOS指令<br>END<br><br></code></pre></td></tr></table></figure></li></ol><ul><li><code>.MODEL SMALL</code> 指定了程序的内存模型为小型,适用于小型程序。</li><li><code>.8086</code> 指定了程序目标处理器为8086。</li><li><code>.data</code> 段定义了要显示的字符串数据。</li><li><code>.stack 100h</code> 指定了堆栈段的大小为256字节。</li><li><code>.code</code> 段包含了程序的主要执行代码。</li><li><code>.startup</code> 是一个宏指令,用于初始化程序。</li><li><code>MOV AH,9</code> 和 <code>MOV DX,OFFSET DA1</code> 准备了DOS的9号功能调用,用于显示字符串。</li><li><code>INT 21H</code> 执行DOS调用。</li><li><code>.EXIT 0</code> 结束程序并返回DOS。</li><li><code>END</code> 指示程序结束。</li></ul><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><code class="hljs asm">DATA SEGMENT ;数据段<br>DA1 DB 'Welcome to this course!',0DH,0AH <br> DB 'This is a sample program.','$'<br>DATA ENDS ;数据段结束<br>STACK SEGMENT ;堆栈段<br>ST1 DB 100 DUP(?) ;在数据段中定义一个名为 `ST1` 的数组,该数组包含100个字节,每个字节的初始值都是括号内的内容<br>STACK ENDS ;堆栈段结束<br>CODE SEGMENT ;代码段<br>ASSUME CS:CODE,DS:DATA,SS:STACK<br>MAIN PROC FAR<br>START: MOV AX,STACK ;送堆栈段段地址<br> MOV SS,AX<br> PUSH DS ;返回DOS用<br> MOV AX,0<br> PUSH AX<br> MOV AX,DATA ;送数据段段地址<br> MOV DS,AX<br> MOV AH,9 ;DOS 9号功能调用<br> MOV DX,OFFSET DA1<br> INT 21H<br> RET<br>MAIN ENDP<br>CODE ENDS ;代码段结束<br>END START ;程序结束<br><br></code></pre></td></tr></table></figure><ul><li><code>DATA SEGMENT</code> 开始数据段,定义了要显示的字符串数据。在8086汇编语言中,<code>SEGMENT</code> 和 <code>ENDS</code> 指令用于定义一个段的开始和结束。<code>DB</code> 指令用于定义字节型数据,意味着“Define Byte”。在这里,<code>DB</code> 后面跟着的是要存储的字符串 <code>'Welcome to this course!'</code>,后面紧跟两个特殊字符 <code>0DH</code> 和 <code>0AH</code>。</li><li>另一个字符串 <code>'This is a sample program.'</code>,并在字符串的末尾添加了一个 <code>'$'</code> 字符。在DOS中断调用中,<code>'$'</code> 被用作字符串的结束标志,特别是在使用DOS的9号功能调用(即显示字符串)时。这意味着当DOS遇到 <code>'$'</code> 字符时,它知道字符串已经结束,不会继续读取更多的数据。</li><li><code>'Welcome to this course!'</code> 是一个字符串常量,存储在数据段中。</li><li><code>0DH</code> 和 <code>0AH</code> 是两个十六进制数,分别代表回车(Carriage Return, CR)和换行(Line Feed, LF)字符。在DOS和Windows系统中,这两个字符组合用来表示新的一行的开始。在ASCII码中,<code>0D</code> 对应13(CR),<code>0A</code> 对应10(LF)。</li><li><code>STACK SEGMENT</code> 定义了堆栈段,为堆栈预留了100字节的空间。</li><li><code>CODE SEGMENT</code> 开始代码段,包含程序的主要执行代码。</li><li><code>ASSUME</code> 指令关联了段寄存器和相应的段。</li><li><code>MAIN PROC FAR</code> 定义了一个远过程。</li><li><code>MOV AX,STACK</code> 和后续指令初始化堆栈。</li><li><code>MOV AX,DATA</code> 和后续指令设置数据段地址。</li><li><code>MOV AH,9</code> 和 <code>MOV DX,OFFSET DA1</code> 准备DOS的9号功能调用。</li><li><code>INT 21H</code> 执行DOS调用。<code>INT</code> 是中断的缩写,<code>21H</code> 是DOS中断的编号。当这条指令执行时,CPU会暂停当前程序的执行,转而执行与<code>21H</code> 中断号相关联的中断处理程序,即DOS的内部功能。在这个例子中,由于<code>AH</code> 寄存器的值为<code>9</code>,DOS会执行显示字符串的功能,字符串的地址则通过<code>DX</code> 寄存器提供。</li><li><code>RET</code> 返回到DOS。</li><li><code>END START</code> 指示程序结束。</li></ul><ol start="2"><li>指令性语句</li></ol><p>指令性语句与机器指令相对应,汇编程序可将它翻译成目标代码。语句格式为:</p><pre><code class="hljs">标号:指令助记符 操作数,操作数;注释</code></pre><p><strong>标号</strong>——符号地址,后跟“:”,使用英文大小写字母阿拉伯数字和特殊字符,第一个非数字,≦31个<br><strong>助记符</strong>——与指令对应,不可省<br><strong>操作数</strong>——参加运算的数据,用常数、变量、标号、寄存器名或表达式<br><strong>注释</strong>——说明一指令或程序功能。可省略。用“ ;”隔离</p><ol start="3"><li>伪指令语句</li></ol><p>伪指令语句无对应的机器指令,汇编程序汇编源程序时对伪指令进行处理,它可完成数据定义,存储区分配,段定义,段分配,指示程序结束等功能。语句格式为:</p><pre><code class="hljs">名字 伪指令指示符 操作数,操作数;注释</code></pre><p><strong>名字</strong>——赋予伪指令的名称,名字后不允许带冒号“:”,可省略。名字常为变量名、段名、过程名、符号名等。<br><strong>指示符</strong>——汇编程序MASM规定的符号,各种定义语句后详述。<br><strong>操作数</strong>——按伪指令要求可有可无,操作数可以是常数、变量、字符串、表达式等。<br><strong>注释</strong>——功能和使用与指令性语句相同。</p><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/Clip_2024-03-27_16-19-53.png" alt="Clip_2024-03-27_16-19-53.png"></p><ol start="4"><li>数据项</li></ol><p><strong>常数、变量和标号</strong>是三种基本数据项。</p><p>1.常数——二进制 (B)、八进制 (Q或O) 、十进制 (D) 、十六进制(H) 、 ASCll码字符串(用单引号‘abcd ’)。<br>2.变量<br>常指存放在M中的数值,程序运行中可修改。包含三个属性:<br>**段值(SEGMENT)**——变量所在段的段基址。<br>**段内偏移地址(OFFSET)**——变量地址与所在段首地址之间的地址偏移字节数。<br>**类型(TYPE)**——变量中每个元素包含的字节数,有字节变量(BYTE),字变量(WORD)及双字变量(DWORD)等<br>3.标号<br>指令语句的地址的符号表示,可作为JMP指令和调用指令CALL的目标操作数,以确定程序转向的目标地址。包含三个属性:<br>**段值(SEGMENT)**——标号所在段的段基址。<br><strong>段内偏移地址(OFFSET</strong>)——标号地址与所在段的段首址之间的偏移地址字节数<br>**类型(TYPE)**——指转移指令中标号可转移的距离。近标号(NEAR),远标号(FAR)。<br> NEAR—指针长度2字节;FAR —指针长度4字节</p><h2 id="MASM中的表达式"><a href="#MASM中的表达式" class="headerlink" title="MASM中的表达式"></a>MASM中的表达式</h2><p>表达式(运算对象、运算符)→汇编运算→结果作为语句中操作数</p><p>运算对象:常数、变量、标号<br>运算结果:常数或存储器地址(变量或标号)</p><center><b>8086汇编语言中的运算符</b></center><table><thead><tr><th>算术运算符</th><th>逻辑运算符</th><th>关系运算符</th><th>分析运算符</th><th>综合运算符</th></tr></thead><tbody><tr><td>+(加法)</td><td>AND(与)</td><td>EQ(相等)</td><td>SEG(求段基址)</td><td>PTR</td></tr><tr><td>-(减法)</td><td>OR(或)</td><td>NE(不相等)</td><td>OFFSET(求偏移量)</td><td>THIS</td></tr><tr><td>*(乘法)</td><td>XOR(异或)</td><td>LT(小于)</td><td>TYPE(求变量的类型)</td><td>SHORT</td></tr><tr><td>/(除法)</td><td>NOT (非)</td><td>GT(大于)</td><td>SIZE(求字节数)</td><td>HIGH</td></tr><tr><td>MOD(取余)</td><td></td><td>LE(小于或等于)</td><td>LENGTH(求变量长)</td><td>LOW</td></tr><tr><td>SHL(左移)</td><td>逻辑左移</td><td>GE(大于或等于)</td><td></td><td></td></tr><tr><td>SHR(右移)</td><td>逻辑右移</td><td></td><td></td><td></td></tr><tr><td>所有的算术运算符均可以对数据进行运算,运算对象与运算结果都是整数。若对地址运算,通常是在标号上加/减某一个数字量,<strong>对地址乘是没有意义的</strong>。</td><td></td><td></td><td></td><td></td></tr></tbody></table><p>逻辑运算符是<strong>按位运算</strong>的,只能对常数进行运算,得到结果也是常数。<br>区分逻辑运算符、指令运算符<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240326223108.png" alt="image.png"></p><p>关系运算符所连接两操作数必为两数据或同一段内的两个存储单元的地址<br>运算结果:真—0FFFFH,假—0</p><pre><code class="hljs">类型/距离 PTR 变量或标号</code></pre><p>将PTR左边的类型属性赋给右边的变量或标号。PTR本身并不分配存储单元,仅给已分配的存储单元赋予新的属性,这样可以保证运算时操作数类型的匹配,常与类型BYTE、WORD、NEAR、FAR等连用。 </p><table><thead><tr><th>优先级</th><th>运 算 符</th></tr></thead><tbody><tr><td>1</td><td>( ),[ ],< >,•,LENGTH,WIDTH,SIZE,MASK</td></tr><tr><td>2</td><td>PTR,OFFSET,SEG,TYPE,THIS,CS:,DS:,ES:,SS:</td></tr><tr><td>3</td><td>HIGHT,LOW</td></tr><tr><td>4</td><td>*, / , MOD, SHL, SHR</td></tr><tr><td>5</td><td>+, -</td></tr><tr><td>6</td><td>EQ, NE, LT, LE, GT, GE</td></tr><tr><td>7</td><td>NOT</td></tr><tr><td>8</td><td>AND</td></tr><tr><td>9</td><td>OR, XOR</td></tr><tr><td>10</td><td>SHORT</td></tr></tbody></table><h2 id="伪指令语句"><a href="#伪指令语句" class="headerlink" title="伪指令语句"></a>伪指令语句</h2><p>一、数据定义语句<br>格式1:变量名 助记符 操作数,操作数,.. ;注释<br>格式2:变量名 助记符 n DUP (操作数,操作数,..);注释<br>助记符——DB定义字节 DW定义字<br> DD定义双字 DQ定义四字<br> DT定义十字节<br>变量名——符号表示,可省略。作其后第一字节符号地址。<br>操作数——常数,字符串,变量,标号,表达式<br>n DUP() ——n为整数,表示括号中操作数重复次数。</p><p>注意:<br>定义<strong>多字节字符串用DB</strong>,DW只允许包含两个字符。<br>操作数<strong>用“?”定义不确定值变量</strong>,以保留存储空间存放运算结果。新版Proteus支持“?”<br>用DW和DD可以将变量或标号逻辑地址存入存储器。当用DD来定义时,原变量或标号的偏移地址存入低位字中,原变量或标号的段基址存入高位字中。 </p><p>二、表达式赋值语句</p><ol><li>赋值语句EQU<br>格式: <strong>符号 EQU 表达式</strong></li></ol><p>用来给变量,标号,常数,指令,表达式等定义一个符号名,在同一个程序模块中不能重新定义。</p><p>PURGE语句可以解除对某一标号的赋值,使它在后面可以重新定义。</p><p>COUT EQU CX ;将COUT作为寄存器CX的同义名<br>PURGE COUNT ;COUNT不再代替CX</p><ol start="2"><li>等号语句 =<br> 等号语句“=”与EQU语句具有相同功能,区别仅在于EQU中左边的标号不允许重新定义,而用“=”定义的语句允许重复定义。</li></ol><p>三、段定义、分配语句</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs asm">.stack 100h ;100h为堆栈空间的大小<br>.code<br>.startup ;初始化指令<br></code></pre></td></tr></table></figure><p>四、过程定义语句<br>格式:过程名 PROC 属性<br> ….<br> RET N<br> 过程名 ENDP<br>定义一个过程,主程序可以用CALL指令调用它。<br><strong>过程名</strong>——不可缺省。过程名具有三种属性:</p><ul><li>(1) 段属性:为该过程所在段的段基址。</li><li>(2) 偏移地址属性:指该过程第一个字节与段首址之间距离字节。</li><li>(3) 距离属性:为NEAR或FAR。<br>PROC…ENDP——<strong>成对出现</strong>,不可缺省。<br>RET N——过程内部的返回指令。RET后面的N为弹出值,可以缺省,表示从过程返回以后,<em>堆栈中应有N个字节的值作废(从栈顶开始),N必须为<strong>正偶数</strong>。</em></li></ul><p>五、程序开始和结束语句</p><ol><li>NAME 程序名 ;为源程序目标模块赋名</li><li>TITLE 文本名 ;文本名赋予目标模块,作用通NAME</li><li>ORG 表达式;设置地址指针,指定下个语句起始偏移地址</li><li>END 标号名;标记汇编程序结束,位于源程序最后一行</li></ol><h2 id="DOS和BIOS调用"><a href="#DOS和BIOS调用" class="headerlink" title="DOS和BIOS调用"></a>DOS和BIOS调用</h2><table><thead><tr><th>软件中断指令</th><th>功 能</th></tr></thead><tbody><tr><td>INT 20H</td><td>程序正常退出</td></tr><tr><td>INT 21H</td><td>系统功能调用</td></tr><tr><td>INT 22H</td><td>结束退出</td></tr><tr><td>INT 23H</td><td>Ctrl+Break处理</td></tr><tr><td>INT 24H</td><td>出错退出</td></tr><tr><td>INT 25H</td><td>读磁盘</td></tr><tr><td>INT 26H</td><td>写磁盘</td></tr><tr><td>INT 27H</td><td>驻留退出</td></tr><tr><td>DOS系统功能调用(INT 21H)分别实现设备管理、文件读写、文件管理和目录管理等功能。每个子程序对应一个功能号,所有的系统功能调用的格式是一致的,按下面4步进行:</td><td></td></tr><tr><td>(1) 系统功能号送到AH寄存器中</td><td></td></tr><tr><td>(2) 入口参数送到指定寄存器中</td><td></td></tr><tr><td>(3) 由INT 21H指令执行功能调用</td><td></td></tr><tr><td>(4) 根据出口参数分析功能调用执行情况</td><td></td></tr></tbody></table><table><thead><tr><th>AH</th><th>功 能</th><th>入口参数</th><th>出口参数</th></tr></thead><tbody><tr><td>2</td><td>显示一个字符,检测Ctrl-Break</td><td>DL=字符</td><td>光标随字符移动</td></tr><tr><td>6</td><td>直接控制台I/O,不检测Ctrl-Break</td><td>DL=FF(输入)<br><br>DL=字符(输出)</td><td>光标随字符移动</td></tr><tr><td>9</td><td>显示字符串</td><td>DS:DX=串地址;’$’结束字符串</td><td>光标随字符移动</td></tr></tbody></table><h1 id="存储系统"><a href="#存储系统" class="headerlink" title="存储系统"></a>存储系统</h1><h2 id="存储器基本原理"><a href="#存储器基本原理" class="headerlink" title="存储器基本原理"></a>存储器基本原理</h2><p>RAM:随机访问存储器</p><ul><li>SRAM:静态存储器(Static random access memory)</li><li>DRAM:动态存储器(Dynamic random access memory)<br>ROM:只读存储器(Read only memory)</li></ul><h3 id="SRAM"><a href="#SRAM" class="headerlink" title="SRAM"></a><strong>SRAM</strong></h3><ul><li>T1~T4构成双稳态触发器</li><li>数据读出时,X、Y译码线为高</li><li>数据写入时,I/O数据准备好,然后X、Y译码线为高</li><li>特点:速度快、电路复杂<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240325112426.png" alt="image.png"><br><strong>引脚信号</strong><br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240325112618.png" alt="image.png"><br>ADD</li><li>地址信号,在芯片手册中通常表示为A0,A1,A2,…<br>$\overline{CS}$</li><li>芯片选择,低电平时表示该芯片被选中<br>$\overline{WE}$</li><li>写允许,<strong>低电平表示写操作,高电平表示读操作</strong><br>Dout</li><li>数据输出信号,在芯片手册中通常表示为D0,D1,D2,…<br>Din</li><li>数据输入信号,也表示为D0,D1,D2,…<br>$\overline{OE}/\overline{G}$</li><li>数据输出允许信号<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240325112834.png" alt="image.png"></li></ul><p>读周期:</p><ul><li>地址有效->$\overline{CS}$有效->数据输出->$\overline{CS}$ 复位->地址撤销<br>写周期:</li><li>地址有效->$\overline{CS},\overline{WE}$有效->数据有效->$\overline{CS},\overline{WE}$复位(数据输入)->地址撤销</li></ul><h3 id="DRAM"><a href="#DRAM" class="headerlink" title="DRAM"></a><strong>DRAM</strong></h3><p>动态RAM是以MOS管源极电容是否充有电荷来存储信息的,其基本单元由<strong>T管</strong>和<strong>寄生电容</strong>Cs组成。</p><p>由于只用一个MOS管,所以功耗很低,存储容量可做得很大。</p><p>电容通过MOS管的栅极和源极会缓慢放电而丢失信息,因此必须定时对电容充电——<strong>刷新</strong>。</p><p>ADD:地址信号,在芯片手册中通常表示为A0、A1、A2、…<br>$\overline{CS}$:芯片选择,低电平时表示该芯片被选中。<br>$\overline{WE}$ :写允许,<strong>低电平表示写操作,高电平表示读操作</strong>。<br>Dout:数据输出信号,在芯片手册中通常表示为D0、D1、D2、…<br>Din:数据输入信号,也表示为D0、D1、D2、…。<br>OE:数据输出允许信号。<br>$\overline{RAS}$:行地址选通信号。<br>$\overline{CAS}$:列地址选通信号</p><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240327100235.png" alt="image.png"><br>Intel2164内含<strong>64k</strong>地址单元,通过行、列两部分地址,只需8位地址线。</p><p><strong>无片选信号</strong>,行选通信号可认为是片选信号:先行8位、再列8位选通,可选中216=64k存储单元。</p><p><strong>读周期:</strong><br>行地址有效->行地址选通->列地址有效->列地址选通->数据输出->行选通、列选通及地址撤销</p><p><strong>写周期:</strong><br>行地址有效->行地址选通->列地址、数据有效->列地址选通->数据输入->行选通、列选通及地址撤销</p><p><strong>刷新周期:</strong>(only $\overline{RAS}$ refresh)<br>刷新行地址有效->$\overline{RAS}$有效->刷新行地址和$\overline{RAS}$撤销</p><p><strong>刷新周期:</strong>($\overline{CAS}$ refresh before $\overline{RAS}$)<br>$\overline{CAS}$有效->$\overline{RAS}$有效->$\overline{CAS}$撤销->$\overline{RAS}$撤销</p><p><strong>刷新周期:</strong>(隐含式刷新)</p><p>(在访存周期中)$\overline{RAS}$撤销->$\overline{RAS}$有效</p><h3 id="EPROM"><a href="#EPROM" class="headerlink" title="EPROM"></a><strong>EPROM</strong></h3><ul><li>可擦除可编程只读存储器</li><li>顶部开有一个圆形的石英窗口,用于紫外线透过擦除原有信息</li><li>一般使用专门的编程器(烧写器)进行编程</li><li>编程后,应该贴上不透光封条</li><li>出厂未编程前,每个基本存储单元都是信息1,<strong>编程就是将某些单元写入信息0</strong></li></ul><h3 id="EEPROM-E2PROM"><a href="#EEPROM-E2PROM" class="headerlink" title="EEPROM/E2PROM"></a><strong>EEPROM/E2PROM</strong></h3><ul><li>电可擦除可编程只读存储器</li><li>在系统中是电可擦除的,擦写的电压比读入电压要高,通常为12V,擦写速度在毫秒量级,但仍比普通的RAM慢很多</li><li>不同厂家的EEPROM时序会有不同,要选择相应的EEPROM才能与芯片配合</li></ul><h3 id="Flash存储器"><a href="#Flash存储器" class="headerlink" title="Flash存储器"></a><strong>Flash存储器</strong></h3><ul><li>由E2PROM技术演化而来,读写速度更快、容量更大、成本更低。</li><li>必须以块为单位而非以字节为单位进行信息更新</li><li>分为NOR型和NAND型</li><li>NOR型:速度快,适合存储程序代码,支持程序直接在Flash存储器中运行</li><li>NAND型:容量大,集成度高</li></ul><h2 id="存储器的连接"><a href="#存储器的连接" class="headerlink" title="存储器的连接"></a>存储器的连接</h2><ul><li><strong>地址总线</strong>的连接<ul><li>CPU的地址总线宽度与存储器相同</li><li>CPU的地址总线宽度大于存储器的地址总线宽度</li></ul></li><li><strong>数据总线</strong>的连接<ul><li>CPU的数据总线宽度与存储器相同</li><li>CPU的数据总线宽度大于存储器的数据总线宽度</li></ul></li><li><strong>控制总线</strong>的连接<ul><li>存储器译码</li></ul></li></ul><h3 id="存储器扩展方法"><a href="#存储器扩展方法" class="headerlink" title="存储器扩展方法"></a><strong>存储器扩展方法</strong></h3><ol><li><strong>位扩展</strong></li></ol><ul><li>芯片的地址线数:18</li><li>存储器的结构256kb×32</li><li>容量:1MB</li><li>CPU的有效地址位数:20位字节地址</li><li>每个芯片的地址范围相同<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240327102518.png" alt="image.png"><br>A0、A1用于选择32位的哪个字节<br>$2^{18}=2^8+2^{10}=256*1kb$<br><strong>位扩展是让数据位数增加,但是存储单元的个数不变(地址线的条数不增加)</strong></li><li>芯片地址线全部并联且与地址总线相应的地址线相连接;</li><li>片选信号(CE (Chip Enable))并联,接地址译码器的输出端(这里直接用CPU的M/IO管脚);</li><li>芯片的数据线分高低部分,分别与数据总线相应位连接(这里由于是1位扩展到8位所以不用分高低位)。</li></ul><ol start="2"><li><strong>字扩展</strong><br>存储器芯片引脚数: 18<br>存储器结构:$256kB\times8$<br>CPU有效地址线数:21<br>每个芯片的地址范围不同</li></ol><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240327104020.png" alt="image.png"></p><p>此图中,$A_0\sim A_{17}$ 用来选择一个256K的芯片,$A_{20}\sim A_{18}$ 连接译码器,译码器接受地址线上的型号,并根据信号选择特定的内存芯片,所以能选择8个中的任意一个。</p><p>以下说明与图不对应,图A17-0, A20-A18用于片选,备注:A10-A0, A11-A12译码片选</p><p>字扩展是存储单元数的扩展,要<strong>增加地址线的条数</strong>,而与数据线无关<br>由2K的芯片构成8K的模块,需要四块;相应的,需要多出两根地址线来选择这四块芯片。所以芯片固有地址线并联到地址总线的相应地址线上(A10-A0),扩展地址线(A11-A12)接译码器的输入端产生译码器的输出,用来作为四个芯片的片选信号。芯片的读写控制信号连接总线上的存储器控制信号。</p><ol start="3"><li><strong>字位扩展</strong></li></ol><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240327104938.png" alt="image.png"></p><h3 id="存储器译码方法"><a href="#存储器译码方法" class="headerlink" title="存储器译码方法"></a><strong>存储器译码方法</strong></h3><ul><li><p><strong>全译码</strong></p><ul><li>所有CPU高位地址线均参与对存储单元的译码寻址</li><li>低位地址线对芯片内各存储单元的译码寻址:<strong>片内译码</strong></li><li>高位地址线对存储芯片的译码寻址:<strong>片选译码</strong></li><li>每个存储单元的地址都是唯一的:不存在地址重复</li></ul></li><li><p><strong>部分译码</strong></p><ul><li>部分高位地址线参与对存储单元的译码寻址</li><li>存在地址段内容重叠:<strong>每个单元有多个地址</strong></li></ul></li><li><p><strong>字选择</strong></p><ul><li>以字为单位访问存储器</li><li>位数等于存储器的字长</li><li>低位地址不需与存储器相连</li></ul></li><li><p>**** 字节选择</p><ul><li>可以字节为单位访问存储器</li><li>低位地址用于选择字节</li></ul></li></ul><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240327164505.png" alt="image.png"></p><h2 id="8086CPU的存储器扩展"><a href="#8086CPU的存储器扩展" class="headerlink" title="8086CPU的存储器扩展"></a>8086CPU的存储器扩展</h2><p>连接部分主要由三个部分组成:<br>1.地址线 2.数据线 3.控制线</p><p>连接中需要考虑的问题:</p><ul><li>CPU总线的负载能力</li><li>CPU的时序和存储器存取速度之间的配合</li><li>存储器的地址分配和片选</li><li>控制信号的连接</li></ul><h3 id="线性选择方式"><a href="#线性选择方式" class="headerlink" title="线性选择方式"></a><strong>线性选择方式</strong></h3><p>只有存储芯片的片选信号CS有效,才能对芯片进行操作<br>连接方式:</p><ul><li>地址总线低13位与存储芯片地址线相连</li><li>CS端与某一位高位地址线(A13)相连</li><li>1#芯片地址:0000~1FFFH、4000 ~5FFFH、……</li><li>2#芯片地址:2000~3FFFH、6000 ~7FFFH、……<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/Clip_2024-03-27_21-15-53.png" alt="Clip_2024-03-27_21-15-53.png"></li></ul><h3 id="全译码"><a href="#全译码" class="headerlink" title="全译码"></a><strong>全译码</strong></h3><ul><li>所有的系统地址线均参与对存储单元的译码寻址</li><li>包括低位地址线对芯片内各存储单元的译码寻址(片内译码),高位地址线对存储芯片的译码寻址(片选译码)</li><li>采用全译码,每个存储单元的地址都是唯一的,不存在地址重复</li><li>译码电路可能比较复杂、连线也较多</li><li>常用译码器:74LS139、74LS138、74LS154</li></ul><p><strong>片选端译码小结</strong></p><ul><li>存储芯片的片选控制端可被高位地址线单独选用或经译码而得</li><li>在系统中,与地址相关的有:地址空间的选择(接系统的M/$\overline{IO}$)和高位地址的译码选择(与系统的高位地址线相关联)</li><li>对存储芯片通过片选无效可关闭内部选通,以降低功耗</li><li>芯片$\overline{OE}$与系统的读命令线相连<ul><li>当芯片被选中、且读命令有效时,存储芯片将开放并驱动数据到总线</li></ul></li><li>芯片$\overline{WE}$与系统的写命令线相连<ul><li>当芯片被选中、且写命令有效时,允许总线数据写入存储芯片</li></ul></li></ul><h1 id="典型接口芯片原理和应用"><a href="#典型接口芯片原理和应用" class="headerlink" title="典型接口芯片原理和应用"></a>典型接口芯片原理和应用</h1><h2 id="简单I-O接口电路及其应用"><a href="#简单I-O接口电路及其应用" class="headerlink" title="简单I/O接口电路及其应用"></a>简单I/O接口电路及其应用</h2><h3 id="接口概述"><a href="#接口概述" class="headerlink" title="接口概述"></a><strong>接口概述</strong></h3><ul><li><p>接口的功能</p><ul><li>设置数据缓冲器以解决两者速度差异所带来的不协调问题</li><li>设置信号电平转换电路</li><li>设置信息转换逻辑以满足对各自格式的要求</li><li>设置时序控制电路来同步CPU和外设的工作</li><li><strong>提供地址译码电路</strong>,使CPU在同一时刻只能选中某一个I/O端口</li></ul></li><li><p>各种接口电路</p><ul><li>缓冲器(Buffer)和锁存器(Latch);</li><li>可编程中断控制器8259A;</li><li>可编程计数器/定时器8253;</li><li>可编程外围接口芯片8255A;</li><li>串行通信和可编程接口芯片8251A;</li><li>A/D和D/A转换芯片。</li></ul></li><li><p>把信息从外部设备送入 CPU 的接口称为<strong>输入接口</strong>,而把信息输出到外部设备的接口则称为<strong>输出接口</strong>。</p></li><li><p>I/O接口电路是外设和计算机之间传送信息的交换部件,也称<strong>界面</strong>,它使两者之间很好地协调工作。外设一般都要通过接口电路才能和主机相连。<br> CPU<—>接口<—>外设</p></li><li><p>在需要从外设<strong>输入数据</strong>时,通常外设的速度相对于 CPU 要慢得多,这意味着数据在外部总线上保持的时间相对较长,所以要求输入接口必须要具有对数据的控制能力,即要在外部数据准备好,CPU 可以读时才允许将数据送上系统数据总线。</p></li><li><p>大多数外设都具有<strong>数据保持能力</strong>(即 CPU 没有读取时,外设能够保持数据不变),通常可以仅用三态门缓冲器(简称<strong>三态门</strong>)作为输入接口。当三态门的控制端信号有效时,三态门导通,该外设就与数据总线连通,CPU 将外设准备好的数据读入;当控制端信号无效时,三态门断开,该外设就从数据总线脱离,数据总线又可用于其他信息的传送。</p></li><li><p>对没有数据保持能力的外设,可在外设与接口之间增加一个锁存器,用外设提供的数据准备好信号把数据保存到锁存器中。</p></li><li><p>在<strong>数据输出</strong>时,同样应考虑外设与 CPU 速度的配合问题。要使数据能正确写入外设,CPU 输出的数据一定要能够保持一段时间。一般 CPU 送到总线上的数据只能保持几个微秒甚至更短的时间。相对于慢速的外设,数据在总线上几乎是一闪而逝。因此,要求输出接口必须要具有数据的锁存能力,这通常是由锁存器来实现的。CPU 输出的数据通过总线锁存到锁存器中,并一直保持到被外设取走。</p></li><li><p>三态门缓冲器和锁存器的控制端一般与 I/O 地址译码输出信号线相连,当 CPU 执行 I/O 指令时,指令中指定的 I/O 地址经译码后即可使控制信号有效,打开三态门(对外设读时)或将数据锁入锁存器(对外设写时)。</p></li></ul><h3 id="简单输入输出接口芯片"><a href="#简单输入输出接口芯片" class="headerlink" title="简单输入输出接口芯片"></a><strong>简单输入输出接口芯片</strong></h3><h4 id="三态缓冲器芯片-74LS244-74LS245"><a href="#三态缓冲器芯片-74LS244-74LS245" class="headerlink" title="三态缓冲器芯片 74LS244 & 74LS245"></a><strong>三态缓冲器芯片 74LS244 & 74LS245</strong></h4><ul><li>连接在总线上的缓冲器都具有三态输出能力。<ul><li><strong>使能</strong>→在使能控制端EN(或G)作用一个低电平脉冲→使内部的各缓冲单元[<strong>寄存器</strong>]接通→数据输出0或1的透明状态[数据被送上总线]。</li><li><strong>高阻态</strong>:当使能脉冲撤除后,它处于高阻态。这时,各缓冲单元像一个断开的开关,等于将它所连接的电路从总线脱开。</li></ul></li><li>除缓冲作用外,缓冲器还能提高总线的<strong>驱动能力</strong>。</li></ul><p><strong>74LS244</strong>——单向数据缓冲器<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/Clip_2024-04-01_10-55-38.png" alt="Clip_2024-04-01_10-55-38.png"></p><ul><li>8个三态缓冲单元,分成两组,分别由<strong>门控信号</strong>$\overline{1G}$和$\overline{2G}$控制。$\overline{1G}$和$\overline{2G}$为低电平时,数据传送;高电平时,输出高阻态。</li><li>单向缓冲器,只能从A端到Y端。</li></ul><p><strong>74LS245</strong>——双向数据缓冲器</p><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/Clip_2024-04-01_11-04-30.png" alt="Clip_2024-04-01_11-04-30.png"></p><ul><li>8个双向、三态缓冲器。</li><li>门控信号输入端$\overline{G}$ 。</li><li>方向控制端DIR,高电平时,数据从A端传向B端;低电平时,从B端传向A端。</li></ul><p><strong>锁存器74LS373</strong></p><p>锁存器具有暂存数据的能力,能将数据锁住,在输出控制信号的作用下将数据传送出去。74LS373是一种常用的8D锁存器,它可以直接挂在总线上,并具有<strong>三态总线驱动能力</strong>。</p><ul><li>两个控制输入端:输入使能端G和允许输出端$\overline{OE}$。</li><li>$\overline{OE}$为低时:G为高时,D端数据到O端;G为低时,O端将是前面锁存的数据,不受D端的变化影响。</li><li>$\overline{OE}$为高时:输出将呈高阻态。</li></ul><table><thead><tr><th>$\overline{OE}$</th><th>G</th><th>D</th><th>O</th></tr></thead><tbody><tr><td>低</td><td>高</td><td>高</td><td>高</td></tr><tr><td>低</td><td>高</td><td>低</td><td>低</td></tr><tr><td>低</td><td>低</td><td>X</td><td>锁存</td></tr><tr><td>高</td><td>X</td><td>X</td><td>高阻态</td></tr><tr><td><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240401111412.png" alt="image.png"></td><td></td><td></td><td></td></tr></tbody></table><h3 id="I-O端口及其寻址方式"><a href="#I-O端口及其寻址方式" class="headerlink" title="I/O端口及其寻址方式"></a><strong>I/O端口及其寻址方式</strong></h3><ul><li><p>CPU与外设通信时,传送的信息主要包括数据信息、状态信息和控制信息。</p></li><li><p>这些信息分别进入不同的寄存器,通常将这些寄存器和它们的控制逻辑统称为I/O端口(Port),CPU可对端口中的信息直接进行读写。<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240401112453.png" alt="image.png"></p></li><li><p><strong>数据端口</strong>(Data Port)用来存放CPU与外设之间交换的数据,长度一般为1-2个字节,主要起缓冲作用。</p></li><li><p><strong>状态端口</strong>(Status Port)用来<strong>指示外设的当前状态</strong>。每种状态用<strong>1</strong>位表示,由CPU读取。几种最常用的状态位有:</p><ul><li>准备就绪位(Ready)<ul><li>输入端口:1:数据寄存器已准备好数据,等待CPU读取,取走后清0。</li><li>输出端口:1:输出数据寄存器已空,可以接收下一个数据;新数据到达后,位清0。</li></ul></li><li>忙碌位(Busy)<br> 表明外设是否能接收数据。1:外设忙,暂时不允许CPU送新的数据过来。0:外设已空闲,允许CPU发送下一个数据。</li><li>错误位(Error)<br> 1:指示在数据传送过程中出现错误。CPU进行相应的处理,如重新传送或中止操作等。</li></ul></li><li><p><strong>命令端口</strong>(Command Port)也称为控制端口(Control Port),用来存放CPU向接口发出的各种命令和控制字,以便控制接口和设备的动作。</p><ul><li>常见的命令信息有<strong>启动位、停止位、允许中断位</strong>等。</li><li>接口芯片不同,控制字的格式和内容是各不相同的,常见的控制字有<strong>方式控制字、操作命令字</strong>等。</li></ul></li><li><p>在微机系统中,CPU通过接口和外设交换数据时,只有输入(IN)和输出(OUT)两种指令,所以只能把状态信息和命令信息当作数据来传送,并且将状态信息作为输入数据,控制信息作为输出数据,于是三种信息都可以通过数据总线来传送了(三个不同端口的寄存器)。</p></li><li><p>I/O端口的寻址方法</p><ul><li>存储器映像寻址方式(Memory Mapped I/O):<ul><li>将I/O端口地址作为存储器地址,采用存储器访问指令进行操作</li></ul></li><li>I/O单独编址方式:<ul><li>采用IN、OUT指令操作</li></ul></li></ul></li></ul><h3 id="CPU与外设间的数据传送方式"><a href="#CPU与外设间的数据传送方式" class="headerlink" title="CPU与外设间的数据传送方式"></a><strong>CPU与外设间的数据传送方式</strong></h3><p>软件实现:程序控制方式、中断方式。<br>硬件实现:DMA方式。</p><ul><li>查询方式效率低。查询方式须反复查询外设的状态,查询等待过程会占去CPU的绝大部分时间,而真正用于数据交换的数据却很少,使CPU的利用率变得很低。为了提高CPU的利用率和进行实时数据处理,CPU常采用中断方式与外设交换数据。</li><li>中断方式效率高。采用中断方式,CPU执行主程序,只有当输入设备将数据准备好,或输出设备的数据缓冲器已空时,才向CPU发出中断请求。</li><li>CPU响应中断后,暂停执行当前的程序,转去执行管理外设的中断服务程序,用输入或输出指令在CPU和外设之间进行一次数据交换。</li><li>等输入/输出操作完成之后,CPU又回去执行原来的程序。</li></ul><h4 id="程序控制方式-无条件方式(同步传送方式)"><a href="#程序控制方式-无条件方式(同步传送方式)" class="headerlink" title="程序控制方式-无条件方式(同步传送方式)"></a><strong>程序控制方式-无条件方式(同步传送方式)</strong></h4><ul><li>最简单的传送方式,主要用于对简单的外设进行操作,或者外设的定时是固定的或已知的场合;</li><li>程序可以不必检查外设的状态,而在需要进行I/O操作时,直接执行I/O指令。</li></ul><h4 id="程序控制方式-条件传送(查询式传送)"><a href="#程序控制方式-条件传送(查询式传送)" class="headerlink" title="程序控制方式-条件传送(查询式传送)"></a><strong>程序控制方式-条件传送(查询式传送)</strong></h4><ul><li>一般情况下,CPU在执行I/O时,很难保证输入设备总是准备好数据,或是输出设备已经处在接收数据状态。<strong>CPU必须先确认外设已处于准备传送数据状态,才能进行传送。</strong></li><li><strong>确认过程</strong>:CPU必须先执行一条输入指令,从外设的状态口读取当前的状态。如果外设未准备好或处于忙碌状态,则程序要转回去反复执行读状态指令,不断检测外设的状态;直到外设准备就绪为止,然后CPU才可以进行正常的I/O操作。</li></ul><p>查询式输入:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs asm">MOV BX,0;XOR BX, BX; 初始化地址指针BX<br>MOV CX,COUNT_1;字节数<br>READ_S1: IN AL,PORT_S1;读入状态位<br>TEST AL,01H;数据准备好否?<br>;TEST按位与 判断最低位是否为1,不为1则ZF=1<br>JZ READ_S1;否,循环检测(Jump if zero) ZF=1时跳转<br>IN AL,PORT_IN ;已准备好,读数据<br>MOV [BX],AL;存到内存缓冲区<br>INC BX;修改地址指针<br>LOOP READ_S1 ;未传送完,继续传送<br> ...<br><br></code></pre></td></tr></table></figure><p>查询式输出:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs asm">MOV CX,COUNT_2;传送的字节数<br>READ_S2: IN AL,PORT_S2;读入状态位<br>TEST AL,02H;bit 1是否为1,如果为1说明设备忙<br>JNZ READ_S2;ZF=0 忙,循环检测<br>MOV AL,输出数据;不忙<br>OUT PORT_OUT,AL;存到内存缓冲区<br>LOOP READ_S2;未传送完,循环<br>...<br></code></pre></td></tr></table></figure><h4 id="中断方式-1"><a href="#中断方式-1" class="headerlink" title="中断方式"></a><strong>中断方式</strong></h4><ul><li><strong>查询方式效率低</strong>。查询方式须反复查询外设的状态,查询等待过程会占去CPU的绝大部分时间,而真正用于数据交换的数据却很少,使CPU的利用率变得很低。为了提高CPU的利用率和进行实时数据处理,CPU常采用中断方式与外设交换数据。</li><li><strong>中断方式效率高</strong>。采用中断方式,CPU执行主程序,只有当输入设备将数据准备好,或输出设备的数据缓冲器已空时,才向CPU发出中断请求。</li><li>CPU响应中断后,暂停执行当前的程序,转去执行管理外设的中断服务程序,用输入或输出指令在CPU和外设之间进行一次数据交换。</li><li>等输入输出操作完成之后,CPU又回去执行原来的程序。</li></ul><h2 id="可编程外围接口芯片8255A及其应用"><a href="#可编程外围接口芯片8255A及其应用" class="headerlink" title="可编程外围接口芯片8255A及其应用"></a>可编程外围接口芯片8255A及其应用</h2><h3 id="概述及结构"><a href="#概述及结构" class="headerlink" title="概述及结构"></a><strong>概述及结构</strong></h3><ul><li><strong>并行接口</strong>——一次可以同时传送一个数据的所有位</li><li><strong>并行接口的数据传送方向</strong>——一是单向传送(只作为输入口或输出口),另一种是双向传送(既可作为输入口,也可作为输出口)</li><li><strong>并行接口的可编程性</strong><ul><li><strong>不可编程</strong>:简单(如锁存器或三态门)</li><li><strong>可编程</strong>:复杂,功能完善的并行接口中一般都包括输入/输出数据寄存器、控制寄存器(存控制命令)、状态寄存器(存当前工作状态)和总线缓冲器等部件</li></ul></li><li>8255是Intel公司为80×86系列CPU配套的可编程并行接口芯片。通用性较强;使用灵活;典型的可编程并行接口。</li></ul><table><thead><tr><th>A1 A0</th><th>定义</th></tr></thead><tbody><tr><td>0 0</td><td>选择A口</td></tr><tr><td>0 1</td><td>选择B口</td></tr><tr><td>1 0</td><td>选择C口</td></tr><tr><td>1 1</td><td>选择控制寄存器</td></tr><tr><td><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240403110120.png" alt="image.png"></td><td></td></tr><tr><td><strong>内部结构:</strong></td><td></td></tr><tr><td>C口:分为高4位、低4位两组</td><td></td></tr></tbody></table><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240403110142.png" alt="image.png"><br><strong>与系统总线的连接</strong><br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240403110240.png" alt="image.png"></p><h3 id="8255的工作方式"><a href="#8255的工作方式" class="headerlink" title="8255的工作方式"></a><strong>8255的工作方式</strong></h3><p>三种基本的工作方式:<br> 方式0:基本输入/输出方式<br> 方式1:选通的输入/输出方式<br> 方式2:双向传输方式 </p><p>A口:可以工作在方式0、方式1或方式2<br>B口、C口:只能工作于方式0或方式1。<br>3个端口的工作方式可通过软件编程来设定。 </p><h4 id="方式0"><a href="#方式0" class="headerlink" title="方式0"></a><strong>方式0</strong></h4><ul><li><strong>A口、C口的高4位,B口、C口的低4位</strong>可分别定义为输入或输出,它们互相独立,故共有16种不同的组合。</li><li>定义为输出:端口均<strong>有</strong>锁存数据的能力。</li><li>定义为输入:端口则<strong>无</strong>锁存能力。</li><li>在方式0下,C口有按位进行置位和复位的能力<br> <img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240403111658.png" alt="image.png"></li></ul><p>应用:</p><ul><li><strong>无条件传送方式</strong>:传送数据双方无需发控制信号给对方,也无需要查询对方状态。<ul><li>CPU只需直接执行输入/输出指令便可将数据读入或写出。</li><li>A、B、C 3个口的全部<strong>24位</strong>都可以用做数据线。</li></ul></li><li><strong>查询工作方式</strong>:通信双方需互相了解对方的状态→通常将C口的高4位(或低4位)定义为输入,用来接收外设的状态信号;而将C口的另外4位定义为输出,用来产生控制信号。<ul><li>此时A、B口可用来传送数据。</li></ul></li></ul><h4 id="方式1"><a href="#方式1" class="headerlink" title="方式1"></a><strong>方式1</strong></h4><ul><li>也称为<strong>选通</strong>的输入/输出方式</li><li>A、B、C 3个口被分为两组</li><li>A组:<ul><li>A口:数据口</li><li>C口高4位:用作A口输入/输出操作的控制和同步信号</li></ul></li><li>B组:<ul><li>B口:数据口</li><li>C口低4位:用作B口输入/输出操作的控制和同步信号</li></ul></li><li>A口和B口的输入和输出数据都被锁存<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240403111706.png" alt="image.png"><br>A B设定为输出口:<br>利用C口的6根线作为A口和B口的控制信号。控制信号线的安排是固定的,不允许改变:A口使用PC3、PC6和PC7,而B口用PC0、PC1和PC2。</li></ul><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240407133236.png" alt="image.png"></p><p>A B设定为输入口:<br>利用C口的6根线作为A口和B口的控制信号。控制信号线的安排是固定的,不允许改变:A口使用PC3、PC4和PC5,而B口用PC0、PC1和PC2。 </p><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/Clip_2024-04-07_13-34-25.png" alt="Clip_2024-04-07_13-34-25.png"></p><h4 id="方式2"><a href="#方式2" class="headerlink" title="方式2"></a><strong>方式2</strong></h4><ul><li>双向传输方式。只有A口可以工作在这种方式</li><li>外设能利用8位数据线与CPU进行双向通信,此时A口既作为输入口又作为输出口</li><li>利用C口的5根线来提供双向传输所需的控制信号</li><li>当A口工作于方式2时,B口可以工作在方式0或方式1,而C口剩下的3根线可作为输入/输出线使用或用做B口方式1之下的控制信号线。<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240407133942.png" alt="image.png"></li></ul><h3 id="8255的控制字及状态字"><a href="#8255的控制字及状态字" class="headerlink" title="8255的控制字及状态字"></a><strong>8255的控制字及状态字</strong></h3><p>方式控制字<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240407134010.png" alt="image.png"></p><p>C口的位控制字:<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240408100322.png" alt="image.png"><br>方式1时的控制字:<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240408100340.png" alt="image.png"><br>方式2时的控制字:<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240408100345.png" alt="image.png"><br> 可编程接口8255A端口地址是由其引脚决定的<br> A1A0=00,代表A端口地址<br> A1A0=01,代表B端口地址<br> A1A0=10,代表C端口地址<br> A1A0=11,代表控制字寄存器端口地址</p><h2 id="可编程计数器-定时器8253及其应用"><a href="#可编程计数器-定时器8253及其应用" class="headerlink" title="可编程计数器/定时器8253及其应用"></a>可编程计数器/定时器8253及其应用</h2><h3 id="定时信号的产生"><a href="#定时信号的产生" class="headerlink" title="定时信号的产生"></a><strong>定时信号的产生</strong></h3><ul><li>软件定时——设计一个延时子程序,子程序中全部指令执行时间的总和就是该子程序的延时时间。<ul><li>简单,易实现,但需了解延时子程序中每条指令执行时间;定时时间不精确;仅适用于延时时间较短、重复次数有限的场合;占用CPU大量的时间,降低CPU的利用率。</li></ul></li><li>硬件定时——利用专用的硬件定时/计数器,在简单软件控制下产生准确的延时时间。<ul><li>通过软件确定定时/计数器的工作方式、设置计数初值并启动计数器工作;当计数到给定值时,便自动产生定时信号;成本不高,程序简单,几乎不占用CPU资源;适合长时间、多次重复定时,也适合延时时间较短的场合。</li></ul></li></ul><p><strong>定时/计数器的计数方式</strong></p><ul><li>加法计数器和减法计数器<ul><li>加法计数器是每有一个计数脉冲就加1,当加到预先设定的计数值时,产生一个定时信号</li><li>减法计数器是在送入计数初值后,每来一个计数脉冲就减1,减到0时产生一个定时信号输出</li></ul></li><li>可编程定时/计数器8253就是一个<strong>减法计数器</strong>,它是Intel公司专为80X86系列配套开发的16位可编程定时/计数器芯片。</li></ul><h3 id="8253的外部引脚及内部结构"><a href="#8253的外部引脚及内部结构" class="headerlink" title="8253的外部引脚及内部结构"></a><strong>8253的外部引脚及内部结构</strong></h3><ul><li>三通道的16位定时/计数器</li><li>计数器的工作方式及计数常数分别由软件编程选择</li><li>可进行二进制或十进制计数或定时操作</li><li>最高计数频率为2 MHz</li><li>使用单电源+5 V供电</li><li>输入/输出均与TTL电平兼容<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240408180355.png" alt="image.png"></li></ul><table><thead><tr><th>$\overline{CS}$</th><th>$\overline{RD}$</th><th>$\overline{WR}$</th><th>A1 A0</th><th>定义</th></tr></thead><tbody><tr><td>0</td><td>1</td><td>0</td><td>00</td><td>写入计数器0</td></tr><tr><td>0</td><td>1</td><td>0</td><td>01</td><td>写入计数器1</td></tr><tr><td>0</td><td>1</td><td>0</td><td>10</td><td>写入计数器2</td></tr><tr><td>0</td><td>1</td><td>0</td><td>11</td><td>写入控制寄存器</td></tr><tr><td>0</td><td>0</td><td>1</td><td>00</td><td>读计数器0</td></tr><tr><td>0</td><td>0</td><td>1</td><td>01</td><td>读计数器1</td></tr><tr><td>0</td><td>0</td><td>1</td><td>10</td><td>读计数器2</td></tr><tr><td>0</td><td>0</td><td>1</td><td>11</td><td>无操作</td></tr><tr><td>1</td><td>×</td><td>×</td><td>××</td><td>禁止使用</td></tr><tr><td>0</td><td>1</td><td>1</td><td>××</td><td>无操作</td></tr><tr><td><strong>计数器</strong></td><td></td><td></td><td></td><td></td></tr></tbody></table><ul><li>计数器0、1和2共<strong>3个相同的16位减1计数器</strong>;<strong>互相独立</strong>工作;每个计数器都包括一个16位的<strong>初值寄存器</strong>、一个<strong>计数执行单元</strong>和一个<strong>输出锁存器</strong></li><li>计数器工作过程:置入初值→计数执行单元对输入脉冲CLK进行减1计数直至0 →从OUT端输出一个信号;整个过程可以<strong>重复</strong>进行、可按<strong>二进制/十进制</strong>计数;计数过程中,计数器还受到<strong>门控信号GATE</strong>的控制</li></ul><p><strong>控制寄存器</strong></p><ul><li>存放操作方式控制字,决定计数器的工作方式;控制字是在8253初始化时用输出指令写入控制寄存器的,<strong>寄存器只能写入,不能读出</strong><br><strong>数据总线缓冲器</strong></li><li>8位,双向,三态;8253和CPU数据总线间的接口<br><strong>读/写控制逻辑</strong></li><li><strong>控制芯片的工作状态</strong>。选片有效时,读/写控制逻辑从系统总线接收输入信号,经过逻辑组合,产生对各部分的控制信号;无效(高电平)时, 8253与总线断开</li></ul><p><strong>计数启动方法</strong></p><ul><li>软件启动——程序指令启动<ul><li>从CPU写入计数初值到计数结束,<strong>实际的CLK脉冲个数比编程写入的计数初值N要多一个</strong>,即N+1(不可避免)。(方式2、3 应该+1)</li></ul></li><li>硬件启动——由外部电路信号启动<ul><li>写入计数初值后并不启动计数,在<strong>门控信号GATE由低电平变高</strong>后,再经CLK信号的上升沿采样之后在该CLK的下降沿才开始计数。</li><li>GATE信号与CLK信号不一定同步,极端情况下从GATE变高到CLK采样之间的延时可能会经历一个CLK脉冲宽度,计数初值与实际的CLK脉冲个数间也会有一个时钟脉冲的误差。<pre class="mermaid">graph TD; A(CPU讲计数初值写入初值寄存器)-->B(将初值寄存器中内容送到计数器); B-->C(计数器开始减1计数); C-->D(减1到0时在OUT端输出一个信号);</pre><strong>计数方式</strong></li></ul></li><li>不自动重复的计数方式:计数器每启动一次只工作一个周期(即从初值减到0)</li><li>自动重复的计数方式:一旦计数启动,只要门控信号GATE保持高电平,计数过程就会自动周而复始地重复下去,这时OUT端可以产生连续的波形输出。</li><li>在自动重复计数方式下,达到稳定状态后,因启动造成的实际计数值和计数初值之间的误差就不再存在。</li></ul><h3 id="8253的工作方式"><a href="#8253的工作方式" class="headerlink" title="8253的工作方式"></a><strong>8253的工作方式</strong></h3><table><thead><tr><th>方式</th><th>启动计数</th><th>中止计数</th><th>自动重复</th><th>更新初值</th><th>输出波形</th></tr></thead><tbody><tr><td>0</td><td>软件(写入初值)</td><td>GATE=0</td><td>否</td><td>立即有效</td><td>延时时间可变的上跳沿</td></tr><tr><td>1</td><td>硬件(GATE正跳变)</td><td></td><td>否</td><td>下一轮有效</td><td>宽度为$N\times T_{CLK}$ 的单一负脉冲</td></tr><tr><td>2</td><td>软件(写入初值)<br><br>硬件(GATE正跳变)</td><td>GATE=0</td><td>是</td><td>下一轮有效</td><td>周期为$N\times T_{CLK}$ 、宽度为$T_{CLK}$的连续负脉冲</td></tr><tr><td>3</td><td>软件(写入初值)<br><br>硬件(GATE正跳变)</td><td>GATE=0</td><td>是</td><td>下半轮有效</td><td>周期为$N\times T_{CLK}$ 的连续方波</td></tr><tr><td>4</td><td>软件(写入初值)</td><td>GATE=0</td><td>否</td><td>下一轮有效</td><td>宽度为$T_{CLK}$的单一负脉冲</td></tr><tr><td>5</td><td>硬件(GATE正跳变)</td><td></td><td>否</td><td>下一轮有效</td><td>宽度为$T_{CLK}$的单一负脉冲</td></tr></tbody></table><p><strong>方式0工作波形(计数结束中断方式)</strong></p><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240408183743.png" alt="image.png"></p><p><strong>方式1工作波形(可重复触发的单稳态触发器)</strong><br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240408183830.png" alt="image.png"></p><blockquote><p>在<strong>门控信号GATE由低电平变高</strong>后,再经CLK信号的上升沿采样之后在该CLK的下降沿才开始计数。</p></blockquote><p><strong>方式2工作波形(频率发生器)</strong><br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240408183906.png" alt="image.png"></p><blockquote><p>当计数器减到零的前一个 CLK ,OUT 输出低电平,即OUT ->0 ,输出一个宽度为一个 CLK 周期的负脉冲,并自动重新装入初始值,自动启动计数。<br>可以通过 GATE = 0 暂停计数。</p></blockquote><p><strong>方式3工作波形(方波发生器)</strong><br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240408183930.png" alt="image.png"></p><blockquote><p>计数器减到1/2初值时,OUT输出一个宽度为 1 / 2 CLK 周期的负脉冲,并自动重新装入初始值,自动启动计数。<br>可以通过 GATE = 0 暂停计数。</p></blockquote><p><strong>方式4工作波形(软件触发选通)</strong><br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240408183955.png" alt="image.png"></p><blockquote><p>计数结束后输出一个CLK周期的低电平,其余为高电平,不能自动循环。</p></blockquote><p><strong>软件5工作波形(硬件触发选通)</strong><br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240408184021.png" alt="image.png"></p><blockquote><p>波形特征同方式4,但重置初值和GATE上升沿之后可重新计时</p></blockquote><h3 id="8253的控制字"><a href="#8253的控制字" class="headerlink" title="8253的控制字"></a><strong>8253的控制字</strong></h3><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240408190449.png" alt="image.png"><br>$RW_1$ $RW_2$<br>01 写入低8位时,高8位自动为零。<br>10 写入高8位时,低8位自动为零。</p><p><strong>8253初始化</strong></p><ul><li>写入方式控制字<ul><li>三个通道用的控制字端口地址是相同的</li><li>三个控制字写入后存入通道对应的寄存器中</li></ul></li><li>写入计数初始值</li><li>读计数值(计时)<ul><li>以普通对计数器端口读的方法取得当前计数值</li><li>锁存计数器的当前计数值</li></ul></li></ul><h2 id="串口通信和可编程接口芯片8251A"><a href="#串口通信和可编程接口芯片8251A" class="headerlink" title="串口通信和可编程接口芯片8251A"></a>串口通信和可编程接口芯片8251A</h2><h3 id="串行通信基本概念"><a href="#串行通信基本概念" class="headerlink" title="串行通信基本概念"></a><strong>串行通信基本概念</strong></h3><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240408200326.png" alt="image.png"></p><ul><li>DTE- Data Terminal Equipment,常常是计算机。</li><li>DCE- Data Communication Equipment,常常是MODEM,也可以是计算机。</li><li>串行接口 – 主要是8251A、16550、8250等IC,连接DTE和DCE。</li></ul><p><strong>数据传送的方向</strong></p><ul><li>单工(Simplex)——通信是单向的。</li><li>半双工(Half duplex)——半双工指A能发信号给B,B也能发信号给A,但这两个过程不能同时进行,A或B发送完后要切换到接受状态。典型例子就是对讲机。</li><li>全双工(Duplex)——在A给B发信号的同时,B也可以给A发信号。典型的例子就是打电话。</li></ul><p><strong>传输速率</strong></p><ul><li>波特率——单位时间传送的位数,单位bps(bit/s) 。</li><li>波特率因子K——每BIT占用的时钟周期数。 K=接收或发送时钟频率/波特率,可取1,16,32,64<br> Exx: 一个异步串行发送器,发送具有8位数据位的字符,在系统中使用一个奇偶校验位和两个停止位。若每秒发送100个字符,则其波特率为多少 ?<br> 100×(1+8+1+2)=1200 bps<br> 起始位 数据位 校验位 停止位</li></ul><p><strong>信号的调制与解调</strong></p><ul><li>数据通信传输的是数字信号,要求传送线的频带很宽,若传输带宽很窄,直接传输数字信号,信号就要发生畸变。 因此,需用调制器将<strong>数字信号转换成模拟信号</strong>,经传输后再用解调器将其<strong>转换成数字信号</strong>。</li><li>根据载波 $Asin(\omega t+\phi)$ 的三个参数:幅度、频率、相位,常用的调制技术:<strong>幅度调制</strong> Amplitude-Modulating (AM)、<strong>频移键控法</strong> Frequency-Shift Keying (FSK)</li></ul><p><strong>串行通信数据格式</strong></p><ul><li>在数据通信中,传输的对象是一系列的 0和1 ,这些 0、1 在不同的位置有不同的含义,这些含义都要事先约定好。</li><li>在通信中,两种最基本的串行通信方式:<strong>异步串行通信</strong>(不使用共同的时钟和同步信号)、<strong>同步串行通信</strong>(使用共同的时钟和同步信号) 。</li></ul><table><thead><tr><th>异步串行通信</th><th>同步串行通信</th></tr></thead><tbody><tr><td>双方使用各自的时钟</td><td>双方使用同一时钟</td></tr><tr><td>一帧以字符为单位(一个字符帧的长度取决于帧格式)</td><td>以数据块为单位(数据块长度可变)</td></tr><tr><td>传输效率低</td><td>效率高,速度快</td></tr><tr><td>应用于传输速率不高时,简单,应用较广</td><td>应用于大批量,高速率数据通信场合</td></tr></tbody></table><p><strong>串行通信的校验方法</strong></p><ul><li>串行通信主要适用于远距离通信,因而噪声和干扰较大,为了保证高效而无差错地传送数据,对传送的数据进行校验就成了串行通信中必不可少的重要环节。</li><li>常用的校验方法有:奇偶校验、循环冗余校验(CRC) 。</li><li>奇偶校验:主要用于对一个字符的传送过程进行校验;奇偶校验可以检查出一个字节中发生的单个错误;奇偶校验不能自动纠错,发现错误后需“重传”。</li></ul><h3 id="串行外设接口(SPI)"><a href="#串行外设接口(SPI)" class="headerlink" title="串行外设接口(SPI)"></a><strong>串行外设接口(SPI)</strong></h3><p>SPI(Serial Peripheral Interface,串行外设接口)是一种高速、全双工、同步通信总线,常用于短距离通讯,主要应用于 EEPROM、FLASH、实时时钟、AD 转换器、还有数字信号处理器和数字信号解码器之间。SPI 一般使用 4 根线通信。</p><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240515105536.png"></p><p>MOSI:主机输出 / 从机输入数据线(SPI Bus Master Output/Slave Input)。<br>MISO:主机输入 / 从机输出数据线(SPI Bus Master Input/Slave Output)。<br>SCLK:串行时钟线(Serial Clock),主设备输出时钟信号至从设备。<br>CS:从设备选择线 (Chip select)。也叫 SS、CSB、CSN、EN 等,主设备输出片选信号至从设备。</p><p>SPI 以主从方式工作,通常有一个主设备和一个或多个从设备。<br>通信由主设备发起,主设备通过 CS选择要通信的从设备,然后通过 SCLK 给从设备提供时钟信号。<br>数据通过 MOSI 输出给从设备,同时通过 MISO 接收从设备发送的数据。</p><p><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240515105637.png" alt="image.png"><br>如图所示芯片有 2 个 SPI 控制器,SPI 控制器对应 SPI 主设备,<strong>每个 SPI 控制器可以连接多个 SPI 从设备</strong>。挂载在同一个 SPI 控制器上的从设备共享 3 个信号引脚:SCK、MISO、MOSI,但每个从设备的 <strong>CS 引脚是独立的</strong>。<br><img src="https://raw.githubusercontent.com/Thinler/PhotosOfNotes/master/classnotes/20240515105712.png" alt="image.png"></p>]]></content>
<categories>
<category>学习笔记</category>
</categories>
<tags>
<tag>笔记</tag>
<tag>学习</tag>
<tag>嵌入式</tag>
</tags>
</entry>
<entry>
<title>Ubuntu下git clone加速方法</title>
<link href="/2024/01/13/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/Ubuntu%E4%B8%8Bgit%20clone%E5%8A%A0%E9%80%9F%E6%96%B9%E6%B3%95/"/>
<url>/2024/01/13/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/Ubuntu%E4%B8%8Bgit%20clone%E5%8A%A0%E9%80%9F%E6%96%B9%E6%B3%95/</url>
<content type="html"><![CDATA[<h1 id="Ubuntu下git-clone加速方法"><a href="#Ubuntu下git-clone加速方法" class="headerlink" title="Ubuntu下git clone加速方法"></a>Ubuntu下git clone加速方法</h1><ul><li>环境 :Ubuntu 20 in Vmare</li><li>问题:git clone复制github仓库时命令速度慢、无法访问</li><li>解决:修改host文件</li></ul><h2 id="Step1-获取github-IP地址"><a href="#Step1-获取github-IP地址" class="headerlink" title="Step1 获取github IP地址"></a>Step1 获取github IP地址</h2><p><code>nslookup github.com</code></p><figure class="highlight plaintext"><figcaption><span>github.com</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs nslookup">Server: 127.0.0.53<br>Address: 127.0.0.53#53<br><br>Non-authoritative answer:<br>Name: github.com<br>Address: 20.205.243.166<br>Name: github.com<br>Address: 2404:6800:4000::c01e:ff70<br>Name: github.com<br>Address: 2404:6800:4000::c01e:ff71```<br></code></pre></td></tr></table></figure><h2 id="Step2-获取github-global-ssl-fastly-net的IP地址"><a href="#Step2-获取github-global-ssl-fastly-net的IP地址" class="headerlink" title="Step2 获取github.global.ssl.fastly.net的IP地址"></a>Step2 获取github.<a href="https://so.csdn.net/so/search?q=global&spm=1001.2101.3001.7020">global</a>.ssl.fastly.net的IP地址</h2><p><code>nslookup github.global.ssl.fastly.net</code></p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs yaml"><span class="hljs-attr">Server:</span> <span class="hljs-number">127.0</span><span class="hljs-number">.0</span><span class="hljs-number">.53</span><br><span class="hljs-attr">Address:</span> <span class="hljs-number">127.0</span><span class="hljs-number">.0</span><span class="hljs-number">.53</span><span class="hljs-comment">#53</span><br><br><span class="hljs-attr">Non-authoritative answer:</span><br><span class="hljs-attr">Name:</span> <span class="hljs-string">github.global.ssl.fastly.net</span><br><span class="hljs-attr">Address:</span> <span class="hljs-number">104.244</span><span class="hljs-number">.46</span><span class="hljs-number">.21</span><br><span class="hljs-attr">Name:</span> <span class="hljs-string">github.global.ssl.fastly.net</span><br><span class="hljs-attr">Address:</span> <span class="hljs-number">2001</span><span class="hljs-string">::68f4:2e3f</span><br></code></pre></td></tr></table></figure><h2 id="Step3-访问host文件并修改"><a href="#Step3-访问host文件并修改" class="headerlink" title="Step3 访问host文件并修改"></a>Step3 访问host文件并修改</h2><p><code>sudo vim /etc/hosts</code></p><p>在文件最后一行加上</p><figure class="highlight accesslog"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs accesslog">#github<br><span class="hljs-number">104.244.46.21</span> http://github.global.ssl.fastly.net<br><span class="hljs-number">104.244.46.21</span> https://github.global.ssl.fastly.net<br><br><span class="hljs-number">20.205.243.166</span> http://github.com<br><span class="hljs-number">20.205.243.166</span> https://github.com<br><br></code></pre></td></tr></table></figure><h2 id="Step4-刷新缓存"><a href="#Step4-刷新缓存" class="headerlink" title="Step4 刷新缓存"></a>Step4 刷新缓存</h2><p><code>sudo /etc/init.d/network-manager restart</code></p><hr><p>即可解决github clone速度慢的问题</p><h1 id="其他方法"><a href="#其他方法" class="headerlink" title="其他方法"></a>其他方法</h1><h2 id="1-使用cgit工具"><a href="#1-使用cgit工具" class="headerlink" title="1. 使用cgit工具"></a>1. 使用cgit工具</h2><figure class="highlight crmsh"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs crmsh">sudo apt-get install cgit<br>cgit <span class="hljs-keyword">clone</span> <span class="hljs-title">...... </span><br></code></pre></td></tr></table></figure><h2 id="2-添加gitclone-com前缀"><a href="#2-添加gitclone-com前缀" class="headerlink" title="2. 添加gitclone.com前缀"></a>2. 添加gitclone.com前缀</h2><h3 id="例如:"><a href="#例如:" class="headerlink" title="例如:"></a>例如:</h3><p>git clone https://<em><strong>gitclone.com</strong></em>/github.com/tendermint/tendermint.git</p><p>可以设置git参数 实现自动替换</p><p><code>git config --global url."https://gitclone.com/".insteadOf https:</code></p>]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux</tag>
<tag>技术向</tag>
<tag>笔记</tag>
<tag>加速</tag>
</tags>
</entry>
<entry>
<title>随想-2023-12-11</title>
<link href="/2023/12/14/%E6%97%A5%E8%AE%B0%E9%9A%8F%E6%83%B3/2023-12-11/"/>
<url>/2023/12/14/%E6%97%A5%E8%AE%B0%E9%9A%8F%E6%83%B3/2023-12-11/</url>
<content type="html"><![CDATA[<h1 id="一点随想"><a href="#一点随想" class="headerlink" title="一点随想"></a>一点随想</h1><p>在选修课上看到关于蔡磊《相信》的介绍,其中第三部分是关于西西弗斯的论述。恰好前段时间翻了翻加缪的《西西弗神话》,是一本关于荒谬哲学论述的作品,遂生一些感想。</p><p>西西弗是古希腊神话中触怒了诸神的一个人物,他被惩罚把一块巨石推上山顶,但是每当他竭尽全力把巨石推到山顶时,巨石总会落下去,于是他只能一次又一次的把石头推到山顶,看着石头滚落,继而下山继续去推。看上去他在做一种无用功,陷入了永远无法摆脱的劳而无功。</p><p>人生就是荒谬的,就像学期初时我自以这学期的课没那么多,期末总不能再像上学期那样拆东墙补西墙,再像上学期那样手足无措。而事实是后天要考模电了,我却还在复习抑或说预习知识点,然后在考完模电以后继续拆东补西,继续亡羊补牢。我们等待着一个个明天的来临,但明天每近一步,我们就离死亡更近一步,身体抗拒着明天,精神若再去期待明天,怎么不是一种荒谬。</p><p>但丁《神曲》地狱篇里认为地狱最可怕的一点就是完全没有希望,没有希望…是否意味着只有绝望?如果这时我说有,就会成为“所谓主流价值观的腐朽拥护者”。如果我说没有,又难逃“与伟大浪潮相悖的的丑恶逆行者”。让我们来看看西西弗,他一次又一次毫不犹豫的推着巨石上山,心里就有希望吗?他是一个注定要和失败命运抗争的人,明知劳而无功却朝着不知尽头的痛苦、脚步沉重而均匀的走去。就算没有希望,他朝着山顶所进行的斗争本身就足以充实一颗人心,关键是要活着,精神容易分崩离析,容易陷入虚无,身体则至关重要,精神依靠身体去穷尽一切。</p><script src="https://utteranc.es/client.js" repo="Thinler/blog-comment" issue-term="pathname" theme="github-light" crossorigin="anonymous" async></script>]]></content>
<categories>
<category>日记随想</category>
</categories>
<tags>
<tag>哲思</tag>
<tag>加缪</tag>
<tag>随想</tag>
</tags>
</entry>
<entry>
<title>Linux命令</title>
<link href="/2023/12/01/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/Linux%E5%91%BD%E4%BB%A4/"/>
<url>/2023/12/01/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/Linux%E5%91%BD%E4%BB%A4/</url>
<content type="html"><![CDATA[<h1 id="Linux命令"><a href="#Linux命令" class="headerlink" title="Linux命令"></a>Linux命令</h1><h2 id="系统管理"><a href="#系统管理" class="headerlink" title="系统管理"></a>系统管理</h2><p>echo 显示变量<br>date “+%j” 今年过去了多少天</p><p>ntpdate <a href="http://time.nist.gov/">time.nist.gov</a> 用ntpdate从服务器更新时间</p><p>wget -P 下载到指定目录<br>ps 查看系统进程<br>top 显示负载信息<br>pidof 查看PID值<br>kill 删除进程<br>killall<br>uname -s系统名称<br>-n主机名称 -i硬件架构<br>uptime系统负载信息<br>free 内存使用量信息<br>who 用户<br>last 最近登录信息<br>history 历史命令</p><hr><h2 id="磁盘管理"><a href="#磁盘管理" class="headerlink" title="磁盘管理"></a>磁盘管理</h2><p>df 磁盘空间利用情况<br>-h 以合适的单位返回各个文件系统容量<br>-T 文件系统类型<br>du 查看文件和目录磁盘的使用空间<br>fdisk 磁盘分区</p><hr><h2 id="文本编辑工具Vim"><a href="#文本编辑工具Vim" class="headerlink" title="文本编辑工具Vim"></a>文本编辑工具Vim</h2><h3 id="vim的三种操作模式"><a href="#vim的三种操作模式" class="headerlink" title="vim的三种操作模式"></a>vim的三种操作模式</h3><p>vim有三种操作模式,分别是命令模式(Command mode)、输入模式(Insert mode)和底线命令模式(Last line mode)。</p><p>三种模式切换快捷键:</p><table><thead><tr><th>模式</th><th>快捷键</th></tr></thead><tbody><tr><td>命令模式</td><td>ESC</td></tr><tr><td>输入模式</td><td>i或a</td></tr><tr><td>底线命令模式</td><td>:</td></tr></tbody></table><ul><li>命令模式</li></ul><p>在命令模式中控制光标移动和输入命令,可对文本进行复制、粘贴、删除和查找等工作。</p><p>使用命令vim filename后进入编辑器视图后,默认模式就是命令模式,此时敲击键盘字母会被识别为一个命令,例如在键盘上连续敲击两次d,就会删除光标所在行。</p><p>以下是在命令模式中常用的快捷操作:</p><table><thead><tr><th>操作</th><th>快捷键</th></tr></thead><tbody><tr><td>光标左移</td><td>h</td></tr><tr><td>光标右移</td><td>l(小写L)</td></tr><tr><td>光标上移</td><td>k</td></tr><tr><td>光标下移</td><td>j</td></tr><tr><td>光标移动到下一个单词</td><td>w</td></tr><tr><td>光标移动到上一个单词</td><td>b</td></tr><tr><td>移动游标到第n行</td><td>nG</td></tr><tr><td>移动游标到第一行</td><td>gg</td></tr><tr><td>移动游标到最后一行</td><td>G</td></tr><tr><td>快速回到上一次光标所在位置</td><td>Ctrl+o</td></tr><tr><td>删除当前字符</td><td>x</td></tr><tr><td>删除前一个字符</td><td>X</td></tr><tr><td>删除整行</td><td>dd</td></tr><tr><td>删除一个单词</td><td>dw或daw</td></tr><tr><td>删除至行尾</td><td>d$或D</td></tr><tr><td>删除至行首</td><td>d^</td></tr><tr><td>删除到文档末尾</td><td>dG</td></tr><tr><td>删除至文档首部</td><td>d1G</td></tr><tr><td>删除n行</td><td>ndd</td></tr><tr><td>删除n个连续字符</td><td>nx</td></tr><tr><td>将光标所在位置字母变成大写或小写</td><td>~</td></tr><tr><td>复制游标所在的整行</td><td>yy(3yy表示复制3行)</td></tr><tr><td>粘贴至光标后(下)</td><td>p</td></tr><tr><td>粘贴至光标前(上)</td><td>P</td></tr><tr><td>剪切</td><td>dd</td></tr><tr><td>交换上下行</td><td>ddp</td></tr><tr><td>替换整行,即删除游标所在行并进入插入模式</td><td>cc</td></tr><tr><td>撤销一次或n次操作</td><td>u{n}</td></tr><tr><td>撤销当前行的所有修改</td><td>U</td></tr><tr><td>恢复撤销操作</td><td>Ctrl+r</td></tr><tr><td>整行将向右缩进</td><td>>></td></tr><tr><td>整行将向左退回</td><td><<</td></tr><tr><td>若档案没有更动,则不储存离开,若档案已经被更动过,则储存后离开</td><td>ZZ</td></tr></tbody></table><ul><li>输入模式</li></ul><p>在命令模式下按i或a键就进入了输入模式,在输入模式下,您可以正常的使用键盘按键对文本进行插入和删除等操作。</p><ul><li>底线命令模式</li></ul><p>在命令模式下按:键就进入了底线命令模式,在底线命令模式中可以输入单个或多个字符的命令。</p><table><thead><tr><th>操作</th><th>命令</th></tr></thead><tbody><tr><td>保存</td><td>:w</td></tr><tr><td>退出</td><td>:q</td></tr><tr><td>保存并退出</td><td>:wq(:wq!表示强制保存退出)</td></tr><tr><td>将文件另存为其他文件名</td><td>:w new_filename</td></tr><tr><td>显示行号</td><td>:set nu</td></tr><tr><td>取消行号</td><td>:set nonu</td></tr><tr><td>使本行内容居中</td><td>:ce</td></tr><tr><td>使本行文本靠右</td><td>:ri</td></tr><tr><td>使本行内容靠左</td><td>:le</td></tr><tr><td>向光标之下寻找一个名称为word的字符串</td><td>:/word</td></tr><tr><td>向光标之上寻找一个字符串名称为word的字符串</td><td>:?word</td></tr><tr><td>重复前一个搜寻的动作</td><td>:n</td></tr><tr><td>从第一行到最后一行寻找word1字符串,并将该字符串取代为word2</td><td></td></tr></tbody></table><h2 id="cat"><a href="#cat" class="headerlink" title="cat"></a>cat</h2><p>命令描述:cat命令用于查看内容较少的纯文本文件。</p><p>命令格式:cat [选项] [文件]。</p><p>命令参数说明:</p><table><thead><tr><th>参数</th><th>说明</th></tr></thead><tbody><tr><td>-n或–number</td><td>显示行号</td></tr><tr><td>-b或–number-nonblank</td><td>显示行号,但是不对空白行进行编号</td></tr><tr><td>-s或–squeeze-blank</td><td>当遇到有连续两行以上的空白行,只显示一行的空白行</td></tr></tbody></table><h2 id="文本编辑工具Vim-1"><a href="#文本编辑工具Vim-1" class="headerlink" title="文本编辑工具Vim"></a>文本编辑工具Vim</h2><h3 id="vim的三种操作模式-1"><a href="#vim的三种操作模式-1" class="headerlink" title="vim的三种操作模式"></a>vim的三种操作模式</h3><p>vim有三种操作模式,分别是命令模式(Command mode)、输入模式(Insert mode)和底线命令模式(Last line mode)。</p><p>三种模式切换快捷键:</p><table><thead><tr><th>模式</th><th>快捷键</th></tr></thead><tbody><tr><td>命令模式</td><td>ESC</td></tr><tr><td>输入模式</td><td>i或a</td></tr><tr><td>底线命令模式</td><td>:</td></tr></tbody></table><ul><li>命令模式</li></ul><p>在命令模式中控制光标移动和输入命令,可对文本进行复制、粘贴、删除和查找等工作。</p><p>使用命令vim filename后进入编辑器视图后,默认模式就是命令模式,此时敲击键盘字母会被识别为一个命令,例如在键盘上连续敲击两次d,就会删除光标所在行。</p><p>以下是在命令模式中常用的快捷操作:</p><table><thead><tr><th>操作</th><th>快捷键</th></tr></thead><tbody><tr><td>光标左移</td><td>h</td></tr><tr><td>光标右移</td><td>l(小写L)</td></tr><tr><td>光标上移</td><td>k</td></tr><tr><td>光标下移</td><td>j</td></tr><tr><td>光标移动到下一个单词</td><td>w</td></tr><tr><td>光标移动到上一个单词</td><td>b</td></tr><tr><td>移动游标到第n行</td><td>nG</td></tr><tr><td>移动游标到第一行</td><td>gg</td></tr><tr><td>移动游标到最后一行</td><td>G</td></tr><tr><td>快速回到上一次光标所在位置</td><td>Ctrl+o</td></tr><tr><td>删除当前字符</td><td>x</td></tr><tr><td>删除前一个字符</td><td>X</td></tr><tr><td>删除整行</td><td>dd</td></tr><tr><td>删除一个单词</td><td>dw或daw</td></tr><tr><td>删除至行尾</td><td>d$或D</td></tr><tr><td>删除至行首</td><td>d^</td></tr><tr><td>删除到文档末尾</td><td>dG</td></tr><tr><td>删除至文档首部</td><td>d1G</td></tr><tr><td>删除n行</td><td>ndd</td></tr><tr><td>删除n个连续字符</td><td>nx</td></tr><tr><td>将光标所在位置字母变成大写或小写</td><td>~</td></tr><tr><td>复制游标所在的整行</td><td>yy(3yy表示复制3行)</td></tr><tr><td>粘贴至光标后(下)</td><td>p</td></tr><tr><td>粘贴至光标前(上)</td><td>P</td></tr><tr><td>剪切</td><td>dd</td></tr><tr><td>交换上下行</td><td>ddp</td></tr><tr><td>替换整行,即删除游标所在行并进入插入模式</td><td>cc</td></tr><tr><td>撤销一次或n次操作</td><td>u{n}</td></tr><tr><td>撤销当前行的所有修改</td><td>U</td></tr><tr><td>恢复撤销操作</td><td>Ctrl+r</td></tr><tr><td>整行将向右缩进</td><td>>></td></tr><tr><td>整行将向左退回</td><td><<</td></tr><tr><td>若档案没有更动,则不储存离开,若档案已经被更动过,则储存后离开</td><td>ZZ</td></tr></tbody></table><ul><li>输入模式</li></ul><p>在命令模式下按i或a键就进入了输入模式,在输入模式下,您可以正常的使用键盘按键对文本进行插入和删除等操作。</p><ul><li>底线命令模式</li></ul><p>在命令模式下按:键就进入了底线命令模式,在底线命令模式中可以输入单个或多个字符的命令。</p><table><thead><tr><th>操作</th><th>命令</th></tr></thead><tbody><tr><td>保存</td><td>:w</td></tr><tr><td>退出</td><td>:q</td></tr><tr><td>保存并退出</td><td>:wq(:wq!表示强制保存退出)</td></tr><tr><td>将文件另存为其他文件名</td><td>:w new_filename</td></tr><tr><td>显示行号</td><td>:set nu</td></tr><tr><td>取消行号</td><td>:set nonu</td></tr><tr><td>使本行内容居中</td><td>:ce</td></tr><tr><td>使本行文本靠右</td><td>:ri</td></tr><tr><td>使本行内容靠左</td><td>:le</td></tr><tr><td>向光标之下寻找一个名称为word的字符串</td><td>:/word</td></tr><tr><td>向光标之上寻找一个字符串名称为word的字符串</td><td>:?word</td></tr><tr><td>重复前一个搜寻的动作</td><td>:n</td></tr><tr><td>从第一行到最后一行寻找word1字符串,并将该字符串取代为word2</td><td></td></tr></tbody></table><h2 id="cat-1"><a href="#cat-1" class="headerlink" title="cat"></a>cat</h2><p>命令描述:cat命令用于查看内容较少的纯文本文件。</p><p>命令格式:cat [选项] [文件]。</p><p>命令参数说明:</p><table><thead><tr><th>参数</th><th>说明</th></tr></thead><tbody><tr><td>-n或–number</td><td>显示行号</td></tr><tr><td>-b或–number-nonblank</td><td>显示行号,但是不对空白行进行编号</td></tr><tr><td>-s或–squeeze-blank</td><td>当遇到有连续两行以上的空白行,只显示一行的空白行</td></tr></tbody></table><p>more</p><p>less 显示文件</p><p>head 显示文件开头指定行数(-n)指定字符数(-c)</p><p>tail 显示文件末尾多少行 -f显示文件最新追加的内容</p><p>stat 显示文件详细信息</p><p>wc 统计指定文本的行数-l 、单词数-w、字节数-c</p><p>file 辨识文件类型</p><p>diff 查看两个文件的差异</p><p>grep 查找文件里符合条件的字符串</p><h2 id="sed"><a href="#sed" class="headerlink" title="sed"></a>sed</h2><p>命令描述:sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用。</p><p>1. 处理时,把当前处理的行存储在临时缓冲区中,称为模式空间(pattern space)。<br>2. 接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。<br>3. 接着处理下一行,这样不断重复,直到文件末尾。</p><p>注意:</p><ul><li>sed命令不会修改原文件,例如删除命令只表示某些行不打印输出,而不是从原文件中删去。</li><li>如果要改变源文件,需要使用-i选项。</li></ul><p>命令格式:sed [参数] [动作] [文件]。</p><p>参数说明:</p><table><thead><tr><th>参数</th><th>说明</th></tr></thead><tbody><tr><td>-e [script]</td><td>执行多个script</td></tr><tr><td>-f [script文件]</td><td>执行指定script文件</td></tr><tr><td>-n</td><td>仅显示script处理后的结果</td></tr><tr><td>-i</td><td>输出到原文件,静默执行(修改原文件)</td></tr></tbody></table><p>动作说明:</p><table><thead><tr><th>动作</th><th>说明</th></tr></thead><tbody><tr><td>a</td><td>在行后面增加内容</td></tr><tr><td>c</td><td>替换行</td></tr><tr><td>d</td><td>删除行</td></tr><tr><td>i</td><td>在行前面插入</td></tr><tr><td>p</td><td>打印相关的行</td></tr><tr><td>s</td><td>替换内容</td></tr></tbody></table><p>命令使用示例:</p><ul><li>删除第3行到最后一行内容。</li></ul><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-attribute">sed</span> <span class="hljs-string">'3,<span class="hljs-variable">$d</span>'</span> /etc/passwd<br></code></pre></td></tr></table></figure><p>命令输出结果:</p><p><img src="https://img.alicdn.com/tfs/TB1VGVHHQL0gK0jSZFAXXcA9pXa-633-570.png" alt="https://img.alicdn.com/tfs/TB1VGVHHQL0gK0jSZFAXXcA9pXa-633-570.png"></p><ul><li>在最后一行新增行。</li></ul><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs swift">sed '<span class="hljs-variable">$a</span> admin:x:<span class="hljs-number">1000</span>:<span class="hljs-number">1000</span>:admin:<span class="hljs-regexp">/home/</span>admin:<span class="hljs-regexp">/bin/</span>bash' <span class="hljs-regexp">/etc/</span>passwd<br></code></pre></td></tr></table></figure><p>命令输出结果:</p><p><img src="https://img.alicdn.com/tfs/TB1wjVJHHH1gK0jSZFwXXc7aXXa-767-527.png" alt="https://img.alicdn.com/tfs/TB1wjVJHHH1gK0jSZFwXXc7aXXa-767-527.png"></p><ul><li>替换内容。</li></ul><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs swift">sed 's<span class="hljs-regexp">/SELINUX=disabled/</span><span class="hljs-type">SELINUX</span><span class="hljs-operator">=</span>enforcing<span class="hljs-regexp">/' /</span>etc<span class="hljs-regexp">/selinux/</span>config<br></code></pre></td></tr></table></figure><p>命令输出结果:</p><p><img src="https://img.alicdn.com/tfs/TB1gURDHLb2gK0jSZK9XXaEgFXa-789-655.png" alt="https://img.alicdn.com/tfs/TB1gURDHLb2gK0jSZK9XXaEgFXa-789-655.png"></p><ul><li>替换行。</li></ul><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs awk">sed <span class="hljs-string">'1c abcdefg'</span> <span class="hljs-regexp">/etc/</span>passwd<br></code></pre></td></tr></table></figure><p>命令输出结果:</p><p><img src="https://img.alicdn.com/tfs/TB1z6XEHUz1gK0jSZLeXXb9kVXa-658-512.png" alt="https://img.alicdn.com/tfs/TB1z6XEHUz1gK0jSZLeXXb9kVXa-658-512.png"></p><h2 id="awk"><a href="#awk" class="headerlink" title="awk"></a>awk</h2><p>命令描述:和 sed 命令类似,awk 命令也是逐行扫描文件(从第 1 行到最后一行),寻找含有目标文本的行,如果匹配成功,则会在该行上执行用户想要的操作;反之,则不对行做任何处理。</p><p>命令格式:awk [参数] [脚本] [文件]。</p><p>参数说明:</p><table><thead><tr><th>参数</th><th>说明</th></tr></thead><tbody><tr><td>-F fs</td><td>指定以fs作为输入行的分隔符,awk 命令默认分隔符为空格或制表符</td></tr><tr><td>-f file</td><td>读取awk脚本</td></tr><tr><td>-v val=val</td><td>在执行处理过程之前,设置一个变量var,并给其设置初始值为val</td></tr></tbody></table><p>内置变量:</p><table><thead><tr><th>变量</th><th>用途</th></tr></thead><tbody><tr><td>FS</td><td>字段分隔符</td></tr><tr><td>$n</td><td>指定分隔的第n个字段,如$1、$3分别表示第1、第三列</td></tr><tr><td>$0</td><td>当前读入的整行文本内容</td></tr><tr><td>NF</td><td>记录当前处理行的字段个数(列数)</td></tr><tr><td>NR</td><td>记录当前已读入的行数</td></tr><tr><td>FNR</td><td>当前行在源文件中的行号</td></tr></tbody></table><p>awk中还可以指定脚本命令的运行时机。默认情况下,awk会从输入中读取一行文本,然后针对该行的数据执行程序脚本,但有时可能需要在处理数据前运行一些脚本命令,这就需要使用BEGIN关键字,BEGIN会在awsk读取数据前强制执行该关键字后指定的脚本命令。</p><p>和BEGIN关键字相对应,END关键字允许我们指定一些脚本命令,awk会在读完数据后执行它们。</p><p>命令使用示例:</p><ul><li>查看本机IP地址。</li></ul><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-attribute">ifconfig</span> eth0 |awk <span class="hljs-string">'/inet/{print <span class="hljs-variable">$2</span>}'</span><br></code></pre></td></tr></table></figure><p>命令输出结果:</p><p><img src="https://img.alicdn.com/tfs/TB1VwhFHUH1gK0jSZSyXXXtlpXa-482-66.png" alt="https://img.alicdn.com/tfs/TB1VwhFHUH1gK0jSZSyXXXtlpXa-482-66.png"></p><ul><li>查看本机剩余磁盘容量。</li></ul><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-attribute">df</span> -h |awk <span class="hljs-string">'/\/$/{print <span class="hljs-variable">$4</span>}'</span><br></code></pre></td></tr></table></figure><p>命令输出结果:</p><p><img src="https://img.alicdn.com/tfs/TB1k.RDHLb2gK0jSZK9XXaEgFXa-423-70.png" alt="https://img.alicdn.com/tfs/TB1k.RDHLb2gK0jSZK9XXaEgFXa-423-70.png"></p><ul><li>统计系统用户个数。</li></ul><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-attribute">awk</span> -F: <span class="hljs-string">'<span class="hljs-variable">$3</span><1000{x++} END{print x}'</span> /etc/passwd<br></code></pre></td></tr></table></figure><p>命令输出结果:</p><p><img src="https://img.alicdn.com/tfs/TB1_AFFHFP7gK0jSZFjXXc5aXXa-553-66.png" alt="https://img.alicdn.com/tfs/TB1_AFFHFP7gK0jSZFjXXc5aXXa-553-66.png"></p><ul><li>输出其中登录Shell不以nologin结尾(对第7个字段做!~反向匹配)的用户名、登录Shell信息。</li></ul><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs nginx"><span class="hljs-attribute">awk</span> -F: <span class="hljs-string">'<span class="hljs-variable">$7</span>!~/nologin$/{print <span class="hljs-variable">$1</span>,<span class="hljs-variable">$7</span>}'</span> /etc/passwd<br></code></pre></td></tr></table></figure><p>命令输出结果:</p><p><img src="https://img.alicdn.com/tfs/TB1EaRHHKH2gK0jSZFEXXcqMpXa-595-129.png" alt="https://img.alicdn.com/tfs/TB1EaRHHKH2gK0jSZFEXXcqMpXa-595-129.png"></p><ul><li>输出/etc/passwd文件中前三行记录的用户名和用户uid。</li></ul><figure class="highlight swift"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs swift">head <span class="hljs-operator">-</span><span class="hljs-number">3</span> <span class="hljs-regexp">/etc/</span>passwd <span class="hljs-operator">|</span> awk '<span class="hljs-type">BEGIN</span>{<span class="hljs-type">FS</span><span class="hljs-operator">=</span><span class="hljs-string">":"</span>;print <span class="hljs-string">"name<span class="hljs-subst">\t</span>uid"</span>}{print <span class="hljs-variable">$1</span>,<span class="hljs-string">"<span class="hljs-subst">\t</span>"</span><span class="hljs-variable">$3</span>}<span class="hljs-type">END</span>{print <span class="hljs-string">"sum lines "</span><span class="hljs-type">NR</span>}'<br></code></pre></td></tr></table></figure><p>命令输出结果:</p><p><img src="https://img.alicdn.com/tfs/TB1hAXJHUY1gK0jSZFCXXcwqXXa-1020-151.png" alt="https://img.alicdn.com/tfs/TB1hAXJHUY1gK0jSZFCXXcwqXXa-1020-151.png"></p><ul><li>查看tcp连接数。</li></ul><figure class="highlight cos"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs cos">netstat -na | awk '/<span class="hljs-symbol">^tcp</span>/ {++<span class="hljs-keyword">S</span>[<span class="hljs-built_in">$NF</span>]} END {<span class="hljs-keyword">for</span>(a in <span class="hljs-keyword">S</span>) <span class="hljs-keyword">print</span> a, <span class="hljs-keyword">S</span>[a]}'<br></code></pre></td></tr></table></figure><p>命令输出结果:</p><p><img src="https://img.alicdn.com/tfs/TB10ghFHUH1gK0jSZSyXXXtlpXa-813-87.png" alt="https://img.alicdn.com/tfs/TB10ghFHUH1gK0jSZSyXXXtlpXa-813-87.png"></p><ul><li>关闭指定服务的所有的进程。</li></ul><h2 id="cut"><a href="#cut" class="headerlink" title="cut"></a>cut</h2><p>命令描述:cut命令主要用来切割字符串,可以对输入的数据进行切割然后输出。</p><p>命令格式:cut [参数] [文件]。</p><p>参数说明:</p><table><thead><tr><th>参数</th><th>说明</th></tr></thead><tbody><tr><td>-b</td><td>以字节为单位进行分割</td></tr><tr><td>-c</td><td>以字符为单位进行分割</td></tr><tr><td>-d</td><td>自定义分隔符,默认为制表符</td></tr></tbody></table><p>命令使用示例:</p><ul><li>按字节进行切割。</li></ul><p><img src="https://img.alicdn.com/tfs/TB1ulVKHQT2gK0jSZFkXXcIQFXa-514-109.png" alt="https://img.alicdn.com/tfs/TB1ulVKHQT2gK0jSZFkXXcIQFXa-514-109.png"></p><ul><li>按字符进行切割。</li></ul><p><img src="https://img.alicdn.com/tfs/TB1HqRHHKH2gK0jSZFEXXcqMpXa-494-150.png" alt="https://img.alicdn.com/tfs/TB1HqRHHKH2gK0jSZFEXXcqMpXa-494-150.png"></p><ul><li>按指定字符进行切割。</li></ul><p><img src="https://img.alicdn.com/tfs/TB17VNGHUT1gK0jSZFrXXcNCXXa-516-107.png" alt="https://img.alicdn.com/tfs/TB17VNGHUT1gK0jSZFrXXcNCXXa-516-107.png"></p><h2 id="tr"><a href="#tr" class="headerlink" title="tr"></a>tr</h2><p>命令描述:tr命令用于对来自标准输入的字符进行替换、压缩和删除。</p><p>命令格式:tr [参数] [文本]。</p><p>参数说明:</p><table><thead><tr><th>参数</th><th>说明</th></tr></thead><tbody><tr><td>-c</td><td>反选指定字符</td></tr><tr><td>-d</td><td>删除指定字符</td></tr><tr><td>-s</td><td>将重复的字符缩减成一个字符</td></tr><tr><td>-t [第一字符集] [第二字符集]</td><td>删除第一字符集较第二字符集多出的字符,使两个字符集长度相等</td></tr></tbody></table><p>命令使用示例:</p><ul><li>将输入字符由大写转换为小写。</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">echo</span> <span class="hljs-string">"HELLO WORLD"</span> | <span class="hljs-built_in">tr</span> <span class="hljs-string">'A-Z'</span> <span class="hljs-string">'a-z'</span><br></code></pre></td></tr></table></figure><p>命令输出结果:</p><p><img src="https://img.alicdn.com/tfs/TB1YTdHHQY2gK0jSZFgXXc5OFXa-506-65.png" alt="https://img.alicdn.com/tfs/TB1YTdHHQY2gK0jSZFgXXc5OFXa-506-65.png"></p><ul><li>删除字符。</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">echo</span> <span class="hljs-string">"hello 123 world 456"</span> | <span class="hljs-built_in">tr</span> -d <span class="hljs-string">'0-9'</span><br></code></pre></td></tr></table></figure><p>命令输出结果:</p><p><img src="https://img.alicdn.com/tfs/TB1XlBLHHj1gK0jSZFuXXcrHpXa-513-66.png" alt="https://img.alicdn.com/tfs/TB1XlBLHHj1gK0jSZFuXXcrHpXa-513-66.png"></p><ul><li>压缩字符。</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">echo</span> <span class="hljs-string">"thissss is a text linnnnnnne."</span> | <span class="hljs-built_in">tr</span> -s <span class="hljs-string">' sn'</span><br></code></pre></td></tr></table></figure><p>命令输出结果:</p><p><img src="https://img.alicdn.com/tfs/TB1nthJHHY1gK0jSZTEXXXDQVXa-605-68.png" alt="https://img.alicdn.com/tfs/TB1nthJHHY1gK0jSZTEXXXDQVXa-605-68.png"></p><ul><li>产生随机密码。</li></ul><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-built_in">cat</span> /dev/urandom | <span class="hljs-built_in">tr</span> -dc a-zA-Z0-9 | <span class="hljs-built_in">head</span> -c 13<br></code></pre></td></tr></table></figure><p>命令输出结果:</p><p><img src="https://img.alicdn.com/tfs/TB1kGFGHQP2gK0jSZPxXXacQpXa-573-69.png" alt="https://img.alicdn.com/tfs/TB1kGFGHQP2gK0jSZPxXXacQpXa-573-69.png"></p>]]></content>
<categories>
<category>Linux</category>
</categories>
<tags>
<tag>Linux</tag>
<tag>技术向</tag>
</tags>
</entry>
<entry>
<title>一些编程初学小技巧</title>
<link href="/2023/12/01/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E4%B8%80%E4%BA%9B%E7%BC%96%E7%A8%8B%E5%88%9D%E5%AD%A6%E5%B0%8F%E6%8A%80%E5%B7%A7/"/>
<url>/2023/12/01/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E4%B8%80%E4%BA%9B%E7%BC%96%E7%A8%8B%E5%88%9D%E5%AD%A6%E5%B0%8F%E6%8A%80%E5%B7%A7/</url>
<content type="html"><![CDATA[<h1 id="Some-insights"><a href="#Some-insights" class="headerlink" title="Some insights"></a>Some insights</h1><h2 id="碎碎念"><a href="#碎碎念" class="headerlink" title="碎碎念"></a>碎碎念</h2><p>关于编程,以后难免会遇到很多问题,这要求我们善用搜索引擎,在bing、Google等平台上搜索(尤其比较深入的问题,国内网站查不到的话,优先谷歌,用英文检索)。</p><p>后期运行相对大点的程序也会出现报错的情况,许多报错代码都可以直接看懂,比如</p><p>哪个地方没加分号,编译器就会提示 <em>expected 分号 before 什么什么</em> </p><p><img src="/./Untitled.png" alt="对应的就是printf()后没加分号的情况"></p><p>对应的就是printf()后没加分号的情况</p><hr><p>当然更多情况往往是我们看不太懂报错信息,最直接了当的方法就是ctrl+c然后把报错信息丢进搜索引擎,多数情况下都能找到相应解答。</p><p>对于初学者来说,dev-c++、codeblocks等普通IDE即可满足需求,这些IDE免费且为不少教材所接受,但从实际使用的角度讲,这些IDE毫无疑问是有点简陋在里面的,这边推荐几款<em><strong>好用的IDE</strong></em>:➡➡➡➡➡➡➡</p><p><a href="https://www.notion.so/Visual-Studio-Code-594827391c53488a98aa13caafdcf142?pvs=21">Visual Studio Code</a></p><p><a href="https://www.notion.so/CLion-d4ab46a2c0ad44e8a90f17a7ee48e7fd?pvs=21">CLion</a></p><hr><h2 id="书籍分享"><a href="#书籍分享" class="headerlink" title="书籍分享"></a>书籍分享</h2><p>这是一本内容丰富,广泛全面的C语言教程,可作为自学参考书籍或课本之外的拓展。</p><p><a href="./C_Primer_Plus.pdf">C Primer Plus(第6版)中文版 ((美)史蒂芬·普拉达.pdf 【右键Download即可下载】</a></p><hr><h2 id="网站分享"><a href="#网站分享" class="headerlink" title="网站分享"></a>网站分享</h2><h3 id="问答类"><a href="#问答类" class="headerlink" title="问答类"></a>问答类</h3><p><a href="https://github.com/">github.com</a> 全球最大的代码托管平台(可能需要特定的网络环境)</p><p><a href="https://stackoverflow.com/">Stack Overflow - Where Developers Learn, Share, & Build Careers</a> 知名IT问答平台</p><p> <a href="https://www.csdn.net/">CSDN - 专业开发者社区</a> 国内最大的程序员交流平台,良莠不齐,查找问题时似乎还是直接搜索引擎比较好。</p><p><a href="https://www.zhihu.com/question/20824615">(这个问题有点意思的说)如何优雅地使用 Stack Overflow?</a> </p><h3 id="刷题类"><a href="#刷题类" class="headerlink" title="刷题类"></a>刷题类</h3><p><a href="https://leetcode.cn/">力扣(LeetCode)官网</a> 可以刷刷这上面的每日一题,对于平时的上机作业以及期末程序设计题有所帮助。</p><h3 id="分享代码"><a href="#分享代码" class="headerlink" title="分享代码"></a>分享代码</h3><p><a href="https://pastebin.mozilla.org/">Mozilla Community Pastebin</a> 分享代码的一个网站,可以把自己的代码贴在上面,把生成的链接发给要分享的人(相比微信直接粘贴和拍照片在格式上美观的多)缺点是中文分享后显示为乱码。</p><p><a href="https://carbon.now.sh/?bg=rgba(171,+184,+195,+1)&t=seti&wt=none&l=auto&width=680&ds=true&dsyoff=20px&dsblur=68px&wc=true&wa=true&pv=56px&ph=56px&ln=false&fl=1&fm=Hack&fs=14px&lh=133%25&si=false&es=2x&wm=false">Carbon | Create and share beautiful images of your source code</a> 可以把代码分享成美观的图片,比如杨某元旦整的某活(</p><p>以及现在我正在使用的Notion,作为一款功能强大,可分享的笔记软件,分享代码自然不在话下。上学期我不时会用它给同学分享代码,效果不错。凭教育邮箱可申请升级版账号,网页端&&PC端&&手机端&&ipad端实时云同步,美哉美哉。</p><p><a href="https://www.notion.so/14-56978b8cf9ac45c4a2027ae6aa153b1a?pvs=21">第14次上机</a></p><p>一个分享代码的例子⬆️⬆️⬆️⬆️⬆️⬆️</p><hr><h3 id="进阶(仅供兴趣拓展,对于普通的C语言课程来说意义不大)"><a href="#进阶(仅供兴趣拓展,对于普通的C语言课程来说意义不大)" class="headerlink" title="进阶(仅供兴趣拓展,对于普通的C语言课程来说意义不大)"></a>进阶(仅供兴趣拓展,对于普通的C语言课程来说意义不大)</h3><ul><li>GIt</li></ul><p><a href="https://git-scm.com/downloads">Git - Downloads (git-scm.com)</a> 文件分布管理系统,学习成本蛮高,在没有开发较大程序的使用需求时似乎也没必要学🤔。</p><p><a href="https://learngitbranching.js.org/?locale=zh_CN">Learn Git Branching</a> 一个直观的,帮助git学习理解的网站。</p><p><a href="./progit.pdf">git官方学习文档</a></p><p>git官方学习文档</p><ul><li>入坑计算机专业自学指南</li></ul><p><a href="https://csdiy.wiki/">CS自学指南 (csdiy.wiki)</a></p><p><a href="https://cs61a.org/">https://cs61a.org/</a></p><hr><h3 id="辅助"><a href="#辅助" class="headerlink" title="辅助"></a>辅助</h3><p><a href="https://microsoftedge.microsoft.com/addons/detail/%E6%B2%99%E6%8B%89%E6%9F%A5%E8%AF%8D%E8%81%9A%E5%90%88%E8%AF%8D%E5%85%B8%E5%88%92%E8%AF%8D%E7%BF%BB%E8%AF%91/idghocbbahafpfhjnfhpbfbmpegphmmp">Microsoft Edge Addons</a></p><p>浏览器内划词翻译插件,查询英文文献时maybe helpful.</p><p><a href="https://www.runoob.com/">菜鸟教程 - 学的不仅是技术,更是梦想!</a></p><p>讲的比较浅,忘了某个语法的时候可以快速参考一下。</p><p><a href="https://wormhole.app/">Wormhole - Simple, private file sharing</a></p><p>临时分享一些稍大的文件,不过有个人隐私、或者机密性的文件还是谨慎啦。</p><p><a href="https://c.runoob.com/compile/11/">C 在线工具 | 菜鸟工具</a></p><p>C语言在线编译,外出没带电脑但临时有使用需求时可以一用。</p><h2 id="Hope-it-helpful!"><a href="#Hope-it-helpful!" class="headerlink" title="Hope it helpful!"></a>Hope it helpful!</h2>]]></content>
<categories>
<category>学习笔记</category>
</categories>
<tags>
<tag>笔记</tag>
<tag>C语言</tag>
<tag>编程</tag>
<tag>学习</tag>
</tags>
</entry>
<entry>
<title>白黑球</title>
<link href="/2023/12/01/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E7%99%BD%E9%BB%91%E7%90%83/"/>
<url>/2023/12/01/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/%E7%99%BD%E9%BB%91%E7%90%83/</url>
<content type="html"><![CDATA[<h1 id="白黑球"><a href="#白黑球" class="headerlink" title="白黑球"></a>白黑球</h1><p><img src="/img/photo_in_blogs/white_black_ball/1.png" alt="1.png"></p><p><em>这个题确实有点唬人,其实是有点取巧的</em></p><hr><p><strong>我们不妨分析一下:</strong></p><h3 id="w-b-1-即一共只有一个x色球,那概率当然是x色-100"><a href="#w-b-1-即一共只有一个x色球,那概率当然是x色-100" class="headerlink" title="<1> w+b==1 即一共只有一个x色球,那概率当然是x色 100%"></a><1> w+b==1 即一共只有一个x色球,那概率当然是x色 100%</h3><h3 id="w-b≥2"><a href="#w-b≥2" class="headerlink" title="<2> w+b≥2"></a><2> <strong>w+b≥2</strong></h3><ul><li>每次取2个球又放入1个,取一次后球的总数-1</li><li>若取1黑1白,则放入1白,相当于取1黑——黑的奇偶性改变,白的奇偶性不变</li><li>若取2黑,则放1黑——黑的奇偶性改变,白的奇偶性不变</li><li>若取2白,则放1黑——黑的奇偶性改变,白的奇偶性不变</li></ul><aside>💡 所以说,不管怎么取,都满足:黑的奇偶性改变,白的奇偶性不变</aside><hr><p>一共w个白球 b个黑球,总数目为w+b</p><p>取w+b-1次,即取出w+b-1个球,此时还剩一个球</p><ul><li>如果w<strong>一开始就是奇数</strong>,不管取出多少次,依旧是奇数</li></ul><p>也就是说,取w+b-1次,w仍然是奇数,而盒内此时只有一个球,<strong>必然是白球</strong></p><ul><li>如果w<strong>一开始是个偶数</strong>,不管取出多少次,依旧是偶数</li></ul><p>取w+b-1次后盒内只有一个球,白球是偶数,<strong>只能是黑球</strong></p><h2 id="所以,最后取出的球是白是黑只取决于一开始w是奇是偶,w是奇数则最后是白球,w是偶数则最后是黑球。"><a href="#所以,最后取出的球是白是黑只取决于一开始w是奇是偶,w是奇数则最后是白球,w是偶数则最后是黑球。" class="headerlink" title="所以,最后取出的球是白是黑只取决于一开始w是奇是偶,w是奇数则最后是白球,w是偶数则最后是黑球。"></a>所以,最后取出的球是白是黑只取决于一开始w是奇是偶,w是奇数则最后是白球,w是偶数则最后是黑球。</h2><p><img src="/img/photo_in_blogs/white_black_ball/2.png" alt="2.png"></p><p>至于如何输入T组数那就很简单啦。</p>]]></content>
<categories>
<category>分享</category>
</categories>
<tags>
<tag>C语言</tag>
<tag>编程</tag>
<tag>算法</tag>
</tags>
</entry>
<entry>
<title>命运</title>
<link href="/2023/12/01/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E5%91%BD%E8%BF%90/"/>
<url>/2023/12/01/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E5%91%BD%E8%BF%90/</url>
<content type="html"><![CDATA[<h1 id="命运"><a href="#命运" class="headerlink" title="命运"></a>命运</h1><blockquote><p>树意识不到它的根,树枝和树叶欢快地迎向天空,但树的生长、伸展其实来自于它的根。泥土中的力量引领我们向上。</p></blockquote><blockquote><p>重要的是,在面向巨大的未知的恐怖时,这里有条明确的路。有条明确的路,多难走都会让人很心安。</p></blockquote><blockquote><p>“相信人有灵魂很重要,你的一生心里才有着落”,以及,“知道怎么死才知道怎么活”。</p></blockquote><blockquote><p>潮一涨一跌,就是全世界奔波的水们,终于可以在这里安睡了。</p></blockquote><blockquote><p>人跟着水流,流到它的大海,然后就留守在告别它的地方。</p></blockquote><blockquote><p>人一辈子,会认识很多朋友。一出生就可以认识饥饿、认识占有,然后八九岁你会开始认识忧伤、认识烦恼……十几岁你会开始认识欲望、认识爱情,然后有的人开始认识责任、认识眷念、认识别离、认识痛苦……你要记得,它们都是很值得认识、很值得尊重的朋友。</p></blockquote><blockquote><p>我也是那一年才知道,为什么咱们这庙多:因为人生需要解决的问题真多,一个神明,不够。</p></blockquote><blockquote><p>人从来只能看到自己心里想的。</p></blockquote><blockquote><p>但人真不能只是靠吃东西活着的,一个人生命中的鸡毛蒜皮和酸甜苦辣,就是别人有滋有味的精神养料。</p></blockquote><blockquote><p>所以,以后你看到谁被按在哪个角色里,无论你喜不喜欢那个角色,无论那个角色多讨人厌多脏,你还是要看到按在他身上的那个命运的手指头,说不定命运的手指头一松,他就马上脱离那个角色了。</p></blockquote><blockquote><p>大家的生活各有一片望不到头的汪洋,谁是发自内心管他人的风波的?</p></blockquote><blockquote><p>这个问题很重要,想过不同人生的人,生活是过不到一起的。你看咱们这儿,妻子叫“某”,找某的过程,就是找自己的过程。找不到自己前,千万不要找妻子,你找到的某不是你自己,你们早晚会分离的。</p></blockquote><blockquote><p>生活不就这样吗?我们还没见过未来的日子呢,但也一见面就这样过下去了啊。</p></blockquote><blockquote><p>再烂的活法,也算活法。<br>再烂的活法,日子也是会过去的。那时候我看不见,后来一回首,那时间一刀刀真真切切刻在我们身上。</p></blockquote><blockquote><p>你们必须就此没有过去,只有将来。</p></blockquote><blockquote><p>这世间一个个人,前仆后继地来,前仆后继地走,被后人推着,也搡着前人,一个个人,一层层浪。</p></blockquote><blockquote><p>我的人生,自然是他们的故事;他们的人生,也就是我的故事。就如同我的故事,终究是你的故事。</p></blockquote><blockquote><p>灵感是浮游在海上的土</p></blockquote><blockquote><p>这世界上很多坏东西都是在发现你软弱的时候才追上来的。</p></blockquote><blockquote><p>虽然很多人不甘愿活成一样的故事,但她从小就觉得,人生有确定的情节其实挺好的,不用另外找活法。相同的活法里,还是有不同的滋味的,她觉得这样就挺好。</p></blockquote><blockquote><p>她才知道,很多人的内心不怕苦难,怕的是不安定。</p></blockquote><blockquote><p>是命不讲道理,我干吗要信?</p></blockquote><blockquote><p>听听别人一辈子的故事,储存着,可以帮咱们自己过好这一辈子和下一辈子。</p></blockquote><blockquote><p>只要我们还活着,命运就得继续,命运最终是赢不了我们的。它会让你难受,让你绝望,它会调皮捣蛋,甚至冷酷无情,但你只要知道,只要你不停,它就得继续,它就奈何不了你。所以你难受的时候,只要看着,你就看着,它还能折腾出什么东西,久了,你就知道,它终究像个孩子,或者,就是个孩子,是我们自己的孩子。我们的命运终究会由我们自己生下。我们终究是,自己命运的母亲。</p></blockquote><blockquote><p>我不知道怎么面对老人的哭,我总觉得一旦老人开口哭,就是他们身上堆积的那些人生同时开口在哭。</p></blockquote><blockquote><p>想结果的花,都早早低头</p></blockquote><blockquote><p>我知道了,人心里真的有一片海,一直在翻滚着,而自己的魂灵如果没有一个重重的东西去压住——类似于压舱石的东西,只要某一刻某一个小小的情绪的浪过来,魂灵就会被这么打翻,沉入那海底去了。</p></blockquote><blockquote><p>不过,我后来想,是不是寻找药的过程,也是如同神婆寻找神明的过程啊?是不是寻药的过程,也本就是那治疗的过程啊?这么想之后,也就没情绪了。</p></blockquote><blockquote><p>人好玩的一点是,只要有人记住你曾经是什么样的,你在她面前就会又活成什么样。</p></blockquote><blockquote><p>我知道的,很多人去远方,本来就是为了躲避自己内心那些无法解决的问题。其实这样的人真傻,去了远的地方,那些问题就不在了吗?</p></blockquote><blockquote><p>他们不是活不下去,是咱们这世间某个巨大的创伤刚好要他们承受了。他们是替咱们承受的,冲这点,他们就是神。</p></blockquote><blockquote><p>那神婆没有骗我,只要看到一个人的过去再远点再多点,自然就看得到那人更多的将来了。</p></blockquote><blockquote><p>我妹果然年纪小,她不知道这世界上一件件事情,也是一条条生命。一件事情落了地,它自己就会挣扎着长出自己的模样。所以很多时候,我们只需要把这件事生下来,然后看它到底能长成什么样子。</p></blockquote><blockquote><p>有的人把一块地当作一个世界,有的人把一个世界当作一块地,哪有什么对错。</p></blockquote><blockquote><p>我不知道你活到这个年纪知道了没有,这世界最容易的活法,就是为别人而活。而如果那人恰好也是为你活的,那日子过起来就和地瓜一样甜了。</p></blockquote><blockquote><p>有的东西自己一直吃着苦,然后就想着得让自己变得甜,结果,它不仅甜了自己,最终还甜了许多人。</p></blockquote><blockquote><p>我知道的,命运不会只是条潺潺流淌的溪流,它会在经过某个山谷时就突然坠落成瀑布,还可能在哪个拐弯后就汇入大海消失不见了。</p></blockquote><blockquote><p>我知道自己的心里已经像个粪坑,腐朽的东西在不断发酵,沼气一般刺鼻恶心。我赶紧捂住嘴,那难受的哭声,还是从手指缝里流了出来。</p></blockquote><blockquote><p>要么入土为安,要么向天开枪</p></blockquote><blockquote><p>其实那几年不是没发生事情的,但它们已经伤害不了我了——那个时候我已经知道,每个即将到来的日子最终都会是我的一部分,它们到来了,然后就贴在我身上,成为我了。</p></blockquote><blockquote><p>这世间一直在变化着,哪能用过去的经历去教谁面对未来?对于未来,老的少的都一无所知。</p></blockquote><blockquote><p>阿太说:你看,天上一颗颗的星,就是一个个不愿再回人间的灵魂向天开的枪。</p></blockquote><blockquote><p>这人间从来没有生离,没有死别。这人间不过是,天上的人来了,天上的人回天上去了。</p></blockquote><blockquote><p>如果你整天伺候你这个皮囊,不会有出息的,只有会用肉体的人才能成材。</p></blockquote><blockquote><p>我们的生命本来多轻盈,都是被这肉体和各种欲望的污浊给拖住。阿太,我记住了。“肉体是拿来用的,不是拿来伺候的。”请一定来看望我。</p></blockquote>]]></content>
<categories>
<category>读书笔记</category>
</categories>
<tags>
<tag>文学</tag>
<tag>小说</tag>
</tags>
</entry>
<entry>
<title>在细雨中呼喊</title>
<link href="/2023/12/01/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E5%9C%A8%E7%BB%86%E9%9B%A8%E4%B8%AD%E5%91%BC%E5%94%A4/"/>
<url>/2023/12/01/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E5%9C%A8%E7%BB%86%E9%9B%A8%E4%B8%AD%E5%91%BC%E5%94%A4/</url>
<content type="html"><![CDATA[<h1 id="在细雨中呼喊"><a href="#在细雨中呼喊" class="headerlink" title="在细雨中呼喊"></a>在细雨中呼喊</h1><blockquote><p>因为当人们无法选择自己的未来时,就会珍惜自己选择过去的权利。回忆的动人之处就在于可以重新选择,可以将那些毫无关联的往事重新组合起来,从而获得了全新的过去,而且还可以不断地更换自己的组合,以求获得不一样的经历。</p></blockquote><blockquote><p>于是我找到了生与死之间的不同,活着的人是无法看清太阳的,只有临死之人的眼睛才能穿越光芒看清太阳。</p></blockquote><blockquote><p>“音乐是从语言消失的地方开始的。”</p></blockquote><blockquote><p>我不再装模作样地拥有很多朋友,而是回到了孤单之中,以真正的我开始了独自的生活。有时我也会因为寂寞而难以忍受空虚的折磨,但我宁愿以这样的方式来维护自己的自尊,也不愿以耻辱为代价去换取那种表面的朋友。</p></blockquote><blockquote><p>总之当我们凶狠地对待这个世界时,这个世界突然变得温文尔雅了。</p></blockquote><blockquote><p>生命在面对消亡时,展现了对往昔的无限依恋。</p></blockquote><blockquote><p>她只是沉浸在我当时年龄还无法理解的自我与孤独之中,她站在生与死的界线上,同时被两者抛弃。</p></blockquote><blockquote><p>任何孩子都不会把自己的以后想得糟糕起来,现实还没有这么训练他们。</p></blockquote><blockquote><p>“你快去让他闭嘴。”<br>我怎么能让一个遭受不幸的人闭上嘴巴呢?</p></blockquote><blockquote><p>他开始想象他的母亲,在无依无靠的时候,这个只有九岁的孩子,想象没有面对未来,而是过早地通往了过去。</p></blockquote><blockquote><p>事实上我过去和现在,都不是那种愿为信念去死的人,我是那样崇拜生命在我体内流淌的声音。除了生命本身,我再也找不出活下去的另外理由了。</p></blockquote>]]></content>
<categories>
<category>读书笔记</category>
</categories>
<tags>
<tag>小说</tag>
<tag>余华</tag>
</tags>
</entry>
<entry>
<title>悉达多</title>
<link href="/2023/12/01/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E6%82%89%E8%BE%BE%E5%A4%9A/"/>
<url>/2023/12/01/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E6%82%89%E8%BE%BE%E5%A4%9A/</url>
<content type="html"><![CDATA[<h1 id="悉达多"><a href="#悉达多" class="headerlink" title="悉达多"></a>悉达多</h1><blockquote><p>内在“我”之源泉,必须拥有自己的阿特曼!其他一切都只是寻觅、走弯路和误入歧途。</p></blockquote><blockquote><p>意义和本质绝非隐藏在事物背后,它们就在事物当中,在一切事物当中。</p></blockquote><blockquote><p>“书写虽好,思考更佳;聪敏虽好,忍耐更佳。”</p></blockquote><blockquote><p>他永不停歇地向河水求教,首要的是学会抛弃激情和期盼,不论断、无成见地以寂静的心、侍奉和敞开的灵去倾听。</p></blockquote><blockquote><p>没有过去,没有未来,一切都是本质和当下。</p></blockquote><blockquote><p>生命不灭,刹那即永恒。</p></blockquote><blockquote><p>爱并非毫无价值。它源自天性,是一种必需。爱的欲望该得到哺育,痛苦该去品尝,蠢行该去实践。</p></blockquote><blockquote><p>他的爱像一道伤口。他感到伤口的存在不该只为在心中溃烂,它应该风化、发光。</p></blockquote><blockquote><p>世界并非不圆满。世界并非徐缓地行进在通向圆满之路:不,世间的每一瞬间皆为圆满。一切罪孽都承载宽赦,所有孩童身上都栖息老人,所有新生儿身上都栖息亡者,所有将死之人都孕育永恒的生命。没人能看清他者的道路。强盗和赌徒的路或许通向佛陀,婆罗门的路或许通往强盗。在最深的禅定中存在这种可能:时间被终结,人视过往、当下和未来的生活为同时。这时,一切皆为善、圆满和梵天。因此在我看来,世间存在的一切皆好。在我看来,死如同生,罪孽犹如神圣,聪明等同愚蠢。一切皆有定数,一切只需我的赞赏、顺从和爱的默许。这样于我有益,只会促进我,从不伤害我。我听便灵魂与肉体的安排,去经历罪孽,追逐肉欲和财富,去贪慕虚荣,以陷入最羞耻的绝望,以学会放弃挣扎,学会热爱世界。我不再将这个世界与我所期待的,塑造的圆满世界比照,而是接受这个世界,爱它,属于它。——哦,乔文达,这就是我的一些思考和感悟。”</p></blockquote><blockquote><p>这就是我的认知:智慧无法言传。智者试图传授智慧,总像痴人说梦。”</p></blockquote><blockquote><p>真的反面同样真实!也就是说,只有片面的真才得以以言辞彰显。可以思想和言说的一切都是片面的,是局部,都缺乏整体、完满、统一。</p></blockquote>]]></content>
<categories>
<category>读书笔记</category>
</categories>
<tags>
<tag>文学</tag>
<tag>哲思</tag>
<tag>黑塞</tag>
</tags>
</entry>
<entry>
<title>我与地坛</title>
<link href="/2023/12/01/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E6%88%91%E4%B8%8E%E5%9C%B0%E5%9D%9B/"/>
<url>/2023/12/01/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E6%88%91%E4%B8%8E%E5%9C%B0%E5%9D%9B/</url>
<content type="html"><![CDATA[<h1 id="我与地坛"><a href="#我与地坛" class="headerlink" title="我与地坛"></a>我与地坛</h1><blockquote><p>一个人,出生了,这就不再是一个可以辩论的问题,而只是上帝交给他的一个事实;上帝在交给我们这件事实的时候,已经顺便保证了它的结果,所以死是一件不必急于求成的事,死是一个必然会降临的节日。</p></blockquote><blockquote><p>但是太阳,它每时每刻都是夕阳也都是旭日。当它熄灭着走下山去收尽苍凉残照之际,正是它在另一面燃烧着爬上山巅布散烈烈朝辉之时。那一天,我也将沉静着走下山去,扶着我的拐杖。有一天,在某一处山洼里,势必会跑上来一个欢蹦的孩子,抱着他的玩具。<br>当然,那不是我。<br>但是,那不是我吗?</p></blockquote><blockquote><p>在科学的迷茫之处,在命运的混沌之点,人惟有乞灵于自己的精神。不管我们信仰什么,都是我们自己的精神的描述和引导。</p></blockquote><blockquote><p>又是秋天,妹妹推我去北海看了菊花。黄色的花淡雅,白色的花高洁,紫红色的花热烈而深沉,泼泼洒洒,秋风中正开得烂漫。我懂得母亲没有说完的话。妹妹也懂。我俩在一块儿,要好好儿活……</p></blockquote><blockquote><p>一些当时看去不太要紧的事却能长久扎根在记忆里。它们一向都在那儿安睡,偶尔醒一下,睁眼看看,见你忙着(升迁或者遁世)就又睡去,很多年里它们轻得仿佛不在。千百次机缘错过,终于一天又看见它们,看见时光把很多所谓人生大事消磨殆尽,而它们坚定不移固守在那儿,沉沉地有了无比的重量。比如一张旧日的照片,拍时并不经意,随手放在哪儿,多年中甚至不记得有它,可忽然一天整理旧物时碰见了它,拂去尘埃,竟会感到那是你的由来也是你的投奔;而很多郑重其事的留影,却已忘记是在哪儿和为了什么。</p></blockquote><blockquote><p>山和水都是墙,天和地都是墙,时间和空间都是墙,命运是无穷的限制,上帝的秘密是不尽的墙。</p></blockquote><blockquote><p>探秘的欲望终于要探到意义的墙下。</p></blockquote><blockquote><p>民歌以真诚和素朴为美。真诚而素朴的忧愁,真诚而素朴的爱恋,真诚而素朴的希冀与憧憬,变成曲调,贴着山走,沿着水流,顺着天游信着天游;变成唱词,贴着心走沿着心流顺着心游信着心游。</p></blockquote><blockquote><p>一代人与一代人的历史是不同的,这是代沟的永恒保障。沟不是坏东西,有山有水就有沟,地球上如果都是那么平展展的,虽然希望那都是良田但事实那很可能全是沙漠。</p></blockquote><blockquote><p>任何以自己的观念干涉别人爱情的行为,都只是一股逆流。</p></blockquote><blockquote><p>也千万别把人和意义分割开来理解。不是人有欲望,而是人即欲望。这欲望就是能量,是能量就是运动,是运动就走去前面或者未来。</p></blockquote><blockquote><p>既然是梦想不妨就让它完美些罢。何必连梦想也那么拘谨那么谦虚呢?我便如醉如痴并且极端自私自利地梦想下去。</p></blockquote><blockquote><p>幸福感不是能一次给够的,一次幸福感能维持多久这不好计算,但日子肯定比它长,比它长的日子却永远要依靠着它。</p></blockquote><blockquote><p>大劫大难之后人不该失去锐气,不该失去热度,你镇定了但仍在燃烧,你平稳了却更加浩荡。</p></blockquote><blockquote><p>过程!对,生命的意义就在于你能创造这过程的美好与精彩,生命的价值就在于你能够镇静而又激动地欣赏这过程的美丽与悲壮。</p></blockquote><blockquote><p>人是一点一点死去的,先是这儿,再是那儿,一步一步终于完成。</p></blockquote><blockquote><p>钟声沉稳、悠扬、飘飘荡荡,连接起晚霞与初月,扩展到天的深处,或地的尽头……</p></blockquote><blockquote><p>人的故乡,并不止于一块特定的土地,而是一种辽阔无比的心情,不受空间和时间的限制;这心情一经唤起,就是你已经回到了故乡。</p></blockquote><blockquote><p>描摹实际并不是写作的根本期冀。</p></blockquote><blockquote><p>而老家在我的印象里一向虚虚幻幻,更多的是一种情绪,一种声音,甚或一种光线一种气息,与一个实际的地点相距太远。</p></blockquote><blockquote><p>眺望越是美好,越是看见自己的丑弱;越是无边,越看到限制。</p></blockquote><blockquote><p>丑弱的人和圆满的神之间,是信者永远的路。这样,我听见,那犹豫的音乐是提醒着一件事:此岸永远是残缺的,否则彼岸就要坍塌。这大约就是佛之慈悲的那一个“悲”字吧。慈呢,便是在这一条无尽无休的路上行走,所要有的持念。</p></blockquote><blockquote><p>记忆,所以是一个牢笼。印象是牢笼以外的天空。</p></blockquote><blockquote><p>眺望就是回想。重病之时整天是梦。梦见熟悉的人、熟悉的往事,也梦见陌生的人和完全陌生的景物。偶尔醒来,窗外是无边的暗夜,是恍惚的晴空,是心里的怀疑:<br>谁说我没有死过?<br>出生以前,太阳<br>已无数次起落<br>悠久的时光被悠久的虚无吞并<br>又以我生日的名义<br>卷土重来。</p></blockquote><blockquote><p>午后,如果阳光静寂<br>你是否能听出<br>往日已归去哪里?<br>在光的前端,或思之极处<br>在时间被忽略的存在之中<br>生死同一。</p></blockquote><blockquote><p>有为,与爱情,原是风马牛不相及的两个领域。但暂时,亦可在心中长久,而写作,却永远地不能与爱情无关。</p></blockquote><blockquote><p>这一段童年似乎永远都不会长大,因为不管何年何月,这世上总是有着无处可去的童年。</p></blockquote><blockquote><p>良心,其实什么都明白。不过,明白,未必就能阻止人性的罪恶。多年来,我一直躲避着那罪恶的一刻。但其实,那是永远都躲避不开的。</p></blockquote><blockquote><p>历史常就是这样被割断着、湮灭着。梅娘好像从不存在。一个人,生命中最美丽的时光竟似消散得无影无踪。一个人丰饶的心魂,竟可以沉默到无声无息。</p></blockquote><blockquote><p>他们又不懂了,春天要的就是这个,要的就是张扬。<br>大人们其实忘了,春天莫不如此,各位年轻时也是一样。</p></blockquote><blockquote><p>料必母亲是懂得,世上有一种东西,其价值远远超过它的价格。这儿的价值,并不止于“物化劳动”,还物化着春天整整一个季节的能量。</p></blockquote><blockquote><p>因而想想吧,灵魂一到人间便被囚入有限的躯体,那灵魂原本就是多少梦想的埋藏,那躯体原本就是多少欲望的储备!</p></blockquote><blockquote><p>设若枝桠折断,春天惟努力生长。设若花朵凋残,春天惟含苞再放。设若暴雪狂风,但只要春天来了,天地间总会飘荡起焦渴的呼喊。</p></blockquote><blockquote><p>那个伤残的春天,一个伤残的青年终于看见了伤残。<br>看见了伤残,却摆脱不了春天。春风强劲也是一座牢笼,一副枷锁,一处炼狱,一条命定的路途。</p></blockquote><blockquote><p>对爱者而言,爱情怎么会是悲剧?对春天而言,秋天是它的悲剧吗?</p></blockquote><blockquote><p>秋风,绝非肃杀之气,那是一群成长着的魂灵,成长着,由远而近一路壮大。</p></blockquote><blockquote><p>现在我看虚空中也有一条界线,靠想念去迈过它,只要一迈过它便有清纯之气扑面而来。我已不在地坛,地坛在我。</p></blockquote>]]></content>
<categories>
<category>读书笔记</category>
</categories>
<tags>
<tag>文学</tag>
<tag>哲思</tag>
<tag>史铁生</tag>
</tags>
</entry>
<entry>
<title>我的阿勒泰</title>
<link href="/2023/12/01/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E6%88%91%E7%9A%84%E9%98%BF%E5%8B%92%E6%B3%B0/"/>
<url>/2023/12/01/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E6%88%91%E7%9A%84%E9%98%BF%E5%8B%92%E6%B3%B0/</url>
<content type="html"><![CDATA[<h1 id="我的阿勒泰"><a href="#我的阿勒泰" class="headerlink" title="我的阿勒泰"></a>我的阿勒泰</h1><blockquote><p>她那暂时的欢乐,因这“暂时”而显得那样悲伤。</p></blockquote><blockquote><p>漫长的劳动使阿克哈拉的土地渐渐睁开了眼睛。它看到了我们,认清我们的模样,从此才真正接受了我们。</p></blockquote><blockquote><p>又为突然发现这世上可能真的再没什么做不到的事情而隐隐不安——好像我们正在凭借着摩托车,迫不及待地、极其方便地、迅速而彻底地永远离开了什么……但是又想到,到了今天,这已是我们无法避免、无法拒绝的现实了吧?</p></blockquote><blockquote><p>大地辽远,动荡不已。天空更为广阔——整个世界,天空占四分之三,大地占四分之一。</p></blockquote><blockquote><p>荒野将它从很久以前藏匿到如今,像是为世界小心地保存了一样逝去的东西……</p></blockquote><blockquote><p>滴水泉如同这片大地上的神明。它的水,一滴一滴从无比高远之处落下,一滴一滴敲打着存在于这里的一切生命痕迹的脉搏,一滴一滴无边无际地渗入苦寂的现实生活与美好纯真的传说。</p></blockquote><blockquote><p>每当抬头看到这太阳,都好像是有生以来第一次看到一样——心里微微一动,惊奇感转瞬即逝,但记起现实后的那种猛然而至的空洞感却难以愈合。</p></blockquote><blockquote><p>这幕强烈的情景非但没能撕破四周的寂静,反而更令这寂静瞬间深不见底。不远处的荒野在烟花的照耀下忽明忽暗。更远的地方,沙漠的轮廓在夜色中脉动了两三下。</p></blockquote><blockquote><p>但能想象得到,若是自己也能活到九十六岁,仍然清清静静、了无牵挂,其实,也是认认真真对生命负了一场责。最安静与最孤独的成长,也是能使人踏实,自信,强大,善良的。大不了,吐吐舌头而已……</p></blockquote><blockquote><p>疾病在身体深处安详地沉睡,呼吸均匀,而青春在一旁秉灯日夜守护。</p></blockquote><blockquote><p>我不是虚弱的人,不是短暂的人——哪怕此时立刻死去也不是短暂的人。</p></blockquote><blockquote><p>这些细节全都在说不出的快乐和遗憾中闪烁,无法让人更准确地去捕捉。在以后日子里的某些瞬间,总会异常清晰地记起,再进一步展开回想时,又全涣散了……只剩那晚的明亮,只剩那晚的四分之三节拍。</p></blockquote><blockquote><p>只有美才能与万物相通,丝丝缕缕相互吸吮吐纳。只有美才是最真实不过的自然。</p></blockquote><blockquote><p>但是我知道,它拨动过的琴弦,曾如何一声一声进入世界隐蔽的角落,进入另一个年轻人的心中……我真庆幸,有一些话,自己到底还是没有说出来。</p></blockquote><blockquote><p>我仍在自己的生活中生活,干必需的活,赚必需的钱。生活平静繁忙。但是我知道这平静和这繁忙之中深深忍抑着什么。</p></blockquote><blockquote><p>这样的身体,不是为着疲惫、为着衰老、为着躲藏的呀!</p></blockquote><blockquote><p>造成野生动物的濒临灭亡,其实并不是仅仅因为猎人的缘故吧?这人世间更多的欲望远比猎人的狩猎行为更为黑暗贪婪,且更为狂妄。</p></blockquote><blockquote><p>但慢慢地,这荒野又会让你觉得自己曾努力去明白的那些道理也许才是真正没道理的。</p></blockquote><blockquote><p>云在天空,在浩荡漫长的大风中强烈移动的时候,用“飘”这个词是多么的不准确啊!这种移动是富于莫大力量的移动,就像时间的移动一般深重广浩,无可抗拒……看看吧:整面天空,全都是到来,全都是消逝……</p></blockquote><blockquote><p>世界这么大……但有时又会想到一些大于世界的事情,便忍不住落泪。</p></blockquote><blockquote><p>也许一旦真正投入到无限的自由之中时,得到的反而不会是什么“无限的自由”,而是缩手缩脚和无所适从吧。</p></blockquote><blockquote><p>生活中开始有了飞翔与畅游的内容,也有了无数次的坠落。</p></blockquote><blockquote><p>最巨大的变化就是种种巨大的变化都开始无影无形,几乎无从感知。</p></blockquote><blockquote><p>他们完全坦曝在这个世界中,完全接受这个世界,就一定比我们更加畏惧世界吧?有关这个世界的秘密内容,他们一定比我们知道得更多。</p></blockquote><blockquote><p>我看到<em><strong>全世界都是一场透明的倾斜</strong></em>,全世界都在倾向风去的方向。我的头发也往那边飘扬,我的心在原地挣扎,也充满了想要过去的渴望。</p></blockquote>]]></content>
<categories>
<category>读书笔记</category>
</categories>
<tags>
<tag>文学</tag>
<tag>风土人情</tag>
<tag>李娟</tag>
</tags>
</entry>
<entry>
<title>流萤集</title>
<link href="/2023/12/01/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E6%B5%81%E8%90%A4%E9%9B%86/"/>
<url>/2023/12/01/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E6%B5%81%E8%90%A4%E9%9B%86/</url>
<content type="html"><![CDATA[<h1 id="流萤集"><a href="#流萤集" class="headerlink" title="流萤集"></a>流萤集</h1><blockquote><p>The flower which is single<br>need not envy the thorns<br>that are numerous.</p></blockquote><p>形单影只的花儿<br>用不着妒忌<br>纷纷无数的荆棘。</p><blockquote></blockquote><blockquote><p>Your careless gifts of a moment,<br>like the meteors of an autumn night,<br>catch fire in the depth of my being.</p></blockquote><p>你瞬息之间的无心赠予,<br>如同秋日夜晚的流星点点,<br>在我生命深处燃起了火焰。</p><blockquote></blockquote><blockquote><p>The burden of self is lightened<br>when I laugh at myself.</p></blockquote><blockquote><p>The wind tries to take the flame by storm<br>only to blow it out.</p></blockquote><p>风儿想赢得火焰的全部爱意,<br>到头来只是将它吹熄。</p><blockquote></blockquote><blockquote><p>In love I pay my endless debt to thee<br>for what thou art.</p></blockquote><p>因为你是你,<br>我用爱意偿还<br>欠你的无穷债款。</p><blockquote></blockquote><blockquote><p>One who was distant came near to me in the morning,<br>and still nearer when taken away by night.</p></blockquote><p>曾经远离我的那个人<br>晨间在我身边降临,<br>当黑夜将他带走,<br>他却与我更加亲近。</p><blockquote></blockquote><blockquote><p>Wishing to hearten a timid lamp<br>great night lights all her stars.</p><p>无垠黑夜想鼓励一盏畏怯的灯,<br>由是点亮了满天繁星。</p></blockquote><blockquote><p>My offerings are too timid to claim your remembrance,<br>and therefore you may remember them.</p></blockquote><p>我的奉献如此羞怯,<br>不敢要求你的念记,<br>或许为着这个缘由,<br>你才会将它记取。</p><blockquote></blockquote><blockquote><p>Let my love, like sunlight, surround you<br>and yet give you illumined freedom.</p></blockquote><p>让我的爱<br>像阳光一般将你围绕,<br>同时又给你<br>璀璨的自由。</p><blockquote></blockquote><blockquote><p>My fancies are fireflies, —<br>Specks of living light<br>twinkling in the dark.</p></blockquote><p>我的幻想是萤火——<br>流光点点<br>在黑暗中乍隐乍现。</p><blockquote></blockquote><blockquote><p>The same sun is newly born in new lands<br>in a ring of endless dawns.</p></blockquote><blockquote><p>The glow-worm while exploring the dust<br>never knows that stars are in the sky.</p></blockquote><p>萤火虫在尘土中摸索,<br>从不知天空才是星星的住所。</p><blockquote></blockquote><blockquote><p>I leave no trace of wings in the air,<br>but I am glad I have had my flight.</p></blockquote><p>我不曾在天空<br>留下羽翼的痕迹,<br>却为曾经的飞翔欢喜。</p><blockquote></blockquote><blockquote><p>Though the thorn in thy flower pricked me, O Beauty,<br>I am grateful.</p></blockquote><p>虽然你花上的棘刺<br>令我苦痛莫名,<br>美人啊,<br>我依然感激不尽。</p><blockquote></blockquote><blockquote><p>The dew-drop knows the sun<br>only within its own tiny orb.</p></blockquote><p>露珠对太阳的认识<br>囿于自身那个渺小的球体。</p><blockquote></blockquote><blockquote><p>The desert is imprisoned in the wall<br>of its unbounded barrenness.</p></blockquote><p>沙漠做着囚徒,<br>牢狱便是自身的无限荒芜。</p><blockquote></blockquote><blockquote><p>You are like a flowering tree,<br>amazed when I praise you for your gifts.</p></blockquote><p>你就像一株开花的树,<br>满心讶异,<br>当我赞美你的天资。</p><blockquote></blockquote><blockquote><p>The world speaks to me in pictures,<br>my soul answers in music.</p></blockquote><p>世界用图画对我说话,<br>我的灵魂用音乐作答。</p><blockquote></blockquote><blockquote><p>The sky tells its beads all night<br>on the countless stars<br>in memory of the sun.</p></blockquote><p>为了纪念太阳,<br>天空整夜点数<br>它用无数星辰串成的念珠。</p><blockquote></blockquote><blockquote><p>The hill in its longing for the far-away sky<br>wishes to be like the cloud<br>with its endless urge of seeking.</p></blockquote><p>倾慕遥远天空的山丘<br>想要变得和云彩一样<br>拥有追求的无尽渴望。</p><blockquote></blockquote><blockquote><p>The shade of my tree is for passers-by,<br>its fruit for the one for whom I wait.</p></blockquote><p>我的树为过客投下清阴,<br>果实则留给我等待的那个人。</p><blockquote></blockquote><blockquote><p>The flame met the earthen lamp in me,<br>and what a great marvel of light!</p></blockquote><p>火焰碰上我心里的陶灯,<br>那光明何等动人!</p><blockquote></blockquote><blockquote><p>Emancipation from the bondage of the soil<br>is no freedom for the tree.</p></blockquote><p>从土地的束缚中获得解救,<br>绝不意味着树木的自由。</p><blockquote></blockquote>]]></content>
<categories>
<category>读书笔记</category>
</categories>
<tags>
<tag>诗</tag>
<tag>泰戈尔</tag>
</tags>
</entry>
<entry>
<title>病隙碎笔</title>
<link href="/2023/12/01/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E7%97%85%E9%9A%99%E7%A2%8E%E7%AC%94/"/>
<url>/2023/12/01/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E7%97%85%E9%9A%99%E7%A2%8E%E7%AC%94/</url>
<content type="html"><![CDATA[<h1 id="病隙碎笔"><a href="#病隙碎笔" class="headerlink" title="病隙碎笔"></a>病隙碎笔</h1><blockquote><p>所谓命运,就是说,这一出“人间戏剧”需要各种各样的角色,你只能是其中之一,不可以随意调换。</p></blockquote><blockquote><p>异地他乡增长见识,名山大川陶冶性情,激流险阻锤炼意志,生病的经验是一步步懂得满足。</p></blockquote><blockquote><p>其实每时每刻我们都是幸运的,因为任何灾难的前面都可能再加一个“更”字。</p></blockquote><blockquote><p>不断的苦难才是不断地需要信心的原因,这是信心的原则,不可稍有更动。</p></blockquote><blockquote><p>上帝不许诺光荣与福乐,但上帝保佑你的希望。人不可以逃避苦难,亦不可以放弃希望——恰是在这样的意义上,上帝存在。命运并不受贿,但希望与你同在,这才是信仰的真意,是信者的路。</p></blockquote><blockquote><p>信心,既然不需要事先的许诺,自然也就不必有事后的恭维,它的恩惠唯在渡涉苦难的时候可以领受。</p></blockquote><blockquote><p>求神明保佑,可能是人人都会有的心情。“人定胜天”是一句言过其实的鼓励,“人是被抛到这个世界上来的”才是实情。生而为人,终难免苦弱无助,你便是多么英勇无敌,多么厚学博闻,多么风流倜傥,世界还是要以其巨大的神秘置你于无知无能的地位。</p></blockquote><blockquote><p>只有蒙冤的往事,却无抚痛的忏悔,大约就只能是怨恨不断地克隆。缺乏忏悔意识,只好就把惨痛的经验归罪给历史,以为潇洒,以为豁达。好像历史是一只垃圾箱,把些谁也不愿意再沾惹的罪孽封装隐蔽,大家就都可以清洁。</p></blockquote><blockquote><p>历史越往前走越会删除很多细节,使本质凸现:那是一次信仰的灾难。</p></blockquote><blockquote><p>科学需要证明,信仰并不需要。事实上,我们的前途一向都隐藏在神秘中,但我们从不放弃,不因为科学注定的局限而沮丧。那也就是说,科学并非我们唯一的依赖,甚至不是根本的依赖。</p></blockquote><blockquote><p>善恶的标准,可以永久地增补、修正,可以像对待幸福那样,做永久的追寻。怕只怕人的心里不设这样的标准,拆除这样的信守,没有这样的法庭也不打算去寻找它,同时快乐地宣扬这才是人性的复归。</p></blockquote><blockquote><p>在人性去接近完美却发现永无终途的路上,才有神圣的朝拜。</p></blockquote><blockquote><p>爱如果是你的心愿,爱已经使你受益,无论如何用不上大义凛然。</p></blockquote><blockquote><p>爱,原就是自卑弃暗投明的时刻。自卑,或者在自卑的洞穴里步步深陷,或者转身,在爱的路途上迎候解放。</p></blockquote><blockquote><p>爱的情感包括喜欢,包括爱护、尊敬和控制不住,除此之外还有最紧要的一项:敞开。互相敞开心魂,为爱所独具。这样的敞开,并不以性别为牵制,所谓推心置腹,所谓知己,所谓同心携手,是同性之间和异性之间都有的期待,是孤独的个人天定的倾向,是纷纭的人间贯穿始终的诱惑。</p></blockquote><blockquote><p>爱之永恒的能量,在于人之间永恒的隔膜。爱之永远的激越,由于每一个“我”都是孤独。人不仅是被抛到这个世界上来的,而且是一个个分开着被抛来的。</p></blockquote><blockquote><p>分割而冲突,因冲突而防备,因防备而疏离,疏离而至孤独,孤独于是渴望着相互敞开——这便是爱之不断的根源。</p></blockquote><blockquote><p>爱是软弱的时刻,是求助于他者的心情,不是求助于他者的施予,是求助于他者的参加。爱,即分割之下的残缺向他者呼吁完整,或者竟是,向地狱要求天堂。爱所以艰难,常常落入窘境。</p></blockquote><blockquote><p>人的处境是隔离,人的愿望是沟通,这两样都写在了上帝的剧本里。</p></blockquote><blockquote><p>先哲( @萨特)有言:“人是一堆无用的热情。”</p></blockquote><blockquote><p>荒诞如果难逃,哀叹荒诞岂不更是荒诞!</p></blockquote><blockquote><p>彻底的圆满只不过是彻底的无路可走。</p></blockquote><blockquote><p>荒诞感袭来是件好事,省得说“瞎问那么多有什么用”。其实应该祝愿潇洒从头至尾都不遭遇荒诞的盘查,可这事谁也做不了主,荒诞并非没有疏漏,但并不单单放过潇洒。而且你不能拒绝它:拒绝盘查,实际已经被盘查。</p></blockquote><blockquote><p>地狱和天堂都在人间,即残疾与爱情,即原罪与拯救。</p></blockquote><blockquote><p>一个未得奖牌的人,和一个无权参赛的人,有什么不一样吗?</p></blockquote><blockquote><p>你要爱就要像一个痴情的恋人那样去爱,像一个忘死的梦者那样去爱,视他人之疑目如盏盏鬼火,大胆去走你的夜路。</p></blockquote><blockquote><p>什么是纯洁?我们不因肉身而不洁。我们不因有情而不洁。我不相信无情者可以爱。我倒常因为看见一些虚伪的标牌、媚态的包装和放大的凛然,而看见淫荡。淫荡不是别的,是把上帝寄存于人的财富挪作他用。</p></blockquote><blockquote><p>不能用贬低个人的爱愿来确认人类之爱的崇高。</p></blockquote><blockquote><p>诗是对生活的匡正。</p></blockquote><blockquote><p>白昼的清晰是有限的,黑夜却漫长,尤其那心流所遭遇的黑暗更是辽阔无边。</p></blockquote><blockquote><p>但很多动人的心流或命运早已遗漏殆尽,已经散失得不可收拾,被记录的历史不过一具毫无生气的尸骸。</p></blockquote><blockquote><p>生命的意义不是被给予的,而是被提出的。(俄 · 弗兰克)</p></blockquote><blockquote><p>生命的意义本不在向外的寻取,而在向内的建立。</p></blockquote><blockquote><p>那么我是怎么来的?我是从一切中来啊,我是由一切所孕育、所催生的一缕浪动的消息,微薄但是独具。</p></blockquote><blockquote><p>“看不见而信的人是有福的。”</p></blockquote><blockquote><p>这就像爱与性的关系:爱中之性,多么奇诡也是诉说,而无爱之性再怎么像模像样儿也还是排泄。</p></blockquote><blockquote><p>心魂的路途远未走完,未必是工具已经不够使。</p></blockquote><blockquote><p>艺术,乃“于无声处”之“惊雷”,是实际之外的崭新发生。</p></blockquote><blockquote><p>生命的意义却似轮回,每个人都得从头寻找,唯在这寻找中才可能与前贤汇合,唯当走过林莽,走过激流,走过深渊,走过思悟一向的艰途,步上山巅之时你才能说继承。</p></blockquote><blockquote><p>软弱的自己看不起自己的软弱但还是软弱着,虚伪的自己看不起自己的虚伪却还是“有些话不能讲”——真真岂有此理!</p></blockquote><blockquote><p>我慢慢地看见,勇猛与可敬之外还有着更为复杂的人生处境。我看见一片蛮荒的旷野,神光甚至也少照耀,唯一颗诉告无处的心随生命的节拍钟表一样地颤抖,永无休止。</p></blockquote><blockquote><p>以福乐相许,信仰难免混于俗行。</p></blockquote><blockquote><p>只要神性昭然,神形不必求其统一。</p></blockquote><blockquote><p>灵魂,必当牵系着博大的爱愿。</p></blockquote><blockquote><p>但如果,你赋予生命的是爱的信奉,是更为广阔的牵系,并不拘于一己的关怀,那么,一具肉身的溃朽也能使之灰飞烟灭吗?</p></blockquote><blockquote><p>倘人间的困苦从未消失,人间的消息从未减损,人间的爱愿从未放弃,他们就必定还在。</p></blockquote><blockquote><p>实证必为有限之实,信仰乃无限之虚的呼唤。</p></blockquote><blockquote><p>“艺术的价值不在于美,而在于正当的行为。”(见《毛姆随想录》)</p></blockquote><blockquote><p>你来了,你掉进了一个有限的皮囊,你的周围是隔膜,是限制,是数不尽的墙壁和牢笼,灵魂不堪此重负,于是呼喊,于是求助于艺术,开辟出一处自由的时空以趋向那无限之在和终极意义,为什么这不是美的恒久品质,同时也是人类最正当的行为呢?</p></blockquote><blockquote><p>人们所以需要戏剧,是需要一处自由的时空,需要一回心魂的酣畅表达,是要以艺术的真去反抗现实的假,以这剧场中的可能去解救现实中的不可能,以这舞台或银幕上的实现去探问那布满四周的不现实。这就是艺术不该模仿生活,而生活应该模仿艺术的理由吧。</p></blockquote><blockquote><p>至于桥梁,也许正因为有从荒地通往荒地的桥梁,城市这才诞生。真诚正是这样的桥梁,它勇敢地铺向一片未知,一片心灵的荒地,一片浩渺的神秘,这难道不是它最重要的价值吗?</p></blockquote><blockquote><p>理想化并不说明理想的错误,而艺术本来就是一种理想。</p></blockquote><blockquote><p>现实除了是现实还是对理想的吁求,这吁求也是现实之一种。</p></blockquote><blockquote><p>异,不是要强调隔离与敌视,而是在呼唤沟通与爱恋。</p></blockquote><blockquote><p>爱情不是出于大脑的明智,而是出于灵魂的牵挂,不是肉身的捕捉或替换,而是灵魂的漫展和相遇。</p></blockquote><blockquote><p>爱情,从来与艺术相似,没有什么理性原则可以概括它、指引它。</p></blockquote><blockquote><p>不见得是我们走过生命,而是生命走过我们;不见得是肉身承载着灵魂,而是灵魂订制了肉身。</p></blockquote><blockquote><p>肉身蒙蔽了灵魂的眼睛,单是看见要回那无中去,却忘了你原是从那无中来。</p></blockquote><blockquote><p>孤芳自赏从根本上说是不可能的,单独的音符怎么听也像一声噪响,孤立的段落终不知所归。</p></blockquote><blockquote><p>何谓演好?就是在那戏剧的曲折与艰难中体会生命的意义,领悟那飘荡在灯光与道具之上的戏魂,改变你固有的迷执。</p></blockquote><blockquote><p>最易之读是不读,最易之思是不思,易而又易,终于弄到没有差别时便只剩下了简陋。</p></blockquote><blockquote><p>尤其当性仅仅作为性的解救之时,性对那整体而言就更加陌生,甚至构成敌意。</p></blockquote><blockquote><p>平均绝难平均到全面富裕,只可能平均到一致的贫穷——就像赛跑,不可能大家跑得一样快,但可以让大家跑得一样慢。</p></blockquote><blockquote><p>尴尬是一种可贵的能力。因为,反躬自问是一切爱愿和思想的初萌。</p></blockquote><blockquote><p>进退维谷之日正可能是别有洞天之时</p></blockquote><blockquote><p>一个人若连以死抗争的权利都被剥夺,可想而知,他还会有怎样的生的权利。</p></blockquote><blockquote><p>理性走入绝地,有限的人智看见了无限的困阻,人才会变得谦恭,条条计策终见迷茫,人才在服从与祈祷中听见神命。</p></blockquote><blockquote><p>陈嘉映所说:“生活真容易变得有趣,所以没有人思考。”诗意地栖居吗?就怕诗人早也认同了饭局中的操作与推销。</p></blockquote><blockquote><p>你说他虚伪,是因其知污浊而隐藏,你说那隐藏的并不污浊,甚至美妙到可供炫耀,那虚伪岂不要换成谦逊了?</p></blockquote><blockquote><p>强使乐道,道将非道;强逼成仁,仁安在哉?</p></blockquote>]]></content>
<categories>
<category>读书笔记</category>
</categories>
<tags>
<tag>文学</tag>
<tag>哲思</tag>
<tag>史铁生</tag>
</tags>
</entry>
<entry>
<title>长安的荔枝</title>
<link href="/2023/12/01/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E9%95%BF%E5%AE%89%E7%9A%84%E8%8D%94%E6%9E%9D/"/>
<url>/2023/12/01/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E9%95%BF%E5%AE%89%E7%9A%84%E8%8D%94%E6%9E%9D/</url>
<content type="html"><![CDATA[<h1 id="长安的荔枝"><a href="#长安的荔枝" class="headerlink" title="长安的荔枝"></a>长安的荔枝</h1><blockquote><p>智足以拒谏,言足以饰非</p></blockquote><blockquote><p>既是身临绝境,退无可退,何不向前拼死一搏,说不定还能搏出一点微茫希望</p></blockquote><blockquote><p>就算失败,我也想知道,自己倒在距离终点多远的地方。</p></blockquote><blockquote><p>天下熙熙,皆为利来;天下攘攘,皆为利往。谈钱有什么不好?</p></blockquote><blockquote><p>无心与物竞,鹰隼莫相猜</p></blockquote><blockquote><p>“等死,死国可乎?”</p></blockquote><blockquote><p>做官之道,其实就三句话:和光同尘,雨露均沾,花花轿子众人抬。一个人吃独食,是吃不长久的。”</p></blockquote><blockquote><p>“我原本以为,把荔枝平安送到京城,从此仕途无量,应该会很开心。可我跑完这一路下来,却发现越接近成功,我的朋友就越少,内心就越愧疚。我本想和从前一样,苟且隐忍一下,也许很快就习惯了。可是我六月一日那天,靠在上好坊的残碑旁,看着那荔枝送进春明门时,发现自己竟一点都不高兴,只有满心的厌恶。那一刻,我忽然明悟了,有些冲动是苟且不了的,有些心思是藏不住的。“</p></blockquote><blockquote><p>“他这个人哪,笨拙,胆小,窝囊,可一定会豁出命去守护他所珍视的东西。”</p></blockquote><blockquote><p>千古艰难唯做事,一事功成万头秃。</p></blockquote>]]></content>
<categories>
<category>读书笔记</category>
</categories>
<tags>
<tag>小说</tag>
<tag>历史</tag>
<tag>马伯庸</tag>
</tags>
</entry>
<entry>
<title>荒原狼</title>
<link href="/2023/12/01/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E8%8D%92%E5%8E%9F%E7%8B%BC/"/>
<url>/2023/12/01/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E8%8D%92%E5%8E%9F%E7%8B%BC/</url>
<content type="html"><![CDATA[<h1 id="荒原狼"><a href="#荒原狼" class="headerlink" title="荒原狼"></a>荒原狼</h1><blockquote><p>‘大多数人在不会游泳时不想游泳。’多么机趣,不是吗?他们当然不想游泳!他们为陆地而生,而非为水。他们当然也不愿思考,他们为活着而生,不为思考!是的,谁若思考,视思考为头等重要的事,他虽然可以持续深远地思考下去,但他却误把陆地当成水,终有一天会被淹死。”</p></blockquote><blockquote><p>每个时代、每种文化、每种习俗和传统都有自己的风格,都有与之相宜的柔和与冷酷,美与残忍,都视承受某些苦难、忍耐某种恶习为理所当然。人类唯有生活在两个时代、两种文化和宗教的冲突间,才真正受苦,如入地狱。</p></blockquote><blockquote><p>事实上,不能断定任何人的人生极为不幸。身上没有狼性的人也不必为此感到幸运。再不幸的人生,也有它的光明时刻,也有它沙砾和岩石间娇小的幸福之花。</p></blockquote><blockquote><p>追求权力者毁于权力,追求财富者毁于财富,卑躬屈膝者毁于盲从,贪图淫乐者毁于贪欲,而荒原狼,则毁于他的特立独行。</p></blockquote><blockquote><p>人是过渡,是自然与精神间一座狭长而危险的桥梁。他内在的使命是走向精神,走向上帝,而热诚的内在渴望则驱使他回归自然,回归母体:他的生命战战兢兢地摇摆在两种力量间。</p></blockquote><blockquote><p>任何高级的幽默都是从不再严肃地看待自己开始。</p></blockquote>]]></content>
<categories>
<category>读书笔记</category>
</categories>
<tags>
<tag>黑塞</tag>
<tag>西方文学</tag>
</tags>
</entry>
<entry>
<title>飞鸟集</title>
<link href="/2023/12/01/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E9%A3%9E%E9%B8%9F%E9%9B%86/"/>
<url>/2023/12/01/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/%E9%A3%9E%E9%B8%9F%E9%9B%86/</url>
<content type="html"><![CDATA[<h1 id="飞鸟集"><a href="#飞鸟集" class="headerlink" title="飞鸟集"></a>飞鸟集</h1><blockquote><p>If you shed tears when you miss the sun, you also miss the stars.</p></blockquote><p>如果错过了太阳时你流了泪,那么你也要错过群星了。</p><blockquote></blockquote><blockquote><p>The echo mocks her origin to prove she is the original.</p></blockquote><p>回声嘲笑着她的原声,以证明她是原声。</p><blockquote></blockquote><blockquote><p>Dream is a wife who must talk. Sleep is a husband who silently suffers.</p></blockquote><p>梦是一个一定要谈话的妻子。<br>睡眠是一个默默地忍受的丈夫。</p><blockquote></blockquote><blockquote><p>“In the moon thou sendest thy love letters to me,” said the night to the sun.<br>“I leave my answers in tears upon the grass.”</p></blockquote><p>夜对太阳说道:“在月亮中,你送了你的情书给我。”<br>“我已在绿草上留下我的流着泪点的回答了。”</p><blockquote></blockquote><blockquote><p>Not hammer-strokes, but dance of the water sings the pebbles into perfection.</p></blockquote><p>不是槌的打击,乃是水的载歌载舞,使鹅卵石臻于完美。</p><blockquote></blockquote><blockquote><p>If you shut your door to all errors truth will be shut out.</p></blockquote><p>如果你把所有的错误都关在门外时,真理也要被关在外面了。</p><blockquote></blockquote><blockquote><p>The leaf becomes flower when it loves. The flower becomes fruit when it worships.</p></blockquote><p>绿叶恋爱时便成了花。<br>花崇拜时便成了果实。</p><blockquote></blockquote><blockquote><p>Let me think that there is one among those stars that guides my life through the dark unknown.</p></blockquote><p>让我设想,在群星之中,有一粒星是指导着我的生命通过不可知的黑暗的。</p><blockquote></blockquote><blockquote><p>I have my stars in the sky, but oh for my little lamp unlit in my house.</p></blockquote><p>我有群星在天上,<br>但是,唉,我屋里的小灯却没有点亮。</p><blockquote></blockquote><blockquote><p>By plucking her petals you do not gather the beauty of the flower.</p></blockquote><p>采着花瓣时,得不到花的美丽。</p><blockquote></blockquote><blockquote><p>The world has kissed my soul with its pain, asking for its return in songs.</p></blockquote><p>世界以它的痛苦同我接吻,而要求歌声做报酬。</p><blockquote></blockquote><blockquote><p>A mind all logic is like a knife all blade. It makes the hand bleed that uses it.</p></blockquote><p>全是理智的心,恰如一柄全是锋刃的刀。<br>叫使用它的人手上流血。</p><blockquote></blockquote><blockquote><p>Let my doing nothing when I have nothing to do become untroubled in its depth of peace like the evening in the seashore when the water is silent.</p></blockquote><p>当我没有什么事做时,便让我不做什么事,不受骚扰地沉入安静深处吧,一如那海水沉默时海边的暮色。</p><blockquote></blockquote><blockquote><p>Night’s darkness is a bag that bursts with the gold of the dawn.</p></blockquote><p>夜之黑暗是一只口袋,盛满了发出黎明的金光的口袋。</p><blockquote></blockquote><blockquote><p>The service of the fruit is precious, the service of the flower is sweet, but let my service be the service of the leaves in its shade of humble devotion.</p></blockquote><p>果实的事业是尊贵的,花的事业是甜美的,但是让我做叶的事业罢,叶是谦逊地专心地垂着绿荫[1]的。</p><blockquote></blockquote><blockquote><p>In heart’s perspective the distance looms large.</p></blockquote><p>在心的远景里,那相隔的距离显得更广阔了。</p><blockquote></blockquote><blockquote><p>The moon has her light all over the sky, her dark spots to herself.</p></blockquote><p>月儿把她的光明遍照在天上,却留着她的黑斑给她自己。</p><blockquote></blockquote>]]></content>
<categories>
<category>读书笔记</category>
</categories>
<tags>
<tag>哲思</tag>
<tag>诗</tag>
<tag>泰戈尔</tag>
</tags>
</entry>
</search>