-
Notifications
You must be signed in to change notification settings - Fork 0
/
db.json
1 lines (1 loc) · 838 KB
/
db.json
1
{"meta":{"version":1,"warehouse":"2.2.0"},"models":{"Asset":[{"_id":"source/CNAME","path":"CNAME","modified":1,"renderable":0},{"_id":"source/lab/index.html","path":"lab/index.html","modified":1,"renderable":0},{"_id":"source/lab/js/jquery.countdown.js","path":"lab/js/jquery.countdown.js","modified":1,"renderable":0},{"_id":"source/lab/js/script.js","path":"lab/js/script.js","modified":1,"renderable":0},{"_id":"source/lab/images/work.png","path":"lab/images/work.png","modified":1,"renderable":0},{"_id":"source/lab/css/jquery.countdown.css","path":"lab/css/jquery.countdown.css","modified":1,"renderable":0},{"_id":"source/lab/css/style.css","path":"lab/css/style.css","modified":1,"renderable":0},{"_id":"source/lab/js/jquery.min.js","path":"lab/js/jquery.min.js","modified":1,"renderable":0},{"_id":"themes/indigo/source/css/style.less","path":"css/style.less","modified":1,"renderable":1},{"_id":"themes/indigo/source/img/cc.png","path":"img/cc.png","modified":1,"renderable":1},{"_id":"themes/indigo/source/img/brand.jpg","path":"img/brand.jpg","modified":1,"renderable":1},{"_id":"themes/indigo/source/img/img-err.png","path":"img/img-err.png","modified":1,"renderable":1},{"_id":"themes/indigo/source/img/img-loading.png","path":"img/img-loading.png","modified":1,"renderable":1},{"_id":"themes/indigo/source/js/main.js","path":"js/main.js","modified":1,"renderable":1},{"_id":"themes/indigo/source/js/search.min.js","path":"js/search.min.js","modified":1,"renderable":1},{"_id":"themes/indigo/source/js/main.min.js","path":"js/main.min.js","modified":1,"renderable":1},{"_id":"themes/indigo/source/js/search.js","path":"js/search.js","modified":1,"renderable":1},{"_id":"themes/indigo/source/img/avatar.jpg","path":"img/avatar.jpg","modified":1,"renderable":1},{"_id":"themes/indigo/source/img/alipay.png","path":"img/alipay.png","modified":1,"renderable":1},{"_id":"themes/indigo/source/img/wechat.png","path":"img/wechat.png","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/cloudTie/mobile.less","path":"css/cloudTie/mobile.less","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/cloudTie/pc.less","path":"css/cloudTie/pc.less","modified":1,"renderable":1},{"_id":"themes/indigo/source/js/cloudTie/loader.js","path":"js/cloudTie/loader.js","modified":1,"renderable":1},{"_id":"themes/indigo/source/js/cloudTie/loader.min.js","path":"js/cloudTie/loader.min.js","modified":1,"renderable":1},{"_id":"themes/indigo/source/js/cloudTie/mobile.min.js","path":"js/cloudTie/mobile.min.js","modified":1,"renderable":1},{"_id":"source/lab/images/blurred.jpg","path":"lab/images/blurred.jpg","modified":1,"renderable":0},{"_id":"themes/indigo/source/js/cloudTie/pc.min.js","path":"js/cloudTie/pc.min.js","modified":1,"renderable":1},{"_id":"themes/indigo/source/js/cloudTie/mobile.js","path":"js/cloudTie/mobile.js","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Bold.eot","path":"css/fonts/roboto/Roboto-Bold.eot","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Bold.woff2","path":"css/fonts/roboto/Roboto-Bold.woff2","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Light.eot","path":"css/fonts/roboto/Roboto-Light.eot","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Light.woff","path":"css/fonts/roboto/Roboto-Light.woff","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Light.woff2","path":"css/fonts/roboto/Roboto-Light.woff2","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Medium.eot","path":"css/fonts/roboto/Roboto-Medium.eot","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Medium.woff","path":"css/fonts/roboto/Roboto-Medium.woff","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Medium.woff2","path":"css/fonts/roboto/Roboto-Medium.woff2","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Regular.eot","path":"css/fonts/roboto/Roboto-Regular.eot","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Regular.woff2","path":"css/fonts/roboto/Roboto-Regular.woff2","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Thin.eot","path":"css/fonts/roboto/Roboto-Thin.eot","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Thin.woff2","path":"css/fonts/roboto/Roboto-Thin.woff2","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Thin.woff","path":"css/fonts/roboto/Roboto-Thin.woff","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Bold.woff","path":"css/fonts/roboto/Roboto-Bold.woff","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/fontawesome/fontawesome-webfont.woff2","path":"css/fonts/fontawesome/fontawesome-webfont.woff2","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/fontawesome/fontawesome-webfont.woff","path":"css/fonts/fontawesome/fontawesome-webfont.woff","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Bold.ttf","path":"css/fonts/roboto/Roboto-Bold.ttf","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Light.ttf","path":"css/fonts/roboto/Roboto-Light.ttf","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Medium.ttf","path":"css/fonts/roboto/Roboto-Medium.ttf","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Regular.woff","path":"css/fonts/roboto/Roboto-Regular.woff","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Regular.ttf","path":"css/fonts/roboto/Roboto-Regular.ttf","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Thin.ttf","path":"css/fonts/roboto/Roboto-Thin.ttf","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/fontawesome/fontawesome-webfont.ttf","path":"css/fonts/fontawesome/fontawesome-webfont.ttf","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/fontawesome/FontAwesome.otf","path":"css/fonts/fontawesome/FontAwesome.otf","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/fontawesome/fontawesome-webfont.eot","path":"css/fonts/fontawesome/fontawesome-webfont.eot","modified":1,"renderable":1},{"_id":"themes/indigo/source/js/cloudTie/pc.js","path":"js/cloudTie/pc.js","modified":1,"renderable":1},{"_id":"themes/indigo/source/css/fonts/fontawesome/fontawesome-webfont.svg","path":"css/fonts/fontawesome/fontawesome-webfont.svg","modified":1,"renderable":1}],"Cache":[{"_id":"source/CNAME","hash":"e85419665aba44a937dd1d7aa978cd5556f75beb","modified":1504455510000},{"_id":"source/.DS_Store","hash":"d5080868210791a898553e82ee91bec1813547b5","modified":1555658599252},{"_id":"themes/indigo/.editorconfig","hash":"9b0445427777519defe360ea38c61729d847b3d3","modified":1504226127000},{"_id":"themes/indigo/LICENSE","hash":"24944bf7920108f5a4790e6071c32e9102760c37","modified":1504226127000},{"_id":"themes/indigo/README.md","hash":"b188fb95a9c16eb188eeffa6caa0895a14676338","modified":1504226127000},{"_id":"themes/indigo/_config.yml","hash":"7195141ffbe2b8a60b6c9f53e3689a45409214d9","modified":1555658938567},{"_id":"themes/indigo/.DS_Store","hash":"b0183026b39817927481389230591759b1dd995e","modified":1504683341000},{"_id":"themes/indigo/package.json","hash":"e6caca7d5b83812cf9ffa5d3b35d103406e331f9","modified":1504226127000},{"_id":"source/_posts/.DS_Store","hash":"2402c2b05e32bedc41aba17f73a65cf8e8741d15","modified":1555609687562},{"_id":"source/_posts/Linux的常用命令(持续更新).md","hash":"4e9fe100c0a03eef06d0f1537d2dd5a49baac8d0","modified":1504841438000},{"_id":"source/_posts/Fragment的应用.md","hash":"fb9cc254d69e98244bbcc4a68b1f047378d6b00c","modified":1508949464099},{"_id":"source/_posts/Mac-OS下SD卡烧录镜像.md","hash":"8006d65c9d049d97f8befb0c7b79acf7c6efa23e","modified":1528169566207},{"_id":"source/_posts/MySQL中文的坑.md","hash":"1b7e512ebc2bb58cd685cb782b42789cc9700a6c","modified":1559633326605},{"_id":"source/_posts/Linux的用户及用户组.md","hash":"d6a4da6310a44d5cb98a8ccb4c9ac6f9559be59d","modified":1518009496931},{"_id":"source/_posts/hello-world.md","hash":"779a85ea1c66ca2804b76f124c6fa6aaed1358ee","modified":1504841566000},{"_id":"source/_posts/Ubuntu上启动ftp服务.md","hash":"59af5cbd58c519c4f923b22c501d762a803b736e","modified":1518009380832},{"_id":"source/_posts/howtorunscriptonlinux.md","hash":"6e6441bf2719a81ff051eaead8784985fb74c7e3","modified":1563543245884},{"_id":"source/_posts/hexoautodeploy.md","hash":"64b586d3a84ad38f91d4c6f356fc5506a73880dd","modified":1555698061972},{"_id":"source/_posts/swfit-Simple-Guide.md","hash":"7f43c49465c2273137d2ca5331ee2ed67dd4337f","modified":1570007393930},{"_id":"source/_posts/hexoclienttest.md","hash":"c5f34c5833b506bc276e117f5cb9019c975c868b","modified":1555658448430},{"_id":"source/_posts/zsh-is-too-slow.md","hash":"e006e6249b0b02983526ef8f9c108ec4f6686769","modified":1569845202824},{"_id":"source/_posts/vim.md","hash":"db85ec1c2540a223abb9566a34c17cedb2e9f4c1","modified":1569938644423},{"_id":"source/_posts/台湾科技大学自动查询审核结果的脚本.md","hash":"4690b82b06d27a43fc23a80758a26eadcea5a5eb","modified":1525679700771},{"_id":"source/_posts/在Android中Menu的使用.md","hash":"0488ea706f459f4bd1c5e792f2e981490a10c840","modified":1506531924000},{"_id":"source/_posts/成都的流水账.md","hash":"58f12752b1a2426fc6f6a0f558781264bd723644","modified":1509703422908},{"_id":"source/_posts/我勒个去成都!!!————写在前面.md","hash":"2febbb340c60e908be035ba2fc02de88e0c28c02","modified":1506616739000},{"_id":"source/_posts/数字电路电路板汇总.md","hash":"3342c57fb3010667bfe727dd0fca74b3486c730a","modified":1515230176377},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器.md","hash":"10f37623e22fc3644eb5cfde508e46f2ea5c3738","modified":1515077593378},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前).md","hash":"f53de1c1160c21cd25924a50fbb3f3d879f5640b","modified":1515226993442},{"_id":"source/_posts/数字电路进阶(第六章以后).md","hash":"bdea0e9c5400a6aee2208c910a3a6cb84bcb1cca","modified":1515499406885},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下.md","hash":"1416b983d1d7584746643fb914d2de94d463d600","modified":1515246449410},{"_id":"source/_posts/数电笔记:第一章数字逻辑基础.md","hash":"3df688b827e31107a8cdfda3835b8eb179115f8d","modified":1514463148786},{"_id":"source/_posts/数字电路:基础知识.md","hash":"25621be81aaac467e7d57b046165d9eb019675e8","modified":1515499442295},{"_id":"source/_posts/无显示器条件下查询树莓派IP的方法.md","hash":"a63c0b674bf55bc35dafbc55422265845810ac8d","modified":1518581988296},{"_id":"source/_posts/毛概下重点整理.md","hash":"f157f8bc77a13e716f051eeaecfcb6a2afc5df1e","modified":1561136431489},{"_id":"source/_posts/汇编第七章:更灵活的定位内存地址的方式.md","hash":"c32217f17e7eee7c895f64c683b91758c1c757be","modified":1515499530076},{"_id":"source/_posts/汇编第九章:转移指令的原理.md","hash":"b8e3a2b4eb8a77a795391f05d45ab331b7902baa","modified":1514640604582},{"_id":"source/_posts/汇编第五章-BX-和loop指令.md","hash":"006194030394b9195cade4d873d8b7a0609d2bc0","modified":1514489639114},{"_id":"source/_posts/汇编第八章:数据处理的两个基本问题.md","hash":"547e3a7b9b50ce633de2472867a6db4a934871a4","modified":1514626834461},{"_id":"source/_posts/汇编第六章:包含多个短的程序.md","hash":"2c8ce1d53bf6324be6585af3897efe2fd0576b07","modified":1514485274005},{"_id":"source/_posts/汇编语言第十章:CALL和RET指令.md","hash":"65201f9d60db6747caa0bf9d49c4171178373c2e","modified":1515083248652},{"_id":"source/_posts/汇编语言第十一章:标志寄存器.md","hash":"80bf9e9c2d97d4d00c752e2e5730f51223b886e2","modified":1515083336877},{"_id":"source/_posts/汇编语言中寄存器ESP和EBP的理解.md","hash":"acdb7e710e434bb48aa611b3fe8d7dceedf7138e","modified":1514489154068},{"_id":"source/_posts/汇编语言:基础知识(第五章以前).md","hash":"06cd6015828b9002e97f0cc5861a2393f66cc742","modified":1515511265093},{"_id":"source/_posts/现代第二章.md","hash":"efad13de10af4fc222ccffc41e39bc9c725dade9","modified":1514489655439},{"_id":"source/_posts/第一篇文章.md","hash":"29ef32dc37d5df4c930867cb337f0ac9f1900e3b","modified":1504841691000},{"_id":"source/_posts/近期的一些更新计划.md","hash":"5cee7688d7617e46b0ddf6841d74c18b846d8ccd","modified":1504841464000},{"_id":"source/_posts/甘肃政务服务网证件办理自动查询.md","hash":"545c5c4aa32f1ebfd26c4f2b421a32eb0351bfe3","modified":1530876221506},{"_id":"source/_posts/记一次微信小程序开发的经历.md","hash":"4360874b5107a034cc5ea5121bad1c54ff513095","modified":1559702301734},{"_id":"source/categories/index.md","hash":"44d36ee828f336ac5a76239286fe4652cc5f4878","modified":1504226619000},{"_id":"source/_posts/数据结构知识框架.md","hash":"73e5be96495500149469c7385ea844fb2593d0d6","modified":1515686633277},{"_id":"source/_posts/汇编语言第十二。。章:内外中断和int指令.md","hash":"1f8effc5cda0d1c54310a64e273da44ca8f35ea7","modified":1515171294210},{"_id":"source/tages/index.md","hash":"dc96b008fbe7182f0f39a5eb290ef6423d4c3d57","modified":1504451244000},{"_id":"source/tags/index.md","hash":"e28edfdb8578eef5fd1a667364199ace8dbdc2a2","modified":1504450495000},{"_id":"source/lab/index.html","hash":"9ec3b8a7e8def9a68762d87972dbf2cf7a93b92a","modified":1522680803457},{"_id":"themes/indigo/.git/HEAD","hash":"da237e0de55301608e7c572e119ab5c4e43c0e85","modified":1504226127000},{"_id":"themes/indigo/.git/config","hash":"1096da7405bf0751ed8d5e91f24910015fb6928f","modified":1504226127000},{"_id":"themes/indigo/.git/index","hash":"673cb5a1d131596cbdbc210e3d21e146d2d0d35a","modified":1515044554433},{"_id":"themes/indigo/.git/packed-refs","hash":"1fbb5bbdc6945a08e046d1ad01f6bb886fb9358c","modified":1504226127000},{"_id":"themes/indigo/languages/.DS_Store","hash":"a4b807136f4896f260b81348a4e1de07b37bb3e5","modified":1504451170000},{"_id":"themes/indigo/languages/en.yml","hash":"1957d2bfc3a4cef299f4f169b431e9b1128ba162","modified":1504226127000},{"_id":"themes/indigo/languages/zh-CN.yml","hash":"7dc6ae434dde390b6768d244132e23cc78c33817","modified":1504683332000},{"_id":"themes/indigo/layout/category.ejs","hash":"7ea26a8a935886963eda82f41c7bd5270cf780d9","modified":1504226127000},{"_id":"themes/indigo/.git/description","hash":"9635f1b7e12c045212819dd934d809ef07efa2f4","modified":1504226095000},{"_id":"themes/indigo/layout/categories.ejs","hash":"41783d2069d5080566a99e6312aa2113105f8b41","modified":1504226127000},{"_id":"themes/indigo/layout/index.ejs","hash":"39477807b98b2d2df78f3b82498a11e90be8222c","modified":1504226127000},{"_id":"themes/indigo/layout/archive.ejs","hash":"d039719e21f6a6fa2925b00aaa623a180a78c818","modified":1504226127000},{"_id":"themes/indigo/layout/.DS_Store","hash":"43d4398c0ecc2466b9515ea29aa7316786454f4d","modified":1504682342000},{"_id":"themes/indigo/layout/layout.ejs","hash":"d52f43fa9572d70cae834e4887c8897b43744805","modified":1504226127000},{"_id":"themes/indigo/layout/page.ejs","hash":"afb98face24d39a21ebbbde6592a9afc98572aa4","modified":1504226127000},{"_id":"themes/indigo/layout/post.ejs","hash":"afbf8532dc8d148ca4dff2ca127a3382907cf2f5","modified":1504226127000},{"_id":"themes/indigo/layout/tag.ejs","hash":"36786a3de7f6cad58209603f7d84ba23addea174","modified":1504226127000},{"_id":"themes/indigo/layout/tags.ejs","hash":"20466446c41409d14a3d42ccaec24a65a045efef","modified":1504226127000},{"_id":"themes/indigo/scripts/plugins.js","hash":"e439d717513616bedeed37ba9b05117470809b21","modified":1504226127000},{"_id":"themes/indigo/source/.DS_Store","hash":"4a389086d20e096c0d1011f5dc445fe13ed35826","modified":1504448701000},{"_id":"source/_posts/Linux的用户及用户组/.DS_Store","hash":"71e2f2b3f058bcd51500456d01074e4693c8391f","modified":1518009397255},{"_id":"source/_posts/Linux的用户及用户组/b.jpg","hash":"79f347d2eb96cd55723d9e57527333b18b36d9a3","modified":1517753237663},{"_id":"source/_posts/Linux的用户及用户组/a.jpg","hash":"3311dc536b1e2c1d31a115f8a4152c2603a92de9","modified":1517753230386},{"_id":"source/_posts/成都的流水账/.DS_Store","hash":"afbaa4e79b9b68a1b5222c4abd7a677fdbc60e93","modified":1509703444791},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/s.png","hash":"52988481f6229be98c3f29e0c3d8be44f044cae4","modified":1515214609152},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/t.png","hash":"9e0ae6272dcb8fbc8d1b96986468208a5487876b","modified":1515214992225},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/v.png","hash":"eb4cb2488a6ce89ae2d90df191769c346afa15a9","modified":1515223994479},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/j.png","hash":"993bf15e45cbc3738bc46474350f820a0a53313a","modified":1515071811492},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/k.png","hash":"8e680965a7341e59703b85b86cc23359f1377ecb","modified":1515072000491},{"_id":"source/_posts/数字电路电路板汇总/b.png","hash":"e478858bffdafb71f7ad9d0bff0bd83c1d1f44ba","modified":1515036610329},{"_id":"source/_posts/数字电路电路板汇总/g.png","hash":"510c6dae6ab3230b2e5f59dffe29aa385b630c3b","modified":1515056233823},{"_id":"source/_posts/数字电路电路板汇总/.DS_Store","hash":"81acb024933dd255ed3a208738d2ce4a80142b21","modified":1515065108275},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/p.png","hash":"ec90fbf70dae863b67da42be81f932374b2acc6a","modified":1515242796500},{"_id":"source/_posts/数字电路:基础知识/.DS_Store","hash":"aba7d490e88073541a3499be0036219751500c9c","modified":1515418950180},{"_id":"source/_posts/数据结构知识框架/.DS_Store","hash":"d19ed00dadb5439e43c83ad0f64a5fdec1536509","modified":1516962386482},{"_id":"source/lab/js/jquery.countdown.js","hash":"8716f03de096b37d1ad504e9a37d173f0c6d05d6","modified":1445401056000},{"_id":"source/lab/js/script.js","hash":"f9151504682d3a976fe900b2f59929eeae768497","modified":1445401056000},{"_id":"source/lab/images/work.png","hash":"067f5913526d97cba68d24921080559e85f66928","modified":1447489572000},{"_id":"source/lab/css/jquery.countdown.css","hash":"828cb38b1f54c9ae3dbd920a05212f7d6171c09a","modified":1447467104000},{"_id":"source/lab/css/style.css","hash":"1bbb5d15d57aca536aee88355c709c03ffa78f75","modified":1478351030000},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/a.png","hash":"e45456f6f32f472b97484ae659d9d70337f25e6a","modified":1515142305465},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/g.png","hash":"e7a34dad949a2f5cb6654ac8c574f3bb0a9648bf","modified":1515146714599},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/f.png","hash":"08e25f370ded82e6ccaf9f22540d300dc4fb0f12","modified":1515146563735},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/l.png","hash":"ddb404cf9dd1b08662ec16aafdebe61b6aa93b00","modified":1515157407134},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/o.png","hash":"685f43ae25a1d0bd4e0df35ded3db7a7bc504585","modified":1515159076991},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/r.png","hash":"903dbf88164a6586aee74f526fb0224721da66fb","modified":1515214450817},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/x.png","hash":"347ee91ed79890af7b92eb9300732d5ed2254c7a","modified":1515226568094},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/c.png","hash":"de78f9003f4c0a49efa165f8cbca8e4b5107b670","modified":1515066229409},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/e.png","hash":"d993c4c07c6d9cc72c738a991503d21939a095e6","modified":1515067911907},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/i.png","hash":"271addb29334230259c81b86cb5544d9a1f27be9","modified":1515070476819},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/g.png","hash":"590a76d717d79fa4af8cb288eac555cf644c08d9","modified":1515233261395},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/r.png","hash":"93f45ae821bf16c3673ab0039deb5708d02bde2c","modified":1515243113331},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/u.png","hash":"b2c5ec0813b82ea46a99eb7450ef5d3cf582bbf5","modified":1515244109040},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/w.png","hash":"5002997ed8150f0c4b44feb3f84de3bb8583a7b0","modified":1515246397805},{"_id":"source/_posts/数字电路:基础知识/b.png","hash":"5730fcf65e2bc254cd442de7eeb8fd592198554d","modified":1515418279693},{"_id":"source/_posts/数据结构知识框架/l.png","hash":"2c1fea91c5f65855bc3ba4046b6be9fb6cf47377","modified":1515656653995},{"_id":"source/_posts/数据结构知识框架/m.png","hash":"ba94d606bb1fc131573ec68fc7f9678a9178eac1","modified":1515656738383},{"_id":"source/_posts/甘肃政务服务网证件办理自动查询/b.png","hash":"dc756dc6a04f9256df515ad55882624f0d87499c","modified":1530875707602},{"_id":"themes/indigo/.git/info/exclude","hash":"c879df015d97615050afa7b9641e3352a1e701ac","modified":1504226095000},{"_id":"themes/indigo/.git/hooks/commit-msg.sample","hash":"ee1ed5aad98a435f2020b6de35c173b75d9affac","modified":1504226095000},{"_id":"themes/indigo/.git/hooks/applypatch-msg.sample","hash":"4de88eb95a5e93fd27e78b5fb3b5231a8d8917dd","modified":1504226095000},{"_id":"themes/indigo/.git/logs/HEAD","hash":"86a8c9a9664663fd1f84c95a5f72ee163a7f8132","modified":1504226127000},{"_id":"themes/indigo/.git/hooks/post-update.sample","hash":"b614c2f63da7dca9f1db2e7ade61ef30448fc96c","modified":1504226095000},{"_id":"themes/indigo/.git/hooks/pre-commit.sample","hash":"36aed8976dcc08b5076844f0ec645b18bc37758f","modified":1504226095000},{"_id":"themes/indigo/.git/hooks/pre-push.sample","hash":"5c8518bfd1d1d3d2c1a7194994c0a16d8a313a41","modified":1504226095000},{"_id":"themes/indigo/.git/hooks/pre-rebase.sample","hash":"5885a56ab4fca8075a05a562d005e922cde9853b","modified":1504226095000},{"_id":"themes/indigo/.git/hooks/pre-applypatch.sample","hash":"f208287c1a92525de9f5462e905a9d31de1e2d75","modified":1504226095000},{"_id":"themes/indigo/.git/hooks/pre-receive.sample","hash":"705a17d259e7896f0082fe2e9f2c0c3b127be5ac","modified":1504226095000},{"_id":"themes/indigo/.git/hooks/prepare-commit-msg.sample","hash":"2b6275eda365cad50d167fe3a387c9bc9fedd54f","modified":1504226095000},{"_id":"themes/indigo/.git/hooks/update.sample","hash":"e729cd61b27c128951d139de8e7c63d1a3758dde","modified":1504226095000},{"_id":"themes/indigo/layout/_partial/after-footer.ejs","hash":"9ac30b9439fab69973cf4722dbf2945a18fd3804","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/footer.ejs","hash":"e1a71a30a1c7a664ddf3ba3e7eb3a5b90bc4b33c","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/head.ejs","hash":"b197b87b120b09b68aa3d79954ed039816a88664","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/archive.ejs","hash":"55cd81ef9183426d6d99fd91550fce0a9cc92aa0","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/header.ejs","hash":"6156bf20791e46fc1c5872113276c1c1f5c13773","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/index-item.ejs","hash":"ec7b3ec79bbbead9c7e43e2e6c6b5c8bef509410","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/paginator.ejs","hash":"dc27242927890f130a64400596b9b7ad5fca8972","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/loading.ejs","hash":"bc4cb19b20de55a0332647f4dca9684184383685","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/post.ejs","hash":"a87d9b0485b3bf4cdfdad890e5974c43dbaa8240","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/script.ejs","hash":"439d6315a1b16e32b77a68c3f0cb2961d581086a","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/tags-bar.ejs","hash":"19eff4876d31080a427644f7a43fe172d0c008c6","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/search.ejs","hash":"c2091c621b5480ef1e69d72027028cec8e929892","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/menu.ejs","hash":"d39afaad6b0dd2a3ae27e6db3e9a6cd6014622fa","modified":1504226127000},{"_id":"source/lab/js/jquery.min.js","hash":"afb90752e0a90c24b7f724faca86c5f3d15d1178","modified":1445401056000},{"_id":"themes/indigo/source/css/style.less","hash":"3e151cd162e8af87d7ca90e3067f7bd99a25f823","modified":1504226127000},{"_id":"themes/indigo/source/img/.DS_Store","hash":"11266a8b17bfe48b2a634a443568fe339c219f2a","modified":1504432380000},{"_id":"themes/indigo/source/img/cc.png","hash":"ebce75a62b40976a72d43f0bd937d859ac24d87c","modified":1504226127000},{"_id":"themes/indigo/source/img/brand.jpg","hash":"0e237f1b433851c156e1f1cdaeb044054b3b9879","modified":1504226127000},{"_id":"themes/indigo/source/img/img-err.png","hash":"23a63ea26eb3c1d5e677d9883cf36cc1a1a1228b","modified":1504226127000},{"_id":"themes/indigo/source/img/img-loading.png","hash":"a9cd5cd11866824f31e3d1c5e23badfeb3f73031","modified":1504226127000},{"_id":"themes/indigo/source/js/main.js","hash":"26688338ac55bed772e630099d2ce1ed69ef1431","modified":1504226127000},{"_id":"themes/indigo/source/js/search.min.js","hash":"a8a450bb8b1ca9ad577052addcbd3393f1af6c6a","modified":1504226127000},{"_id":"themes/indigo/source/js/main.min.js","hash":"dcec14830cf056fbbab82313ecd5886a03cdf580","modified":1504226127000},{"_id":"themes/indigo/source/js/search.js","hash":"a1de7e7a2ef8330ebcd9f3a7a4622b3bac44e4f3","modified":1504226127000},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/b.png","hash":"8ae08ee608f8486cd48678ea19f0a90f1470df4f","modified":1515065985374},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/g.png","hash":"dae3cdfe6c5baa32aa0b3da738276a9b89bcd36e","modified":1515069489359},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/c.png","hash":"914332c99499913c248a332a063949ff5fe6c674","modified":1515232192865},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/s.png","hash":"d095ea473af263322f037ee9fb6a538929a3c0f7","modified":1515243359522},{"_id":"source/_posts/数据结构知识框架/b.png","hash":"1441997505a3ff7342472174f1e68707545aa664","modified":1515650444782},{"_id":"source/_posts/数据结构知识框架/c.png","hash":"5b94b3a02da05fbeb6ba339b2725d31fd01a1f58","modified":1515650275461},{"_id":"source/_posts/数据结构知识框架/z.png","hash":"4a8d7f0a1f20f1192400b422552923bbfd1047ec","modified":1515685803572},{"_id":"source/_posts/数据结构知识框架/y.png","hash":"48e9d66ec8a3829b44e3e1fdfcaa8b70fcab8acd","modified":1515686217207},{"_id":"themes/indigo/source/img/avatar.jpg","hash":"06beffcbcdcb7ab677b32454dca13cf21e22ada1","modified":1504432368000},{"_id":"themes/indigo/source/img/alipay.png","hash":"ee47859442b97a63c0c4ba1ceb158be5e6a41bed","modified":1504428447000},{"_id":"themes/indigo/source/img/wechat.png","hash":"9bb1cda151fc17232f53f3f30a36bd155a342f7c","modified":1504428407000},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/b.png","hash":"a045a4d576f9df23f4ffd4c4e871123ce306007e","modified":1515145022164},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/d.png","hash":"8de82a04fb0d4c093cba617f7e9674253bd23d18","modified":1515066856539},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/h.png","hash":"4ca4ba70fca6df7bc6c30c527693ccf2eb33e8bc","modified":1515069615660},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/l.png","hash":"f0a52fca614ea82fea0f27206240bd5e59cdaf3e","modified":1515072660635},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/t.png","hash":"3c0f3a2678cf0f4369353c2027b1bdde9de37ad2","modified":1515243573793},{"_id":"source/_posts/数字电路:基础知识/a.png","hash":"78ff9ccd5459048336b7bb35b749037b5d6d0f6b","modified":1515417137089},{"_id":"source/_posts/数据结构知识框架/h.png","hash":"4956ab434686452ae75643e151ef4d1ec67451fa","modified":1515655608709},{"_id":"source/_posts/数据结构知识框架/p.png","hash":"e798ff02350b642604d660ec82715cc98d6fed74","modified":1515657499838},{"_id":"source/_posts/数据结构知识框架/n.png","hash":"e27917480a128582ecdd1a218cb62354c9632ade","modified":1515656914514},{"_id":"source/_posts/汇编语言:基础知识(第五章以前)/b.png","hash":"7eacdbee548a623de2ae1d9cb1a27f00a6df0cb4","modified":1515500536878},{"_id":"themes/indigo/.git/refs/heads/card","hash":"444f96a99a6697a19d2c1c3d2af2ca5f3f070f33","modified":1504226127000},{"_id":"themes/indigo/.git/objects/pack/pack-0897a96ee8fc06aa3606b7774af1f77a85ba33d7.idx","hash":"e0f9428822d0e3c04a8ea6101db470e8aafc85b8","modified":1504226126000},{"_id":"themes/indigo/layout/_partial/plugins/disqus.ejs","hash":"4a0c01e4195f685f9825fcd016d01249dbdd52ca","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/plugins/gitment.ejs","hash":"5723d507eca4390e8e5d18c0770e7953b8c22f5a","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/plugins/baidu.ejs","hash":"e44d526029f122e9c2c74f3a647c35002c818cbe","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/plugins/dynamic-title.ejs","hash":"23c101d45911eb0846533aaa2d409c43aa5e899a","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/plugins/mathjax.ejs","hash":"ea603a057196de53bd6afab1fddb93d11f27eb81","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/plugins/google-analytics.ejs","hash":"a947f4076b54b48d4df5baf2d5b3c39b632c7576","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/plugins/page-visit.ejs","hash":"2decb77bf3c1a064ea6ce1d4e78892c434d9c884","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/plugins/site-visit.ejs","hash":"8fbd0910828f1ab6eba728bdecc9811d623baae2","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/plugins/tajs.ejs","hash":"97b48fe10be1c71d4ff25ccec3bd92d97466c9c5","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/plugins/uyan.ejs","hash":"e370bd04ea5cf1c83e0c20516aff7ba3ca8b2d0b","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/plugins/wangyi-ygt.ejs","hash":"0540808912afbbd8dddbdd15b8d1b54426d8b221","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/post/category.ejs","hash":"c7476165721a3a5e34d00d8c5c07e1e5474cd800","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/post/comment.ejs","hash":"298e3ad59b358620b49dc933d39e5f26388d43be","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/post/copyright.ejs","hash":"968b27ca952d01b066cfe49fb670faf177d6b67e","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/post/date.ejs","hash":"ea85b46e12d3b9c3612eef7aa76289a663fbc096","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/post/head-meta.ejs","hash":"b0c680ce5b8aaf461a6731b1ff1287bd140c168a","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/post/nav.ejs","hash":"11e7d504f7c7a3c4c052da13cfa8ea4862c9383e","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/post/reward-btn.ejs","hash":"41c242fe3159dc68cec8dd00ab6d2663f5a51179","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/post/reward.ejs","hash":"801d786ed00ba615a3e3b9f19b238de81225a32e","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/post/share-fab.ejs","hash":"93482ad7d1e01b966f5ee1c5d12b88564e02b349","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/post/share.ejs","hash":"8df0d7bf6f8e106cdbdac2dd10a97367aa0695f8","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/post/tag.ejs","hash":"b3dc38652c4a018a37418136478dcd522fc49f79","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/post/title.ejs","hash":"062d56cb88ae2be3a6616b911d4ebeffcbfe3cff","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/post/toc.ejs","hash":"b6123e895c16ace651f1832281ff655776d4068c","modified":1504226127000},{"_id":"themes/indigo/layout/_partial/post/updated.ejs","hash":"5caa71745aa340ce57938a930f3b898ee7518d74","modified":1504226127000},{"_id":"themes/indigo/source/css/_partial/archives.less","hash":"7d2a6886265386c640e94ffca3f042675f701a35","modified":1504226127000},{"_id":"themes/indigo/source/css/_partial/article.less","hash":"4ea7ef6dc47a3df8d31bac4bdf83c17d4161f593","modified":1504226127000},{"_id":"themes/indigo/source/css/_partial/gotop.less","hash":"b7db31b9bc563c10b9e3cf3e6d9cfddfeb3e805a","modified":1504226127000},{"_id":"themes/indigo/source/css/_partial/header.less","hash":"90f0948a9182c14b1dac1e9dbed3c883543266f9","modified":1504226127000},{"_id":"themes/indigo/source/css/_partial/highlight.less","hash":"58492b7cdb45fe09b026b2f34e8ae69c2ddb8228","modified":1504226127000},{"_id":"themes/indigo/source/css/_partial/layout.less","hash":"d648da036a12470009f852902946b6c3521ad49b","modified":1504226127000},{"_id":"themes/indigo/source/css/_partial/lightbox.less","hash":"9b961eb1d70e7658f42cf2ca895fa5e35a6b6541","modified":1504226127000},{"_id":"themes/indigo/source/css/_partial/loading.less","hash":"f9d06a1e24fb4857fd18d7a0bfbb3a0ab2d1c742","modified":1504226127000},{"_id":"themes/indigo/source/css/_partial/page.less","hash":"e92ccb53e6ac73a51498c6a9672db9d0d2bc7f1a","modified":1504226127000},{"_id":"themes/indigo/source/css/_partial/postlist.less","hash":"1c041bf91106808e5480c60d9ece45431bb503b3","modified":1504226127000},{"_id":"themes/indigo/source/css/_partial/reward.less","hash":"4857f90bb57fc22ca3f942d8934d86d5e9e82c1e","modified":1504226127000},{"_id":"themes/indigo/source/css/_partial/search.less","hash":"1d6641ae7568a0153d24beba9fd9704d2b155f6c","modified":1504226127000},{"_id":"themes/indigo/source/css/_partial/roboto.less","hash":"2e0469ed8161d5672d903ca1a8027cd65fe007f1","modified":1504226127000},{"_id":"themes/indigo/source/css/_partial/tags.less","hash":"959f4373fda6e45f6a4041a995ed3ea8a05a5170","modified":1504226127000},{"_id":"themes/indigo/source/css/_partial/variable.less","hash":"082896b966ed25b39c74e7b007b4f54c235685a4","modified":1504226127000},{"_id":"themes/indigo/source/css/_partial/share.less","hash":"27d80bcc96a53dd1e7eaa9a7d746e4b212357302","modified":1504226127000},{"_id":"themes/indigo/source/css/_partial/waves.less","hash":"77bfd0b373b0469eb0176167fb076ccda4edf2a7","modified":1504226127000},{"_id":"themes/indigo/source/css/cloudTie/_inputBox.less","hash":"3156898bbbbe0d897f475c03e1e6245e97399613","modified":1504226127000},{"_id":"themes/indigo/source/css/cloudTie/_joinCount.less","hash":"c1e5821189d17419869249cbd556d8da992fbfd3","modified":1504226127000},{"_id":"themes/indigo/source/css/cloudTie/_reset.less","hash":"9228ab9e7d92a3cd8cda340ae67f5b172863c835","modified":1504226127000},{"_id":"themes/indigo/source/css/cloudTie/_share.less","hash":"9c95ca439e85fadbca00778463a9375fbeba9ad2","modified":1504226127000},{"_id":"themes/indigo/source/css/cloudTie/mobile.less","hash":"0d68b7606a1b3c14a18a03ae3c80e4602f13c75b","modified":1504226127000},{"_id":"themes/indigo/source/css/cloudTie/pc.less","hash":"8038abcea49d6f74a6ff155cc565b4a675107ae6","modified":1504226127000},{"_id":"themes/indigo/source/js/cloudTie/loader.js","hash":"299d58e74946a2aeb8db74d3e4b6b5adfe694e15","modified":1504226127000},{"_id":"themes/indigo/source/js/cloudTie/loader.min.js","hash":"e73fcd885be2c4585f154861c9969e3c955d03e3","modified":1504226127000},{"_id":"themes/indigo/source/js/cloudTie/mobile.min.js","hash":"859e3efb15db88cedfd18f8523ecfd21f3a22324","modified":1504226127000},{"_id":"source/_posts/成都的流水账/UNADJUSTEDNONRAW_thumb_4.jpg","hash":"592b80cabe959501eecf3763d4d55a846c6af8e5","modified":1508207299424},{"_id":"source/_posts/数字电路电路板汇总/a.png","hash":"c8925f965d735a4ac67327df323eff7ec723cf37","modified":1515036114017},{"_id":"source/_posts/数字电路电路板汇总/f.png","hash":"2c47d976245d12cb2e073a33bc40b220157f222c","modified":1515038302273},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/a.png","hash":"5b3f334336e6a50d97df146769b18c41afb1f1c3","modified":1515228637964},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/b.png","hash":"2eb42f016c85ceb937dda7badedad822872e2c62","modified":1515228672868},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/d.png","hash":"12087014b40a0941bc4573ce6480c831b07fa00c","modified":1515232199901},{"_id":"source/_posts/数字电路:基础知识/c.png","hash":"74dbd8a6d29b4240a1a312049ef8f872cc048690","modified":1515418482864},{"_id":"source/_posts/数据结构知识框架/o.png","hash":"3709bb8750d7fe94e74e1e2653a4c1117f8a4702","modified":1515657124057},{"_id":"source/_posts/汇编语言:基础知识(第五章以前)/a.png","hash":"145afe96a385ddea760e64f7a2a7f2ad612eae70","modified":1515499734599},{"_id":"themes/indigo/source/css/_partial/fontawesome.less","hash":"ca30b732d2efbb0cd55a272ecdabc97f895aee78","modified":1504226127000},{"_id":"source/lab/images/blurred.jpg","hash":"1b59273b5d13e757e3198ffafe57c0bcb795bf79","modified":1447404328000},{"_id":"themes/indigo/source/js/cloudTie/pc.min.js","hash":"aea28510192fb36a36bf174716a39afd1ca20240","modified":1504226127000},{"_id":"themes/indigo/source/js/cloudTie/mobile.js","hash":"67a0a31ee1e491635369b0401d629e97fccd4d94","modified":1504226127000},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/a.png","hash":"5ff6a40141be398bbe370e3bbff0430b4adc3e74","modified":1515065788544},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/y.png","hash":"3cbcab6104b8e965b71742f89c854135a9e43966","modified":1515226697447},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/m.png","hash":"6437c2a49e3a39f2c12a399f6a776b4d2ec844b5","modified":1515072912716},{"_id":"source/_posts/数字电路电路板汇总/i.png","hash":"9c9a0a52094fd2c6d7576ebd373f0591f804cebf","modified":1515058566580},{"_id":"source/_posts/数据结构知识框架/a.png","hash":"d09c627cbc960f6b825dba0f3ad73beccf89c864","modified":1515646791870},{"_id":"source/_posts/数据结构知识框架/k.png","hash":"5b297acd4aaa3f5f81b50de0510d8e82eea5014b","modified":1515656501989},{"_id":"themes/indigo/.git/refs/remotes/origin/HEAD","hash":"7f141be72288af81f8e55d94df5da3f87101e8f1","modified":1504226127000},{"_id":"themes/indigo/.git/logs/refs/heads/card","hash":"86a8c9a9664663fd1f84c95a5f72ee163a7f8132","modified":1504226127000},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Bold.eot","hash":"a76cd602f5188b9fbd4ba7443dcb9c064e3dbf10","modified":1504226127000},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Bold.woff2","hash":"933b866d09c2b087707a98dab64b3888865eeb96","modified":1504226127000},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Light.eot","hash":"42fe156996197e5eb0c0264c5d1bb3b4681f4595","modified":1504226127000},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Light.woff","hash":"6300f659be9e834ab263efe2fb3c581d48b1e7b2","modified":1504226127000},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Light.woff2","hash":"bbdc28b887400fcb340b504ec2904993af42a5d7","modified":1504226127000},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Medium.eot","hash":"1517f4b6e1c5d0e5198f937557253aac8fab0416","modified":1504226127000},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Medium.woff","hash":"d45f84922131364989ad6578c7a06b6b4fc22c34","modified":1504226127000},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Medium.woff2","hash":"6cc1b73571af9e827c4e7e91418f476703cd4c4b","modified":1504226127000},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Regular.eot","hash":"77ae3e980ec03863ebe2587a8ef9ddfd06941db0","modified":1504226127000},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Regular.woff2","hash":"ed1558b0541f5e01ce48c7db1588371b990eec19","modified":1504226127000},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Thin.eot","hash":"0790a51a848dbe7292c98f9d0459218bf1a8ffdd","modified":1504226127000},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Thin.woff2","hash":"2449e3dac5ddb7c3da8bb07450493b62d052758c","modified":1504226127000},{"_id":"source/_posts/台湾科技大学自动查询审核结果的脚本/a.png","hash":"c0a7ef0f6e16bb2c370f0a58331c650118a2bed0","modified":1525676952908},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Thin.woff","hash":"fbc3e71d456c96667d8082ab910e3946ef89240b","modified":1504226127000},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/n.png","hash":"35c52d9231b210b203c38d2d34cd7a82a986b00c","modified":1515073340130},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/f.png","hash":"df8321f5c83967028b06e4d6e71ed38d4bb0d7d3","modified":1515067974714},{"_id":"source/_posts/数据结构知识框架/d.png","hash":"ac6f2ca0db97d9074f292e19b3467c1b6e0cd101","modified":1515650614178},{"_id":"source/_posts/数据结构知识框架/i.png","hash":"4701bce1e1bd833d0a56bb32f0471fd1a4367b2c","modified":1515655849425},{"_id":"source/_posts/数据结构知识框架/j.png","hash":"3f00718d6bf0de879ad6d9f25683114469baf0bc","modified":1515656433082},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Bold.woff","hash":"ee99cd87a59a9a5d4092c83232bb3eec67547425","modified":1504226127000},{"_id":"themes/indigo/source/css/fonts/fontawesome/fontawesome-webfont.woff2","hash":"d6f48cba7d076fb6f2fd6ba993a75b9dc1ecbf0c","modified":1504226127000},{"_id":"themes/indigo/source/css/fonts/fontawesome/fontawesome-webfont.woff","hash":"28b782240b3e76db824e12c02754a9731a167527","modified":1504226127000},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Bold.ttf","hash":"47327df0f35e7cd7c8645874897a7449697544ae","modified":1504226127000},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Light.ttf","hash":"e321c183e2b75ee19813892b7bac8d7c411cb88a","modified":1504226127000},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Medium.ttf","hash":"6060ca726b9760b76f7c347dce9d2fa1fe42ec92","modified":1504226127000},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Regular.woff","hash":"74734dde8d94e7268170f9b994dedfbdcb5b3a15","modified":1504226127000},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Regular.ttf","hash":"824b5480c977a8166e177e5357d13164ccc45f47","modified":1504226127000},{"_id":"themes/indigo/source/css/fonts/roboto/Roboto-Thin.ttf","hash":"173ed64528b4d010a76d8d38deb1d7e7eed58eda","modified":1504226127000},{"_id":"source/_posts/数字电路电路板汇总/c.png","hash":"3dfe9d2a053c55d5a057cfb1188a304c571d34ce","modified":1515036596748},{"_id":"source/_posts/数字电路电路板汇总/h.png","hash":"808467ad59a02fdad9caed6b4ae860c76642321c","modified":1515056249381},{"_id":"source/_posts/数字电路电路板汇总/l.png","hash":"afac3a11c6b436fb027953c42ff5ef9880d1db56","modified":1515064277514},{"_id":"source/_posts/数据结构知识框架/f.png","hash":"0660d491685e62cf05805d187d7e90486e5274eb","modified":1515651363806},{"_id":"source/_posts/数据结构知识框架/q.png","hash":"d444e45c585b165bde70b73328dc97fbe3a2cba5","modified":1515671443071},{"_id":"themes/indigo/.git/logs/refs/remotes/origin/HEAD","hash":"86a8c9a9664663fd1f84c95a5f72ee163a7f8132","modified":1504226127000},{"_id":"themes/indigo/source/css/fonts/fontawesome/fontawesome-webfont.ttf","hash":"13b1eab65a983c7a73bc7997c479d66943f7c6cb","modified":1504226127000},{"_id":"themes/indigo/source/css/fonts/fontawesome/FontAwesome.otf","hash":"048707bc52ac4b6563aaa383bfe8660a0ddc908c","modified":1504226127000},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/n.png","hash":"89deeceaf295def50fbdd6e087432a52bfa3f55f","modified":1515240048189},{"_id":"source/_posts/数据结构知识框架/g.png","hash":"286cdd3614efd7756415f47b98dec20842c25f33","modified":1515654971657},{"_id":"source/_posts/数据结构知识框架/e.png","hash":"30f958feaedf1e8c98e2d985e8233ef7b22779d2","modified":1515650770547},{"_id":"themes/indigo/source/css/fonts/fontawesome/fontawesome-webfont.eot","hash":"d980c2ce873dc43af460d4d572d441304499f400","modified":1504226127000},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/j.png","hash":"8088c1fb64cc1a644491eeeb01e53e3aafc18379","modified":1515155183540},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/i.png","hash":"488d17a553f08756efc2ca136753c24519418220","modified":1515236313624},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/v.png","hash":"076c2aa0138b043fe44bc0f6721659fbdff63796","modified":1515246250362},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/i.png","hash":"ac0098c787481a8bb43b1d05ded28aff2f199b6d","modified":1515155174760},{"_id":"themes/indigo/source/js/cloudTie/pc.js","hash":"25d4ae345f8122f8c7e8e48959d37523dd1e4abb","modified":1504226127000},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/u.png","hash":"d224282012a9673e0a772cf1ef804bfcbe2a97b4","modified":1515223729029},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/w.png","hash":"1d08d6ab518af8a3bb79a24059bff23861a1ec92","modified":1515224739825},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/k.png","hash":"6d38ba010761a2d5b152f84ea092a34363133b5d","modified":1515240030086},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/q.png","hash":"7f890a3d59a81db3a332a175f310ca65231b45d4","modified":1515213620143},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/m.png","hash":"2b3d7df89cba8b83872537ea9daf159588f02052","modified":1515240042835},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/o.png","hash":"5c8f7eb0eddee4a69042e5d47e14d981498b4735","modified":1515073398445},{"_id":"source/_posts/数字电路电路板汇总/j.png","hash":"f9caf086f7d892099db774f8be3d65ab16953e90","modified":1515058559022},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/f.png","hash":"795b55b0a8628ee7ee173e3e294a64a665ba19a6","modified":1515233040969},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/e.png","hash":"af1fd731b02e48f63810a8c848ad4f243e279b7c","modified":1515232745356},{"_id":"source/_posts/数据结构知识框架/r.png","hash":"f68d67b42678b0d18824fead405b997069a3545c","modified":1515674701547},{"_id":"themes/indigo/source/css/fonts/fontawesome/fontawesome-webfont.svg","hash":"98a8aa5cf7d62c2eff5f07ede8d844b874ef06ed","modified":1504226127000},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/h.png","hash":"be90a645e01585cb0b51c205e93566f14fbdc5cd","modified":1515155165319},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/h.png","hash":"64ef36ab250194bcc2d71dc88ba67f8bdd783dc2","modified":1515233333849},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/o.png","hash":"7f9949fad735348366a6e45d4bedfd495db98281","modified":1515240069199},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/l.png","hash":"e1c6e443bd168ab656ddcdbf3d5bea535d96d9ef","modified":1515240036937},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/q.png","hash":"3146b8c30ee7df39cb7c1778967077f94b38f8b8","modified":1515242832945},{"_id":"source/_posts/数字电路:基础知识/d.png","hash":"8c7868967a7f095128e84f8a80ba3fe0bf18197f","modified":1515418685655},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/k.png","hash":"cdcb8894f4322957483dabb311c7286040244cbf","modified":1515155194561},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/e.png","hash":"695d575c2ffbccccfa9e819d38f969ef7cb4696e","modified":1515146079666},{"_id":"source/_posts/数字电路电路板汇总/e.png","hash":"8a8fee85ffa6f073f02eb4b8a7b27cbf8012f753","modified":1515038293677},{"_id":"source/_posts/数字电路电路板汇总/k.png","hash":"8cedd8419dade99c269a855b7f97a5398937486d","modified":1515064129455},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/j.png","hash":"c35fd1466191da04620d3aae0d4074acfb4fe060","modified":1515240023093},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/c.png","hash":"b7285b9b697ab4b0b7d1970ae18786aa78ec01bd","modified":1515146062580},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/p.png","hash":"332d023fb78f7d687c302c0be58838d176741abc","modified":1515160043516},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/m.png","hash":"39538294f655e034fb8a19082eae097ad6dbd982","modified":1515158891194},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/d.png","hash":"ad94f35e53e7d7e5662fd78688ee40bd18534137","modified":1515146073476},{"_id":"source/_posts/甘肃政务服务网证件办理自动查询/a.png","hash":"feb7eec8e8346d8abb967d22dbec9a6ae5e9ad9f","modified":1530875623513},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/n.png","hash":"80116e1fff41efca15b7d86c7c80ea8348519b46","modified":1515158921203},{"_id":"source/_posts/数字电路电路板汇总/d.png","hash":"95f07e10f708e827a23ee555c2847bb48009a0c1","modified":1515038284080},{"_id":"themes/indigo/.git/objects/pack/pack-0897a96ee8fc06aa3606b7774af1f77a85ba33d7.pack","hash":"a8cd49372cea5455ef3ffdf28d2aa26436944695","modified":1504226126000},{"_id":"public/atom.xml","hash":"15f0f401c8ec60c39b24c407e6dbaf0b342cf58f","modified":1570007415100},{"_id":"public/content.json","hash":"4877cee9367ee0ded5acb706b45a1f897a30a8f1","modified":1570007415101},{"_id":"public/2019/07/19/howtorunscriptonlinux/index.html","hash":"ac6103e6f51551cc77c7cf7cebd59ea5798b3bbf","modified":1570007415894},{"_id":"public/2019/06/05/记一次微信小程序开发的经历/index.html","hash":"e97580489ba6da9f542001dee38d2bc1a6bcf599","modified":1570007415894},{"_id":"public/2019/04/19/hexoclienttest/index.html","hash":"2aeb92bacd45fac752989380a7ff5df5877dfc06","modified":1570007415946},{"_id":"public/2018/02/07/Ubuntu上启动ftp服务/index.html","hash":"901fab6173026fb36c95845ee9b7ec17aba98a55","modified":1570007415947},{"_id":"public/2018/02/14/无显示器条件下查询树莓派IP的方法/index.html","hash":"5c3c5134a601b5f4f5bccf7c74c1dae9cff47ab7","modified":1570007415947},{"_id":"public/2018/01/08/数字电路进阶(第六章以后)/index.html","hash":"cb5df72e58ff336506ecb724dee91918aab51dd3","modified":1570007415947},{"_id":"public/2019/09/30/vim/index.html","hash":"0bab9a2974e4d596a3333ddabc6b1dc290376b26","modified":1570007415947},{"_id":"public/2017/12/28/汇编第五章-BX-和loop指令/index.html","hash":"7595945a80ff855a17d99d4b6c8cb9179bf17bb3","modified":1570007415947},{"_id":"public/2017/12/28/汇编第六章:包含多个短的程序/index.html","hash":"343499a71c7956abb2291ada450018c4c505f707","modified":1570007415947},{"_id":"public/2017/11/03/成都的流水账/index.html","hash":"7811c8fa778094d28abee7920e77c032559c1e48","modified":1570007415947},{"_id":"public/2017/11/04/汇编语言中寄存器ESP和EBP的理解/index.html","hash":"4aefeda5c0edb50850e0ab395154b7e5472c152c","modified":1570007415947},{"_id":"public/2017/10/26/Fragment的应用/index.html","hash":"ab73fcb513cbf7a3676675d325593d2a1e2e35fa","modified":1570007415947},{"_id":"public/2017/09/08/Linux的常用命令(持续更新)/index.html","hash":"afe435b8093d2711d7daedae0cc3c83bbfec7c2f","modified":1570007415947},{"_id":"public/2017/09/05/近期的一些更新计划/index.html","hash":"80e1de2f0240e0c84fdb31e4c53e49dcf703fe42","modified":1570007415948},{"_id":"public/2017/09/03/第一篇文章/index.html","hash":"078bfd93be7bb583d515c9decebee8e656e009b4","modified":1570007415948},{"_id":"public/2017/09/01/hello-world/index.html","hash":"5ec97d41055695f6f3865f022d12b56180a9ba26","modified":1570007415948},{"_id":"public/categories/Linux/index.html","hash":"515376bd0e48617e6ae14bf72d79d4814b32177c","modified":1570007415948},{"_id":"public/categories/Android/index.html","hash":"483f7296b9ed4a52167b76fc2ebbda32a549e416","modified":1570007415948},{"_id":"public/categories/zsh/index.html","hash":"d153e118d788ee55fb50fb7a2e65c05e41a6a2c8","modified":1570007415948},{"_id":"public/categories/vim/index.html","hash":"2347476853bdd8bc41dc7f829d35df5b84bb39ba","modified":1570007415948},{"_id":"public/categories/脚本/index.html","hash":"fb963c833d9d3d9892cce826f684453dd5f957e3","modified":1570007415948},{"_id":"public/categories/烧录/index.html","hash":"40f52d7406d9d2be9857b37fef385cc50946d314","modified":1570007415948},{"_id":"public/categories/hexo/index.html","hash":"578c30149f708e51224c41625b024c14aaceb8c1","modified":1570007415948},{"_id":"public/categories/成都游记/index.html","hash":"dbe458bcaec1f246e8fddc1935438efff3d2baba","modified":1570007415948},{"_id":"public/categories/笔记/index.html","hash":"da65ad05c030660f9cfea761d2296fda7d48fe10","modified":1570007415948},{"_id":"public/categories/树莓派/index.html","hash":"85d557cdfa62635ec61136362b311c77fd978c7f","modified":1570007415948},{"_id":"public/categories/随笔/index.html","hash":"e374ee26129f9ad9593a1ad0dbf062773015339e","modified":1570007415948},{"_id":"public/categories/线性代数/index.html","hash":"b41b988dce6368bbc04957497e2eafeec00a3374","modified":1570007415948},{"_id":"public/archives/index.html","hash":"4550e761501dd8856137116cdf1d5be781cb9d46","modified":1570007415948},{"_id":"public/archives/page/5/index.html","hash":"176a4c027c501cd28171ca5f11e7008d951dabcf","modified":1570007415948},{"_id":"public/archives/2017/page/2/index.html","hash":"b12a2c6950a687b739cb8c2750e4935f95c0d9d1","modified":1570007415948},{"_id":"public/archives/2017/09/index.html","hash":"b9032b7cd069ce92ce56ce2ba34ce327ab7e40be","modified":1570007415948},{"_id":"public/archives/2017/10/index.html","hash":"7df717dec965ce1d12b46333aac51f96b10e599a","modified":1570007415948},{"_id":"public/archives/2017/11/index.html","hash":"fe74d1f19899b5c84ea00199dff2fffd5c809c92","modified":1570007415948},{"_id":"public/archives/2017/12/index.html","hash":"50cd0237075af7dd70cf53ea8614fcf74f2bae76","modified":1570007415948},{"_id":"public/archives/2018/page/2/index.html","hash":"ad262dab4ca6e58a93dcdec9727d605c1c5f8647","modified":1570007415948},{"_id":"public/archives/2018/01/page/2/index.html","hash":"d1e07f749292f37a2df47b6fd051888019500390","modified":1570007415948},{"_id":"public/archives/2018/02/index.html","hash":"948906c2298735a7ace3d5ef2461e2b411ac28c6","modified":1570007415949},{"_id":"public/archives/2018/05/index.html","hash":"52c42485e9e1320938359c050546428b36dc74a1","modified":1570007415949},{"_id":"public/archives/2018/06/index.html","hash":"9ca8d1fe0cb4b453009983c5bfb11d379a6c0555","modified":1570007415949},{"_id":"public/archives/2018/07/index.html","hash":"697a693716a11c5e79bd2b7ceb0f7ae7b0005415","modified":1570007415949},{"_id":"public/archives/2019/index.html","hash":"e0544a92cda9a1661bb88b8f6e59b4c65e0ac278","modified":1570007415949},{"_id":"public/archives/2019/04/index.html","hash":"361e9c74fd096b7bc82622df3866eb778254f1e4","modified":1570007415949},{"_id":"public/archives/2019/06/index.html","hash":"f74cedbcf7b2234b88195362fc6754d9b57b0c81","modified":1570007415949},{"_id":"public/archives/2019/07/index.html","hash":"a2fddc8a72134cc22b6151cae6320e9728db1ce2","modified":1570007415949},{"_id":"public/archives/2019/09/index.html","hash":"1e4d8939b1a575e4c493da92f8d5d0df4bbc0a0d","modified":1570007415949},{"_id":"public/page/5/index.html","hash":"1b7845f893ba5153eed8d5a7b5ceffedb67de91b","modified":1570007415949},{"_id":"public/tags/Linux/index.html","hash":"83dc8990d52730fabf9f4d4b45f29025b2cdce8f","modified":1570007415949},{"_id":"public/tags/Android/index.html","hash":"ddd50ed6e8f41092b98c04bd41d47c88751eb50a","modified":1570007415949},{"_id":"public/tags/Fragment/index.html","hash":"8ca990d07d8789d6ff3cdddb16ea712ecc23d0b5","modified":1570007415949},{"_id":"public/tags/烧录/index.html","hash":"f2d510bba908894841385448333ac6c5946e51fb","modified":1570007415949},{"_id":"public/tags/SD卡/index.html","hash":"775c24b4c1331dd0609db2403e7df7a56ccc9908","modified":1570007415949},{"_id":"public/tags/Mac/index.html","hash":"f8b2a94c5cdaaa3e6ee17c588de4542ed7ceb606","modified":1570007415949},{"_id":"public/tags/用户/index.html","hash":"66145a926e21cc1f25ccb31042d10a3437513e12","modified":1570007415949},{"_id":"public/tags/FTP/index.html","hash":"d3b4d3e5945b218a5982adf77a957abbf4eebac1","modified":1570007415949},{"_id":"public/tags/hexo/index.html","hash":"70fe16db6eef21ca83bf0cdbca2e8eca871ce9b8","modified":1570007415949},{"_id":"public/tags/linux/index.html","hash":"ebff3ae5c9de0b2c4c0ed9ed3cb1f10c41ac0ef0","modified":1570007415949},{"_id":"public/tags/zsh/index.html","hash":"0b01e24af2f89668fa5aef548ac446d9ad5ac513","modified":1570007415949},{"_id":"public/tags/vim/index.html","hash":"ff621e70d53f57afbc1829ea53e25b9286aca825","modified":1570007415949},{"_id":"public/tags/脚本/index.html","hash":"2d54cab846bcf2ed6a0891c61269949274efb270","modified":1570007415950},{"_id":"public/tags/台科/index.html","hash":"9370f3d8120b8bc5699b49ed352d9f30307003ca","modified":1570007415950},{"_id":"public/tags/游记/index.html","hash":"3fcc651631ed6ae04d707e3e76e737100fa2da5e","modified":1570007415950},{"_id":"public/tags/随笔/index.html","hash":"18201084a2a197d22f5434b2bec797521afc8fdc","modified":1570007415950},{"_id":"public/tags/成都/index.html","hash":"4606035c823e1c46d398d42cd053d3211e0c6175","modified":1570007415950},{"_id":"public/tags/树莓派/index.html","hash":"548e5e5c0dc16c3e9addd9706c50d1dbd4116fa7","modified":1570007415950},{"_id":"public/tags/Unix/index.html","hash":"9b7266b82ea0a57a8f0f39f98738d0013776f0a7","modified":1570007415950},{"_id":"public/tags/线性代数/index.html","hash":"5102980f9ee898316b29c23aaf974a1900d7eef8","modified":1570007415950},{"_id":"public/tags/新手/index.html","hash":"41beb0505d0776e14f8450beb4d381c3763d17f9","modified":1570007415950},{"_id":"public/tags/办证进度/index.html","hash":"93dc3b43cf68740be423dce05e658b958a1e2b08","modified":1570007415950},{"_id":"public/tags/甘肃政务服务网/index.html","hash":"c254f8a428a47808ab499a2caf89b796f6945c01","modified":1570007415950},{"_id":"public/tags/数据结构/index.html","hash":"5c9b68bc7ad604c0423cea7bd139100a7e8b072f","modified":1570007415950},{"_id":"public/tags/index.html","hash":"154e209c0a70ede4f011ec12e8a462f1614819a2","modified":1570007415950},{"_id":"public/categories/index.html","hash":"c0d74b3eda4c8f2b13cde01783d6374c1979ede3","modified":1570007415950},{"_id":"public/tages/index.html","hash":"d0bdd17d4f58f1d9bfacd2a419ff91189e9d2bfa","modified":1570007415950},{"_id":"public/2019/06/22/毛概下重点整理/index.html","hash":"6b6541f690c5332b0b28e3b5befd4b864911daf2","modified":1570007415950},{"_id":"public/2019/06/04/MySQL中文的坑/index.html","hash":"d1cfd477eee65215054bb211bccade46ca97370e","modified":1570007415950},{"_id":"public/2018/07/06/甘肃政务服务网证件办理自动查询/index.html","hash":"343efd76672c1d19de2e886810d1718dd8fe841a","modified":1570007415950},{"_id":"public/2019/04/20/hexoautodeploy/index.html","hash":"22d8188b78dbe538256340cf0e9d6145f974355f","modified":1570007415950},{"_id":"public/2018/05/07/台湾科技大学自动查询审核结果的脚本/index.html","hash":"630c5402d24d957ca56cef35658819cb61390d42","modified":1570007415950},{"_id":"public/2018/06/05/Mac-OS下SD卡烧录镜像/index.html","hash":"4b416de9dccdd938b12e4af8b16208b122b67d04","modified":1570007415950},{"_id":"public/2018/02/07/Linux的用户及用户组/index.html","hash":"77b1c9d694f46bb9b31275b68cbb8271f72fe769","modified":1570007415950},{"_id":"public/2018/01/11/数据结构知识框架/index.html","hash":"f18a5249fb1197ca74338100f199f82e87a8ab1b","modified":1570007415950},{"_id":"public/2018/01/09/汇编语言:基础知识(第五章以前)/index.html","hash":"4d5f2d60f4f916ee3c2bcc4891e440b5002f2981","modified":1570007415951},{"_id":"public/2019/09/30/zsh-is-too-slow/index.html","hash":"1b0031f8ade7d582ad848c81344c23d77f1eb02e","modified":1570007415951},{"_id":"public/2018/01/08/数字电路:基础知识/index.html","hash":"c6c0288aa004e3651f1ae082822d9798e018dd71","modified":1570007415951},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/index.html","hash":"37ad4a6009add1f36ca149433ce25acef7f5affb","modified":1570007415951},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/index.html","hash":"9084108ab965302ffa9d6f4d43385e59039f3db3","modified":1570007415951},{"_id":"public/2018/01/04/汇编语言第十章:CALL和RET指令/index.html","hash":"58a626ca8c359c5febb3669dcb4ac5bec4ee5da4","modified":1570007415951},{"_id":"public/2018/01/05/汇编语言第十二。。章:内外中断和int指令/index.html","hash":"39f59dfbc1462922c02966054b730f04e92e1fcc","modified":1570007415951},{"_id":"public/2018/01/04/数字电路第五章:集成双稳态触发器/index.html","hash":"42089717babce5cd64e1e9d994235f36087f3d3b","modified":1570007415951},{"_id":"public/2018/01/04/数字电路电路板汇总/index.html","hash":"dac2147d125726c7b30291be5df2a881a116eac7","modified":1570007415951},{"_id":"public/2018/01/05/汇编语言第十一章:标志寄存器/index.html","hash":"a20d96d136d24d4815f1c69801e987f657accc3d","modified":1570007415951},{"_id":"public/2017/12/30/汇编第九章:转移指令的原理/index.html","hash":"b7d0b9423e0200de2a2ee6c1d705585a6704e6a1","modified":1570007415951},{"_id":"public/2017/12/29/汇编第八章:数据处理的两个基本问题/index.html","hash":"8469c0b1be8e9100977a0989b095b5934585bb1b","modified":1570007415951},{"_id":"public/2017/12/28/现代第二章/index.html","hash":"06b2129a544777803b074da562b9ea754c2a5d00","modified":1570007415951},{"_id":"public/2017/10/29/数电笔记:第一章数字逻辑基础/index.html","hash":"fa111144bfd0d970fe5c0eaca1a7baac8005f336","modified":1570007415951},{"_id":"public/2017/12/29/汇编第七章:更灵活的定位内存地址的方式/index.html","hash":"adcc096e499766aa8e65cce176d49c7d8f127633","modified":1570007415951},{"_id":"public/2017/09/28/在Android中Menu的使用/index.html","hash":"0cae8aa638507eacad291725e2b96717531f9c4f","modified":1570007415951},{"_id":"public/2017/09/29/我勒个去成都!!!————写在前面/index.html","hash":"a049c6c44db23f31725992c6cd5345fe1851c002","modified":1570007415951},{"_id":"public/categories/汇编语言/index.html","hash":"88576c2faff117e77e920a5a63b651632b42c166","modified":1570007415951},{"_id":"public/categories/数字电路/index.html","hash":"c8dc356f16c06bab795f381f16ae671330527594","modified":1570007415951},{"_id":"public/archives/page/4/index.html","hash":"ceaec7d6fd03cd32dd3c145825fc5c20cfe460a7","modified":1570007415951},{"_id":"public/archives/2017/index.html","hash":"72e30d82dc60a588c2e23787338a792566bc1ffc","modified":1570007415951},{"_id":"public/archives/page/3/index.html","hash":"2317de4daac7d05b40363119e7bd751b51f47c44","modified":1570007415951},{"_id":"public/archives/2018/index.html","hash":"afeccc1c3f3543b5830de94e72e930d0702fde7e","modified":1570007415951},{"_id":"public/archives/2018/01/index.html","hash":"4711fbe46eb217c61d32e3e5147c98def674a347","modified":1570007415952},{"_id":"public/archives/page/2/index.html","hash":"febb60354c269a664777ae5f7d82e9cd805ae11d","modified":1570007415952},{"_id":"public/index.html","hash":"03642ca568b800162b80d9a38f17e24baacb323b","modified":1570007415952},{"_id":"public/page/2/index.html","hash":"0a1c6db4f00682188838c04445f3c7bccabfcea8","modified":1570007415952},{"_id":"public/page/3/index.html","hash":"6f30f5c0f7c749aced62504e8a4356ccfef2abc4","modified":1570007415952},{"_id":"public/page/4/index.html","hash":"71e1ffa2e63c164a65525d74b4fc20c25309be39","modified":1570007415952},{"_id":"public/tags/入门/index.html","hash":"38fb3b6e9d9986b8cdf329cd7d51b231dba0a57f","modified":1570007415952},{"_id":"public/tags/数字电路/index.html","hash":"fff6c7a6bf07c1c80bd154e14af824d751067e3d","modified":1570007415952},{"_id":"public/tags/笔记/index.html","hash":"4b698609f6762bda7aa04f1b65f954ed0b5feeac","modified":1570007415952},{"_id":"public/tags/笔记/page/2/index.html","hash":"67a173a3ca8ff33a3c18b5df98f4e36330d2b61d","modified":1570007415952},{"_id":"public/tags/汇编语言/index.html","hash":"a60b8bd9f86da703a47d1fe6754c9749e3c4d049","modified":1570007415952},{"_id":"public/archives/2019/10/index.html","hash":"0ac8ede1ff16ca4acebeccd3feb1491b29446a64","modified":1570007415977},{"_id":"public/tags/swift/index.html","hash":"4d7663b2fadaae1fe42c78da6ce94d29f44bd2e4","modified":1570007415977},{"_id":"public/tags/Guide/index.html","hash":"68a5696b7b54ce05bd2aa2271a5c6bf76d2b1b7d","modified":1570007415977},{"_id":"public/2019/10/02/swfit-Simple-Guide/index.html","hash":"dcc125545ff24a070c045b489f3739d0a2906381","modified":1570007415977},{"_id":"public/CNAME","hash":"e85419665aba44a937dd1d7aa978cd5556f75beb","modified":1570007416004},{"_id":"public/lab/index.html","hash":"9ec3b8a7e8def9a68762d87972dbf2cf7a93b92a","modified":1570007416004},{"_id":"public/lab/images/work.png","hash":"067f5913526d97cba68d24921080559e85f66928","modified":1570007416004},{"_id":"public/lab/css/jquery.countdown.css","hash":"828cb38b1f54c9ae3dbd920a05212f7d6171c09a","modified":1570007416004},{"_id":"public/lab/js/script.js","hash":"f9151504682d3a976fe900b2f59929eeae768497","modified":1570007416004},{"_id":"public/lab/css/style.css","hash":"1bbb5d15d57aca536aee88355c709c03ffa78f75","modified":1570007416005},{"_id":"public/lab/js/jquery.countdown.js","hash":"8716f03de096b37d1ad504e9a37d173f0c6d05d6","modified":1570007416005},{"_id":"public/img/img-err.png","hash":"23a63ea26eb3c1d5e677d9883cf36cc1a1a1228b","modified":1570007416005},{"_id":"public/img/cc.png","hash":"ebce75a62b40976a72d43f0bd937d859ac24d87c","modified":1570007416005},{"_id":"public/img/img-loading.png","hash":"a9cd5cd11866824f31e3d1c5e23badfeb3f73031","modified":1570007416005},{"_id":"public/img/brand.jpg","hash":"0e237f1b433851c156e1f1cdaeb044054b3b9879","modified":1570007416005},{"_id":"public/css/fonts/roboto/Roboto-Bold.eot","hash":"a76cd602f5188b9fbd4ba7443dcb9c064e3dbf10","modified":1570007416005},{"_id":"public/css/fonts/roboto/Roboto-Bold.woff2","hash":"933b866d09c2b087707a98dab64b3888865eeb96","modified":1570007416005},{"_id":"public/css/fonts/roboto/Roboto-Light.eot","hash":"42fe156996197e5eb0c0264c5d1bb3b4681f4595","modified":1570007416005},{"_id":"public/css/fonts/roboto/Roboto-Light.woff2","hash":"bbdc28b887400fcb340b504ec2904993af42a5d7","modified":1570007416005},{"_id":"public/css/fonts/roboto/Roboto-Light.woff","hash":"6300f659be9e834ab263efe2fb3c581d48b1e7b2","modified":1570007416005},{"_id":"public/css/fonts/roboto/Roboto-Regular.eot","hash":"77ae3e980ec03863ebe2587a8ef9ddfd06941db0","modified":1570007416005},{"_id":"public/css/fonts/roboto/Roboto-Medium.woff","hash":"d45f84922131364989ad6578c7a06b6b4fc22c34","modified":1570007416005},{"_id":"public/css/fonts/roboto/Roboto-Medium.woff2","hash":"6cc1b73571af9e827c4e7e91418f476703cd4c4b","modified":1570007416005},{"_id":"public/css/fonts/roboto/Roboto-Thin.eot","hash":"0790a51a848dbe7292c98f9d0459218bf1a8ffdd","modified":1570007416005},{"_id":"public/css/fonts/roboto/Roboto-Regular.woff2","hash":"ed1558b0541f5e01ce48c7db1588371b990eec19","modified":1570007416005},{"_id":"public/css/fonts/roboto/Roboto-Thin.woff2","hash":"2449e3dac5ddb7c3da8bb07450493b62d052758c","modified":1570007416006},{"_id":"public/css/fonts/roboto/Roboto-Thin.woff","hash":"fbc3e71d456c96667d8082ab910e3946ef89240b","modified":1570007416007},{"_id":"public/css/fonts/roboto/Roboto-Medium.eot","hash":"1517f4b6e1c5d0e5198f937557253aac8fab0416","modified":1570007416007},{"_id":"public/css/fonts/roboto/Roboto-Bold.woff","hash":"ee99cd87a59a9a5d4092c83232bb3eec67547425","modified":1570007416007},{"_id":"public/css/fonts/roboto/Roboto-Regular.woff","hash":"74734dde8d94e7268170f9b994dedfbdcb5b3a15","modified":1570007416007},{"_id":"public/2018/02/07/Linux的用户及用户组/a.jpg","hash":"3311dc536b1e2c1d31a115f8a4152c2603a92de9","modified":1570007416007},{"_id":"public/2018/02/07/Linux的用户及用户组/b.jpg","hash":"79f347d2eb96cd55723d9e57527333b18b36d9a3","modified":1570007416007},{"_id":"public/2018/01/04/数字电路电路板汇总/b.png","hash":"e478858bffdafb71f7ad9d0bff0bd83c1d1f44ba","modified":1570007416007},{"_id":"public/2018/01/04/数字电路电路板汇总/g.png","hash":"510c6dae6ab3230b2e5f59dffe29aa385b630c3b","modified":1570007416007},{"_id":"public/2018/01/04/数字电路第五章:集成双稳态触发器/k.png","hash":"8e680965a7341e59703b85b86cc23359f1377ecb","modified":1570007416007},{"_id":"public/2018/01/04/数字电路第五章:集成双稳态触发器/j.png","hash":"993bf15e45cbc3738bc46474350f820a0a53313a","modified":1570007416009},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/p.png","hash":"ec90fbf70dae863b67da42be81f932374b2acc6a","modified":1570007416009},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/v.png","hash":"eb4cb2488a6ce89ae2d90df191769c346afa15a9","modified":1570007416009},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/t.png","hash":"9e0ae6272dcb8fbc8d1b96986468208a5487876b","modified":1570007416009},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/s.png","hash":"52988481f6229be98c3f29e0c3d8be44f044cae4","modified":1570007416009},{"_id":"public/lab/js/jquery.min.js","hash":"afb90752e0a90c24b7f724faca86c5f3d15d1178","modified":1570007416052},{"_id":"public/img/avatar.jpg","hash":"06beffcbcdcb7ab677b32454dca13cf21e22ada1","modified":1570007416052},{"_id":"public/img/alipay.png","hash":"ee47859442b97a63c0c4ba1ceb158be5e6a41bed","modified":1570007416053},{"_id":"public/img/wechat.png","hash":"9bb1cda151fc17232f53f3f30a36bd155a342f7c","modified":1570007416053},{"_id":"public/css/fonts/fontawesome/fontawesome-webfont.woff","hash":"28b782240b3e76db824e12c02754a9731a167527","modified":1570007416053},{"_id":"public/css/fonts/roboto/Roboto-Light.ttf","hash":"e321c183e2b75ee19813892b7bac8d7c411cb88a","modified":1570007416053},{"_id":"public/css/fonts/roboto/Roboto-Medium.ttf","hash":"6060ca726b9760b76f7c347dce9d2fa1fe42ec92","modified":1570007416053},{"_id":"public/css/fonts/roboto/Roboto-Regular.ttf","hash":"824b5480c977a8166e177e5357d13164ccc45f47","modified":1570007416053},{"_id":"public/css/fonts/fontawesome/fontawesome-webfont.woff2","hash":"d6f48cba7d076fb6f2fd6ba993a75b9dc1ecbf0c","modified":1570007416053},{"_id":"public/css/fonts/roboto/Roboto-Bold.ttf","hash":"47327df0f35e7cd7c8645874897a7449697544ae","modified":1570007416053},{"_id":"public/css/fonts/roboto/Roboto-Thin.ttf","hash":"173ed64528b4d010a76d8d38deb1d7e7eed58eda","modified":1570007416053},{"_id":"public/2018/07/06/甘肃政务服务网证件办理自动查询/b.png","hash":"dc756dc6a04f9256df515ad55882624f0d87499c","modified":1570007416054},{"_id":"public/2018/01/04/数字电路第五章:集成双稳态触发器/c.png","hash":"de78f9003f4c0a49efa165f8cbca8e4b5107b670","modified":1570007416054},{"_id":"public/2018/01/04/数字电路第五章:集成双稳态触发器/e.png","hash":"d993c4c07c6d9cc72c738a991503d21939a095e6","modified":1570007416054},{"_id":"public/2018/01/04/数字电路第五章:集成双稳态触发器/i.png","hash":"271addb29334230259c81b86cb5544d9a1f27be9","modified":1570007416054},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/g.png","hash":"590a76d717d79fa4af8cb288eac555cf644c08d9","modified":1570007416054},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/r.png","hash":"93f45ae821bf16c3673ab0039deb5708d02bde2c","modified":1570007416054},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/u.png","hash":"b2c5ec0813b82ea46a99eb7450ef5d3cf582bbf5","modified":1570007416054},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/w.png","hash":"5002997ed8150f0c4b44feb3f84de3bb8583a7b0","modified":1570007416054},{"_id":"public/2018/01/08/数字电路:基础知识/b.png","hash":"5730fcf65e2bc254cd442de7eeb8fd592198554d","modified":1570007416055},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/l.png","hash":"ddb404cf9dd1b08662ec16aafdebe61b6aa93b00","modified":1570007416055},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/o.png","hash":"685f43ae25a1d0bd4e0df35ded3db7a7bc504585","modified":1570007416055},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/a.png","hash":"e45456f6f32f472b97484ae659d9d70337f25e6a","modified":1570007416055},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/r.png","hash":"903dbf88164a6586aee74f526fb0224721da66fb","modified":1570007416055},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/g.png","hash":"e7a34dad949a2f5cb6654ac8c574f3bb0a9648bf","modified":1570007416055},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/f.png","hash":"08e25f370ded82e6ccaf9f22540d300dc4fb0f12","modified":1570007416055},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/x.png","hash":"347ee91ed79890af7b92eb9300732d5ed2254c7a","modified":1570007416055},{"_id":"public/2018/01/11/数据结构知识框架/l.png","hash":"2c1fea91c5f65855bc3ba4046b6be9fb6cf47377","modified":1570007416055},{"_id":"public/2018/01/11/数据结构知识框架/m.png","hash":"ba94d606bb1fc131573ec68fc7f9678a9178eac1","modified":1570007416056},{"_id":"public/js/search.min.js","hash":"a8a450bb8b1ca9ad577052addcbd3393f1af6c6a","modified":1570007416111},{"_id":"public/js/search.js","hash":"a1de7e7a2ef8330ebcd9f3a7a4622b3bac44e4f3","modified":1570007416112},{"_id":"public/js/main.min.js","hash":"dcec14830cf056fbbab82313ecd5886a03cdf580","modified":1570007416112},{"_id":"public/js/cloudTie/loader.js","hash":"299d58e74946a2aeb8db74d3e4b6b5adfe694e15","modified":1570007416112},{"_id":"public/js/cloudTie/loader.min.js","hash":"e73fcd885be2c4585f154861c9969e3c955d03e3","modified":1570007416112},{"_id":"public/css/fonts/fontawesome/FontAwesome.otf","hash":"048707bc52ac4b6563aaa383bfe8660a0ddc908c","modified":1570007416112},{"_id":"public/2018/01/04/数字电路第五章:集成双稳态触发器/b.png","hash":"8ae08ee608f8486cd48678ea19f0a90f1470df4f","modified":1570007416112},{"_id":"public/2018/01/04/数字电路第五章:集成双稳态触发器/l.png","hash":"f0a52fca614ea82fea0f27206240bd5e59cdaf3e","modified":1570007416112},{"_id":"public/2018/01/11/数据结构知识框架/b.png","hash":"1441997505a3ff7342472174f1e68707545aa664","modified":1570007416112},{"_id":"public/2018/01/11/数据结构知识框架/c.png","hash":"5b94b3a02da05fbeb6ba339b2725d31fd01a1f58","modified":1570007416112},{"_id":"public/2018/01/11/数据结构知识框架/y.png","hash":"48e9d66ec8a3829b44e3e1fdfcaa8b70fcab8acd","modified":1570007416112},{"_id":"public/2018/01/11/数据结构知识框架/z.png","hash":"4a8d7f0a1f20f1192400b422552923bbfd1047ec","modified":1570007416112},{"_id":"public/css/fonts/fontawesome/fontawesome-webfont.ttf","hash":"13b1eab65a983c7a73bc7997c479d66943f7c6cb","modified":1570007416162},{"_id":"public/2018/01/04/数字电路第五章:集成双稳态触发器/h.png","hash":"4ca4ba70fca6df7bc6c30c527693ccf2eb33e8bc","modified":1570007416163},{"_id":"public/2018/01/08/数字电路:基础知识/c.png","hash":"74dbd8a6d29b4240a1a312049ef8f872cc048690","modified":1570007416163},{"_id":"public/2018/01/11/数据结构知识框架/o.png","hash":"3709bb8750d7fe94e74e1e2653a4c1117f8a4702","modified":1570007416163},{"_id":"public/2018/01/04/数字电路电路板汇总/f.png","hash":"2c47d976245d12cb2e073a33bc40b220157f222c","modified":1570007416163},{"_id":"public/2018/01/09/汇编语言:基础知识(第五章以前)/b.png","hash":"7eacdbee548a623de2ae1d9cb1a27f00a6df0cb4","modified":1570007416163},{"_id":"public/2018/01/11/数据结构知识框架/n.png","hash":"e27917480a128582ecdd1a218cb62354c9632ade","modified":1570007416164},{"_id":"public/2018/01/11/数据结构知识框架/p.png","hash":"e798ff02350b642604d660ec82715cc98d6fed74","modified":1570007416164},{"_id":"public/css/cloudTie/mobile.css","hash":"1b3dd9263c84bdc017669bbbb128574265bb8143","modified":1570007416211},{"_id":"public/js/main.js","hash":"26688338ac55bed772e630099d2ce1ed69ef1431","modified":1570007416211},{"_id":"public/lab/images/blurred.jpg","hash":"1b59273b5d13e757e3198ffafe57c0bcb795bf79","modified":1570007416211},{"_id":"public/css/fonts/fontawesome/fontawesome-webfont.eot","hash":"d980c2ce873dc43af460d4d572d441304499f400","modified":1570007416211},{"_id":"public/2018/01/04/数字电路第五章:集成双稳态触发器/g.png","hash":"dae3cdfe6c5baa32aa0b3da738276a9b89bcd36e","modified":1570007416211},{"_id":"public/2018/01/08/数字电路:基础知识/a.png","hash":"78ff9ccd5459048336b7bb35b749037b5d6d0f6b","modified":1570007416212},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/t.png","hash":"3c0f3a2678cf0f4369353c2027b1bdde9de37ad2","modified":1570007416212},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/a.png","hash":"5b3f334336e6a50d97df146769b18c41afb1f1c3","modified":1570007416212},{"_id":"public/2017/11/03/成都的流水账/UNADJUSTEDNONRAW_thumb_4.jpg","hash":"592b80cabe959501eecf3763d4d55a846c6af8e5","modified":1570007416212},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/s.png","hash":"d095ea473af263322f037ee9fb6a538929a3c0f7","modified":1570007416213},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/b.png","hash":"2eb42f016c85ceb937dda7badedad822872e2c62","modified":1570007416213},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/d.png","hash":"12087014b40a0941bc4573ce6480c831b07fa00c","modified":1570007416213},{"_id":"public/2018/01/09/汇编语言:基础知识(第五章以前)/a.png","hash":"145afe96a385ddea760e64f7a2a7f2ad612eae70","modified":1570007416214},{"_id":"public/2018/01/11/数据结构知识框架/h.png","hash":"4956ab434686452ae75643e151ef4d1ec67451fa","modified":1570007416214},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/b.png","hash":"a045a4d576f9df23f4ffd4c4e871123ce306007e","modified":1570007416237},{"_id":"public/2018/01/04/数字电路电路板汇总/a.png","hash":"c8925f965d735a4ac67327df323eff7ec723cf37","modified":1570007416237},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/c.png","hash":"914332c99499913c248a332a063949ff5fe6c674","modified":1570007416237},{"_id":"public/2018/01/04/数字电路第五章:集成双稳态触发器/a.png","hash":"5ff6a40141be398bbe370e3bbff0430b4adc3e74","modified":1570007416238},{"_id":"public/2018/01/04/数字电路第五章:集成双稳态触发器/m.png","hash":"6437c2a49e3a39f2c12a399f6a776b4d2ec844b5","modified":1570007416238},{"_id":"public/2018/01/04/数字电路电路板汇总/i.png","hash":"9c9a0a52094fd2c6d7576ebd373f0591f804cebf","modified":1570007416238},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/y.png","hash":"3cbcab6104b8e965b71742f89c854135a9e43966","modified":1570007416238},{"_id":"public/2018/01/11/数据结构知识框架/a.png","hash":"d09c627cbc960f6b825dba0f3ad73beccf89c864","modified":1570007416239},{"_id":"public/2018/01/11/数据结构知识框架/k.png","hash":"5b297acd4aaa3f5f81b50de0510d8e82eea5014b","modified":1570007416239},{"_id":"public/2018/01/11/数据结构知识框架/d.png","hash":"ac6f2ca0db97d9074f292e19b3467c1b6e0cd101","modified":1570007416239},{"_id":"public/js/cloudTie/mobile.min.js","hash":"859e3efb15db88cedfd18f8523ecfd21f3a22324","modified":1570007416254},{"_id":"public/2018/01/04/数字电路第五章:集成双稳态触发器/d.png","hash":"8de82a04fb0d4c093cba617f7e9674253bd23d18","modified":1570007416254},{"_id":"public/2018/05/07/台湾科技大学自动查询审核结果的脚本/a.png","hash":"c0a7ef0f6e16bb2c370f0a58331c650118a2bed0","modified":1570007416255},{"_id":"public/2018/01/04/数字电路第五章:集成双稳态触发器/f.png","hash":"df8321f5c83967028b06e4d6e71ed38d4bb0d7d3","modified":1570007416255},{"_id":"public/2018/01/11/数据结构知识框架/q.png","hash":"d444e45c585b165bde70b73328dc97fbe3a2cba5","modified":1570007416255},{"_id":"public/2018/01/04/数字电路电路板汇总/l.png","hash":"afac3a11c6b436fb027953c42ff5ef9880d1db56","modified":1570007416270},{"_id":"public/2018/01/04/数字电路第五章:集成双稳态触发器/n.png","hash":"35c52d9231b210b203c38d2d34cd7a82a986b00c","modified":1570007416270},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/v.png","hash":"076c2aa0138b043fe44bc0f6721659fbdff63796","modified":1570007416271},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/j.png","hash":"8088c1fb64cc1a644491eeeb01e53e3aafc18379","modified":1570007416271},{"_id":"public/2018/01/11/数据结构知识框架/i.png","hash":"4701bce1e1bd833d0a56bb32f0471fd1a4367b2c","modified":1570007416271},{"_id":"public/2018/01/11/数据结构知识框架/j.png","hash":"3f00718d6bf0de879ad6d9f25683114469baf0bc","modified":1570007416272},{"_id":"public/2018/01/11/数据结构知识框架/e.png","hash":"30f958feaedf1e8c98e2d985e8233ef7b22779d2","modified":1570007416272},{"_id":"public/2018/01/04/数字电路电路板汇总/c.png","hash":"3dfe9d2a053c55d5a057cfb1188a304c571d34ce","modified":1570007416374},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/n.png","hash":"89deeceaf295def50fbdd6e087432a52bfa3f55f","modified":1570007416374},{"_id":"public/2018/01/11/数据结构知识框架/g.png","hash":"286cdd3614efd7756415f47b98dec20842c25f33","modified":1570007416375},{"_id":"public/2018/01/04/数字电路电路板汇总/h.png","hash":"808467ad59a02fdad9caed6b4ae860c76642321c","modified":1570007416388},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/i.png","hash":"488d17a553f08756efc2ca136753c24519418220","modified":1570007416388},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/k.png","hash":"6d38ba010761a2d5b152f84ea092a34363133b5d","modified":1570007416389},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/i.png","hash":"ac0098c787481a8bb43b1d05ded28aff2f199b6d","modified":1570007416389},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/q.png","hash":"7f890a3d59a81db3a332a175f310ca65231b45d4","modified":1570007416390},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/u.png","hash":"d224282012a9673e0a772cf1ef804bfcbe2a97b4","modified":1570007416390},{"_id":"public/css/fonts/fontawesome/fontawesome-webfont.svg","hash":"98a8aa5cf7d62c2eff5f07ede8d844b874ef06ed","modified":1570007416440},{"_id":"public/2018/01/04/数字电路电路板汇总/j.png","hash":"f9caf086f7d892099db774f8be3d65ab16953e90","modified":1570007416441},{"_id":"public/2018/01/04/数字电路第五章:集成双稳态触发器/o.png","hash":"5c8f7eb0eddee4a69042e5d47e14d981498b4735","modified":1570007416441},{"_id":"public/2018/01/11/数据结构知识框架/f.png","hash":"0660d491685e62cf05805d187d7e90486e5274eb","modified":1570007416442},{"_id":"public/css/cloudTie/pc.css","hash":"5020489bb2db5335e2a151b950f3bd20d22c2b16","modified":1570007416447},{"_id":"public/js/cloudTie/mobile.js","hash":"67a0a31ee1e491635369b0401d629e97fccd4d94","modified":1570007416447},{"_id":"public/js/cloudTie/pc.min.js","hash":"aea28510192fb36a36bf174716a39afd1ca20240","modified":1570007416447},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/m.png","hash":"2b3d7df89cba8b83872537ea9daf159588f02052","modified":1570007416447},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/e.png","hash":"af1fd731b02e48f63810a8c848ad4f243e279b7c","modified":1570007416454},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/h.png","hash":"64ef36ab250194bcc2d71dc88ba67f8bdd783dc2","modified":1570007416454},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/l.png","hash":"e1c6e443bd168ab656ddcdbf3d5bea535d96d9ef","modified":1570007416455},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/c.png","hash":"b7285b9b697ab4b0b7d1970ae18786aa78ec01bd","modified":1570007416457},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/w.png","hash":"1d08d6ab518af8a3bb79a24059bff23861a1ec92","modified":1570007416457},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/f.png","hash":"795b55b0a8628ee7ee173e3e294a64a665ba19a6","modified":1570007416461},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/q.png","hash":"3146b8c30ee7df39cb7c1778967077f94b38f8b8","modified":1570007416462},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/e.png","hash":"695d575c2ffbccccfa9e819d38f969ef7cb4696e","modified":1570007416462},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/h.png","hash":"be90a645e01585cb0b51c205e93566f14fbdc5cd","modified":1570007416463},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/k.png","hash":"cdcb8894f4322957483dabb311c7286040244cbf","modified":1570007416463},{"_id":"public/2018/01/11/数据结构知识框架/r.png","hash":"f68d67b42678b0d18824fead405b997069a3545c","modified":1570007416467},{"_id":"public/2018/01/04/数字电路电路板汇总/e.png","hash":"8a8fee85ffa6f073f02eb4b8a7b27cbf8012f753","modified":1570007416470},{"_id":"public/2018/01/04/数字电路电路板汇总/k.png","hash":"8cedd8419dade99c269a855b7f97a5398937486d","modified":1570007416470},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/o.png","hash":"7f9949fad735348366a6e45d4bedfd495db98281","modified":1570007416470},{"_id":"public/2018/01/08/数字电路:基础知识/d.png","hash":"8c7868967a7f095128e84f8a80ba3fe0bf18197f","modified":1570007416765},{"_id":"public/css/style.css","hash":"71542140cfe6cf740b91e97fa74ba297bfa71065","modified":1570007416771},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——下/j.png","hash":"c35fd1466191da04620d3aae0d4074acfb4fe060","modified":1570007416771},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/p.png","hash":"332d023fb78f7d687c302c0be58838d176741abc","modified":1570007416774},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/n.png","hash":"80116e1fff41efca15b7d86c7c80ea8348519b46","modified":1570007416777},{"_id":"public/2018/07/06/甘肃政务服务网证件办理自动查询/a.png","hash":"feb7eec8e8346d8abb967d22dbec9a6ae5e9ad9f","modified":1570007416781},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/d.png","hash":"ad94f35e53e7d7e5662fd78688ee40bd18534137","modified":1570007416782},{"_id":"public/js/cloudTie/pc.js","hash":"25d4ae345f8122f8c7e8e48959d37523dd1e4abb","modified":1570007416787},{"_id":"public/2018/01/06/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/m.png","hash":"39538294f655e034fb8a19082eae097ad6dbd982","modified":1570007416787},{"_id":"public/2018/01/04/数字电路电路板汇总/d.png","hash":"95f07e10f708e827a23ee555c2847bb48009a0c1","modified":1570007416844}],"Category":[{"name":"Linux","_id":"ck191vklu0003tzy459v7t2li"},{"name":"Android","_id":"ck191vklz0008tzy4j0gfmo47"},{"name":"烧录","_id":"ck191vkm2000dtzy4anvh1ije"},{"name":"脚本","_id":"ck191vkm6000mtzy46r2zfnvq"},{"name":"hexo","_id":"ck191vkma000ttzy4e2att10d"},{"name":"zsh","_id":"ck191vkmg0014tzy4i928krsj"},{"name":"vim","_id":"ck191vkmi001ctzy454xcjdke"},{"name":"成都游记","_id":"ck191vkmm001jtzy430lw5oje"},{"name":"数字电路","_id":"ck191vkmq001stzy49pjugjiz"},{"name":"树莓派","_id":"ck191vkn6002ntzy4lbagqn0e"},{"name":"笔记","_id":"ck191vkn8002utzy4pkt4ba74"},{"name":"汇编语言","_id":"ck191vknb0030tzy49ceroou8"},{"name":"线性代数","_id":"ck191vkoy0041tzy4kltnrefa"},{"name":"随笔","_id":"ck191vkp00047tzy43hix9bfo"}],"Data":[],"Page":[{"title":"categories","date":"2017-09-01T00:43:18.000Z","layout":"categories","comments":0,"_content":"","source":"categories/index.md","raw":"---\ntitle: categories\ndate: 2017-09-01 08:43:18\nlayout: categories\ncomments: false\n---\n","updated":"2017-09-01T00:43:39.000Z","path":"categories/index.html","_id":"ck191vklr0001tzy4c0pqm852","content":"","site":{"data":{}},"excerpt":"","more":""},{"title":"tags","layout":"tags","comments":0,"date":"2017-09-03T14:54:32.000Z","_content":"","source":"tags/index.md","raw":"---\ntitle: tags\nlayout: tags\ncomments: false\ndate: 2017-09-03 22:54:32\n---\n","updated":"2017-09-03T14:54:55.000Z","path":"tags/index.html","_id":"ck191vkpz006gtzy4lnlrafd5","content":"","site":{"data":{}},"excerpt":"","more":""},{"title":"tages","layout":"tags","comments":0,"date":"2017-09-03T14:54:32.000Z","_content":"","source":"tages/index.md","raw":"---\ntitle: tages\nlayout: tags\ncomments: false\ndate: 2017-09-03 22:54:32\n---\n","updated":"2017-09-03T15:07:24.000Z","path":"tages/index.html","_id":"ck191vkq1006itzy4vu3vbdqg","content":"","site":{"data":{}},"excerpt":"","more":""}],"Post":[{"title":"Linux的常用命令(持续更新)","date":"2017-09-08T03:16:06.000Z","_content":"\n# Linux的常用命令行\n\n## 基本入门操作\n\tcd\t\t--更换当前目录或文件夹\n\trm\t\t--删除文件(删除目录加 -r 控制符)\n\tmkdir\t\t--创建文件夹\n\trmdir\t\t--删除文件夹(只能是空的)\n\tpwd\t\t--显示当前目录\n\tcp\t\t--复制文件\n\tls\t\t--显示当前目录下的文件\n\tmvdir\t\t--移动文件夹(可用作重命名操作)\n\t\n## 网络操作","source":"_posts/Linux的常用命令(持续更新).md","raw":"---\ntitle: Linux的常用命令(持续更新)\ndate: 2017-09-08 11:16:06\ntags: \n\t - Linux\n\t - 入门\ncategories: Linux \n---\n\n# Linux的常用命令行\n\n## 基本入门操作\n\tcd\t\t--更换当前目录或文件夹\n\trm\t\t--删除文件(删除目录加 -r 控制符)\n\tmkdir\t\t--创建文件夹\n\trmdir\t\t--删除文件夹(只能是空的)\n\tpwd\t\t--显示当前目录\n\tcp\t\t--复制文件\n\tls\t\t--显示当前目录下的文件\n\tmvdir\t\t--移动文件夹(可用作重命名操作)\n\t\n## 网络操作","slug":"Linux的常用命令(持续更新)","published":1,"updated":"2017-09-08T03:30:38.000Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkln0000tzy497w0w0fj","content":"<h1 id=\"Linux的常用命令行\"><a href=\"#Linux的常用命令行\" class=\"headerlink\" title=\"Linux的常用命令行\"></a>Linux的常用命令行</h1><h2 id=\"基本入门操作\"><a href=\"#基本入门操作\" class=\"headerlink\" title=\"基本入门操作\"></a>基本入门操作</h2><pre><code>cd --更换当前目录或文件夹\nrm --删除文件(删除目录加 -r 控制符)\nmkdir --创建文件夹\nrmdir --删除文件夹(只能是空的)\npwd --显示当前目录\ncp --复制文件\nls --显示当前目录下的文件\nmvdir --移动文件夹(可用作重命名操作)\n</code></pre><h2 id=\"网络操作\"><a href=\"#网络操作\" class=\"headerlink\" title=\"网络操作\"></a>网络操作</h2>","site":{"data":{}},"excerpt":"","more":"<h1 id=\"Linux的常用命令行\"><a href=\"#Linux的常用命令行\" class=\"headerlink\" title=\"Linux的常用命令行\"></a>Linux的常用命令行</h1><h2 id=\"基本入门操作\"><a href=\"#基本入门操作\" class=\"headerlink\" title=\"基本入门操作\"></a>基本入门操作</h2><pre><code>cd --更换当前目录或文件夹\nrm --删除文件(删除目录加 -r 控制符)\nmkdir --创建文件夹\nrmdir --删除文件夹(只能是空的)\npwd --显示当前目录\ncp --复制文件\nls --显示当前目录下的文件\nmvdir --移动文件夹(可用作重命名操作)\n</code></pre><h2 id=\"网络操作\"><a href=\"#网络操作\" class=\"headerlink\" title=\"网络操作\"></a>网络操作</h2>"},{"title":"Fragment的应用","date":"2017-10-25T16:33:22.000Z","_content":"# Fragment的应用\n## 准备\n1.\t新建一个类,并继承Fragment(android.support.v4.app)\n2. 为这个类创建一个布局文件作为fragment\n3. 重写onCreatView()方法要求其返回一个view\n\n## 静态加载\n1. 建一个active以用来展示静态加载demo\n2. 注意:新建的xml文件中需要添加xml布局文件的ID\n3. xml文件中添加一个fragment,其中添加\tandroid:name=\"刚刚建的fragment的包名\"\n4. 预览种可能无法显示fragment,需要添加\ttools:layout=\"@layout/fragment_test\"\n5. 在主active中添加按钮并跳转到xml文件定义的fragment_demo中\t\tstartActivity(new Intent(this,DemoFragmentActivity.class));\n\n\n## 动态加载\n1.\t在刚才的那个xml文件中新建一个framelayout标签(容器布局)以用来存放fragment,并添加ID\n2. 添加一个button用来触发动态加载并创建事件addfragment();\n3. 创建一个fragment管理器\t\tFragmentManager fragmentManager = getSupportFragmentManager();\t(如果主类使用继承的是activity的话则获取方法为getFragmentManager();)\n4. 创建一个FragmentTransaction开启事务,并用刚才的管理器获取到FragmentTransaction对象\t\tFragmentTransaction transaction = fragmentManager.beginTransaction();\n5. 新建一个刚才的fragment类\n6. 通过fragmentTransaction事务添加fragment\t\ttransaction.add(添加到的容器的ID,添加的fragment对象);\n7. 提交事务方可加载fragment\t\ttransition.commit();\n\n \n \n \n\n**动态加载的典型代码** \n\n\n\tpublic void addFragment(View view){\n\t\tFragmentManager fragmentManager = getSupportFragmentManager();\n\t\tFragmentTransaction transaction = fragmentManager.beginTransaction();\n\t\tFragmentDemo fragmentDemo = new FragmentDemo();\n\t\ttransaction.add(R.id.framelayout,fragmentDemo);\n\t\ttransition.commit();\n\t}\n\t\n","source":"_posts/Fragment的应用.md","raw":"---\ntitle: Fragment的应用\ndate: 2017-10-26 00:33:22\ntags:\t\n\t- \tAndroid\n\t- Fragment\n\t- 入门\ncategories: Android\n---\n# Fragment的应用\n## 准备\n1.\t新建一个类,并继承Fragment(android.support.v4.app)\n2. 为这个类创建一个布局文件作为fragment\n3. 重写onCreatView()方法要求其返回一个view\n\n## 静态加载\n1. 建一个active以用来展示静态加载demo\n2. 注意:新建的xml文件中需要添加xml布局文件的ID\n3. xml文件中添加一个fragment,其中添加\tandroid:name=\"刚刚建的fragment的包名\"\n4. 预览种可能无法显示fragment,需要添加\ttools:layout=\"@layout/fragment_test\"\n5. 在主active中添加按钮并跳转到xml文件定义的fragment_demo中\t\tstartActivity(new Intent(this,DemoFragmentActivity.class));\n\n\n## 动态加载\n1.\t在刚才的那个xml文件中新建一个framelayout标签(容器布局)以用来存放fragment,并添加ID\n2. 添加一个button用来触发动态加载并创建事件addfragment();\n3. 创建一个fragment管理器\t\tFragmentManager fragmentManager = getSupportFragmentManager();\t(如果主类使用继承的是activity的话则获取方法为getFragmentManager();)\n4. 创建一个FragmentTransaction开启事务,并用刚才的管理器获取到FragmentTransaction对象\t\tFragmentTransaction transaction = fragmentManager.beginTransaction();\n5. 新建一个刚才的fragment类\n6. 通过fragmentTransaction事务添加fragment\t\ttransaction.add(添加到的容器的ID,添加的fragment对象);\n7. 提交事务方可加载fragment\t\ttransition.commit();\n\n \n \n \n\n**动态加载的典型代码** \n\n\n\tpublic void addFragment(View view){\n\t\tFragmentManager fragmentManager = getSupportFragmentManager();\n\t\tFragmentTransaction transaction = fragmentManager.beginTransaction();\n\t\tFragmentDemo fragmentDemo = new FragmentDemo();\n\t\ttransaction.add(R.id.framelayout,fragmentDemo);\n\t\ttransition.commit();\n\t}\n\t\n","slug":"Fragment的应用","published":1,"updated":"2017-10-25T16:37:44.099Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkls0002tzy46ismsa0h","content":"<h1 id=\"Fragment的应用\"><a href=\"#Fragment的应用\" class=\"headerlink\" title=\"Fragment的应用\"></a>Fragment的应用</h1><h2 id=\"准备\"><a href=\"#准备\" class=\"headerlink\" title=\"准备\"></a>准备</h2><ol>\n<li>新建一个类,并继承Fragment(android.support.v4.app)</li>\n<li>为这个类创建一个布局文件作为fragment</li>\n<li>重写onCreatView()方法要求其返回一个view</li>\n</ol>\n<h2 id=\"静态加载\"><a href=\"#静态加载\" class=\"headerlink\" title=\"静态加载\"></a>静态加载</h2><ol>\n<li>建一个active以用来展示静态加载demo</li>\n<li>注意:新建的xml文件中需要添加xml布局文件的ID</li>\n<li>xml文件中添加一个fragment,其中添加 android:name=”刚刚建的fragment的包名”</li>\n<li>预览种可能无法显示fragment,需要添加 tools:layout=”@layout/fragment_test”</li>\n<li>在主active中添加按钮并跳转到xml文件定义的fragment_demo中 startActivity(new Intent(this,DemoFragmentActivity.class));</li>\n</ol>\n<h2 id=\"动态加载\"><a href=\"#动态加载\" class=\"headerlink\" title=\"动态加载\"></a>动态加载</h2><ol>\n<li>在刚才的那个xml文件中新建一个framelayout标签(容器布局)以用来存放fragment,并添加ID</li>\n<li>添加一个button用来触发动态加载并创建事件addfragment();</li>\n<li>创建一个fragment管理器 FragmentManager fragmentManager = getSupportFragmentManager(); (如果主类使用继承的是activity的话则获取方法为getFragmentManager();)</li>\n<li>创建一个FragmentTransaction开启事务,并用刚才的管理器获取到FragmentTransaction对象 FragmentTransaction transaction = fragmentManager.beginTransaction();</li>\n<li>新建一个刚才的fragment类</li>\n<li>通过fragmentTransaction事务添加fragment transaction.add(添加到的容器的ID,添加的fragment对象);</li>\n<li>提交事务方可加载fragment transition.commit();</li>\n</ol>\n<p><strong>动态加载的典型代码</strong> </p>\n<pre><code>public void addFragment(View view){\n FragmentManager fragmentManager = getSupportFragmentManager();\n FragmentTransaction transaction = fragmentManager.beginTransaction();\n FragmentDemo fragmentDemo = new FragmentDemo();\n transaction.add(R.id.framelayout,fragmentDemo);\n transition.commit();\n}\n</code></pre>","site":{"data":{}},"excerpt":"","more":"<h1 id=\"Fragment的应用\"><a href=\"#Fragment的应用\" class=\"headerlink\" title=\"Fragment的应用\"></a>Fragment的应用</h1><h2 id=\"准备\"><a href=\"#准备\" class=\"headerlink\" title=\"准备\"></a>准备</h2><ol>\n<li>新建一个类,并继承Fragment(android.support.v4.app)</li>\n<li>为这个类创建一个布局文件作为fragment</li>\n<li>重写onCreatView()方法要求其返回一个view</li>\n</ol>\n<h2 id=\"静态加载\"><a href=\"#静态加载\" class=\"headerlink\" title=\"静态加载\"></a>静态加载</h2><ol>\n<li>建一个active以用来展示静态加载demo</li>\n<li>注意:新建的xml文件中需要添加xml布局文件的ID</li>\n<li>xml文件中添加一个fragment,其中添加 android:name=”刚刚建的fragment的包名”</li>\n<li>预览种可能无法显示fragment,需要添加 tools:layout=”@layout/fragment_test”</li>\n<li>在主active中添加按钮并跳转到xml文件定义的fragment_demo中 startActivity(new Intent(this,DemoFragmentActivity.class));</li>\n</ol>\n<h2 id=\"动态加载\"><a href=\"#动态加载\" class=\"headerlink\" title=\"动态加载\"></a>动态加载</h2><ol>\n<li>在刚才的那个xml文件中新建一个framelayout标签(容器布局)以用来存放fragment,并添加ID</li>\n<li>添加一个button用来触发动态加载并创建事件addfragment();</li>\n<li>创建一个fragment管理器 FragmentManager fragmentManager = getSupportFragmentManager(); (如果主类使用继承的是activity的话则获取方法为getFragmentManager();)</li>\n<li>创建一个FragmentTransaction开启事务,并用刚才的管理器获取到FragmentTransaction对象 FragmentTransaction transaction = fragmentManager.beginTransaction();</li>\n<li>新建一个刚才的fragment类</li>\n<li>通过fragmentTransaction事务添加fragment transaction.add(添加到的容器的ID,添加的fragment对象);</li>\n<li>提交事务方可加载fragment transition.commit();</li>\n</ol>\n<p><strong>动态加载的典型代码</strong> </p>\n<pre><code>public void addFragment(View view){\n FragmentManager fragmentManager = getSupportFragmentManager();\n FragmentTransaction transaction = fragmentManager.beginTransaction();\n FragmentDemo fragmentDemo = new FragmentDemo();\n transaction.add(R.id.framelayout,fragmentDemo);\n transition.commit();\n}\n</code></pre>"},{"title":"Mac OS下SD卡烧录镜像","date":"2018-06-05T03:21:57.000Z","_content":"# Mac OS下SD卡烧录镜像\n\n> 经常换镜像,做个笔记。\n\n## 格式化\n打开磁盘管理,选择SD卡,全部抹除,格式为FAT,不在多说。\n\n## 卸载分区\n* 打开命令行\n`diskutil list` 查看设备列表\n\n```shell\nRankin-Mac:~ Rankin$ diskutil list\n/dev/disk0 (internal):\n #: TYPE NAME SIZE IDENTIFIER\n 0: GUID_partition_scheme 500.3 GB disk0\n 1: EFI EFI 314.6 MB disk0s1\n 2: Apple_APFS Container disk1 500.0 GB disk0s2\n\n/dev/disk1 (synthesized):\n #: TYPE NAME SIZE IDENTIFIER\n 0: APFS Container Scheme - +500.0 GB disk1\n Physical Store disk0s2\n 1: APFS Volume Macintosh HD 215.0 GB disk1s1\n 2: APFS Volume Preboot 24.2 MB disk1s2\n 3: APFS Volume Recovery 517.8 MB disk1s3\n 4: APFS Volume VM 3.2 GB disk1s4\n\n/dev/disk2 (external, physical):\n #: TYPE NAME SIZE IDENTIFIER\n 0: FDisk_partition_scheme *7.9 GB disk2\n 1: DOS_FAT_32 UNTITLED 7.9 GB disk2s1\n\n/dev/disk3 (disk image):\n #: TYPE NAME SIZE IDENTIFIER\n 0: GUID_partition_scheme +314.8 GB disk3\n 1: EFI EFI 209.7 MB disk3s1\n 2: Apple_HFS 时间机器备份 314.5 GB disk3s2\n\n```\n这样的就卸载disk2的所有分区,例如disk2s1,有多的都要卸载。\n\n* 命令:`diskutil unmount /dev/disk2s1`\n\n## 烧录\n前提是准备好你的镜像iso文件。\n\n* 命令:`sudo dd bs=4m if=ubuntu-16.04.4-lxqt-aarch64-raspberrypi3b-raspberrypi3b-plus-20180428-chainsx.img of=/dev/rdisk2`\n* 注意,目标磁盘为原始磁盘rdisk*,绝对不要把数字写错。\n\n完成后会提示\n\n```\n750+0 records in \n750+0 records out\n3145728000 bytes transferred in 279.701624 secs (11246728 bytes/sec)\n```\n\n## 卸载磁盘\n* 命令:`diskutil unmountDisk /dev/disk2`\n* 完成","source":"_posts/Mac-OS下SD卡烧录镜像.md","raw":"---\ntitle: Mac OS下SD卡烧录镜像\ndate: 2018-06-05 11:21:57\ntags: [烧录,SD卡,Mac]\ncategories: 烧录\n---\n# Mac OS下SD卡烧录镜像\n\n> 经常换镜像,做个笔记。\n\n## 格式化\n打开磁盘管理,选择SD卡,全部抹除,格式为FAT,不在多说。\n\n## 卸载分区\n* 打开命令行\n`diskutil list` 查看设备列表\n\n```shell\nRankin-Mac:~ Rankin$ diskutil list\n/dev/disk0 (internal):\n #: TYPE NAME SIZE IDENTIFIER\n 0: GUID_partition_scheme 500.3 GB disk0\n 1: EFI EFI 314.6 MB disk0s1\n 2: Apple_APFS Container disk1 500.0 GB disk0s2\n\n/dev/disk1 (synthesized):\n #: TYPE NAME SIZE IDENTIFIER\n 0: APFS Container Scheme - +500.0 GB disk1\n Physical Store disk0s2\n 1: APFS Volume Macintosh HD 215.0 GB disk1s1\n 2: APFS Volume Preboot 24.2 MB disk1s2\n 3: APFS Volume Recovery 517.8 MB disk1s3\n 4: APFS Volume VM 3.2 GB disk1s4\n\n/dev/disk2 (external, physical):\n #: TYPE NAME SIZE IDENTIFIER\n 0: FDisk_partition_scheme *7.9 GB disk2\n 1: DOS_FAT_32 UNTITLED 7.9 GB disk2s1\n\n/dev/disk3 (disk image):\n #: TYPE NAME SIZE IDENTIFIER\n 0: GUID_partition_scheme +314.8 GB disk3\n 1: EFI EFI 209.7 MB disk3s1\n 2: Apple_HFS 时间机器备份 314.5 GB disk3s2\n\n```\n这样的就卸载disk2的所有分区,例如disk2s1,有多的都要卸载。\n\n* 命令:`diskutil unmount /dev/disk2s1`\n\n## 烧录\n前提是准备好你的镜像iso文件。\n\n* 命令:`sudo dd bs=4m if=ubuntu-16.04.4-lxqt-aarch64-raspberrypi3b-raspberrypi3b-plus-20180428-chainsx.img of=/dev/rdisk2`\n* 注意,目标磁盘为原始磁盘rdisk*,绝对不要把数字写错。\n\n完成后会提示\n\n```\n750+0 records in \n750+0 records out\n3145728000 bytes transferred in 279.701624 secs (11246728 bytes/sec)\n```\n\n## 卸载磁盘\n* 命令:`diskutil unmountDisk /dev/disk2`\n* 完成","slug":"Mac-OS下SD卡烧录镜像","published":1,"updated":"2018-06-05T03:32:46.207Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vklw0005tzy4fz913se0","content":"<h1 id=\"Mac-OS下SD卡烧录镜像\"><a href=\"#Mac-OS下SD卡烧录镜像\" class=\"headerlink\" title=\"Mac OS下SD卡烧录镜像\"></a>Mac OS下SD卡烧录镜像</h1><blockquote>\n<p>经常换镜像,做个笔记。</p>\n</blockquote>\n<h2 id=\"格式化\"><a href=\"#格式化\" class=\"headerlink\" title=\"格式化\"></a>格式化</h2><p>打开磁盘管理,选择SD卡,全部抹除,格式为FAT,不在多说。</p>\n<h2 id=\"卸载分区\"><a href=\"#卸载分区\" class=\"headerlink\" title=\"卸载分区\"></a>卸载分区</h2><ul>\n<li>打开命令行<br><code>diskutil list</code> 查看设备列表</li>\n</ul>\n<figure class=\"highlight shell\"><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><span class=\"line\">26</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">Rankin-Mac:~ Rankin$ diskutil list</span><br><span class=\"line\">/dev/disk0 (internal):</span><br><span class=\"line\"><span class=\"meta\"> #</span>: TYPE NAME SIZE IDENTIFIER</span><br><span class=\"line\"> 0: GUID_partition_scheme 500.3 GB disk0</span><br><span class=\"line\"> 1: EFI EFI 314.6 MB disk0s1</span><br><span class=\"line\"> 2: Apple_APFS Container disk1 500.0 GB disk0s2</span><br><span class=\"line\"></span><br><span class=\"line\">/dev/disk1 (synthesized):</span><br><span class=\"line\"><span class=\"meta\"> #</span>: TYPE NAME SIZE IDENTIFIER</span><br><span class=\"line\"> 0: APFS Container Scheme - +500.0 GB disk1</span><br><span class=\"line\"> Physical Store disk0s2</span><br><span class=\"line\"> 1: APFS Volume Macintosh HD 215.0 GB disk1s1</span><br><span class=\"line\"> 2: APFS Volume Preboot 24.2 MB disk1s2</span><br><span class=\"line\"> 3: APFS Volume Recovery 517.8 MB disk1s3</span><br><span class=\"line\"> 4: APFS Volume VM 3.2 GB disk1s4</span><br><span class=\"line\"></span><br><span class=\"line\">/dev/disk2 (external, physical):</span><br><span class=\"line\"><span class=\"meta\"> #</span>: TYPE NAME SIZE IDENTIFIER</span><br><span class=\"line\"> 0: FDisk_partition_scheme *7.9 GB disk2</span><br><span class=\"line\"> 1: DOS_FAT_32 UNTITLED 7.9 GB disk2s1</span><br><span class=\"line\"></span><br><span class=\"line\">/dev/disk3 (disk image):</span><br><span class=\"line\"><span class=\"meta\"> #</span>: TYPE NAME SIZE IDENTIFIER</span><br><span class=\"line\"> 0: GUID_partition_scheme +314.8 GB disk3</span><br><span class=\"line\"> 1: EFI EFI 209.7 MB disk3s1</span><br><span class=\"line\"> 2: Apple_HFS 时间机器备份 314.5 GB disk3s2</span><br></pre></td></tr></table></figure>\n<p>这样的就卸载disk2的所有分区,例如disk2s1,有多的都要卸载。</p>\n<ul>\n<li>命令:<code>diskutil unmount /dev/disk2s1</code></li>\n</ul>\n<h2 id=\"烧录\"><a href=\"#烧录\" class=\"headerlink\" title=\"烧录\"></a>烧录</h2><p>前提是准备好你的镜像iso文件。</p>\n<ul>\n<li>命令:<code>sudo dd bs=4m if=ubuntu-16.04.4-lxqt-aarch64-raspberrypi3b-raspberrypi3b-plus-20180428-chainsx.img of=/dev/rdisk2</code></li>\n<li>注意,目标磁盘为原始磁盘rdisk*,绝对不要把数字写错。</li>\n</ul>\n<p>完成后会提示</p>\n<figure class=\"highlight plain\"><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><span class=\"line\">750+0 records in </span><br><span class=\"line\">750+0 records out</span><br><span class=\"line\">3145728000 bytes transferred in 279.701624 secs (11246728 bytes/sec)</span><br></pre></td></tr></table></figure>\n<h2 id=\"卸载磁盘\"><a href=\"#卸载磁盘\" class=\"headerlink\" title=\"卸载磁盘\"></a>卸载磁盘</h2><ul>\n<li>命令:<code>diskutil unmountDisk /dev/disk2</code></li>\n<li>完成</li>\n</ul>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"Mac-OS下SD卡烧录镜像\"><a href=\"#Mac-OS下SD卡烧录镜像\" class=\"headerlink\" title=\"Mac OS下SD卡烧录镜像\"></a>Mac OS下SD卡烧录镜像</h1><blockquote>\n<p>经常换镜像,做个笔记。</p>\n</blockquote>\n<h2 id=\"格式化\"><a href=\"#格式化\" class=\"headerlink\" title=\"格式化\"></a>格式化</h2><p>打开磁盘管理,选择SD卡,全部抹除,格式为FAT,不在多说。</p>\n<h2 id=\"卸载分区\"><a href=\"#卸载分区\" class=\"headerlink\" title=\"卸载分区\"></a>卸载分区</h2><ul>\n<li>打开命令行<br><code>diskutil list</code> 查看设备列表</li>\n</ul>\n<figure class=\"highlight shell\"><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><span class=\"line\">26</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">Rankin-Mac:~ Rankin$ diskutil list</span><br><span class=\"line\">/dev/disk0 (internal):</span><br><span class=\"line\"><span class=\"meta\"> #</span>: TYPE NAME SIZE IDENTIFIER</span><br><span class=\"line\"> 0: GUID_partition_scheme 500.3 GB disk0</span><br><span class=\"line\"> 1: EFI EFI 314.6 MB disk0s1</span><br><span class=\"line\"> 2: Apple_APFS Container disk1 500.0 GB disk0s2</span><br><span class=\"line\"></span><br><span class=\"line\">/dev/disk1 (synthesized):</span><br><span class=\"line\"><span class=\"meta\"> #</span>: TYPE NAME SIZE IDENTIFIER</span><br><span class=\"line\"> 0: APFS Container Scheme - +500.0 GB disk1</span><br><span class=\"line\"> Physical Store disk0s2</span><br><span class=\"line\"> 1: APFS Volume Macintosh HD 215.0 GB disk1s1</span><br><span class=\"line\"> 2: APFS Volume Preboot 24.2 MB disk1s2</span><br><span class=\"line\"> 3: APFS Volume Recovery 517.8 MB disk1s3</span><br><span class=\"line\"> 4: APFS Volume VM 3.2 GB disk1s4</span><br><span class=\"line\"></span><br><span class=\"line\">/dev/disk2 (external, physical):</span><br><span class=\"line\"><span class=\"meta\"> #</span>: TYPE NAME SIZE IDENTIFIER</span><br><span class=\"line\"> 0: FDisk_partition_scheme *7.9 GB disk2</span><br><span class=\"line\"> 1: DOS_FAT_32 UNTITLED 7.9 GB disk2s1</span><br><span class=\"line\"></span><br><span class=\"line\">/dev/disk3 (disk image):</span><br><span class=\"line\"><span class=\"meta\"> #</span>: TYPE NAME SIZE IDENTIFIER</span><br><span class=\"line\"> 0: GUID_partition_scheme +314.8 GB disk3</span><br><span class=\"line\"> 1: EFI EFI 209.7 MB disk3s1</span><br><span class=\"line\"> 2: Apple_HFS 时间机器备份 314.5 GB disk3s2</span><br></pre></td></tr></table></figure>\n<p>这样的就卸载disk2的所有分区,例如disk2s1,有多的都要卸载。</p>\n<ul>\n<li>命令:<code>diskutil unmount /dev/disk2s1</code></li>\n</ul>\n<h2 id=\"烧录\"><a href=\"#烧录\" class=\"headerlink\" title=\"烧录\"></a>烧录</h2><p>前提是准备好你的镜像iso文件。</p>\n<ul>\n<li>命令:<code>sudo dd bs=4m if=ubuntu-16.04.4-lxqt-aarch64-raspberrypi3b-raspberrypi3b-plus-20180428-chainsx.img of=/dev/rdisk2</code></li>\n<li>注意,目标磁盘为原始磁盘rdisk*,绝对不要把数字写错。</li>\n</ul>\n<p>完成后会提示</p>\n<figure class=\"highlight plain\"><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><span class=\"line\">750+0 records in </span><br><span class=\"line\">750+0 records out</span><br><span class=\"line\">3145728000 bytes transferred in 279.701624 secs (11246728 bytes/sec)</span><br></pre></td></tr></table></figure>\n<h2 id=\"卸载磁盘\"><a href=\"#卸载磁盘\" class=\"headerlink\" title=\"卸载磁盘\"></a>卸载磁盘</h2><ul>\n<li>命令:<code>diskutil unmountDisk /dev/disk2</code></li>\n<li>完成</li>\n</ul>\n"},{"title":"Linux的用户及用户组","date":"2018-02-07T13:12:41.000Z","_content":"\n# Linux的用户及用户组\n## 配置文件\n\n* `/etc/group` 组信息配置文件\n* \t`/etc/passwd` 用户信息配置文件\n* `/etc/shadow` 用户密码配置文件\n* `/etc/gshadow` 组密码配置文件\n\n![](a.jpg) \n![](b.jpg)\n\n## 基本操作\n### 组操作\n`groupadd NEWGROUP`添加一个组 \n`groupadd -g 888 NEWGROUP`添加一个组并指定UID \n`grouddel NEWGROUP`删除一个组。\n`groupmod -n NEWGROUP OLDGROUP`更改组名\n`groupmod -g 888 NEWGROUP`更改组UID\n### 用户操作\n`useradd -g GROUP USER`添加一个指定用户组的用户\n`useradd -d /home/xxx USER`添加一个指定目录的的用户\n`userdel USER`删除一个用户\n`userdel -r USER`同时删除用户主目录\n`usermod -l NEWNAME USER`更改用户名\n`usermod -c BEIZHU USER`加备注\n`usermod -d /home/yyy UESR`改用户主目录\n`usermod -g GROUP USER`改组\n\n\n> 在`/etc/`下创建`nologin`文件其他用户均不能登录\n\n## 进阶操作\n### 组\n> 主要组和附属组\n\n`gpasswd -a USER GROUP,GROUP2`添加附属组\n`newgrp GROUP`切换用户组,此时可能需要组密码\n`gpasswd -d USER GROUP`删除附属组\n`useradd -g 主要组 -G 附属组,附属组 USER`新建时指定用户组\n`gpasswd GROUP`修改组密码\n\n\n### 用户\n`passwd -l USER`锁定账户\n`passwd -u USER`解锁账户\n`passwd -d USER`清除密码\n\n## 其他命令\n`su USER` 切换账户\n\n\n","source":"_posts/Linux的用户及用户组.md","raw":"---\ntitle: Linux的用户及用户组\ndate: 2018-02-07 21:12:41\ntags: [Linux,用户]\ncategories: Linux\n---\n\n# Linux的用户及用户组\n## 配置文件\n\n* `/etc/group` 组信息配置文件\n* \t`/etc/passwd` 用户信息配置文件\n* `/etc/shadow` 用户密码配置文件\n* `/etc/gshadow` 组密码配置文件\n\n![](a.jpg) \n![](b.jpg)\n\n## 基本操作\n### 组操作\n`groupadd NEWGROUP`添加一个组 \n`groupadd -g 888 NEWGROUP`添加一个组并指定UID \n`grouddel NEWGROUP`删除一个组。\n`groupmod -n NEWGROUP OLDGROUP`更改组名\n`groupmod -g 888 NEWGROUP`更改组UID\n### 用户操作\n`useradd -g GROUP USER`添加一个指定用户组的用户\n`useradd -d /home/xxx USER`添加一个指定目录的的用户\n`userdel USER`删除一个用户\n`userdel -r USER`同时删除用户主目录\n`usermod -l NEWNAME USER`更改用户名\n`usermod -c BEIZHU USER`加备注\n`usermod -d /home/yyy UESR`改用户主目录\n`usermod -g GROUP USER`改组\n\n\n> 在`/etc/`下创建`nologin`文件其他用户均不能登录\n\n## 进阶操作\n### 组\n> 主要组和附属组\n\n`gpasswd -a USER GROUP,GROUP2`添加附属组\n`newgrp GROUP`切换用户组,此时可能需要组密码\n`gpasswd -d USER GROUP`删除附属组\n`useradd -g 主要组 -G 附属组,附属组 USER`新建时指定用户组\n`gpasswd GROUP`修改组密码\n\n\n### 用户\n`passwd -l USER`锁定账户\n`passwd -u USER`解锁账户\n`passwd -d USER`清除密码\n\n## 其他命令\n`su USER` 切换账户\n\n\n","slug":"Linux的用户及用户组","published":1,"updated":"2018-02-07T13:18:16.931Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vklx0006tzy43xk4nbww","content":"<h1 id=\"Linux的用户及用户组\"><a href=\"#Linux的用户及用户组\" class=\"headerlink\" title=\"Linux的用户及用户组\"></a>Linux的用户及用户组</h1><h2 id=\"配置文件\"><a href=\"#配置文件\" class=\"headerlink\" title=\"配置文件\"></a>配置文件</h2><ul>\n<li><code>/etc/group</code> 组信息配置文件</li>\n<li><code>/etc/passwd</code> 用户信息配置文件</li>\n<li><code>/etc/shadow</code> 用户密码配置文件</li>\n<li><code>/etc/gshadow</code> 组密码配置文件</li>\n</ul>\n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"a.jpg\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> \n<p><img src=\"b.jpg\" alt></p>\n<h2 id=\"基本操作\"><a href=\"#基本操作\" class=\"headerlink\" title=\"基本操作\"></a>基本操作</h2><h3 id=\"组操作\"><a href=\"#组操作\" class=\"headerlink\" title=\"组操作\"></a>组操作</h3><p><code>groupadd NEWGROUP</code>添加一个组<br><code>groupadd -g 888 NEWGROUP</code>添加一个组并指定UID<br><code>grouddel NEWGROUP</code>删除一个组。<br><code>groupmod -n NEWGROUP OLDGROUP</code>更改组名<br><code>groupmod -g 888 NEWGROUP</code>更改组UID</p>\n<h3 id=\"用户操作\"><a href=\"#用户操作\" class=\"headerlink\" title=\"用户操作\"></a>用户操作</h3><p><code>useradd -g GROUP USER</code>添加一个指定用户组的用户<br><code>useradd -d /home/xxx USER</code>添加一个指定目录的的用户<br><code>userdel USER</code>删除一个用户<br><code>userdel -r USER</code>同时删除用户主目录<br><code>usermod -l NEWNAME USER</code>更改用户名<br><code>usermod -c BEIZHU USER</code>加备注<br><code>usermod -d /home/yyy UESR</code>改用户主目录<br><code>usermod -g GROUP USER</code>改组</p>\n<blockquote>\n<p>在<code>/etc/</code>下创建<code>nologin</code>文件其他用户均不能登录</p>\n</blockquote>\n<h2 id=\"进阶操作\"><a href=\"#进阶操作\" class=\"headerlink\" title=\"进阶操作\"></a>进阶操作</h2><h3 id=\"组\"><a href=\"#组\" class=\"headerlink\" title=\"组\"></a>组</h3><blockquote>\n<p>主要组和附属组</p>\n</blockquote>\n<p><code>gpasswd -a USER GROUP,GROUP2</code>添加附属组<br><code>newgrp GROUP</code>切换用户组,此时可能需要组密码<br><code>gpasswd -d USER GROUP</code>删除附属组<br><code>useradd -g 主要组 -G 附属组,附属组 USER</code>新建时指定用户组<br><code>gpasswd GROUP</code>修改组密码</p>\n<h3 id=\"用户\"><a href=\"#用户\" class=\"headerlink\" title=\"用户\"></a>用户</h3><p><code>passwd -l USER</code>锁定账户<br><code>passwd -u USER</code>解锁账户<br><code>passwd -d USER</code>清除密码</p>\n<h2 id=\"其他命令\"><a href=\"#其他命令\" class=\"headerlink\" title=\"其他命令\"></a>其他命令</h2><p><code>su USER</code> 切换账户</p>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"Linux的用户及用户组\"><a href=\"#Linux的用户及用户组\" class=\"headerlink\" title=\"Linux的用户及用户组\"></a>Linux的用户及用户组</h1><h2 id=\"配置文件\"><a href=\"#配置文件\" class=\"headerlink\" title=\"配置文件\"></a>配置文件</h2><ul>\n<li><code>/etc/group</code> 组信息配置文件</li>\n<li><code>/etc/passwd</code> 用户信息配置文件</li>\n<li><code>/etc/shadow</code> 用户密码配置文件</li>\n<li><code>/etc/gshadow</code> 组密码配置文件</li>\n</ul>\n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"a.jpg\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> \n<p><img src=\"b.jpg\" alt></p>\n<h2 id=\"基本操作\"><a href=\"#基本操作\" class=\"headerlink\" title=\"基本操作\"></a>基本操作</h2><h3 id=\"组操作\"><a href=\"#组操作\" class=\"headerlink\" title=\"组操作\"></a>组操作</h3><p><code>groupadd NEWGROUP</code>添加一个组<br><code>groupadd -g 888 NEWGROUP</code>添加一个组并指定UID<br><code>grouddel NEWGROUP</code>删除一个组。<br><code>groupmod -n NEWGROUP OLDGROUP</code>更改组名<br><code>groupmod -g 888 NEWGROUP</code>更改组UID</p>\n<h3 id=\"用户操作\"><a href=\"#用户操作\" class=\"headerlink\" title=\"用户操作\"></a>用户操作</h3><p><code>useradd -g GROUP USER</code>添加一个指定用户组的用户<br><code>useradd -d /home/xxx USER</code>添加一个指定目录的的用户<br><code>userdel USER</code>删除一个用户<br><code>userdel -r USER</code>同时删除用户主目录<br><code>usermod -l NEWNAME USER</code>更改用户名<br><code>usermod -c BEIZHU USER</code>加备注<br><code>usermod -d /home/yyy UESR</code>改用户主目录<br><code>usermod -g GROUP USER</code>改组</p>\n<blockquote>\n<p>在<code>/etc/</code>下创建<code>nologin</code>文件其他用户均不能登录</p>\n</blockquote>\n<h2 id=\"进阶操作\"><a href=\"#进阶操作\" class=\"headerlink\" title=\"进阶操作\"></a>进阶操作</h2><h3 id=\"组\"><a href=\"#组\" class=\"headerlink\" title=\"组\"></a>组</h3><blockquote>\n<p>主要组和附属组</p>\n</blockquote>\n<p><code>gpasswd -a USER GROUP,GROUP2</code>添加附属组<br><code>newgrp GROUP</code>切换用户组,此时可能需要组密码<br><code>gpasswd -d USER GROUP</code>删除附属组<br><code>useradd -g 主要组 -G 附属组,附属组 USER</code>新建时指定用户组<br><code>gpasswd GROUP</code>修改组密码</p>\n<h3 id=\"用户\"><a href=\"#用户\" class=\"headerlink\" title=\"用户\"></a>用户</h3><p><code>passwd -l USER</code>锁定账户<br><code>passwd -u USER</code>解锁账户<br><code>passwd -d USER</code>清除密码</p>\n<h2 id=\"其他命令\"><a href=\"#其他命令\" class=\"headerlink\" title=\"其他命令\"></a>其他命令</h2><p><code>su USER</code> 切换账户</p>\n"},{"title":"MySQL中文的坑","originContent":"","toc":true,"date":"2019-06-04T07:28:46.000Z","_content":"\n> 小程序准备上线了,为了保证稳定性和数据库的安全准备从sqlite迁移到mysql,结果我就日了狗了。。。。。\n\n现象:mysql中文字段报错:比如:`Incorrect string value: ‘\\xF0\\x9F\\x98\\x83 <…’ for column ‘summary’ at row 1` \n问题:明显是编码错误,环境是Macos+python3+Django。和明显不是我的编码问题。于是直接进行数据库操作` insert into app_lzuuserinfo (anameu) values (\"冉\");`还是报错,说明是数据库的编码问题 \n解决:\n\n这tm我就要好好说道说道了。第一步百度,答案清一色的是该数据库编码格式为utf8,但是我的数据库就是utf8的。无语,陷入死胡同,于是总觉得是没有生效的问题反复使用和修改`set character_set_character=utf8;`\n和mysqld.cnf。最后毫无用处。\n\n第二步,roseahan去Google了一下。。。。于是看到了这篇文章:\n> https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434\n\nmdzz.... \n大概意思如下:mysql的utf8不是我们的UTF-8,他的utf8是3个byte的编码格式,我们的UTF-8是四个字节的编码格式,所以改了utf8也不可能生效,所以我不知道为什么大家清一色的去改utf8...而且文章提出是mysql一直以来的bug没有解决,官方给出的解决方案是使用`utf8mb4`编码,这里的才是我们使用的UTF-8编码格式,同时emoji也是使用的这种格式。同时这个bug解决不了,官方也一直没有“声张”,所以。。。。。nb。下面给出解决方案,可以的话还是去我刚才的网站看吧。\n\nmethod: \n> https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4\nrequire:mysql > 5.5.3\n1. 对于已存在的表: \n```\n# For each database:\nALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;\n# For each table:\nALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\n# For each column:\nALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\n# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)\n```\n\n2. Check the maximum length of columns and index keys自行检查最大长度\n3. Modify connection, client, and server character sets\n老规矩修改cnf\n```\n[client]\ndefault-character-set = utf8mb4\n\n[mysql]\ndefault-character-set = utf8mb4\n\n[mysqld]\ncharacter-set-client-handshake = FALSE\ncharacter-set-server = utf8mb4\ncollation-server = utf8mb4_unicode_ci\n```\n都是utf8mb4,\n4. 重启。\n5. 再去检查一下数据库的编码,就没问题了。\n\n> 吐槽:baidu is a shit!the same as 闭眼睛转发的人\n\n\n\n\n","source":"_posts/MySQL中文的坑.md","raw":"---\ntitle: MySQL中文的坑\ntags: []\ncategories: []\noriginContent: ''\ntoc: true\ndate: 2019-06-04 15:28:46\n---\n\n> 小程序准备上线了,为了保证稳定性和数据库的安全准备从sqlite迁移到mysql,结果我就日了狗了。。。。。\n\n现象:mysql中文字段报错:比如:`Incorrect string value: ‘\\xF0\\x9F\\x98\\x83 <…’ for column ‘summary’ at row 1` \n问题:明显是编码错误,环境是Macos+python3+Django。和明显不是我的编码问题。于是直接进行数据库操作` insert into app_lzuuserinfo (anameu) values (\"冉\");`还是报错,说明是数据库的编码问题 \n解决:\n\n这tm我就要好好说道说道了。第一步百度,答案清一色的是该数据库编码格式为utf8,但是我的数据库就是utf8的。无语,陷入死胡同,于是总觉得是没有生效的问题反复使用和修改`set character_set_character=utf8;`\n和mysqld.cnf。最后毫无用处。\n\n第二步,roseahan去Google了一下。。。。于是看到了这篇文章:\n> https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434\n\nmdzz.... \n大概意思如下:mysql的utf8不是我们的UTF-8,他的utf8是3个byte的编码格式,我们的UTF-8是四个字节的编码格式,所以改了utf8也不可能生效,所以我不知道为什么大家清一色的去改utf8...而且文章提出是mysql一直以来的bug没有解决,官方给出的解决方案是使用`utf8mb4`编码,这里的才是我们使用的UTF-8编码格式,同时emoji也是使用的这种格式。同时这个bug解决不了,官方也一直没有“声张”,所以。。。。。nb。下面给出解决方案,可以的话还是去我刚才的网站看吧。\n\nmethod: \n> https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4\nrequire:mysql > 5.5.3\n1. 对于已存在的表: \n```\n# For each database:\nALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;\n# For each table:\nALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\n# For each column:\nALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\n# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)\n```\n\n2. Check the maximum length of columns and index keys自行检查最大长度\n3. Modify connection, client, and server character sets\n老规矩修改cnf\n```\n[client]\ndefault-character-set = utf8mb4\n\n[mysql]\ndefault-character-set = utf8mb4\n\n[mysqld]\ncharacter-set-client-handshake = FALSE\ncharacter-set-server = utf8mb4\ncollation-server = utf8mb4_unicode_ci\n```\n都是utf8mb4,\n4. 重启。\n5. 再去检查一下数据库的编码,就没问题了。\n\n> 吐槽:baidu is a shit!the same as 闭眼睛转发的人\n\n\n\n\n","slug":"MySQL中文的坑","published":1,"updated":"2019-06-04T07:28:46.605Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkly0007tzy4dfk6bbed","content":"<blockquote>\n<p>小程序准备上线了,为了保证稳定性和数据库的安全准备从sqlite迁移到mysql,结果我就日了狗了。。。。。</p>\n</blockquote>\n<p>现象:mysql中文字段报错:比如:<code>Incorrect string value: ‘\\xF0\\x9F\\x98\\x83 <…’ for column ‘summary’ at row 1</code><br>问题:明显是编码错误,环境是Macos+python3+Django。和明显不是我的编码问题。于是直接进行数据库操作<code>insert into app_lzuuserinfo (anameu) values ("冉");</code>还是报错,说明是数据库的编码问题<br>解决:</p>\n<p>这tm我就要好好说道说道了。第一步百度,答案清一色的是该数据库编码格式为utf8,但是我的数据库就是utf8的。无语,陷入死胡同,于是总觉得是没有生效的问题反复使用和修改<code>set character_set_character=utf8;</code><br>和mysqld.cnf。最后毫无用处。</p>\n<p>第二步,roseahan去Google了一下。。。。于是看到了这篇文章:</p>\n<blockquote>\n<p><a href=\"https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434\" target=\"_blank\" rel=\"noopener\">https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434</a></p>\n</blockquote>\n<p>mdzz….<br>大概意思如下:mysql的utf8不是我们的UTF-8,他的utf8是3个byte的编码格式,我们的UTF-8是四个字节的编码格式,所以改了utf8也不可能生效,所以我不知道为什么大家清一色的去改utf8…而且文章提出是mysql一直以来的bug没有解决,官方给出的解决方案是使用<code>utf8mb4</code>编码,这里的才是我们使用的UTF-8编码格式,同时emoji也是使用的这种格式。同时这个bug解决不了,官方也一直没有“声张”,所以。。。。。nb。下面给出解决方案,可以的话还是去我刚才的网站看吧。</p>\n<p>method: </p>\n<blockquote>\n<p><a href=\"https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4\" target=\"_blank\" rel=\"noopener\">https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4</a><br>require:mysql > 5.5.3</p>\n<ol>\n<li>对于已存在的表: <figure class=\"highlight plain\"><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><span class=\"line\"># For each database:</span><br><span class=\"line\">ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;</span><br><span class=\"line\"># For each table:</span><br><span class=\"line\">ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;</span><br><span class=\"line\"># For each column:</span><br><span class=\"line\">ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;</span><br><span class=\"line\"># (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)</span><br></pre></td></tr></table></figure>\n</li>\n</ol>\n</blockquote>\n<ol start=\"2\">\n<li>Check the maximum length of columns and index keys自行检查最大长度</li>\n<li>Modify connection, client, and server character sets<br>老规矩修改cnf<figure class=\"highlight plain\"><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><span class=\"line\">[client]</span><br><span class=\"line\">default-character-set = utf8mb4</span><br><span class=\"line\"></span><br><span class=\"line\">[mysql]</span><br><span class=\"line\">default-character-set = utf8mb4</span><br><span class=\"line\"></span><br><span class=\"line\">[mysqld]</span><br><span class=\"line\">character-set-client-handshake = FALSE</span><br><span class=\"line\">character-set-server = utf8mb4</span><br><span class=\"line\">collation-server = utf8mb4_unicode_ci</span><br></pre></td></tr></table></figure>\n</li>\n</ol>\n<p>都是utf8mb4,</p>\n<ol start=\"4\">\n<li>重启。</li>\n<li>再去检查一下数据库的编码,就没问题了。</li>\n</ol>\n<blockquote>\n<p>吐槽:baidu is a shit!the same as 闭眼睛转发的人</p>\n</blockquote>\n","site":{"data":{}},"excerpt":"","more":"<blockquote>\n<p>小程序准备上线了,为了保证稳定性和数据库的安全准备从sqlite迁移到mysql,结果我就日了狗了。。。。。</p>\n</blockquote>\n<p>现象:mysql中文字段报错:比如:<code>Incorrect string value: ‘\\xF0\\x9F\\x98\\x83 <…’ for column ‘summary’ at row 1</code><br>问题:明显是编码错误,环境是Macos+python3+Django。和明显不是我的编码问题。于是直接进行数据库操作<code>insert into app_lzuuserinfo (anameu) values ("冉");</code>还是报错,说明是数据库的编码问题<br>解决:</p>\n<p>这tm我就要好好说道说道了。第一步百度,答案清一色的是该数据库编码格式为utf8,但是我的数据库就是utf8的。无语,陷入死胡同,于是总觉得是没有生效的问题反复使用和修改<code>set character_set_character=utf8;</code><br>和mysqld.cnf。最后毫无用处。</p>\n<p>第二步,roseahan去Google了一下。。。。于是看到了这篇文章:</p>\n<blockquote>\n<p><a href=\"https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434\" target=\"_blank\" rel=\"noopener\">https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434</a></p>\n</blockquote>\n<p>mdzz….<br>大概意思如下:mysql的utf8不是我们的UTF-8,他的utf8是3个byte的编码格式,我们的UTF-8是四个字节的编码格式,所以改了utf8也不可能生效,所以我不知道为什么大家清一色的去改utf8…而且文章提出是mysql一直以来的bug没有解决,官方给出的解决方案是使用<code>utf8mb4</code>编码,这里的才是我们使用的UTF-8编码格式,同时emoji也是使用的这种格式。同时这个bug解决不了,官方也一直没有“声张”,所以。。。。。nb。下面给出解决方案,可以的话还是去我刚才的网站看吧。</p>\n<p>method: </p>\n<blockquote>\n<p><a href=\"https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4\" target=\"_blank\" rel=\"noopener\">https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4</a><br>require:mysql > 5.5.3</p>\n<ol>\n<li>对于已存在的表: <figure class=\"highlight plain\"><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><span class=\"line\"># For each database:</span><br><span class=\"line\">ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;</span><br><span class=\"line\"># For each table:</span><br><span class=\"line\">ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;</span><br><span class=\"line\"># For each column:</span><br><span class=\"line\">ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;</span><br><span class=\"line\"># (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)</span><br></pre></td></tr></table></figure>\n</li>\n</ol>\n</blockquote>\n<ol start=\"2\">\n<li>Check the maximum length of columns and index keys自行检查最大长度</li>\n<li>Modify connection, client, and server character sets<br>老规矩修改cnf<figure class=\"highlight plain\"><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><span class=\"line\">[client]</span><br><span class=\"line\">default-character-set = utf8mb4</span><br><span class=\"line\"></span><br><span class=\"line\">[mysql]</span><br><span class=\"line\">default-character-set = utf8mb4</span><br><span class=\"line\"></span><br><span class=\"line\">[mysqld]</span><br><span class=\"line\">character-set-client-handshake = FALSE</span><br><span class=\"line\">character-set-server = utf8mb4</span><br><span class=\"line\">collation-server = utf8mb4_unicode_ci</span><br></pre></td></tr></table></figure>\n</li>\n</ol>\n<p>都是utf8mb4,</p>\n<ol start=\"4\">\n<li>重启。</li>\n<li>再去检查一下数据库的编码,就没问题了。</li>\n</ol>\n<blockquote>\n<p>吐槽:baidu is a shit!the same as 闭眼睛转发的人</p>\n</blockquote>\n"},{"title":"Ubuntu上启动ftp服务","date":"2018-02-07T13:13:49.000Z","_content":"# Ubuntu上启动ftp服务\n\n## 安装并启动VSFTPD\n* 安装VSFTPD\n`sudo apt-get install vsftpd -y`\n* 启动VSFTPD(会自动启动若未启动)\n`sudo systemctl start vsftpd.service`\n* 检测端口,判断是否启动。\n`sudo netstat -nltp | grep` \n\n## 配置用户访问目录\n* 新建主目录\n* 新建用户并设置密码\n`sudo useradd -d /home/uftp -s /bin/bash uftp`\n`sudo passwd uftp`\n`sudo rm /etc/pam.d/vsftpd`(这里删除该配置文件,因为会导致使用用户名登录FTP失败)\n* 限制用户只能通过FTP访问\n`sudo usermod -s /sbin/nologin uftp`\n* 修改VSFTPD配置\n`sudo chmod a+w /etc/vsftpd.conf`\n下面修改`/etc/vsftpd.conf `文件中的配置(添加到最下面)\n\n\t\t# 限制用户对主目录以外目录访问\n\t\tchroot_local_user=YES\n\t\t\n\t\t# 指定一个 userlist 存放允许访问 ftp 的用户列表\n\t\tuserlist_deny=NO\n\t\tuserlist_enable=YES\n\t\t\n\t\t# 记录允许访问 ftp 用户列表\n\t\tuserlist_file=/etc/vsftpd.user_list\n\t\t\n\t\t# 不配置可能导致莫名的530问题\n\t\tseccomp_sandbox=NO\n\t\t\n\t\t# 允许文件上传\n\t\twrite_enable=YES\n\t\t\n\t\t# 使用utf8编码\n\t\tutf8_filesystem=YES\n新建文件`/etc/vsftpd.user_list`用于存放允许访问FTP的用户\n`sudo touch /etc/vsftpd.user_list`\n`sudo chmod a+w /etc/vsftpd.user_list`\n并修改,加入刚刚创建的用户\n\n* 设置访问限权 \n设置主目录访问权限(只读):`sudo chmod a-w /home/uftp`\n设置公共目录,设置可读写:`sudo mkdir /home/uftp/public && sudo chmod 777 -R /home/uftp/public`\n重启VSFTPD服务:`sudo systemctl restart vsftpd.service`\n\n## 完\n","source":"_posts/Ubuntu上启动ftp服务.md","raw":"---\ntitle: Ubuntu上启动ftp服务\ndate: 2018-02-07 21:13:49\ntags: [Linux,FTP]\ncategories: Linux\n---\n# Ubuntu上启动ftp服务\n\n## 安装并启动VSFTPD\n* 安装VSFTPD\n`sudo apt-get install vsftpd -y`\n* 启动VSFTPD(会自动启动若未启动)\n`sudo systemctl start vsftpd.service`\n* 检测端口,判断是否启动。\n`sudo netstat -nltp | grep` \n\n## 配置用户访问目录\n* 新建主目录\n* 新建用户并设置密码\n`sudo useradd -d /home/uftp -s /bin/bash uftp`\n`sudo passwd uftp`\n`sudo rm /etc/pam.d/vsftpd`(这里删除该配置文件,因为会导致使用用户名登录FTP失败)\n* 限制用户只能通过FTP访问\n`sudo usermod -s /sbin/nologin uftp`\n* 修改VSFTPD配置\n`sudo chmod a+w /etc/vsftpd.conf`\n下面修改`/etc/vsftpd.conf `文件中的配置(添加到最下面)\n\n\t\t# 限制用户对主目录以外目录访问\n\t\tchroot_local_user=YES\n\t\t\n\t\t# 指定一个 userlist 存放允许访问 ftp 的用户列表\n\t\tuserlist_deny=NO\n\t\tuserlist_enable=YES\n\t\t\n\t\t# 记录允许访问 ftp 用户列表\n\t\tuserlist_file=/etc/vsftpd.user_list\n\t\t\n\t\t# 不配置可能导致莫名的530问题\n\t\tseccomp_sandbox=NO\n\t\t\n\t\t# 允许文件上传\n\t\twrite_enable=YES\n\t\t\n\t\t# 使用utf8编码\n\t\tutf8_filesystem=YES\n新建文件`/etc/vsftpd.user_list`用于存放允许访问FTP的用户\n`sudo touch /etc/vsftpd.user_list`\n`sudo chmod a+w /etc/vsftpd.user_list`\n并修改,加入刚刚创建的用户\n\n* 设置访问限权 \n设置主目录访问权限(只读):`sudo chmod a-w /home/uftp`\n设置公共目录,设置可读写:`sudo mkdir /home/uftp/public && sudo chmod 777 -R /home/uftp/public`\n重启VSFTPD服务:`sudo systemctl restart vsftpd.service`\n\n## 完\n","slug":"Ubuntu上启动ftp服务","published":1,"updated":"2018-02-07T13:16:20.832Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkm0000atzy4huueqo10","content":"<h1 id=\"Ubuntu上启动ftp服务\"><a href=\"#Ubuntu上启动ftp服务\" class=\"headerlink\" title=\"Ubuntu上启动ftp服务\"></a>Ubuntu上启动ftp服务</h1><h2 id=\"安装并启动VSFTPD\"><a href=\"#安装并启动VSFTPD\" class=\"headerlink\" title=\"安装并启动VSFTPD\"></a>安装并启动VSFTPD</h2><ul>\n<li>安装VSFTPD<br><code>sudo apt-get install vsftpd -y</code></li>\n<li>启动VSFTPD(会自动启动若未启动)<br><code>sudo systemctl start vsftpd.service</code></li>\n<li>检测端口,判断是否启动。<br><code>sudo netstat -nltp | grep</code> </li>\n</ul>\n<h2 id=\"配置用户访问目录\"><a href=\"#配置用户访问目录\" class=\"headerlink\" title=\"配置用户访问目录\"></a>配置用户访问目录</h2><ul>\n<li>新建主目录</li>\n<li>新建用户并设置密码<br><code>sudo useradd -d /home/uftp -s /bin/bash uftp</code><br><code>sudo passwd uftp</code><br><code>sudo rm /etc/pam.d/vsftpd</code>(这里删除该配置文件,因为会导致使用用户名登录FTP失败)</li>\n<li>限制用户只能通过FTP访问<br><code>sudo usermod -s /sbin/nologin uftp</code></li>\n<li><p>修改VSFTPD配置<br><code>sudo chmod a+w /etc/vsftpd.conf</code><br>下面修改<code>/etc/vsftpd.conf</code>文件中的配置(添加到最下面)</p>\n<pre><code># 限制用户对主目录以外目录访问\nchroot_local_user=YES\n\n# 指定一个 userlist 存放允许访问 ftp 的用户列表\nuserlist_deny=NO\nuserlist_enable=YES\n\n# 记录允许访问 ftp 用户列表\nuserlist_file=/etc/vsftpd.user_list\n\n# 不配置可能导致莫名的530问题\nseccomp_sandbox=NO\n\n# 允许文件上传\nwrite_enable=YES\n\n# 使用utf8编码\nutf8_filesystem=YES\n</code></pre><p>新建文件<code>/etc/vsftpd.user_list</code>用于存放允许访问FTP的用户<br><code>sudo touch /etc/vsftpd.user_list</code><br><code>sudo chmod a+w /etc/vsftpd.user_list</code><br>并修改,加入刚刚创建的用户</p>\n</li>\n<li><p>设置访问限权<br>设置主目录访问权限(只读):<code>sudo chmod a-w /home/uftp</code><br>设置公共目录,设置可读写:<code>sudo mkdir /home/uftp/public && sudo chmod 777 -R /home/uftp/public</code><br>重启VSFTPD服务:<code>sudo systemctl restart vsftpd.service</code></p>\n</li>\n</ul>\n<h2 id=\"完\"><a href=\"#完\" class=\"headerlink\" title=\"完\"></a>完</h2>","site":{"data":{}},"excerpt":"","more":"<h1 id=\"Ubuntu上启动ftp服务\"><a href=\"#Ubuntu上启动ftp服务\" class=\"headerlink\" title=\"Ubuntu上启动ftp服务\"></a>Ubuntu上启动ftp服务</h1><h2 id=\"安装并启动VSFTPD\"><a href=\"#安装并启动VSFTPD\" class=\"headerlink\" title=\"安装并启动VSFTPD\"></a>安装并启动VSFTPD</h2><ul>\n<li>安装VSFTPD<br><code>sudo apt-get install vsftpd -y</code></li>\n<li>启动VSFTPD(会自动启动若未启动)<br><code>sudo systemctl start vsftpd.service</code></li>\n<li>检测端口,判断是否启动。<br><code>sudo netstat -nltp | grep</code> </li>\n</ul>\n<h2 id=\"配置用户访问目录\"><a href=\"#配置用户访问目录\" class=\"headerlink\" title=\"配置用户访问目录\"></a>配置用户访问目录</h2><ul>\n<li>新建主目录</li>\n<li>新建用户并设置密码<br><code>sudo useradd -d /home/uftp -s /bin/bash uftp</code><br><code>sudo passwd uftp</code><br><code>sudo rm /etc/pam.d/vsftpd</code>(这里删除该配置文件,因为会导致使用用户名登录FTP失败)</li>\n<li>限制用户只能通过FTP访问<br><code>sudo usermod -s /sbin/nologin uftp</code></li>\n<li><p>修改VSFTPD配置<br><code>sudo chmod a+w /etc/vsftpd.conf</code><br>下面修改<code>/etc/vsftpd.conf</code>文件中的配置(添加到最下面)</p>\n<pre><code># 限制用户对主目录以外目录访问\nchroot_local_user=YES\n\n# 指定一个 userlist 存放允许访问 ftp 的用户列表\nuserlist_deny=NO\nuserlist_enable=YES\n\n# 记录允许访问 ftp 用户列表\nuserlist_file=/etc/vsftpd.user_list\n\n# 不配置可能导致莫名的530问题\nseccomp_sandbox=NO\n\n# 允许文件上传\nwrite_enable=YES\n\n# 使用utf8编码\nutf8_filesystem=YES\n</code></pre><p>新建文件<code>/etc/vsftpd.user_list</code>用于存放允许访问FTP的用户<br><code>sudo touch /etc/vsftpd.user_list</code><br><code>sudo chmod a+w /etc/vsftpd.user_list</code><br>并修改,加入刚刚创建的用户</p>\n</li>\n<li><p>设置访问限权<br>设置主目录访问权限(只读):<code>sudo chmod a-w /home/uftp</code><br>设置公共目录,设置可读写:<code>sudo mkdir /home/uftp/public && sudo chmod 777 -R /home/uftp/public</code><br>重启VSFTPD服务:<code>sudo systemctl restart vsftpd.service</code></p>\n</li>\n</ul>\n<h2 id=\"完\"><a href=\"#完\" class=\"headerlink\" title=\"完\"></a>完</h2>"},{"title":"Hello World","_content":"Welcome to [Hexo](https://hexo.io/)! This is your very first post. Check [documentation](https://hexo.io/docs/) for more info. If you get any problems when using Hexo, you can find the answer in [troubleshooting](https://hexo.io/docs/troubleshooting.html) or you can ask me on [GitHub](https://github.com/hexojs/hexo/issues).\n\n## Quick Start\n\n### Create a new post\n\n``` bash\n$ hexo new \"My New Post\"\n```\n\nMore info: [Writing](https://hexo.io/docs/writing.html)\n\n### Run server\n\n``` bash\n$ hexo server\n```\n\nMore info: [Server](https://hexo.io/docs/server.html)\n\n### Generate static files\n\n``` bash\n$ hexo generate\n```\n\nMore info: [Generating](https://hexo.io/docs/generating.html)\n\n### Deploy to remote sites\n\n``` bash\n$ hexo deploy\n```\n\nMore info: [Deployment](https://hexo.io/docs/deployment.html)\n","source":"_posts/hello-world.md","raw":"---\ntitle: Hello World\ntags: hexo\n---\nWelcome to [Hexo](https://hexo.io/)! This is your very first post. Check [documentation](https://hexo.io/docs/) for more info. If you get any problems when using Hexo, you can find the answer in [troubleshooting](https://hexo.io/docs/troubleshooting.html) or you can ask me on [GitHub](https://github.com/hexojs/hexo/issues).\n\n## Quick Start\n\n### Create a new post\n\n``` bash\n$ hexo new \"My New Post\"\n```\n\nMore info: [Writing](https://hexo.io/docs/writing.html)\n\n### Run server\n\n``` bash\n$ hexo server\n```\n\nMore info: [Server](https://hexo.io/docs/server.html)\n\n### Generate static files\n\n``` bash\n$ hexo generate\n```\n\nMore info: [Generating](https://hexo.io/docs/generating.html)\n\n### Deploy to remote sites\n\n``` bash\n$ hexo deploy\n```\n\nMore info: [Deployment](https://hexo.io/docs/deployment.html)\n","slug":"hello-world","published":1,"date":"2017-08-31T16:00:39.000Z","updated":"2017-09-08T03:32:46.000Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkm1000btzy4uo6f000a","content":"<p>Welcome to <a href=\"https://hexo.io/\" target=\"_blank\" rel=\"noopener\">Hexo</a>! This is your very first post. Check <a href=\"https://hexo.io/docs/\" target=\"_blank\" rel=\"noopener\">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href=\"https://hexo.io/docs/troubleshooting.html\" target=\"_blank\" rel=\"noopener\">troubleshooting</a> or you can ask me on <a href=\"https://github.com/hexojs/hexo/issues\" target=\"_blank\" rel=\"noopener\">GitHub</a>.</p>\n<h2 id=\"Quick-Start\"><a href=\"#Quick-Start\" class=\"headerlink\" title=\"Quick Start\"></a>Quick Start</h2><h3 id=\"Create-a-new-post\"><a href=\"#Create-a-new-post\" class=\"headerlink\" title=\"Create a new post\"></a>Create a new post</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">$ hexo new <span class=\"string\">\"My New Post\"</span></span><br></pre></td></tr></table></figure>\n<p>More info: <a href=\"https://hexo.io/docs/writing.html\" target=\"_blank\" rel=\"noopener\">Writing</a></p>\n<h3 id=\"Run-server\"><a href=\"#Run-server\" class=\"headerlink\" title=\"Run server\"></a>Run server</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">$ hexo server</span><br></pre></td></tr></table></figure>\n<p>More info: <a href=\"https://hexo.io/docs/server.html\" target=\"_blank\" rel=\"noopener\">Server</a></p>\n<h3 id=\"Generate-static-files\"><a href=\"#Generate-static-files\" class=\"headerlink\" title=\"Generate static files\"></a>Generate static files</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">$ hexo generate</span><br></pre></td></tr></table></figure>\n<p>More info: <a href=\"https://hexo.io/docs/generating.html\" target=\"_blank\" rel=\"noopener\">Generating</a></p>\n<h3 id=\"Deploy-to-remote-sites\"><a href=\"#Deploy-to-remote-sites\" class=\"headerlink\" title=\"Deploy to remote sites\"></a>Deploy to remote sites</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">$ hexo deploy</span><br></pre></td></tr></table></figure>\n<p>More info: <a href=\"https://hexo.io/docs/deployment.html\" target=\"_blank\" rel=\"noopener\">Deployment</a></p>\n","site":{"data":{}},"excerpt":"","more":"<p>Welcome to <a href=\"https://hexo.io/\" target=\"_blank\" rel=\"noopener\">Hexo</a>! This is your very first post. Check <a href=\"https://hexo.io/docs/\" target=\"_blank\" rel=\"noopener\">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href=\"https://hexo.io/docs/troubleshooting.html\" target=\"_blank\" rel=\"noopener\">troubleshooting</a> or you can ask me on <a href=\"https://github.com/hexojs/hexo/issues\" target=\"_blank\" rel=\"noopener\">GitHub</a>.</p>\n<h2 id=\"Quick-Start\"><a href=\"#Quick-Start\" class=\"headerlink\" title=\"Quick Start\"></a>Quick Start</h2><h3 id=\"Create-a-new-post\"><a href=\"#Create-a-new-post\" class=\"headerlink\" title=\"Create a new post\"></a>Create a new post</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">$ hexo new <span class=\"string\">\"My New Post\"</span></span><br></pre></td></tr></table></figure>\n<p>More info: <a href=\"https://hexo.io/docs/writing.html\" target=\"_blank\" rel=\"noopener\">Writing</a></p>\n<h3 id=\"Run-server\"><a href=\"#Run-server\" class=\"headerlink\" title=\"Run server\"></a>Run server</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">$ hexo server</span><br></pre></td></tr></table></figure>\n<p>More info: <a href=\"https://hexo.io/docs/server.html\" target=\"_blank\" rel=\"noopener\">Server</a></p>\n<h3 id=\"Generate-static-files\"><a href=\"#Generate-static-files\" class=\"headerlink\" title=\"Generate static files\"></a>Generate static files</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">$ hexo generate</span><br></pre></td></tr></table></figure>\n<p>More info: <a href=\"https://hexo.io/docs/generating.html\" target=\"_blank\" rel=\"noopener\">Generating</a></p>\n<h3 id=\"Deploy-to-remote-sites\"><a href=\"#Deploy-to-remote-sites\" class=\"headerlink\" title=\"Deploy to remote sites\"></a>Deploy to remote sites</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">$ hexo deploy</span><br></pre></td></tr></table></figure>\n<p>More info: <a href=\"https://hexo.io/docs/deployment.html\" target=\"_blank\" rel=\"noopener\">Deployment</a></p>\n"},{"title":"linux后台运行脚本的指令","toc":true,"date":"2019-07-19T13:27:14.000Z","_content":"\n> 写给RoseauHan的\n\n## How\n举个栗子\n\n`sudo nohup python3 -u AppleDeliverMail.py > log & echo $! > pid`\n\n## Why\nnohup一般是需要挂后台长时间执行的脚本用的。\nbg和fg指令只用于切换终端的前后台进程,如果终端断开连接,脚本也会被退出,所以长时间的脚本一般情况用nohup指令\n\n## Stop\n命令后面会保存pid到文件中,所以不用担心pid找不到(找不到就ps呗,但是我还是喜欢记下来),终止的时候kill掉就好了","source":"_posts/howtorunscriptonlinux.md","raw":"---\ntitle: linux后台运行脚本的指令\ntags: []\ncategories:\n - 脚本\ntoc: true\ndate: 2019-07-19 21:27:14\n---\n\n> 写给RoseauHan的\n\n## How\n举个栗子\n\n`sudo nohup python3 -u AppleDeliverMail.py > log & echo $! > pid`\n\n## Why\nnohup一般是需要挂后台长时间执行的脚本用的。\nbg和fg指令只用于切换终端的前后台进程,如果终端断开连接,脚本也会被退出,所以长时间的脚本一般情况用nohup指令\n\n## Stop\n命令后面会保存pid到文件中,所以不用担心pid找不到(找不到就ps呗,但是我还是喜欢记下来),终止的时候kill掉就好了","slug":"howtorunscriptonlinux","published":1,"updated":"2019-07-19T13:34:05.884Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkm3000ftzy4h8xcg6yw","content":"<blockquote>\n<p>写给RoseauHan的</p>\n</blockquote>\n<h2 id=\"How\"><a href=\"#How\" class=\"headerlink\" title=\"How\"></a>How</h2><p>举个栗子</p>\n<p><code>sudo nohup python3 -u AppleDeliverMail.py > log & echo $! > pid</code></p>\n<h2 id=\"Why\"><a href=\"#Why\" class=\"headerlink\" title=\"Why\"></a>Why</h2><p>nohup一般是需要挂后台长时间执行的脚本用的。<br>bg和fg指令只用于切换终端的前后台进程,如果终端断开连接,脚本也会被退出,所以长时间的脚本一般情况用nohup指令</p>\n<h2 id=\"Stop\"><a href=\"#Stop\" class=\"headerlink\" title=\"Stop\"></a>Stop</h2><p>命令后面会保存pid到文件中,所以不用担心pid找不到(找不到就ps呗,但是我还是喜欢记下来),终止的时候kill掉就好了</p>\n","site":{"data":{}},"excerpt":"","more":"<blockquote>\n<p>写给RoseauHan的</p>\n</blockquote>\n<h2 id=\"How\"><a href=\"#How\" class=\"headerlink\" title=\"How\"></a>How</h2><p>举个栗子</p>\n<p><code>sudo nohup python3 -u AppleDeliverMail.py > log & echo $! > pid</code></p>\n<h2 id=\"Why\"><a href=\"#Why\" class=\"headerlink\" title=\"Why\"></a>Why</h2><p>nohup一般是需要挂后台长时间执行的脚本用的。<br>bg和fg指令只用于切换终端的前后台进程,如果终端断开连接,脚本也会被退出,所以长时间的脚本一般情况用nohup指令</p>\n<h2 id=\"Stop\"><a href=\"#Stop\" class=\"headerlink\" title=\"Stop\"></a>Stop</h2><p>命令后面会保存pid到文件中,所以不用担心pid找不到(找不到就ps呗,但是我还是喜欢记下来),终止的时候kill掉就好了</p>\n"},{"title":"hexo自动发布部署同步脚本","originContent":"","toc":true,"date":"2019-04-19T18:21:01.000Z","_content":"\n# hexo自动发布脚本\n\n> 自动编译上传GitHub服务器,同时让自己的服务其同步的python脚本\n\n```python\nimport os\nimport threading\n\nimport paramiko\n\n\ndef execute_cmds(ip, name, pwd, cmd):\n try:\n ssh = paramiko.SSHClient()\n ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())\n ssh.connect(ip, 22, name, pwd, timeout=5)\n print('连接成功')\n\n for m in cmd:\n print(m)\n stdin, stdout, stderr = ssh.exec_command(m)\n out = stdout.readlines()\n for o in out:\n print(o)\n print('运行成功')\n ssh.close()\n print('关闭连接')\n except Exception as error:\n print(error)\n\n\nif __name__ == '__main__':\n ip = \"ip\" # TODO:\n name = \"name\" # TODO:\n pwd = \"pwd\" # TODO:\n cmd_local = \"cd ~/Documents/blog;hexo g -d\"\n cmd_host = [\"cd /data/ranxuebin/;git pull;\"]\n os.system(cmd_local)\n a = threading.Thread(target=execute_cmds, args=(ip, name, pwd, cmd_host))\n a.start()\n```","source":"_posts/hexoautodeploy.md","raw":"---\ntitle: hexo自动发布部署同步脚本\ntags: []\ncategories:\n - hexo\noriginContent: ''\ntoc: true\ndate: 2019-04-20 02:21:01\n---\n\n# hexo自动发布脚本\n\n> 自动编译上传GitHub服务器,同时让自己的服务其同步的python脚本\n\n```python\nimport os\nimport threading\n\nimport paramiko\n\n\ndef execute_cmds(ip, name, pwd, cmd):\n try:\n ssh = paramiko.SSHClient()\n ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())\n ssh.connect(ip, 22, name, pwd, timeout=5)\n print('连接成功')\n\n for m in cmd:\n print(m)\n stdin, stdout, stderr = ssh.exec_command(m)\n out = stdout.readlines()\n for o in out:\n print(o)\n print('运行成功')\n ssh.close()\n print('关闭连接')\n except Exception as error:\n print(error)\n\n\nif __name__ == '__main__':\n ip = \"ip\" # TODO:\n name = \"name\" # TODO:\n pwd = \"pwd\" # TODO:\n cmd_local = \"cd ~/Documents/blog;hexo g -d\"\n cmd_host = [\"cd /data/ranxuebin/;git pull;\"]\n os.system(cmd_local)\n a = threading.Thread(target=execute_cmds, args=(ip, name, pwd, cmd_host))\n a.start()\n```","slug":"hexoautodeploy","published":1,"updated":"2019-04-19T18:21:01.972Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkm5000itzy4eevp37c1","content":"<h1 id=\"hexo自动发布脚本\"><a href=\"#hexo自动发布脚本\" class=\"headerlink\" title=\"hexo自动发布脚本\"></a>hexo自动发布脚本</h1><blockquote>\n<p>自动编译上传GitHub服务器,同时让自己的服务其同步的python脚本</p>\n</blockquote>\n<figure class=\"highlight python\"><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><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">import</span> os</span><br><span class=\"line\"><span class=\"keyword\">import</span> threading</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"keyword\">import</span> paramiko</span><br><span class=\"line\"></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"function\"><span class=\"keyword\">def</span> <span class=\"title\">execute_cmds</span><span class=\"params\">(ip, name, pwd, cmd)</span>:</span></span><br><span class=\"line\"> <span class=\"keyword\">try</span>:</span><br><span class=\"line\"> ssh = paramiko.SSHClient()</span><br><span class=\"line\"> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())</span><br><span class=\"line\"> ssh.connect(ip, <span class=\"number\">22</span>, name, pwd, timeout=<span class=\"number\">5</span>)</span><br><span class=\"line\"> print(<span class=\"string\">'连接成功'</span>)</span><br><span class=\"line\"></span><br><span class=\"line\"> <span class=\"keyword\">for</span> m <span class=\"keyword\">in</span> cmd:</span><br><span class=\"line\"> print(m)</span><br><span class=\"line\"> stdin, stdout, stderr = ssh.exec_command(m)</span><br><span class=\"line\"> out = stdout.readlines()</span><br><span class=\"line\"> <span class=\"keyword\">for</span> o <span class=\"keyword\">in</span> out:</span><br><span class=\"line\"> print(o)</span><br><span class=\"line\"> print(<span class=\"string\">'运行成功'</span>)</span><br><span class=\"line\"> ssh.close()</span><br><span class=\"line\"> print(<span class=\"string\">'关闭连接'</span>)</span><br><span class=\"line\"> <span class=\"keyword\">except</span> Exception <span class=\"keyword\">as</span> error:</span><br><span class=\"line\"> print(error)</span><br><span class=\"line\"></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"keyword\">if</span> __name__ == <span class=\"string\">'__main__'</span>:</span><br><span class=\"line\"> ip = <span class=\"string\">\"ip\"</span> <span class=\"comment\"># <span class=\"doctag\">TODO:</span></span></span><br><span class=\"line\"> name = <span class=\"string\">\"name\"</span> <span class=\"comment\"># <span class=\"doctag\">TODO:</span></span></span><br><span class=\"line\"> pwd = <span class=\"string\">\"pwd\"</span> <span class=\"comment\"># <span class=\"doctag\">TODO:</span></span></span><br><span class=\"line\"> cmd_local = <span class=\"string\">\"cd ~/Documents/blog;hexo g -d\"</span></span><br><span class=\"line\"> cmd_host = [<span class=\"string\">\"cd /data/ranxuebin/;git pull;\"</span>]</span><br><span class=\"line\"> os.system(cmd_local)</span><br><span class=\"line\"> a = threading.Thread(target=execute_cmds, args=(ip, name, pwd, cmd_host))</span><br><span class=\"line\"> a.start()</span><br></pre></td></tr></table></figure>","site":{"data":{}},"excerpt":"","more":"<h1 id=\"hexo自动发布脚本\"><a href=\"#hexo自动发布脚本\" class=\"headerlink\" title=\"hexo自动发布脚本\"></a>hexo自动发布脚本</h1><blockquote>\n<p>自动编译上传GitHub服务器,同时让自己的服务其同步的python脚本</p>\n</blockquote>\n<figure class=\"highlight python\"><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><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">import</span> os</span><br><span class=\"line\"><span class=\"keyword\">import</span> threading</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"keyword\">import</span> paramiko</span><br><span class=\"line\"></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"function\"><span class=\"keyword\">def</span> <span class=\"title\">execute_cmds</span><span class=\"params\">(ip, name, pwd, cmd)</span>:</span></span><br><span class=\"line\"> <span class=\"keyword\">try</span>:</span><br><span class=\"line\"> ssh = paramiko.SSHClient()</span><br><span class=\"line\"> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())</span><br><span class=\"line\"> ssh.connect(ip, <span class=\"number\">22</span>, name, pwd, timeout=<span class=\"number\">5</span>)</span><br><span class=\"line\"> print(<span class=\"string\">'连接成功'</span>)</span><br><span class=\"line\"></span><br><span class=\"line\"> <span class=\"keyword\">for</span> m <span class=\"keyword\">in</span> cmd:</span><br><span class=\"line\"> print(m)</span><br><span class=\"line\"> stdin, stdout, stderr = ssh.exec_command(m)</span><br><span class=\"line\"> out = stdout.readlines()</span><br><span class=\"line\"> <span class=\"keyword\">for</span> o <span class=\"keyword\">in</span> out:</span><br><span class=\"line\"> print(o)</span><br><span class=\"line\"> print(<span class=\"string\">'运行成功'</span>)</span><br><span class=\"line\"> ssh.close()</span><br><span class=\"line\"> print(<span class=\"string\">'关闭连接'</span>)</span><br><span class=\"line\"> <span class=\"keyword\">except</span> Exception <span class=\"keyword\">as</span> error:</span><br><span class=\"line\"> print(error)</span><br><span class=\"line\"></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"keyword\">if</span> __name__ == <span class=\"string\">'__main__'</span>:</span><br><span class=\"line\"> ip = <span class=\"string\">\"ip\"</span> <span class=\"comment\"># <span class=\"doctag\">TODO:</span></span></span><br><span class=\"line\"> name = <span class=\"string\">\"name\"</span> <span class=\"comment\"># <span class=\"doctag\">TODO:</span></span></span><br><span class=\"line\"> pwd = <span class=\"string\">\"pwd\"</span> <span class=\"comment\"># <span class=\"doctag\">TODO:</span></span></span><br><span class=\"line\"> cmd_local = <span class=\"string\">\"cd ~/Documents/blog;hexo g -d\"</span></span><br><span class=\"line\"> cmd_host = [<span class=\"string\">\"cd /data/ranxuebin/;git pull;\"</span>]</span><br><span class=\"line\"> os.system(cmd_local)</span><br><span class=\"line\"> a = threading.Thread(target=execute_cmds, args=(ip, name, pwd, cmd_host))</span><br><span class=\"line\"> a.start()</span><br></pre></td></tr></table></figure>"},{"title":"swfit_Simple_Guide","date":"2019-10-02T07:53:51.000Z","_content":"\n> 新建一个PlayGround,直接看实例代码\n\n```swift\nimport AppKit//暂时没啥用的东西\nvar strTest = \"Hello, playground\"\nvar maybeNilTest:Int? = nil\nvar intTest:Int = 10\nvar setTypeTest:(Int?, String) = (1,\"hahaa\")\nvar setValue = (1,3)\nvar deepCopySetTest = setValue\n\n//??表达式判断可为nil的值\nprint(maybeNilTest ?? 10)\nprint(strTest)\n//字符串拼接\nprint(\"intTest: \\(intTest)\")\n//元组索引\nprint(setTypeTest.0!)\n//type函数\nprint(type(of: setTypeTest))\n\n//元组赋值,非引用,deepCopy\ndeepCopySetTest.0 = 10\nprint(setValue)\nprint(deepCopySetTest)\n\n//元组key\nvar setc:(name1:Int, name2:String) = (1,\"haha\")\n// terminator 参数separator 参数\nprint(setc, setc.name1, separator:\" separator \", terminator:\" terminator \\n\")\n//三元运算符\nvar d = (maybeNilTest == nil) ? 1 :maybeNilTest!\nprint(d)\n\n//if sentence\nvar ifTestValue = 10\nif ifTestValue > 10{\n print(\"ifTestValue is bigger than 10\")\n}else if ifTestValue == 10 {\n print(\"this is else if branch\")\n}else {\n print(\"this is else branch\")\n}\n\n//可选项绑定\n//maybeNilTest = 1\nif let optionBindTest = maybeNilTest{\n print(\"optionBindTest value is :\",optionBindTest)\n}else{\n print(\"maybeNilTest is nil\")\n}\n\n//隐式展开\n//允许让变量在某些情况下可以赋值为空,但是保证输入输出和调用时w有值\nvar yinshizhankai:Int! = 10\nvar yinshizhankaiB : Int = yinshizhankai\nprint(\"yinshizhankai is 10: \", yinshizhankai!)\nyinshizhankai = nil\nprint(\"yinshizhankai is nil: \", yinshizhankai ?? 1)\nprint(\"yinshizhankaiB: \", yinshizhankaiB)\n\n//swich\nvar swichTest = 10\nswitch swichTest {\ncase 1...10://区间,后面继续h说,这个是闭区间,开区间可以是..<\n print(\"swichTest == 10\")\n fallthrough\ncase 20:\n print(\"switchTest == 20 with fallthrough\")\ndefault:\n print(\"default\")\n}\n\n//switch 元组匹配\nvar switchTestB = (1, 2)\nswitch switchTestB {\ncase var(1, num) where num > 1:\n print(\"this is (1, 2) num is \\(num) and num > 1\")\n num = 3\ndefault:\n print(\"this is default\")\n}\nprint(\"this is (1, 2) num is \\(switchTestB)\")\n\n\n// 区间\nvar rangeA = 1.5...5\nvar rangeB = 1..<5\n\n//for\nfor item in rangeA{\n if item == 2{continue} // break一样\n print(item, terminator:\" \")\n}\nprint()\nfor item in stride(from: 1, to: 6, by: 2).reversed(){\n print(item, terminator:\" \")\n}\n\n```\n\n","source":"_posts/swfit-Simple-Guide.md","raw":"---\ntitle: swfit_Simple_Guide\ntags: [swift, Guide]\ndate: 2019-10-02 15:53:51\ncategories:\n---\n\n> 新建一个PlayGround,直接看实例代码\n\n```swift\nimport AppKit//暂时没啥用的东西\nvar strTest = \"Hello, playground\"\nvar maybeNilTest:Int? = nil\nvar intTest:Int = 10\nvar setTypeTest:(Int?, String) = (1,\"hahaa\")\nvar setValue = (1,3)\nvar deepCopySetTest = setValue\n\n//??表达式判断可为nil的值\nprint(maybeNilTest ?? 10)\nprint(strTest)\n//字符串拼接\nprint(\"intTest: \\(intTest)\")\n//元组索引\nprint(setTypeTest.0!)\n//type函数\nprint(type(of: setTypeTest))\n\n//元组赋值,非引用,deepCopy\ndeepCopySetTest.0 = 10\nprint(setValue)\nprint(deepCopySetTest)\n\n//元组key\nvar setc:(name1:Int, name2:String) = (1,\"haha\")\n// terminator 参数separator 参数\nprint(setc, setc.name1, separator:\" separator \", terminator:\" terminator \\n\")\n//三元运算符\nvar d = (maybeNilTest == nil) ? 1 :maybeNilTest!\nprint(d)\n\n//if sentence\nvar ifTestValue = 10\nif ifTestValue > 10{\n print(\"ifTestValue is bigger than 10\")\n}else if ifTestValue == 10 {\n print(\"this is else if branch\")\n}else {\n print(\"this is else branch\")\n}\n\n//可选项绑定\n//maybeNilTest = 1\nif let optionBindTest = maybeNilTest{\n print(\"optionBindTest value is :\",optionBindTest)\n}else{\n print(\"maybeNilTest is nil\")\n}\n\n//隐式展开\n//允许让变量在某些情况下可以赋值为空,但是保证输入输出和调用时w有值\nvar yinshizhankai:Int! = 10\nvar yinshizhankaiB : Int = yinshizhankai\nprint(\"yinshizhankai is 10: \", yinshizhankai!)\nyinshizhankai = nil\nprint(\"yinshizhankai is nil: \", yinshizhankai ?? 1)\nprint(\"yinshizhankaiB: \", yinshizhankaiB)\n\n//swich\nvar swichTest = 10\nswitch swichTest {\ncase 1...10://区间,后面继续h说,这个是闭区间,开区间可以是..<\n print(\"swichTest == 10\")\n fallthrough\ncase 20:\n print(\"switchTest == 20 with fallthrough\")\ndefault:\n print(\"default\")\n}\n\n//switch 元组匹配\nvar switchTestB = (1, 2)\nswitch switchTestB {\ncase var(1, num) where num > 1:\n print(\"this is (1, 2) num is \\(num) and num > 1\")\n num = 3\ndefault:\n print(\"this is default\")\n}\nprint(\"this is (1, 2) num is \\(switchTestB)\")\n\n\n// 区间\nvar rangeA = 1.5...5\nvar rangeB = 1..<5\n\n//for\nfor item in rangeA{\n if item == 2{continue} // break一样\n print(item, terminator:\" \")\n}\nprint()\nfor item in stride(from: 1, to: 6, by: 2).reversed(){\n print(item, terminator:\" \")\n}\n\n```\n\n","slug":"swfit-Simple-Guide","published":1,"updated":"2019-10-02T09:09:53.930Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkm7000ntzy4fz3njm9g","content":"<blockquote>\n<p>新建一个PlayGround,直接看实例代码</p>\n</blockquote>\n<figure class=\"highlight swift\"><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><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br><span class=\"line\">43</span><br><span class=\"line\">44</span><br><span class=\"line\">45</span><br><span class=\"line\">46</span><br><span class=\"line\">47</span><br><span class=\"line\">48</span><br><span class=\"line\">49</span><br><span class=\"line\">50</span><br><span class=\"line\">51</span><br><span class=\"line\">52</span><br><span class=\"line\">53</span><br><span class=\"line\">54</span><br><span class=\"line\">55</span><br><span class=\"line\">56</span><br><span class=\"line\">57</span><br><span class=\"line\">58</span><br><span class=\"line\">59</span><br><span class=\"line\">60</span><br><span class=\"line\">61</span><br><span class=\"line\">62</span><br><span class=\"line\">63</span><br><span class=\"line\">64</span><br><span class=\"line\">65</span><br><span class=\"line\">66</span><br><span class=\"line\">67</span><br><span class=\"line\">68</span><br><span class=\"line\">69</span><br><span class=\"line\">70</span><br><span class=\"line\">71</span><br><span class=\"line\">72</span><br><span class=\"line\">73</span><br><span class=\"line\">74</span><br><span class=\"line\">75</span><br><span class=\"line\">76</span><br><span class=\"line\">77</span><br><span class=\"line\">78</span><br><span class=\"line\">79</span><br><span class=\"line\">80</span><br><span class=\"line\">81</span><br><span class=\"line\">82</span><br><span class=\"line\">83</span><br><span class=\"line\">84</span><br><span class=\"line\">85</span><br><span class=\"line\">86</span><br><span class=\"line\">87</span><br><span class=\"line\">88</span><br><span class=\"line\">89</span><br><span class=\"line\">90</span><br><span class=\"line\">91</span><br><span class=\"line\">92</span><br><span class=\"line\">93</span><br><span class=\"line\">94</span><br><span class=\"line\">95</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">import</span> AppKit<span class=\"comment\">//暂时没啥用的东西</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> strTest = <span class=\"string\">\"Hello, playground\"</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> maybeNilTest:<span class=\"type\">Int?</span> = <span class=\"literal\">nil</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> intTest:<span class=\"type\">Int</span> = <span class=\"number\">10</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> setTypeTest:(<span class=\"type\">Int?</span>, <span class=\"type\">String</span>) = (<span class=\"number\">1</span>,<span class=\"string\">\"hahaa\"</span>)</span><br><span class=\"line\"><span class=\"keyword\">var</span> setValue = (<span class=\"number\">1</span>,<span class=\"number\">3</span>)</span><br><span class=\"line\"><span class=\"keyword\">var</span> deepCopySetTest = setValue</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\">//??表达式判断可为nil的值</span></span><br><span class=\"line\"><span class=\"built_in\">print</span>(maybeNilTest ?? <span class=\"number\">10</span>)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(strTest)</span><br><span class=\"line\"><span class=\"comment\">//字符串拼接</span></span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">\"intTest: \\(intTest)\"</span>)</span><br><span class=\"line\"><span class=\"comment\">//元组索引</span></span><br><span class=\"line\"><span class=\"built_in\">print</span>(setTypeTest.<span class=\"number\">0</span>!)</span><br><span class=\"line\"><span class=\"comment\">//type函数</span></span><br><span class=\"line\"><span class=\"built_in\">print</span>(type(of: setTypeTest))</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\">//元组赋值,非引用,deepCopy</span></span><br><span class=\"line\">deepCopySetTest.<span class=\"number\">0</span> = <span class=\"number\">10</span></span><br><span class=\"line\"><span class=\"built_in\">print</span>(setValue)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(deepCopySetTest)</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\">//元组key</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> setc:(name1:<span class=\"type\">Int</span>, name2:<span class=\"type\">String</span>) = (<span class=\"number\">1</span>,<span class=\"string\">\"haha\"</span>)</span><br><span class=\"line\"><span class=\"comment\">// terminator 参数separator 参数</span></span><br><span class=\"line\"><span class=\"built_in\">print</span>(setc, setc.name1, separator:<span class=\"string\">\" separator \"</span>, terminator:<span class=\"string\">\" terminator \\n\"</span>)</span><br><span class=\"line\"><span class=\"comment\">//三元运算符</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> d = (maybeNilTest == <span class=\"literal\">nil</span>) ? <span class=\"number\">1</span> :maybeNilTest!</span><br><span class=\"line\"><span class=\"built_in\">print</span>(d)</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\">//if sentence</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> ifTestValue = <span class=\"number\">10</span></span><br><span class=\"line\"><span class=\"keyword\">if</span> ifTestValue > <span class=\"number\">10</span>{</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">\"ifTestValue is bigger than 10\"</span>)</span><br><span class=\"line\">}<span class=\"keyword\">else</span> <span class=\"keyword\">if</span> ifTestValue == <span class=\"number\">10</span> {</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">\"this is else if branch\"</span>)</span><br><span class=\"line\">}<span class=\"keyword\">else</span> {</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">\"this is else branch\"</span>)</span><br><span class=\"line\">}</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\">//可选项绑定</span></span><br><span class=\"line\"><span class=\"comment\">//maybeNilTest = 1</span></span><br><span class=\"line\"><span class=\"keyword\">if</span> <span class=\"keyword\">let</span> optionBindTest = maybeNilTest{</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">\"optionBindTest value is :\"</span>,optionBindTest)</span><br><span class=\"line\">}<span class=\"keyword\">else</span>{</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">\"maybeNilTest is nil\"</span>)</span><br><span class=\"line\">}</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\">//隐式展开</span></span><br><span class=\"line\"><span class=\"comment\">//允许让变量在某些情况下可以赋值为空,但是保证输入输出和调用时w有值</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> yinshizhankai:<span class=\"type\">Int!</span> = <span class=\"number\">10</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> yinshizhankaiB : <span class=\"type\">Int</span> = yinshizhankai</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">\"yinshizhankai is 10: \"</span>, yinshizhankai!)</span><br><span class=\"line\">yinshizhankai = <span class=\"literal\">nil</span></span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">\"yinshizhankai is nil: \"</span>, yinshizhankai ?? <span class=\"number\">1</span>)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">\"yinshizhankaiB: \"</span>, yinshizhankaiB)</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\">//swich</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> swichTest = <span class=\"number\">10</span></span><br><span class=\"line\"><span class=\"keyword\">switch</span> swichTest {</span><br><span class=\"line\"><span class=\"keyword\">case</span> <span class=\"number\">1</span>...<span class=\"number\">10</span>:<span class=\"comment\">//区间,后面继续h说,这个是闭区间,开区间可以是..<</span></span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">\"swichTest == 10\"</span>)</span><br><span class=\"line\"> <span class=\"keyword\">fallthrough</span></span><br><span class=\"line\"><span class=\"keyword\">case</span> <span class=\"number\">20</span>:</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">\"switchTest == 20 with fallthrough\"</span>)</span><br><span class=\"line\"><span class=\"keyword\">default</span>:</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">\"default\"</span>)</span><br><span class=\"line\">}</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\">//switch 元组匹配</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> switchTestB = (<span class=\"number\">1</span>, <span class=\"number\">2</span>)</span><br><span class=\"line\"><span class=\"keyword\">switch</span> switchTestB {</span><br><span class=\"line\"><span class=\"keyword\">case</span> <span class=\"keyword\">var</span>(<span class=\"number\">1</span>, num) <span class=\"keyword\">where</span> num > <span class=\"number\">1</span>:</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">\"this is (1, 2) num is \\(num) and num > 1\"</span>)</span><br><span class=\"line\"> num = <span class=\"number\">3</span></span><br><span class=\"line\"><span class=\"keyword\">default</span>:</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">\"this is default\"</span>)</span><br><span class=\"line\">}</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">\"this is (1, 2) num is \\(switchTestB)\"</span>)</span><br><span class=\"line\"></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\">// 区间</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> rangeA = <span class=\"number\">1.5</span>...<span class=\"number\">5</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> rangeB = <span class=\"number\">1</span>..<<span class=\"number\">5</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\">//for</span></span><br><span class=\"line\"><span class=\"keyword\">for</span> item <span class=\"keyword\">in</span> rangeA{</span><br><span class=\"line\"> <span class=\"keyword\">if</span> item == <span class=\"number\">2</span>{<span class=\"keyword\">continue</span>} <span class=\"comment\">// break一样</span></span><br><span class=\"line\"> <span class=\"built_in\">print</span>(item, terminator:<span class=\"string\">\" \"</span>)</span><br><span class=\"line\">}</span><br><span class=\"line\"><span class=\"built_in\">print</span>()</span><br><span class=\"line\"><span class=\"keyword\">for</span> item <span class=\"keyword\">in</span> <span class=\"built_in\">stride</span>(from: <span class=\"number\">1</span>, to: <span class=\"number\">6</span>, by: <span class=\"number\">2</span>).reversed(){</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(item, terminator:<span class=\"string\">\" \"</span>)</span><br><span class=\"line\">}</span><br></pre></td></tr></table></figure>\n","site":{"data":{}},"excerpt":"","more":"<blockquote>\n<p>新建一个PlayGround,直接看实例代码</p>\n</blockquote>\n<figure class=\"highlight swift\"><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><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br><span class=\"line\">43</span><br><span class=\"line\">44</span><br><span class=\"line\">45</span><br><span class=\"line\">46</span><br><span class=\"line\">47</span><br><span class=\"line\">48</span><br><span class=\"line\">49</span><br><span class=\"line\">50</span><br><span class=\"line\">51</span><br><span class=\"line\">52</span><br><span class=\"line\">53</span><br><span class=\"line\">54</span><br><span class=\"line\">55</span><br><span class=\"line\">56</span><br><span class=\"line\">57</span><br><span class=\"line\">58</span><br><span class=\"line\">59</span><br><span class=\"line\">60</span><br><span class=\"line\">61</span><br><span class=\"line\">62</span><br><span class=\"line\">63</span><br><span class=\"line\">64</span><br><span class=\"line\">65</span><br><span class=\"line\">66</span><br><span class=\"line\">67</span><br><span class=\"line\">68</span><br><span class=\"line\">69</span><br><span class=\"line\">70</span><br><span class=\"line\">71</span><br><span class=\"line\">72</span><br><span class=\"line\">73</span><br><span class=\"line\">74</span><br><span class=\"line\">75</span><br><span class=\"line\">76</span><br><span class=\"line\">77</span><br><span class=\"line\">78</span><br><span class=\"line\">79</span><br><span class=\"line\">80</span><br><span class=\"line\">81</span><br><span class=\"line\">82</span><br><span class=\"line\">83</span><br><span class=\"line\">84</span><br><span class=\"line\">85</span><br><span class=\"line\">86</span><br><span class=\"line\">87</span><br><span class=\"line\">88</span><br><span class=\"line\">89</span><br><span class=\"line\">90</span><br><span class=\"line\">91</span><br><span class=\"line\">92</span><br><span class=\"line\">93</span><br><span class=\"line\">94</span><br><span class=\"line\">95</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">import</span> AppKit<span class=\"comment\">//暂时没啥用的东西</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> strTest = <span class=\"string\">\"Hello, playground\"</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> maybeNilTest:<span class=\"type\">Int?</span> = <span class=\"literal\">nil</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> intTest:<span class=\"type\">Int</span> = <span class=\"number\">10</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> setTypeTest:(<span class=\"type\">Int?</span>, <span class=\"type\">String</span>) = (<span class=\"number\">1</span>,<span class=\"string\">\"hahaa\"</span>)</span><br><span class=\"line\"><span class=\"keyword\">var</span> setValue = (<span class=\"number\">1</span>,<span class=\"number\">3</span>)</span><br><span class=\"line\"><span class=\"keyword\">var</span> deepCopySetTest = setValue</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\">//??表达式判断可为nil的值</span></span><br><span class=\"line\"><span class=\"built_in\">print</span>(maybeNilTest ?? <span class=\"number\">10</span>)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(strTest)</span><br><span class=\"line\"><span class=\"comment\">//字符串拼接</span></span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">\"intTest: \\(intTest)\"</span>)</span><br><span class=\"line\"><span class=\"comment\">//元组索引</span></span><br><span class=\"line\"><span class=\"built_in\">print</span>(setTypeTest.<span class=\"number\">0</span>!)</span><br><span class=\"line\"><span class=\"comment\">//type函数</span></span><br><span class=\"line\"><span class=\"built_in\">print</span>(type(of: setTypeTest))</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\">//元组赋值,非引用,deepCopy</span></span><br><span class=\"line\">deepCopySetTest.<span class=\"number\">0</span> = <span class=\"number\">10</span></span><br><span class=\"line\"><span class=\"built_in\">print</span>(setValue)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(deepCopySetTest)</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\">//元组key</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> setc:(name1:<span class=\"type\">Int</span>, name2:<span class=\"type\">String</span>) = (<span class=\"number\">1</span>,<span class=\"string\">\"haha\"</span>)</span><br><span class=\"line\"><span class=\"comment\">// terminator 参数separator 参数</span></span><br><span class=\"line\"><span class=\"built_in\">print</span>(setc, setc.name1, separator:<span class=\"string\">\" separator \"</span>, terminator:<span class=\"string\">\" terminator \\n\"</span>)</span><br><span class=\"line\"><span class=\"comment\">//三元运算符</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> d = (maybeNilTest == <span class=\"literal\">nil</span>) ? <span class=\"number\">1</span> :maybeNilTest!</span><br><span class=\"line\"><span class=\"built_in\">print</span>(d)</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\">//if sentence</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> ifTestValue = <span class=\"number\">10</span></span><br><span class=\"line\"><span class=\"keyword\">if</span> ifTestValue > <span class=\"number\">10</span>{</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">\"ifTestValue is bigger than 10\"</span>)</span><br><span class=\"line\">}<span class=\"keyword\">else</span> <span class=\"keyword\">if</span> ifTestValue == <span class=\"number\">10</span> {</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">\"this is else if branch\"</span>)</span><br><span class=\"line\">}<span class=\"keyword\">else</span> {</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">\"this is else branch\"</span>)</span><br><span class=\"line\">}</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\">//可选项绑定</span></span><br><span class=\"line\"><span class=\"comment\">//maybeNilTest = 1</span></span><br><span class=\"line\"><span class=\"keyword\">if</span> <span class=\"keyword\">let</span> optionBindTest = maybeNilTest{</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">\"optionBindTest value is :\"</span>,optionBindTest)</span><br><span class=\"line\">}<span class=\"keyword\">else</span>{</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">\"maybeNilTest is nil\"</span>)</span><br><span class=\"line\">}</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\">//隐式展开</span></span><br><span class=\"line\"><span class=\"comment\">//允许让变量在某些情况下可以赋值为空,但是保证输入输出和调用时w有值</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> yinshizhankai:<span class=\"type\">Int!</span> = <span class=\"number\">10</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> yinshizhankaiB : <span class=\"type\">Int</span> = yinshizhankai</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">\"yinshizhankai is 10: \"</span>, yinshizhankai!)</span><br><span class=\"line\">yinshizhankai = <span class=\"literal\">nil</span></span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">\"yinshizhankai is nil: \"</span>, yinshizhankai ?? <span class=\"number\">1</span>)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">\"yinshizhankaiB: \"</span>, yinshizhankaiB)</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\">//swich</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> swichTest = <span class=\"number\">10</span></span><br><span class=\"line\"><span class=\"keyword\">switch</span> swichTest {</span><br><span class=\"line\"><span class=\"keyword\">case</span> <span class=\"number\">1</span>...<span class=\"number\">10</span>:<span class=\"comment\">//区间,后面继续h说,这个是闭区间,开区间可以是..<</span></span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">\"swichTest == 10\"</span>)</span><br><span class=\"line\"> <span class=\"keyword\">fallthrough</span></span><br><span class=\"line\"><span class=\"keyword\">case</span> <span class=\"number\">20</span>:</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">\"switchTest == 20 with fallthrough\"</span>)</span><br><span class=\"line\"><span class=\"keyword\">default</span>:</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">\"default\"</span>)</span><br><span class=\"line\">}</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\">//switch 元组匹配</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> switchTestB = (<span class=\"number\">1</span>, <span class=\"number\">2</span>)</span><br><span class=\"line\"><span class=\"keyword\">switch</span> switchTestB {</span><br><span class=\"line\"><span class=\"keyword\">case</span> <span class=\"keyword\">var</span>(<span class=\"number\">1</span>, num) <span class=\"keyword\">where</span> num > <span class=\"number\">1</span>:</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">\"this is (1, 2) num is \\(num) and num > 1\"</span>)</span><br><span class=\"line\"> num = <span class=\"number\">3</span></span><br><span class=\"line\"><span class=\"keyword\">default</span>:</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">\"this is default\"</span>)</span><br><span class=\"line\">}</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">\"this is (1, 2) num is \\(switchTestB)\"</span>)</span><br><span class=\"line\"></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\">// 区间</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> rangeA = <span class=\"number\">1.5</span>...<span class=\"number\">5</span></span><br><span class=\"line\"><span class=\"keyword\">var</span> rangeB = <span class=\"number\">1</span>..<<span class=\"number\">5</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\">//for</span></span><br><span class=\"line\"><span class=\"keyword\">for</span> item <span class=\"keyword\">in</span> rangeA{</span><br><span class=\"line\"> <span class=\"keyword\">if</span> item == <span class=\"number\">2</span>{<span class=\"keyword\">continue</span>} <span class=\"comment\">// break一样</span></span><br><span class=\"line\"> <span class=\"built_in\">print</span>(item, terminator:<span class=\"string\">\" \"</span>)</span><br><span class=\"line\">}</span><br><span class=\"line\"><span class=\"built_in\">print</span>()</span><br><span class=\"line\"><span class=\"keyword\">for</span> item <span class=\"keyword\">in</span> <span class=\"built_in\">stride</span>(from: <span class=\"number\">1</span>, to: <span class=\"number\">6</span>, by: <span class=\"number\">2</span>).reversed(){</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(item, terminator:<span class=\"string\">\" \"</span>)</span><br><span class=\"line\">}</span><br></pre></td></tr></table></figure>\n"},{"title":"HexoClient可视化","toc":true,"date":"2019-04-19T07:20:41.000Z","_content":"\n# 这是一个测试图形化文章的管理工具\n\n> 本来是想自己写一个hexo可视化后台管理的,结果发现了这个本地管理的一个小工具还不错。 \n> 发现了一个比较好用的hexo的可视化管理工具——hexoClient现在把它记下来。\n> 但是是一个比较不太成熟的项目,比如不支持带密码的ssh-keygen的发布,因此我把密码取消了,可是目前还遇到的问题是不知道为什么提示发布成功但是没有鸡毛反应, \n> 不过这样以来的话估计就可以经常更新bolg了","source":"_posts/hexoclienttest.md","raw":"---\ntitle: HexoClient可视化\ntags: []\ncategories:\n - hexo\ntoc: true\ndate: 2019-04-19 15:20:41\n---\n\n# 这是一个测试图形化文章的管理工具\n\n> 本来是想自己写一个hexo可视化后台管理的,结果发现了这个本地管理的一个小工具还不错。 \n> 发现了一个比较好用的hexo的可视化管理工具——hexoClient现在把它记下来。\n> 但是是一个比较不太成熟的项目,比如不支持带密码的ssh-keygen的发布,因此我把密码取消了,可是目前还遇到的问题是不知道为什么提示发布成功但是没有鸡毛反应, \n> 不过这样以来的话估计就可以经常更新bolg了","slug":"hexoclienttest","published":1,"updated":"2019-04-19T07:20:48.430Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkm8000ptzy4z8w66t6e","content":"<h1 id=\"这是一个测试图形化文章的管理工具\"><a href=\"#这是一个测试图形化文章的管理工具\" class=\"headerlink\" title=\"这是一个测试图形化文章的管理工具\"></a>这是一个测试图形化文章的管理工具</h1><blockquote>\n<p>本来是想自己写一个hexo可视化后台管理的,结果发现了这个本地管理的一个小工具还不错。<br>发现了一个比较好用的hexo的可视化管理工具——hexoClient现在把它记下来。<br>但是是一个比较不太成熟的项目,比如不支持带密码的ssh-keygen的发布,因此我把密码取消了,可是目前还遇到的问题是不知道为什么提示发布成功但是没有鸡毛反应,<br>不过这样以来的话估计就可以经常更新bolg了</p>\n</blockquote>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"这是一个测试图形化文章的管理工具\"><a href=\"#这是一个测试图形化文章的管理工具\" class=\"headerlink\" title=\"这是一个测试图形化文章的管理工具\"></a>这是一个测试图形化文章的管理工具</h1><blockquote>\n<p>本来是想自己写一个hexo可视化后台管理的,结果发现了这个本地管理的一个小工具还不错。<br>发现了一个比较好用的hexo的可视化管理工具——hexoClient现在把它记下来。<br>但是是一个比较不太成熟的项目,比如不支持带密码的ssh-keygen的发布,因此我把密码取消了,可是目前还遇到的问题是不知道为什么提示发布成功但是没有鸡毛反应,<br>不过这样以来的话估计就可以经常更新bolg了</p>\n</blockquote>\n"},{"title":"zsh_is_too_slow","date":"2019-09-30T11:54:28.000Z","_content":"\n# zsh慢成💩\n\n> 简单介绍一下,Catalina升级成zsh之后,便安装了传说中最简单配置zsh的“插件”——oh-my-zsh\n>\n> 但是安装好之后,速度慢的像坨翔\n>\n> 启动五秒\n>\n> 随便cd一下要三秒\n>\n> 随便ls一下等两秒\n>\n> 啊\n>\n> 要死了\n\n## Why\n\n百度谷歌一番发现普遍都有这个问题,可能原因有很多,简单的原因这里不多说,建议先谷歌一下\n\n问题集中在zsh的插件众多,每次执行时都会执行各种插件的东西,尤其是以git为最大的罪魁祸首。\n\n所以,解决问题的第一步是先跟踪,定位问题。\n\n```bash\nzsh -xv\n```\n\n一般情况下可以发现慢的主要原因是卡在了git有关的命令上,关闭git插件后,没有任何影响,你会发现,git相关的命令是集成在主题上的,你可能可以通过使用下面的命令解决一定的问题,但是对于我来说可能不太有用\n\n```bash\ngit config --global oh-my-zsh.hide-status 1\n```\n\n索性查看相关主题的配置源码,我用的主题是`fishy`\n\n```bash\n 1 # ZSH Theme emulating the Fish shell's default prompt.\n 2 \n 3 _fishy_collapsed_wd() {\n 4 echo $(pwd | perl -pe '\n 5 BEGIN {\n 6 binmode STDIN, \":encoding(UTF-8)\";\n 7 binmode STDOUT, \":encoding(UTF-8)\";\n 8 }; s|^$ENV{HOME}|~|g; s|/([^/.])[^/]*(?=/)|/$1|g; s|/\\.([^/])[^/]*(?=/)|/.$1|g\n 9 ')\n 10 }\n 11 \n 12 local user_color='green'; [ $UID -eq 0 ] && user_color='red'\n 13 PROMPT='%n@%m %{$fg[$user_color]%}$(_fishy_collapsed_wd)%{$reset_color%}%(!.#.>) '\n 14 PROMPT2='%{$fg[red]%}\\ %{$reset_color%}'\n 15 \n 16 local return_status=\"%{$fg_bold[red]%}%(?..%?)%{$reset_color%}\"\n 17 #RPROMPT=\"${RPROMPT}\"'${return_status}$(git_prompt_info)$(git_prompt_status)%{$reset_color%}'\n 18 \n 19 ZSH_THEME_GIT_PROMPT_PREFIX=\" \"\n 20 ZSH_THEME_GIT_PROMPT_SUFFIX=\"\"\n 21 ZSH_THEME_GIT_PROMPT_DIRTY=\"\"\n 22 ZSH_THEME_GIT_PROMPT_CLEAN=\"\"\n 23 \n 24 ZSH_THEME_GIT_PROMPT_ADDED=\"%{$fg_bold[green]%}+\"\n 25 ZSH_THEME_GIT_PROMPT_MODIFIED=\"%{$fg_bold[blue]%}!\"\n 26 ZSH_THEME_GIT_PROMPT_DELETED=\"%{$fg_bold[red]%}-\"\n 27 ZSH_THEME_GIT_PROMPT_RENAMED=\"%{$fg_bold[magenta]%}>\"\n 28 ZSH_THEME_GIT_PROMPT_UNMERGED=\"%{$fg_bold[yellow]%}#\"\n 29 ZSH_THEME_GIT_PROMPT_UNTRACKED=\"%{$fg_bold[cyan]%}?\"\n```\n\n发现git相关的命令集成在`RPROMPT=\"${RPROMPT}\"'${return_status}$(git_prompt_info)$(git_prompt_status)%{$reset_color%}'`索性全部注释掉\n\n## 爽\n\n","source":"_posts/zsh-is-too-slow.md","raw":"---\ntitle: zsh_is_too_slow\ntags: ['zsh', 'linux']\ndate: 2019-09-30 19:54:28\ncategories: ['zsh']\n---\n\n# zsh慢成💩\n\n> 简单介绍一下,Catalina升级成zsh之后,便安装了传说中最简单配置zsh的“插件”——oh-my-zsh\n>\n> 但是安装好之后,速度慢的像坨翔\n>\n> 启动五秒\n>\n> 随便cd一下要三秒\n>\n> 随便ls一下等两秒\n>\n> 啊\n>\n> 要死了\n\n## Why\n\n百度谷歌一番发现普遍都有这个问题,可能原因有很多,简单的原因这里不多说,建议先谷歌一下\n\n问题集中在zsh的插件众多,每次执行时都会执行各种插件的东西,尤其是以git为最大的罪魁祸首。\n\n所以,解决问题的第一步是先跟踪,定位问题。\n\n```bash\nzsh -xv\n```\n\n一般情况下可以发现慢的主要原因是卡在了git有关的命令上,关闭git插件后,没有任何影响,你会发现,git相关的命令是集成在主题上的,你可能可以通过使用下面的命令解决一定的问题,但是对于我来说可能不太有用\n\n```bash\ngit config --global oh-my-zsh.hide-status 1\n```\n\n索性查看相关主题的配置源码,我用的主题是`fishy`\n\n```bash\n 1 # ZSH Theme emulating the Fish shell's default prompt.\n 2 \n 3 _fishy_collapsed_wd() {\n 4 echo $(pwd | perl -pe '\n 5 BEGIN {\n 6 binmode STDIN, \":encoding(UTF-8)\";\n 7 binmode STDOUT, \":encoding(UTF-8)\";\n 8 }; s|^$ENV{HOME}|~|g; s|/([^/.])[^/]*(?=/)|/$1|g; s|/\\.([^/])[^/]*(?=/)|/.$1|g\n 9 ')\n 10 }\n 11 \n 12 local user_color='green'; [ $UID -eq 0 ] && user_color='red'\n 13 PROMPT='%n@%m %{$fg[$user_color]%}$(_fishy_collapsed_wd)%{$reset_color%}%(!.#.>) '\n 14 PROMPT2='%{$fg[red]%}\\ %{$reset_color%}'\n 15 \n 16 local return_status=\"%{$fg_bold[red]%}%(?..%?)%{$reset_color%}\"\n 17 #RPROMPT=\"${RPROMPT}\"'${return_status}$(git_prompt_info)$(git_prompt_status)%{$reset_color%}'\n 18 \n 19 ZSH_THEME_GIT_PROMPT_PREFIX=\" \"\n 20 ZSH_THEME_GIT_PROMPT_SUFFIX=\"\"\n 21 ZSH_THEME_GIT_PROMPT_DIRTY=\"\"\n 22 ZSH_THEME_GIT_PROMPT_CLEAN=\"\"\n 23 \n 24 ZSH_THEME_GIT_PROMPT_ADDED=\"%{$fg_bold[green]%}+\"\n 25 ZSH_THEME_GIT_PROMPT_MODIFIED=\"%{$fg_bold[blue]%}!\"\n 26 ZSH_THEME_GIT_PROMPT_DELETED=\"%{$fg_bold[red]%}-\"\n 27 ZSH_THEME_GIT_PROMPT_RENAMED=\"%{$fg_bold[magenta]%}>\"\n 28 ZSH_THEME_GIT_PROMPT_UNMERGED=\"%{$fg_bold[yellow]%}#\"\n 29 ZSH_THEME_GIT_PROMPT_UNTRACKED=\"%{$fg_bold[cyan]%}?\"\n```\n\n发现git相关的命令集成在`RPROMPT=\"${RPROMPT}\"'${return_status}$(git_prompt_info)$(git_prompt_status)%{$reset_color%}'`索性全部注释掉\n\n## 爽\n\n","slug":"zsh-is-too-slow","published":1,"updated":"2019-09-30T12:06:42.824Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkm9000stzy4rjizxrwt","content":"<h1 id=\"zsh慢成💩\"><a href=\"#zsh慢成💩\" class=\"headerlink\" title=\"zsh慢成💩\"></a>zsh慢成💩</h1><blockquote>\n<p>简单介绍一下,Catalina升级成zsh之后,便安装了传说中最简单配置zsh的“插件”——oh-my-zsh</p>\n<p>但是安装好之后,速度慢的像坨翔</p>\n<p>启动五秒</p>\n<p>随便cd一下要三秒</p>\n<p>随便ls一下等两秒</p>\n<p>啊</p>\n<p>要死了</p>\n</blockquote>\n<h2 id=\"Why\"><a href=\"#Why\" class=\"headerlink\" title=\"Why\"></a>Why</h2><p>百度谷歌一番发现普遍都有这个问题,可能原因有很多,简单的原因这里不多说,建议先谷歌一下</p>\n<p>问题集中在zsh的插件众多,每次执行时都会执行各种插件的东西,尤其是以git为最大的罪魁祸首。</p>\n<p>所以,解决问题的第一步是先跟踪,定位问题。</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">zsh -xv</span><br></pre></td></tr></table></figure>\n<p>一般情况下可以发现慢的主要原因是卡在了git有关的命令上,关闭git插件后,没有任何影响,你会发现,git相关的命令是集成在主题上的,你可能可以通过使用下面的命令解决一定的问题,但是对于我来说可能不太有用</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">git config --global oh-my-zsh.hide-status 1</span><br></pre></td></tr></table></figure>\n<p>索性查看相关主题的配置源码,我用的主题是<code>fishy</code></p>\n<figure class=\"highlight bash\"><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><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"> 1 <span class=\"comment\"># ZSH Theme emulating the Fish shell's default prompt.</span></span><br><span class=\"line\"> 2 </span><br><span class=\"line\"> 3 <span class=\"function\"><span class=\"title\">_fishy_collapsed_wd</span></span>() {</span><br><span class=\"line\"> 4 <span class=\"built_in\">echo</span> $(<span class=\"built_in\">pwd</span> | perl -pe <span class=\"string\">'</span></span><br><span class=\"line\"><span class=\"string\"> 5 BEGIN {</span></span><br><span class=\"line\"><span class=\"string\"> 6 binmode STDIN, \":encoding(UTF-8)\";</span></span><br><span class=\"line\"><span class=\"string\"> 7 binmode STDOUT, \":encoding(UTF-8)\";</span></span><br><span class=\"line\"><span class=\"string\"> 8 }; s|^$ENV{HOME}|~|g; s|/([^/.])[^/]*(?=/)|/$1|g; s|/\\.([^/])[^/]*(?=/)|/.$1|g</span></span><br><span class=\"line\"><span class=\"string\"> 9 '</span>)</span><br><span class=\"line\">10 }</span><br><span class=\"line\">11 </span><br><span class=\"line\">12 <span class=\"built_in\">local</span> user_color=<span class=\"string\">'green'</span>; [ <span class=\"variable\">$UID</span> -eq 0 ] && user_color=<span class=\"string\">'red'</span></span><br><span class=\"line\">13 PROMPT=<span class=\"string\">'%n@%m %{$fg[$user_color]%}$(_fishy_collapsed_wd)%{$reset_color%}%(!.#.>) '</span></span><br><span class=\"line\">14 PROMPT2=<span class=\"string\">'%{$fg[red]%}\\ %{$reset_color%}'</span></span><br><span class=\"line\">15 </span><br><span class=\"line\">16 <span class=\"built_in\">local</span> return_status=<span class=\"string\">\"%{<span class=\"variable\">$fg_bold</span>[red]%}%(?..%?)%{<span class=\"variable\">$reset_color</span>%}\"</span></span><br><span class=\"line\">17 <span class=\"comment\">#RPROMPT=\"${RPROMPT}\"'${return_status}$(git_prompt_info)$(git_prompt_status)%{$reset_color%}'</span></span><br><span class=\"line\">18 </span><br><span class=\"line\">19 ZSH_THEME_GIT_PROMPT_PREFIX=<span class=\"string\">\" \"</span></span><br><span class=\"line\">20 ZSH_THEME_GIT_PROMPT_SUFFIX=<span class=\"string\">\"\"</span></span><br><span class=\"line\">21 ZSH_THEME_GIT_PROMPT_DIRTY=<span class=\"string\">\"\"</span></span><br><span class=\"line\">22 ZSH_THEME_GIT_PROMPT_CLEAN=<span class=\"string\">\"\"</span></span><br><span class=\"line\">23 </span><br><span class=\"line\">24 ZSH_THEME_GIT_PROMPT_ADDED=<span class=\"string\">\"%{<span class=\"variable\">$fg_bold</span>[green]%}+\"</span></span><br><span class=\"line\">25 ZSH_THEME_GIT_PROMPT_MODIFIED=<span class=\"string\">\"%{<span class=\"variable\">$fg_bold</span>[blue]%}!\"</span></span><br><span class=\"line\">26 ZSH_THEME_GIT_PROMPT_DELETED=<span class=\"string\">\"%{<span class=\"variable\">$fg_bold</span>[red]%}-\"</span></span><br><span class=\"line\">27 ZSH_THEME_GIT_PROMPT_RENAMED=<span class=\"string\">\"%{<span class=\"variable\">$fg_bold</span>[magenta]%}>\"</span></span><br><span class=\"line\">28 ZSH_THEME_GIT_PROMPT_UNMERGED=<span class=\"string\">\"%{<span class=\"variable\">$fg_bold</span>[yellow]%}#\"</span></span><br><span class=\"line\">29 ZSH_THEME_GIT_PROMPT_UNTRACKED=<span class=\"string\">\"%{<span class=\"variable\">$fg_bold</span>[cyan]%}?\"</span></span><br></pre></td></tr></table></figure>\n<p>发现git相关的命令集成在<code>RPROMPT="${RPROMPT}"'${return_status}$(git_prompt_info)$(git_prompt_status)%{$reset_color%}'</code>索性全部注释掉</p>\n<h2 id=\"爽\"><a href=\"#爽\" class=\"headerlink\" title=\"爽\"></a>爽</h2>","site":{"data":{}},"excerpt":"","more":"<h1 id=\"zsh慢成💩\"><a href=\"#zsh慢成💩\" class=\"headerlink\" title=\"zsh慢成💩\"></a>zsh慢成💩</h1><blockquote>\n<p>简单介绍一下,Catalina升级成zsh之后,便安装了传说中最简单配置zsh的“插件”——oh-my-zsh</p>\n<p>但是安装好之后,速度慢的像坨翔</p>\n<p>启动五秒</p>\n<p>随便cd一下要三秒</p>\n<p>随便ls一下等两秒</p>\n<p>啊</p>\n<p>要死了</p>\n</blockquote>\n<h2 id=\"Why\"><a href=\"#Why\" class=\"headerlink\" title=\"Why\"></a>Why</h2><p>百度谷歌一番发现普遍都有这个问题,可能原因有很多,简单的原因这里不多说,建议先谷歌一下</p>\n<p>问题集中在zsh的插件众多,每次执行时都会执行各种插件的东西,尤其是以git为最大的罪魁祸首。</p>\n<p>所以,解决问题的第一步是先跟踪,定位问题。</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">zsh -xv</span><br></pre></td></tr></table></figure>\n<p>一般情况下可以发现慢的主要原因是卡在了git有关的命令上,关闭git插件后,没有任何影响,你会发现,git相关的命令是集成在主题上的,你可能可以通过使用下面的命令解决一定的问题,但是对于我来说可能不太有用</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">git config --global oh-my-zsh.hide-status 1</span><br></pre></td></tr></table></figure>\n<p>索性查看相关主题的配置源码,我用的主题是<code>fishy</code></p>\n<figure class=\"highlight bash\"><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><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"> 1 <span class=\"comment\"># ZSH Theme emulating the Fish shell's default prompt.</span></span><br><span class=\"line\"> 2 </span><br><span class=\"line\"> 3 <span class=\"function\"><span class=\"title\">_fishy_collapsed_wd</span></span>() {</span><br><span class=\"line\"> 4 <span class=\"built_in\">echo</span> $(<span class=\"built_in\">pwd</span> | perl -pe <span class=\"string\">'</span></span><br><span class=\"line\"><span class=\"string\"> 5 BEGIN {</span></span><br><span class=\"line\"><span class=\"string\"> 6 binmode STDIN, \":encoding(UTF-8)\";</span></span><br><span class=\"line\"><span class=\"string\"> 7 binmode STDOUT, \":encoding(UTF-8)\";</span></span><br><span class=\"line\"><span class=\"string\"> 8 }; s|^$ENV{HOME}|~|g; s|/([^/.])[^/]*(?=/)|/$1|g; s|/\\.([^/])[^/]*(?=/)|/.$1|g</span></span><br><span class=\"line\"><span class=\"string\"> 9 '</span>)</span><br><span class=\"line\">10 }</span><br><span class=\"line\">11 </span><br><span class=\"line\">12 <span class=\"built_in\">local</span> user_color=<span class=\"string\">'green'</span>; [ <span class=\"variable\">$UID</span> -eq 0 ] && user_color=<span class=\"string\">'red'</span></span><br><span class=\"line\">13 PROMPT=<span class=\"string\">'%n@%m %{$fg[$user_color]%}$(_fishy_collapsed_wd)%{$reset_color%}%(!.#.>) '</span></span><br><span class=\"line\">14 PROMPT2=<span class=\"string\">'%{$fg[red]%}\\ %{$reset_color%}'</span></span><br><span class=\"line\">15 </span><br><span class=\"line\">16 <span class=\"built_in\">local</span> return_status=<span class=\"string\">\"%{<span class=\"variable\">$fg_bold</span>[red]%}%(?..%?)%{<span class=\"variable\">$reset_color</span>%}\"</span></span><br><span class=\"line\">17 <span class=\"comment\">#RPROMPT=\"${RPROMPT}\"'${return_status}$(git_prompt_info)$(git_prompt_status)%{$reset_color%}'</span></span><br><span class=\"line\">18 </span><br><span class=\"line\">19 ZSH_THEME_GIT_PROMPT_PREFIX=<span class=\"string\">\" \"</span></span><br><span class=\"line\">20 ZSH_THEME_GIT_PROMPT_SUFFIX=<span class=\"string\">\"\"</span></span><br><span class=\"line\">21 ZSH_THEME_GIT_PROMPT_DIRTY=<span class=\"string\">\"\"</span></span><br><span class=\"line\">22 ZSH_THEME_GIT_PROMPT_CLEAN=<span class=\"string\">\"\"</span></span><br><span class=\"line\">23 </span><br><span class=\"line\">24 ZSH_THEME_GIT_PROMPT_ADDED=<span class=\"string\">\"%{<span class=\"variable\">$fg_bold</span>[green]%}+\"</span></span><br><span class=\"line\">25 ZSH_THEME_GIT_PROMPT_MODIFIED=<span class=\"string\">\"%{<span class=\"variable\">$fg_bold</span>[blue]%}!\"</span></span><br><span class=\"line\">26 ZSH_THEME_GIT_PROMPT_DELETED=<span class=\"string\">\"%{<span class=\"variable\">$fg_bold</span>[red]%}-\"</span></span><br><span class=\"line\">27 ZSH_THEME_GIT_PROMPT_RENAMED=<span class=\"string\">\"%{<span class=\"variable\">$fg_bold</span>[magenta]%}>\"</span></span><br><span class=\"line\">28 ZSH_THEME_GIT_PROMPT_UNMERGED=<span class=\"string\">\"%{<span class=\"variable\">$fg_bold</span>[yellow]%}#\"</span></span><br><span class=\"line\">29 ZSH_THEME_GIT_PROMPT_UNTRACKED=<span class=\"string\">\"%{<span class=\"variable\">$fg_bold</span>[cyan]%}?\"</span></span><br></pre></td></tr></table></figure>\n<p>发现git相关的命令集成在<code>RPROMPT="${RPROMPT}"'${return_status}$(git_prompt_info)$(git_prompt_status)%{$reset_color%}'</code>索性全部注释掉</p>\n<h2 id=\"爽\"><a href=\"#爽\" class=\"headerlink\" title=\"爽\"></a>爽</h2>"},{"title":"vim笔记","date":"2019-09-30T11:00:51.000Z","_content":"\n# Vim 笔记\n\n## 编辑\n\n* i——insert(字母前)\n* a——append(字母后)\n* o——below(下一行)\n* A——append after line(行后)\n* I——insert before line(行前)\n* O——above line(上一行)\n\n\n\n- ctrl+u——删除行\n- ctrl+w——删除字\n- ctrl+a——移动到最前\n- ctrl+e——移动到最后\n- gi——移动到上一次编辑的地方 \n\n\n\n* dw——删除一个字符\n* dd——删除一行\n* dt{char}——删除到某个字符\n* d0/$——删除到行首行尾\n* x——删除字符\n\n\n\n快速修改\n\n* r(replace)——替换\n* c(change)——ct“——删除到”之前的内容并进入编辑模式\n* s(substitute)——删除并进入编辑模式\n\n\n\n替换\n\n* `:% s/self/this/g`——%全部,s替换,self替换为this,g全局\n* `:1,6 s/self/this/c`——1,6行,s替换,sels替换为this,c需要确认\n\n\n\n查询\n\n* /?——前向或反向\n* nN——下一个或者上一个\n\n\n\n## 视图\n\n- `:vs`——左右分屏\n- `:sp`——上下分屏\n- `:q`——退出屏幕\n\n\n\n- v——选中模式\n- V——行选中\n- ctrl+v——块选中\n- y——复制\n- p——粘贴\n- u——撤销\n- d——删除\n\n\n\n## 移动\n\n- hjkl——上下左右\n- w/W 移到下一个单词开头,大写以空格为分割\n- e/E移到下一个单词的结尾\n- b/B上一个开头\n\n行间移动\n\n- f{char}——行内搜索并跳转到下一个字母上,F表示向前搜索\n\n\n\n* 行首行尾——0,$\n\n\n\n* gg/G——文件开头/结尾\n* H/M/L——屏幕开头/中间/结尾\n* ctrl+u/f——向上/下翻页\n* z z——放在中间\n\n\n\n## 配置\n\n\n\n","source":"_posts/vim.md","raw":"---\ntitle: vim笔记\ntags: [vim, linux]\ndate: 2019-09-30 19:00:51\ncategories: [vim]\n---\n\n# Vim 笔记\n\n## 编辑\n\n* i——insert(字母前)\n* a——append(字母后)\n* o——below(下一行)\n* A——append after line(行后)\n* I——insert before line(行前)\n* O——above line(上一行)\n\n\n\n- ctrl+u——删除行\n- ctrl+w——删除字\n- ctrl+a——移动到最前\n- ctrl+e——移动到最后\n- gi——移动到上一次编辑的地方 \n\n\n\n* dw——删除一个字符\n* dd——删除一行\n* dt{char}——删除到某个字符\n* d0/$——删除到行首行尾\n* x——删除字符\n\n\n\n快速修改\n\n* r(replace)——替换\n* c(change)——ct“——删除到”之前的内容并进入编辑模式\n* s(substitute)——删除并进入编辑模式\n\n\n\n替换\n\n* `:% s/self/this/g`——%全部,s替换,self替换为this,g全局\n* `:1,6 s/self/this/c`——1,6行,s替换,sels替换为this,c需要确认\n\n\n\n查询\n\n* /?——前向或反向\n* nN——下一个或者上一个\n\n\n\n## 视图\n\n- `:vs`——左右分屏\n- `:sp`——上下分屏\n- `:q`——退出屏幕\n\n\n\n- v——选中模式\n- V——行选中\n- ctrl+v——块选中\n- y——复制\n- p——粘贴\n- u——撤销\n- d——删除\n\n\n\n## 移动\n\n- hjkl——上下左右\n- w/W 移到下一个单词开头,大写以空格为分割\n- e/E移到下一个单词的结尾\n- b/B上一个开头\n\n行间移动\n\n- f{char}——行内搜索并跳转到下一个字母上,F表示向前搜索\n\n\n\n* 行首行尾——0,$\n\n\n\n* gg/G——文件开头/结尾\n* H/M/L——屏幕开头/中间/结尾\n* ctrl+u/f——向上/下翻页\n* z z——放在中间\n\n\n\n## 配置\n\n\n\n","slug":"vim","published":1,"updated":"2019-10-01T14:04:04.423Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkmb000utzy4ho9o0zvb","content":"<h1 id=\"Vim-笔记\"><a href=\"#Vim-笔记\" class=\"headerlink\" title=\"Vim 笔记\"></a>Vim 笔记</h1><h2 id=\"编辑\"><a href=\"#编辑\" class=\"headerlink\" title=\"编辑\"></a>编辑</h2><ul>\n<li>i——insert(字母前)</li>\n<li>a——append(字母后)</li>\n<li>o——below(下一行)</li>\n<li>A——append after line(行后)</li>\n<li>I——insert before line(行前)</li>\n<li>O——above line(上一行)</li>\n</ul>\n<ul>\n<li>ctrl+u——删除行</li>\n<li>ctrl+w——删除字</li>\n<li>ctrl+a——移动到最前</li>\n<li>ctrl+e——移动到最后</li>\n<li>gi——移动到上一次编辑的地方 </li>\n</ul>\n<ul>\n<li>dw——删除一个字符</li>\n<li>dd——删除一行</li>\n<li>dt{char}——删除到某个字符</li>\n<li>d0/$——删除到行首行尾</li>\n<li>x——删除字符</li>\n</ul>\n<p>快速修改</p>\n<ul>\n<li>r(replace)——替换</li>\n<li>c(change)——ct“——删除到”之前的内容并进入编辑模式</li>\n<li>s(substitute)——删除并进入编辑模式</li>\n</ul>\n<p>替换</p>\n<ul>\n<li><code>:% s/self/this/g</code>——%全部,s替换,self替换为this,g全局</li>\n<li><code>:1,6 s/self/this/c</code>——1,6行,s替换,sels替换为this,c需要确认</li>\n</ul>\n<p>查询</p>\n<ul>\n<li>/?——前向或反向</li>\n<li>nN——下一个或者上一个</li>\n</ul>\n<h2 id=\"视图\"><a href=\"#视图\" class=\"headerlink\" title=\"视图\"></a>视图</h2><ul>\n<li><code>:vs</code>——左右分屏</li>\n<li><code>:sp</code>——上下分屏</li>\n<li><code>:q</code>——退出屏幕</li>\n</ul>\n<ul>\n<li>v——选中模式</li>\n<li>V——行选中</li>\n<li>ctrl+v——块选中</li>\n<li>y——复制</li>\n<li>p——粘贴</li>\n<li>u——撤销</li>\n<li>d——删除</li>\n</ul>\n<h2 id=\"移动\"><a href=\"#移动\" class=\"headerlink\" title=\"移动\"></a>移动</h2><ul>\n<li>hjkl——上下左右</li>\n<li>w/W 移到下一个单词开头,大写以空格为分割</li>\n<li>e/E移到下一个单词的结尾</li>\n<li>b/B上一个开头</li>\n</ul>\n<p>行间移动</p>\n<ul>\n<li>f{char}——行内搜索并跳转到下一个字母上,F表示向前搜索</li>\n</ul>\n<ul>\n<li>行首行尾——0,$</li>\n</ul>\n<ul>\n<li>gg/G——文件开头/结尾</li>\n<li>H/M/L——屏幕开头/中间/结尾</li>\n<li>ctrl+u/f——向上/下翻页</li>\n<li>z z——放在中间</li>\n</ul>\n<h2 id=\"配置\"><a href=\"#配置\" class=\"headerlink\" title=\"配置\"></a>配置</h2>","site":{"data":{}},"excerpt":"","more":"<h1 id=\"Vim-笔记\"><a href=\"#Vim-笔记\" class=\"headerlink\" title=\"Vim 笔记\"></a>Vim 笔记</h1><h2 id=\"编辑\"><a href=\"#编辑\" class=\"headerlink\" title=\"编辑\"></a>编辑</h2><ul>\n<li>i——insert(字母前)</li>\n<li>a——append(字母后)</li>\n<li>o——below(下一行)</li>\n<li>A——append after line(行后)</li>\n<li>I——insert before line(行前)</li>\n<li>O——above line(上一行)</li>\n</ul>\n<ul>\n<li>ctrl+u——删除行</li>\n<li>ctrl+w——删除字</li>\n<li>ctrl+a——移动到最前</li>\n<li>ctrl+e——移动到最后</li>\n<li>gi——移动到上一次编辑的地方 </li>\n</ul>\n<ul>\n<li>dw——删除一个字符</li>\n<li>dd——删除一行</li>\n<li>dt{char}——删除到某个字符</li>\n<li>d0/$——删除到行首行尾</li>\n<li>x——删除字符</li>\n</ul>\n<p>快速修改</p>\n<ul>\n<li>r(replace)——替换</li>\n<li>c(change)——ct“——删除到”之前的内容并进入编辑模式</li>\n<li>s(substitute)——删除并进入编辑模式</li>\n</ul>\n<p>替换</p>\n<ul>\n<li><code>:% s/self/this/g</code>——%全部,s替换,self替换为this,g全局</li>\n<li><code>:1,6 s/self/this/c</code>——1,6行,s替换,sels替换为this,c需要确认</li>\n</ul>\n<p>查询</p>\n<ul>\n<li>/?——前向或反向</li>\n<li>nN——下一个或者上一个</li>\n</ul>\n<h2 id=\"视图\"><a href=\"#视图\" class=\"headerlink\" title=\"视图\"></a>视图</h2><ul>\n<li><code>:vs</code>——左右分屏</li>\n<li><code>:sp</code>——上下分屏</li>\n<li><code>:q</code>——退出屏幕</li>\n</ul>\n<ul>\n<li>v——选中模式</li>\n<li>V——行选中</li>\n<li>ctrl+v——块选中</li>\n<li>y——复制</li>\n<li>p——粘贴</li>\n<li>u——撤销</li>\n<li>d——删除</li>\n</ul>\n<h2 id=\"移动\"><a href=\"#移动\" class=\"headerlink\" title=\"移动\"></a>移动</h2><ul>\n<li>hjkl——上下左右</li>\n<li>w/W 移到下一个单词开头,大写以空格为分割</li>\n<li>e/E移到下一个单词的结尾</li>\n<li>b/B上一个开头</li>\n</ul>\n<p>行间移动</p>\n<ul>\n<li>f{char}——行内搜索并跳转到下一个字母上,F表示向前搜索</li>\n</ul>\n<ul>\n<li>行首行尾——0,$</li>\n</ul>\n<ul>\n<li>gg/G——文件开头/结尾</li>\n<li>H/M/L——屏幕开头/中间/结尾</li>\n<li>ctrl+u/f——向上/下翻页</li>\n<li>z z——放在中间</li>\n</ul>\n<h2 id=\"配置\"><a href=\"#配置\" class=\"headerlink\" title=\"配置\"></a>配置</h2>"},{"title":"台湾科技大学自动查询审核结果的脚本","date":"2018-05-07T07:49:45.000Z","_content":"\n# 台湾科技大学自动查询审核结果的脚本\n> \t要去交流了,天天随时随地看结果太累了,写了个简单的脚本,如果发生变动的话会发邮件给我,代码如下。 \n\nGithub地址: [https://github.com/ranxuebin/NTUST_Exchange-Program-Auto-Chack-Result](https://github.com/ranxuebin/NTUST_Exchange-Program-Auto-Chack-Result)\n\n![](a.png)\n\n```python\nimport time\nimport requests\nimport smtplib\nfrom email.mime.text import MIMEText\nfrom email.header import Header\n\nfrom bs4 import BeautifulSoup\n\nwhile 1:\n loginurl = 'http://stu88.ntust.edu.tw/inboundchina/stu/login.do'\n homeurl = \"http://stu88.ntust.edu.tw/inboundchina/stu/review.result\"\n\n headers = {\n \"User-Agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1 Safari/605.1.15\",\n \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\",\n \"Accept-Encoding\": \"gzip, deflate\",\n \"Host\": 'stu88.ntust.edu.tw',\n \"Accept-Language\": 'zh-cn',\n \"Content-Type\": 'application/x-www-form-urlencoded',\n 'Referer': 'http://stu88.ntust.edu.tw/inboundchina/stu',\n \"Upgrade-Insecure-Requests\": \"1\",\n \"Origin\": 'http://jwk.lzu.edu.cn',\n \"DNT\": '1',\n \"Connection\": 'keep-alive'\n\n }\n\n session = requests.Session()\n\n payload = {\n 'email': '[email protected]',\n 'password': '*******',\n 'captcha': ''\n }\n\n\n def send_mail(sub, text):\n # 第三方 SMTP 服务\n mail_host = \"smtp.lzu.edu.cn\" # 设置服务器\n mail_user = \"*****\" # 用户名\n mail_pass = \"*****\" # 口令\n\n sender = '[email protected]'\n # receivers = ['[email protected]'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱\n receivers = ','.join(['[email protected]'])\n message = MIMEText(text, 'plain', 'utf-8')\n message['From'] = Header(\"自动发送\", 'utf-8')\n message['To'] = Header(\"Rankin\", 'utf-8')\n\n subject = sub\n message['Subject'] = Header(subject, 'utf-8')\n try:\n smtpObj = smtplib.SMTP()\n smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号\n smtpObj.login(mail_user, mail_pass)\n smtpObj.sendmail(sender, receivers, message.as_string())\n print(\"邮件发送成功\")\n except smtplib.SMTPException:\n print(\"send mail error!\")\n\n\n try:\n response_login = session.post(loginurl, headers=headers, data=payload)\n response_home = session.get(homeurl, headers=headers)\n\n except:\n print(\"login error!\")\n result = BeautifulSoup(response_home.text, \"html.parser\")\n result = result.find(class_=\"alert alert-info\")\n print(time.strftime(\"%a %b %d %H:%M:%S %Y\", time.localtime()) + \" \" + result.span.string)\n\n if result.span.string != 'Pass the first stage':\n send_mail(\"台科大信息\", result.span.string)\n\n time.sleep(600)\n```\n","source":"_posts/台湾科技大学自动查询审核结果的脚本.md","raw":"---\ntitle: 台湾科技大学自动查询审核结果的脚本\ndate: 2018-05-07 15:49:45\ntags: [脚本,台科]\ncategories: 脚本\n---\n\n# 台湾科技大学自动查询审核结果的脚本\n> \t要去交流了,天天随时随地看结果太累了,写了个简单的脚本,如果发生变动的话会发邮件给我,代码如下。 \n\nGithub地址: [https://github.com/ranxuebin/NTUST_Exchange-Program-Auto-Chack-Result](https://github.com/ranxuebin/NTUST_Exchange-Program-Auto-Chack-Result)\n\n![](a.png)\n\n```python\nimport time\nimport requests\nimport smtplib\nfrom email.mime.text import MIMEText\nfrom email.header import Header\n\nfrom bs4 import BeautifulSoup\n\nwhile 1:\n loginurl = 'http://stu88.ntust.edu.tw/inboundchina/stu/login.do'\n homeurl = \"http://stu88.ntust.edu.tw/inboundchina/stu/review.result\"\n\n headers = {\n \"User-Agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1 Safari/605.1.15\",\n \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\",\n \"Accept-Encoding\": \"gzip, deflate\",\n \"Host\": 'stu88.ntust.edu.tw',\n \"Accept-Language\": 'zh-cn',\n \"Content-Type\": 'application/x-www-form-urlencoded',\n 'Referer': 'http://stu88.ntust.edu.tw/inboundchina/stu',\n \"Upgrade-Insecure-Requests\": \"1\",\n \"Origin\": 'http://jwk.lzu.edu.cn',\n \"DNT\": '1',\n \"Connection\": 'keep-alive'\n\n }\n\n session = requests.Session()\n\n payload = {\n 'email': '[email protected]',\n 'password': '*******',\n 'captcha': ''\n }\n\n\n def send_mail(sub, text):\n # 第三方 SMTP 服务\n mail_host = \"smtp.lzu.edu.cn\" # 设置服务器\n mail_user = \"*****\" # 用户名\n mail_pass = \"*****\" # 口令\n\n sender = '[email protected]'\n # receivers = ['[email protected]'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱\n receivers = ','.join(['[email protected]'])\n message = MIMEText(text, 'plain', 'utf-8')\n message['From'] = Header(\"自动发送\", 'utf-8')\n message['To'] = Header(\"Rankin\", 'utf-8')\n\n subject = sub\n message['Subject'] = Header(subject, 'utf-8')\n try:\n smtpObj = smtplib.SMTP()\n smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号\n smtpObj.login(mail_user, mail_pass)\n smtpObj.sendmail(sender, receivers, message.as_string())\n print(\"邮件发送成功\")\n except smtplib.SMTPException:\n print(\"send mail error!\")\n\n\n try:\n response_login = session.post(loginurl, headers=headers, data=payload)\n response_home = session.get(homeurl, headers=headers)\n\n except:\n print(\"login error!\")\n result = BeautifulSoup(response_home.text, \"html.parser\")\n result = result.find(class_=\"alert alert-info\")\n print(time.strftime(\"%a %b %d %H:%M:%S %Y\", time.localtime()) + \" \" + result.span.string)\n\n if result.span.string != 'Pass the first stage':\n send_mail(\"台科大信息\", result.span.string)\n\n time.sleep(600)\n```\n","slug":"台湾科技大学自动查询审核结果的脚本","published":1,"updated":"2018-05-07T07:55:00.771Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkmc000wtzy4mbt3g091","content":"<h1 id=\"台湾科技大学自动查询审核结果的脚本\"><a href=\"#台湾科技大学自动查询审核结果的脚本\" class=\"headerlink\" title=\"台湾科技大学自动查询审核结果的脚本\"></a>台湾科技大学自动查询审核结果的脚本</h1><blockquote>\n<pre><code>要去交流了,天天随时随地看结果太累了,写了个简单的脚本,如果发生变动的话会发邮件给我,代码如下。 \n</code></pre></blockquote>\n<p>Github地址: <a href=\"https://github.com/ranxuebin/NTUST_Exchange-Program-Auto-Chack-Result\" target=\"_blank\" rel=\"noopener\">https://github.com/ranxuebin/NTUST_Exchange-Program-Auto-Chack-Result</a></p>\n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"a.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<figure class=\"highlight python\"><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><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br><span class=\"line\">43</span><br><span class=\"line\">44</span><br><span class=\"line\">45</span><br><span class=\"line\">46</span><br><span class=\"line\">47</span><br><span class=\"line\">48</span><br><span class=\"line\">49</span><br><span class=\"line\">50</span><br><span class=\"line\">51</span><br><span class=\"line\">52</span><br><span class=\"line\">53</span><br><span class=\"line\">54</span><br><span class=\"line\">55</span><br><span class=\"line\">56</span><br><span class=\"line\">57</span><br><span class=\"line\">58</span><br><span class=\"line\">59</span><br><span class=\"line\">60</span><br><span class=\"line\">61</span><br><span class=\"line\">62</span><br><span class=\"line\">63</span><br><span class=\"line\">64</span><br><span class=\"line\">65</span><br><span class=\"line\">66</span><br><span class=\"line\">67</span><br><span class=\"line\">68</span><br><span class=\"line\">69</span><br><span class=\"line\">70</span><br><span class=\"line\">71</span><br><span class=\"line\">72</span><br><span class=\"line\">73</span><br><span class=\"line\">74</span><br><span class=\"line\">75</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">import</span> time</span><br><span class=\"line\"><span class=\"keyword\">import</span> requests</span><br><span class=\"line\"><span class=\"keyword\">import</span> smtplib</span><br><span class=\"line\"><span class=\"keyword\">from</span> email.mime.text <span class=\"keyword\">import</span> MIMEText</span><br><span class=\"line\"><span class=\"keyword\">from</span> email.header <span class=\"keyword\">import</span> Header</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"keyword\">from</span> bs4 <span class=\"keyword\">import</span> BeautifulSoup</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"keyword\">while</span> <span class=\"number\">1</span>:</span><br><span class=\"line\"> loginurl = <span class=\"string\">'http://stu88.ntust.edu.tw/inboundchina/stu/login.do'</span></span><br><span class=\"line\"> homeurl = <span class=\"string\">\"http://stu88.ntust.edu.tw/inboundchina/stu/review.result\"</span></span><br><span class=\"line\"></span><br><span class=\"line\"> headers = {</span><br><span class=\"line\"> <span class=\"string\">\"User-Agent\"</span>: <span class=\"string\">\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1 Safari/605.1.15\"</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Accept\"</span>: <span class=\"string\">\"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\"</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Accept-Encoding\"</span>: <span class=\"string\">\"gzip, deflate\"</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Host\"</span>: <span class=\"string\">'stu88.ntust.edu.tw'</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Accept-Language\"</span>: <span class=\"string\">'zh-cn'</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Content-Type\"</span>: <span class=\"string\">'application/x-www-form-urlencoded'</span>,</span><br><span class=\"line\"> <span class=\"string\">'Referer'</span>: <span class=\"string\">'http://stu88.ntust.edu.tw/inboundchina/stu'</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Upgrade-Insecure-Requests\"</span>: <span class=\"string\">\"1\"</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Origin\"</span>: <span class=\"string\">'http://jwk.lzu.edu.cn'</span>,</span><br><span class=\"line\"> <span class=\"string\">\"DNT\"</span>: <span class=\"string\">'1'</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Connection\"</span>: <span class=\"string\">'keep-alive'</span></span><br><span class=\"line\"></span><br><span class=\"line\"> }</span><br><span class=\"line\"></span><br><span class=\"line\"> session = requests.Session()</span><br><span class=\"line\"></span><br><span class=\"line\"> payload = {</span><br><span class=\"line\"> <span class=\"string\">'email'</span>: <span class=\"string\">'[email protected]'</span>,</span><br><span class=\"line\"> <span class=\"string\">'password'</span>: <span class=\"string\">'*******'</span>,</span><br><span class=\"line\"> <span class=\"string\">'captcha'</span>: <span class=\"string\">''</span></span><br><span class=\"line\"> }</span><br><span class=\"line\"></span><br><span class=\"line\"></span><br><span class=\"line\"> <span class=\"function\"><span class=\"keyword\">def</span> <span class=\"title\">send_mail</span><span class=\"params\">(sub, text)</span>:</span></span><br><span class=\"line\"> <span class=\"comment\"># 第三方 SMTP 服务</span></span><br><span class=\"line\"> mail_host = <span class=\"string\">\"smtp.lzu.edu.cn\"</span> <span class=\"comment\"># 设置服务器</span></span><br><span class=\"line\"> mail_user = <span class=\"string\">\"*****\"</span> <span class=\"comment\"># 用户名</span></span><br><span class=\"line\"> mail_pass = <span class=\"string\">\"*****\"</span> <span class=\"comment\"># 口令</span></span><br><span class=\"line\"></span><br><span class=\"line\"> sender = <span class=\"string\">'[email protected]'</span></span><br><span class=\"line\"> <span class=\"comment\"># receivers = ['[email protected]'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱</span></span><br><span class=\"line\"> receivers = <span class=\"string\">','</span>.join([<span class=\"string\">'[email protected]'</span>])</span><br><span class=\"line\"> message = MIMEText(text, <span class=\"string\">'plain'</span>, <span class=\"string\">'utf-8'</span>)</span><br><span class=\"line\"> message[<span class=\"string\">'From'</span>] = Header(<span class=\"string\">\"自动发送\"</span>, <span class=\"string\">'utf-8'</span>)</span><br><span class=\"line\"> message[<span class=\"string\">'To'</span>] = Header(<span class=\"string\">\"Rankin\"</span>, <span class=\"string\">'utf-8'</span>)</span><br><span class=\"line\"></span><br><span class=\"line\"> subject = sub</span><br><span class=\"line\"> message[<span class=\"string\">'Subject'</span>] = Header(subject, <span class=\"string\">'utf-8'</span>)</span><br><span class=\"line\"> <span class=\"keyword\">try</span>:</span><br><span class=\"line\"> smtpObj = smtplib.SMTP()</span><br><span class=\"line\"> smtpObj.connect(mail_host, <span class=\"number\">25</span>) <span class=\"comment\"># 25 为 SMTP 端口号</span></span><br><span class=\"line\"> smtpObj.login(mail_user, mail_pass)</span><br><span class=\"line\"> smtpObj.sendmail(sender, receivers, message.as_string())</span><br><span class=\"line\"> print(<span class=\"string\">\"邮件发送成功\"</span>)</span><br><span class=\"line\"> <span class=\"keyword\">except</span> smtplib.SMTPException:</span><br><span class=\"line\"> print(<span class=\"string\">\"send mail error!\"</span>)</span><br><span class=\"line\"></span><br><span class=\"line\"></span><br><span class=\"line\"> <span class=\"keyword\">try</span>:</span><br><span class=\"line\"> response_login = session.post(loginurl, headers=headers, data=payload)</span><br><span class=\"line\"> response_home = session.get(homeurl, headers=headers)</span><br><span class=\"line\"></span><br><span class=\"line\"> <span class=\"keyword\">except</span>:</span><br><span class=\"line\"> print(<span class=\"string\">\"login error!\"</span>)</span><br><span class=\"line\"> result = BeautifulSoup(response_home.text, <span class=\"string\">\"html.parser\"</span>)</span><br><span class=\"line\"> result = result.find(class_=<span class=\"string\">\"alert alert-info\"</span>)</span><br><span class=\"line\"> print(time.strftime(<span class=\"string\">\"%a %b %d %H:%M:%S %Y\"</span>, time.localtime()) + <span class=\"string\">\" \"</span> + result.span.string)</span><br><span class=\"line\"></span><br><span class=\"line\"> <span class=\"keyword\">if</span> result.span.string != <span class=\"string\">'Pass the first stage'</span>:</span><br><span class=\"line\"> send_mail(<span class=\"string\">\"台科大信息\"</span>, result.span.string)</span><br><span class=\"line\"></span><br><span class=\"line\"> time.sleep(<span class=\"number\">600</span>)</span><br></pre></td></tr></table></figure>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"台湾科技大学自动查询审核结果的脚本\"><a href=\"#台湾科技大学自动查询审核结果的脚本\" class=\"headerlink\" title=\"台湾科技大学自动查询审核结果的脚本\"></a>台湾科技大学自动查询审核结果的脚本</h1><blockquote>\n<pre><code>要去交流了,天天随时随地看结果太累了,写了个简单的脚本,如果发生变动的话会发邮件给我,代码如下。 \n</code></pre></blockquote>\n<p>Github地址: <a href=\"https://github.com/ranxuebin/NTUST_Exchange-Program-Auto-Chack-Result\" target=\"_blank\" rel=\"noopener\">https://github.com/ranxuebin/NTUST_Exchange-Program-Auto-Chack-Result</a></p>\n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"a.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<figure class=\"highlight python\"><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><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br><span class=\"line\">43</span><br><span class=\"line\">44</span><br><span class=\"line\">45</span><br><span class=\"line\">46</span><br><span class=\"line\">47</span><br><span class=\"line\">48</span><br><span class=\"line\">49</span><br><span class=\"line\">50</span><br><span class=\"line\">51</span><br><span class=\"line\">52</span><br><span class=\"line\">53</span><br><span class=\"line\">54</span><br><span class=\"line\">55</span><br><span class=\"line\">56</span><br><span class=\"line\">57</span><br><span class=\"line\">58</span><br><span class=\"line\">59</span><br><span class=\"line\">60</span><br><span class=\"line\">61</span><br><span class=\"line\">62</span><br><span class=\"line\">63</span><br><span class=\"line\">64</span><br><span class=\"line\">65</span><br><span class=\"line\">66</span><br><span class=\"line\">67</span><br><span class=\"line\">68</span><br><span class=\"line\">69</span><br><span class=\"line\">70</span><br><span class=\"line\">71</span><br><span class=\"line\">72</span><br><span class=\"line\">73</span><br><span class=\"line\">74</span><br><span class=\"line\">75</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">import</span> time</span><br><span class=\"line\"><span class=\"keyword\">import</span> requests</span><br><span class=\"line\"><span class=\"keyword\">import</span> smtplib</span><br><span class=\"line\"><span class=\"keyword\">from</span> email.mime.text <span class=\"keyword\">import</span> MIMEText</span><br><span class=\"line\"><span class=\"keyword\">from</span> email.header <span class=\"keyword\">import</span> Header</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"keyword\">from</span> bs4 <span class=\"keyword\">import</span> BeautifulSoup</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"keyword\">while</span> <span class=\"number\">1</span>:</span><br><span class=\"line\"> loginurl = <span class=\"string\">'http://stu88.ntust.edu.tw/inboundchina/stu/login.do'</span></span><br><span class=\"line\"> homeurl = <span class=\"string\">\"http://stu88.ntust.edu.tw/inboundchina/stu/review.result\"</span></span><br><span class=\"line\"></span><br><span class=\"line\"> headers = {</span><br><span class=\"line\"> <span class=\"string\">\"User-Agent\"</span>: <span class=\"string\">\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1 Safari/605.1.15\"</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Accept\"</span>: <span class=\"string\">\"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\"</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Accept-Encoding\"</span>: <span class=\"string\">\"gzip, deflate\"</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Host\"</span>: <span class=\"string\">'stu88.ntust.edu.tw'</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Accept-Language\"</span>: <span class=\"string\">'zh-cn'</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Content-Type\"</span>: <span class=\"string\">'application/x-www-form-urlencoded'</span>,</span><br><span class=\"line\"> <span class=\"string\">'Referer'</span>: <span class=\"string\">'http://stu88.ntust.edu.tw/inboundchina/stu'</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Upgrade-Insecure-Requests\"</span>: <span class=\"string\">\"1\"</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Origin\"</span>: <span class=\"string\">'http://jwk.lzu.edu.cn'</span>,</span><br><span class=\"line\"> <span class=\"string\">\"DNT\"</span>: <span class=\"string\">'1'</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Connection\"</span>: <span class=\"string\">'keep-alive'</span></span><br><span class=\"line\"></span><br><span class=\"line\"> }</span><br><span class=\"line\"></span><br><span class=\"line\"> session = requests.Session()</span><br><span class=\"line\"></span><br><span class=\"line\"> payload = {</span><br><span class=\"line\"> <span class=\"string\">'email'</span>: <span class=\"string\">'[email protected]'</span>,</span><br><span class=\"line\"> <span class=\"string\">'password'</span>: <span class=\"string\">'*******'</span>,</span><br><span class=\"line\"> <span class=\"string\">'captcha'</span>: <span class=\"string\">''</span></span><br><span class=\"line\"> }</span><br><span class=\"line\"></span><br><span class=\"line\"></span><br><span class=\"line\"> <span class=\"function\"><span class=\"keyword\">def</span> <span class=\"title\">send_mail</span><span class=\"params\">(sub, text)</span>:</span></span><br><span class=\"line\"> <span class=\"comment\"># 第三方 SMTP 服务</span></span><br><span class=\"line\"> mail_host = <span class=\"string\">\"smtp.lzu.edu.cn\"</span> <span class=\"comment\"># 设置服务器</span></span><br><span class=\"line\"> mail_user = <span class=\"string\">\"*****\"</span> <span class=\"comment\"># 用户名</span></span><br><span class=\"line\"> mail_pass = <span class=\"string\">\"*****\"</span> <span class=\"comment\"># 口令</span></span><br><span class=\"line\"></span><br><span class=\"line\"> sender = <span class=\"string\">'[email protected]'</span></span><br><span class=\"line\"> <span class=\"comment\"># receivers = ['[email protected]'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱</span></span><br><span class=\"line\"> receivers = <span class=\"string\">','</span>.join([<span class=\"string\">'[email protected]'</span>])</span><br><span class=\"line\"> message = MIMEText(text, <span class=\"string\">'plain'</span>, <span class=\"string\">'utf-8'</span>)</span><br><span class=\"line\"> message[<span class=\"string\">'From'</span>] = Header(<span class=\"string\">\"自动发送\"</span>, <span class=\"string\">'utf-8'</span>)</span><br><span class=\"line\"> message[<span class=\"string\">'To'</span>] = Header(<span class=\"string\">\"Rankin\"</span>, <span class=\"string\">'utf-8'</span>)</span><br><span class=\"line\"></span><br><span class=\"line\"> subject = sub</span><br><span class=\"line\"> message[<span class=\"string\">'Subject'</span>] = Header(subject, <span class=\"string\">'utf-8'</span>)</span><br><span class=\"line\"> <span class=\"keyword\">try</span>:</span><br><span class=\"line\"> smtpObj = smtplib.SMTP()</span><br><span class=\"line\"> smtpObj.connect(mail_host, <span class=\"number\">25</span>) <span class=\"comment\"># 25 为 SMTP 端口号</span></span><br><span class=\"line\"> smtpObj.login(mail_user, mail_pass)</span><br><span class=\"line\"> smtpObj.sendmail(sender, receivers, message.as_string())</span><br><span class=\"line\"> print(<span class=\"string\">\"邮件发送成功\"</span>)</span><br><span class=\"line\"> <span class=\"keyword\">except</span> smtplib.SMTPException:</span><br><span class=\"line\"> print(<span class=\"string\">\"send mail error!\"</span>)</span><br><span class=\"line\"></span><br><span class=\"line\"></span><br><span class=\"line\"> <span class=\"keyword\">try</span>:</span><br><span class=\"line\"> response_login = session.post(loginurl, headers=headers, data=payload)</span><br><span class=\"line\"> response_home = session.get(homeurl, headers=headers)</span><br><span class=\"line\"></span><br><span class=\"line\"> <span class=\"keyword\">except</span>:</span><br><span class=\"line\"> print(<span class=\"string\">\"login error!\"</span>)</span><br><span class=\"line\"> result = BeautifulSoup(response_home.text, <span class=\"string\">\"html.parser\"</span>)</span><br><span class=\"line\"> result = result.find(class_=<span class=\"string\">\"alert alert-info\"</span>)</span><br><span class=\"line\"> print(time.strftime(<span class=\"string\">\"%a %b %d %H:%M:%S %Y\"</span>, time.localtime()) + <span class=\"string\">\" \"</span> + result.span.string)</span><br><span class=\"line\"></span><br><span class=\"line\"> <span class=\"keyword\">if</span> result.span.string != <span class=\"string\">'Pass the first stage'</span>:</span><br><span class=\"line\"> send_mail(<span class=\"string\">\"台科大信息\"</span>, result.span.string)</span><br><span class=\"line\"></span><br><span class=\"line\"> time.sleep(<span class=\"number\">600</span>)</span><br></pre></td></tr></table></figure>\n"},{"title":"成都的流水账","date":"2017-11-03T09:57:01.000Z","_content":"\n# 成都的流水账\n> 我文笔也不好,今天在图书馆心情复杂也不知道干点啥,我就记一记流水账吧。\n\n那我就开始了~\n等等~脑婆叫我去吃饭!\n\n![](UNADJUSTEDNONRAW_thumb_4.jpg)","source":"_posts/成都的流水账.md","raw":"---\ntitle: 成都的流水账\ndate: 2017-11-03 17:57:01\ntags:\n---\n\n# 成都的流水账\n> 我文笔也不好,今天在图书馆心情复杂也不知道干点啥,我就记一记流水账吧。\n\n那我就开始了~\n等等~脑婆叫我去吃饭!\n\n![](UNADJUSTEDNONRAW_thumb_4.jpg)","slug":"成都的流水账","published":1,"updated":"2017-11-03T10:03:42.908Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkme0010tzy4xbdi5cab","content":"<h1 id=\"成都的流水账\"><a href=\"#成都的流水账\" class=\"headerlink\" title=\"成都的流水账\"></a>成都的流水账</h1><blockquote>\n<p>我文笔也不好,今天在图书馆心情复杂也不知道干点啥,我就记一记流水账吧。</p>\n</blockquote>\n<p>那我就开始了~<br>等等~脑婆叫我去吃饭!</p>\n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"UNADJUSTEDNONRAW_thumb_4.jpg\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>","site":{"data":{}},"excerpt":"","more":"<h1 id=\"成都的流水账\"><a href=\"#成都的流水账\" class=\"headerlink\" title=\"成都的流水账\"></a>成都的流水账</h1><blockquote>\n<p>我文笔也不好,今天在图书馆心情复杂也不知道干点啥,我就记一记流水账吧。</p>\n</blockquote>\n<p>那我就开始了~<br>等等~脑婆叫我去吃饭!</p>\n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"UNADJUSTEDNONRAW_thumb_4.jpg\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>"},{"title":"我勒个去成都!!!————写在前面","date":"2017-09-28T16:37:22.000Z","_content":"\n# 我勒个去成都!!!————写在前面\n## 提前的准备\n> 一共两个背包一个小提箱; \n> 箱子里主要放衣服杂物不常用的东西; \n> 背包里面电脑相机卫生纸日常用的还有。。零食? \n\n1. 身份证\n2. 学生证\n3. 手机\n4. 充电宝\n5. 流量\n6. 银行卡\n7. 各种充电器\n8. 电脑可以选择性的带一个🐒\n9. 相机(不带脚架)\n10. 各种衣服\n11. 伞!!!!!!!\n\n### 衣物\n> 看天气预报大多是阴天和雨天??难道是因为比较潮?? \n\n30号到成都当晚阴天18度,然后1号到4号之间持续有雨有点蛋疼,56两天继续阴天,7号早上多云但是晚上走的时候继续下雨,8号早上到兰州6、7度,有点冷。。。 \n综合来看的话。。。。不需要太薄的衣服。。。日常衬衫+薄外套\n全部大概准备三套左右差不多~别穿的太少 \n### **带上伞!!!**\n\n## 交通\n### 市区交通\n\n**出租车**\n成都出租车白天(6-23点)起步价8元(速腾2.0和1.4T为9元),包2 公里,后1.9元/公里,10公里到60公里2.85元/公里。 \n夜间(23-6点)起 步价9元(速腾2.0和1.4T为10元),包2公里,后2.2元/公里,10公里到 60公里3.3元/公里。 \n打车后记径索要计秳収票。由亍公交车票价格不便宜,人多时比较合算。\n\n**公交车🚌**\n成都市公交网络四通八达,可以到达任何事被近郊的旅游景区、景点。 \n市内公交车分普通车和高档车两种,市区内的车次基本以两元为主以两元为主。\n\n**地铁🚇** \n一共两条线,均为分段收费,起步价两元,全程五元。 \n\n**火三轮??**\n我也不知道是干啥的,可以去瞅瞅。起步大概是2~5元。 \n\n### 其他景区交通\n\n> **成都机场-峨眉山 収车时间:14:00,票价36元** \n> **成都机场-宜宾 収车时间:14:00,票价95元** \n> **成都机场-乐山 収车时间:14:00、15:50,票价46元。**\n\n**新南门车站(成都市旅游集散中心)** \r位于新南路,成都新南门大桥边。可乘6、28、49、55路到达。 \n发往地区:成都周边,以及川内知名的旅游景区。\n\n\tTIPS:(我在百度攻略上看的)\n\t什邡、绵竹两个地震遗址专线车已开通,票价98元,\n\t费用包括:去去回程车票、餐费、保险、导游、地震遗址安全维护费。\n\t路线为成都—幸汉—什邡—蓥华—绵竹—汉旺—绵竹—德阳—成都。\n\t上午8:00发车, 晚上6时过卲可返回成都。\n## 游览地点汇总\n\n### 宽窄巷子\n宽巷子的闲生活,窄巷子的慢生活,井巷子的新生活成为了成都的“上海新天地”触摸历史痕迹,体味成都原滋原味的休闲生活方式,\n> 门票/开放时间: 全天开放无门票\n> 地址: 青羊区同仁路以东长顺街以西\n> 交通: 公交车“长顺上街”站下车地铁2号线“人民公园”站下车。\n\n\t宽窄巷子旅游最佳时间:\n\t1、清晨: 人很少,拍风景和拍人像都很不错。 \n\t2、下午: 特别是出太阳的下午,来宽窄巷子会很 \n\t挤,很多人在茶馆喝茶,打牌,掏耳朵。这是宽窄 \n\t巷子最成都的一个表现。来一杯盖碗茶,晒一下午 \n\t的太阳。这时候,就不那么适合拍照啦~\n\t3、晚上: 宽窄巷子里有一些酒吧,经常会举办各种各样的party, \n\t价格和品质都不菲。当然,环保一点的办法是, \n\t吃过晚饭之后到宽窄巷子散步,很惬意。很悠闲。 \n\t4、如果周末来,在井巷子还能看到创意集市哦~\n\t\n### 武侯祠\n我也不知道干啥的我就瞎转吧,是个历史遗迹啥的,就不废话了~ \n\n> 门票:60元,学生半价。 \r> 开放时间:夏 7:30-21:00冬 8:00-18:30 \n> 地址:武侯区武侯祠多街231号 \n> 交通:公交车在“武侯祠”站下车\n\n### 锦里\n这名字吉利,可以多转转。 \n400米长的老街上,传统小吃,饮食,客栈遍巷。感觉能玩两三天,我感觉旅店可以定在这附近。 \n\n> 全天开放无门票\n> 地址:武侯区武侯祠多街231号 \n> 交通:同武侯祠\n\n### 杜甫草堂\n\n### **春熙路** \n\n### 文殊院\n\n### 望江楼\n\n### 大熊猫基地\n\n### 稻城\n\n### 都江堰\n\n### 青城山\n\n## 好吃的!!!\n> **田姗平给的清单全吃一遍!!!**\n","source":"_posts/我勒个去成都!!!————写在前面.md","raw":"---\ntitle: 我勒个去成都!!!————写在前面\ndate: 2017-09-29 00:37:22\ntags:\n\t- 游记\n\t- 随笔\n\t- 成都\ncategories: 成都游记\n---\n\n# 我勒个去成都!!!————写在前面\n## 提前的准备\n> 一共两个背包一个小提箱; \n> 箱子里主要放衣服杂物不常用的东西; \n> 背包里面电脑相机卫生纸日常用的还有。。零食? \n\n1. 身份证\n2. 学生证\n3. 手机\n4. 充电宝\n5. 流量\n6. 银行卡\n7. 各种充电器\n8. 电脑可以选择性的带一个🐒\n9. 相机(不带脚架)\n10. 各种衣服\n11. 伞!!!!!!!\n\n### 衣物\n> 看天气预报大多是阴天和雨天??难道是因为比较潮?? \n\n30号到成都当晚阴天18度,然后1号到4号之间持续有雨有点蛋疼,56两天继续阴天,7号早上多云但是晚上走的时候继续下雨,8号早上到兰州6、7度,有点冷。。。 \n综合来看的话。。。。不需要太薄的衣服。。。日常衬衫+薄外套\n全部大概准备三套左右差不多~别穿的太少 \n### **带上伞!!!**\n\n## 交通\n### 市区交通\n\n**出租车**\n成都出租车白天(6-23点)起步价8元(速腾2.0和1.4T为9元),包2 公里,后1.9元/公里,10公里到60公里2.85元/公里。 \n夜间(23-6点)起 步价9元(速腾2.0和1.4T为10元),包2公里,后2.2元/公里,10公里到 60公里3.3元/公里。 \n打车后记径索要计秳収票。由亍公交车票价格不便宜,人多时比较合算。\n\n**公交车🚌**\n成都市公交网络四通八达,可以到达任何事被近郊的旅游景区、景点。 \n市内公交车分普通车和高档车两种,市区内的车次基本以两元为主以两元为主。\n\n**地铁🚇** \n一共两条线,均为分段收费,起步价两元,全程五元。 \n\n**火三轮??**\n我也不知道是干啥的,可以去瞅瞅。起步大概是2~5元。 \n\n### 其他景区交通\n\n> **成都机场-峨眉山 収车时间:14:00,票价36元** \n> **成都机场-宜宾 収车时间:14:00,票价95元** \n> **成都机场-乐山 収车时间:14:00、15:50,票价46元。**\n\n**新南门车站(成都市旅游集散中心)** \r位于新南路,成都新南门大桥边。可乘6、28、49、55路到达。 \n发往地区:成都周边,以及川内知名的旅游景区。\n\n\tTIPS:(我在百度攻略上看的)\n\t什邡、绵竹两个地震遗址专线车已开通,票价98元,\n\t费用包括:去去回程车票、餐费、保险、导游、地震遗址安全维护费。\n\t路线为成都—幸汉—什邡—蓥华—绵竹—汉旺—绵竹—德阳—成都。\n\t上午8:00发车, 晚上6时过卲可返回成都。\n## 游览地点汇总\n\n### 宽窄巷子\n宽巷子的闲生活,窄巷子的慢生活,井巷子的新生活成为了成都的“上海新天地”触摸历史痕迹,体味成都原滋原味的休闲生活方式,\n> 门票/开放时间: 全天开放无门票\n> 地址: 青羊区同仁路以东长顺街以西\n> 交通: 公交车“长顺上街”站下车地铁2号线“人民公园”站下车。\n\n\t宽窄巷子旅游最佳时间:\n\t1、清晨: 人很少,拍风景和拍人像都很不错。 \n\t2、下午: 特别是出太阳的下午,来宽窄巷子会很 \n\t挤,很多人在茶馆喝茶,打牌,掏耳朵。这是宽窄 \n\t巷子最成都的一个表现。来一杯盖碗茶,晒一下午 \n\t的太阳。这时候,就不那么适合拍照啦~\n\t3、晚上: 宽窄巷子里有一些酒吧,经常会举办各种各样的party, \n\t价格和品质都不菲。当然,环保一点的办法是, \n\t吃过晚饭之后到宽窄巷子散步,很惬意。很悠闲。 \n\t4、如果周末来,在井巷子还能看到创意集市哦~\n\t\n### 武侯祠\n我也不知道干啥的我就瞎转吧,是个历史遗迹啥的,就不废话了~ \n\n> 门票:60元,学生半价。 \r> 开放时间:夏 7:30-21:00冬 8:00-18:30 \n> 地址:武侯区武侯祠多街231号 \n> 交通:公交车在“武侯祠”站下车\n\n### 锦里\n这名字吉利,可以多转转。 \n400米长的老街上,传统小吃,饮食,客栈遍巷。感觉能玩两三天,我感觉旅店可以定在这附近。 \n\n> 全天开放无门票\n> 地址:武侯区武侯祠多街231号 \n> 交通:同武侯祠\n\n### 杜甫草堂\n\n### **春熙路** \n\n### 文殊院\n\n### 望江楼\n\n### 大熊猫基地\n\n### 稻城\n\n### 都江堰\n\n### 青城山\n\n## 好吃的!!!\n> **田姗平给的清单全吃一遍!!!**\n","slug":"我勒个去成都!!!————写在前面","published":1,"updated":"2017-09-28T16:38:59.000Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkmf0012tzy4u7j5a0g7","content":"<h1 id=\"我勒个去成都!!!————写在前面\"><a href=\"#我勒个去成都!!!————写在前面\" class=\"headerlink\" title=\"我勒个去成都!!!————写在前面\"></a>我勒个去成都!!!————写在前面</h1><h2 id=\"提前的准备\"><a href=\"#提前的准备\" class=\"headerlink\" title=\"提前的准备\"></a>提前的准备</h2><blockquote>\n<p>一共两个背包一个小提箱;<br>箱子里主要放衣服杂物不常用的东西;<br>背包里面电脑相机卫生纸日常用的还有。。零食? </p>\n</blockquote>\n<ol>\n<li>身份证</li>\n<li>学生证</li>\n<li>手机</li>\n<li>充电宝</li>\n<li>流量</li>\n<li>银行卡</li>\n<li>各种充电器</li>\n<li>电脑可以选择性的带一个🐒</li>\n<li>相机(不带脚架)</li>\n<li>各种衣服</li>\n<li>伞!!!!!!!</li>\n</ol>\n<h3 id=\"衣物\"><a href=\"#衣物\" class=\"headerlink\" title=\"衣物\"></a>衣物</h3><blockquote>\n<p>看天气预报大多是阴天和雨天??难道是因为比较潮?? </p>\n</blockquote>\n<p>30号到成都当晚阴天18度,然后1号到4号之间持续有雨有点蛋疼,56两天继续阴天,7号早上多云但是晚上走的时候继续下雨,8号早上到兰州6、7度,有点冷。。。<br>综合来看的话。。。。不需要太薄的衣服。。。日常衬衫+薄外套<br>全部大概准备三套左右差不多~别穿的太少 </p>\n<h3 id=\"带上伞!!!\"><a href=\"#带上伞!!!\" class=\"headerlink\" title=\"带上伞!!!\"></a><strong>带上伞!!!</strong></h3><h2 id=\"交通\"><a href=\"#交通\" class=\"headerlink\" title=\"交通\"></a>交通</h2><h3 id=\"市区交通\"><a href=\"#市区交通\" class=\"headerlink\" title=\"市区交通\"></a>市区交通</h3><p><strong>出租车</strong><br>成都出租车白天(6-23点)起步价8元(速腾2.0和1.4T为9元),包2 公里,后1.9元/公里,10公里到60公里2.85元/公里。<br>夜间(23-6点)起 步价9元(速腾2.0和1.4T为10元),包2公里,后2.2元/公里,10公里到 60公里3.3元/公里。<br>打车后记径索要计秳収票。由亍公交车票价格不便宜,人多时比较合算。</p>\n<p><strong>公交车🚌</strong><br>成都市公交网络四通八达,可以到达任何事被近郊的旅游景区、景点。<br>市内公交车分普通车和高档车两种,市区内的车次基本以两元为主以两元为主。</p>\n<p><strong>地铁🚇</strong><br>一共两条线,均为分段收费,起步价两元,全程五元。 </p>\n<p><strong>火三轮??</strong><br>我也不知道是干啥的,可以去瞅瞅。起步大概是2~5元。 </p>\n<h3 id=\"其他景区交通\"><a href=\"#其他景区交通\" class=\"headerlink\" title=\"其他景区交通\"></a>其他景区交通</h3><blockquote>\n<p><strong>成都机场-峨眉山 収车时间:14:00,票价36元</strong><br><strong>成都机场-宜宾 収车时间:14:00,票价95元</strong><br><strong>成都机场-乐山 収车时间:14:00、15:50,票价46元。</strong></p>\n</blockquote>\n<p><strong>新南门车站(成都市旅游集散中心)</strong><br>位于新南路,成都新南门大桥边。可乘6、28、49、55路到达。<br>发往地区:成都周边,以及川内知名的旅游景区。</p>\n<pre><code>TIPS:(我在百度攻略上看的)\n什邡、绵竹两个地震遗址专线车已开通,票价98元,\n费用包括:去去回程车票、餐费、保险、导游、地震遗址安全维护费。\n路线为成都—幸汉—什邡—蓥华—绵竹—汉旺—绵竹—德阳—成都。\n上午8:00发车, 晚上6时过卲可返回成都。\n</code></pre><h2 id=\"游览地点汇总\"><a href=\"#游览地点汇总\" class=\"headerlink\" title=\"游览地点汇总\"></a>游览地点汇总</h2><h3 id=\"宽窄巷子\"><a href=\"#宽窄巷子\" class=\"headerlink\" title=\"宽窄巷子\"></a>宽窄巷子</h3><p>宽巷子的闲生活,窄巷子的慢生活,井巷子的新生活成为了成都的“上海新天地”触摸历史痕迹,体味成都原滋原味的休闲生活方式,</p>\n<blockquote>\n<p>门票/开放时间: 全天开放无门票<br>地址: 青羊区同仁路以东长顺街以西<br>交通: 公交车“长顺上街”站下车地铁2号线“人民公园”站下车。</p>\n</blockquote>\n<pre><code>宽窄巷子旅游最佳时间:\n1、清晨: 人很少,拍风景和拍人像都很不错。 \n2、下午: 特别是出太阳的下午,来宽窄巷子会很 \n挤,很多人在茶馆喝茶,打牌,掏耳朵。这是宽窄 \n巷子最成都的一个表现。来一杯盖碗茶,晒一下午 \n的太阳。这时候,就不那么适合拍照啦~\n3、晚上: 宽窄巷子里有一些酒吧,经常会举办各种各样的party, \n价格和品质都不菲。当然,环保一点的办法是, \n吃过晚饭之后到宽窄巷子散步,很惬意。很悠闲。 \n4、如果周末来,在井巷子还能看到创意集市哦~\n</code></pre><h3 id=\"武侯祠\"><a href=\"#武侯祠\" class=\"headerlink\" title=\"武侯祠\"></a>武侯祠</h3><p>我也不知道干啥的我就瞎转吧,是个历史遗迹啥的,就不废话了~ </p>\n<blockquote>\n<p>门票:60元,学生半价。<br>开放时间:夏 7:30-21:00冬 8:00-18:30<br>地址:武侯区武侯祠多街231号<br>交通:公交车在“武侯祠”站下车</p>\n</blockquote>\n<h3 id=\"锦里\"><a href=\"#锦里\" class=\"headerlink\" title=\"锦里\"></a>锦里</h3><p>这名字吉利,可以多转转。<br>400米长的老街上,传统小吃,饮食,客栈遍巷。感觉能玩两三天,我感觉旅店可以定在这附近。 </p>\n<blockquote>\n<p>全天开放无门票<br>地址:武侯区武侯祠多街231号<br>交通:同武侯祠</p>\n</blockquote>\n<h3 id=\"杜甫草堂\"><a href=\"#杜甫草堂\" class=\"headerlink\" title=\"杜甫草堂\"></a>杜甫草堂</h3><h3 id=\"春熙路\"><a href=\"#春熙路\" class=\"headerlink\" title=\"春熙路\"></a><strong>春熙路</strong></h3><h3 id=\"文殊院\"><a href=\"#文殊院\" class=\"headerlink\" title=\"文殊院\"></a>文殊院</h3><h3 id=\"望江楼\"><a href=\"#望江楼\" class=\"headerlink\" title=\"望江楼\"></a>望江楼</h3><h3 id=\"大熊猫基地\"><a href=\"#大熊猫基地\" class=\"headerlink\" title=\"大熊猫基地\"></a>大熊猫基地</h3><h3 id=\"稻城\"><a href=\"#稻城\" class=\"headerlink\" title=\"稻城\"></a>稻城</h3><h3 id=\"都江堰\"><a href=\"#都江堰\" class=\"headerlink\" title=\"都江堰\"></a>都江堰</h3><h3 id=\"青城山\"><a href=\"#青城山\" class=\"headerlink\" title=\"青城山\"></a>青城山</h3><h2 id=\"好吃的!!!\"><a href=\"#好吃的!!!\" class=\"headerlink\" title=\"好吃的!!!\"></a>好吃的!!!</h2><blockquote>\n<p><strong>田姗平给的清单全吃一遍!!!</strong></p>\n</blockquote>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"我勒个去成都!!!————写在前面\"><a href=\"#我勒个去成都!!!————写在前面\" class=\"headerlink\" title=\"我勒个去成都!!!————写在前面\"></a>我勒个去成都!!!————写在前面</h1><h2 id=\"提前的准备\"><a href=\"#提前的准备\" class=\"headerlink\" title=\"提前的准备\"></a>提前的准备</h2><blockquote>\n<p>一共两个背包一个小提箱;<br>箱子里主要放衣服杂物不常用的东西;<br>背包里面电脑相机卫生纸日常用的还有。。零食? </p>\n</blockquote>\n<ol>\n<li>身份证</li>\n<li>学生证</li>\n<li>手机</li>\n<li>充电宝</li>\n<li>流量</li>\n<li>银行卡</li>\n<li>各种充电器</li>\n<li>电脑可以选择性的带一个🐒</li>\n<li>相机(不带脚架)</li>\n<li>各种衣服</li>\n<li>伞!!!!!!!</li>\n</ol>\n<h3 id=\"衣物\"><a href=\"#衣物\" class=\"headerlink\" title=\"衣物\"></a>衣物</h3><blockquote>\n<p>看天气预报大多是阴天和雨天??难道是因为比较潮?? </p>\n</blockquote>\n<p>30号到成都当晚阴天18度,然后1号到4号之间持续有雨有点蛋疼,56两天继续阴天,7号早上多云但是晚上走的时候继续下雨,8号早上到兰州6、7度,有点冷。。。<br>综合来看的话。。。。不需要太薄的衣服。。。日常衬衫+薄外套<br>全部大概准备三套左右差不多~别穿的太少 </p>\n<h3 id=\"带上伞!!!\"><a href=\"#带上伞!!!\" class=\"headerlink\" title=\"带上伞!!!\"></a><strong>带上伞!!!</strong></h3><h2 id=\"交通\"><a href=\"#交通\" class=\"headerlink\" title=\"交通\"></a>交通</h2><h3 id=\"市区交通\"><a href=\"#市区交通\" class=\"headerlink\" title=\"市区交通\"></a>市区交通</h3><p><strong>出租车</strong><br>成都出租车白天(6-23点)起步价8元(速腾2.0和1.4T为9元),包2 公里,后1.9元/公里,10公里到60公里2.85元/公里。<br>夜间(23-6点)起 步价9元(速腾2.0和1.4T为10元),包2公里,后2.2元/公里,10公里到 60公里3.3元/公里。<br>打车后记径索要计秳収票。由亍公交车票价格不便宜,人多时比较合算。</p>\n<p><strong>公交车🚌</strong><br>成都市公交网络四通八达,可以到达任何事被近郊的旅游景区、景点。<br>市内公交车分普通车和高档车两种,市区内的车次基本以两元为主以两元为主。</p>\n<p><strong>地铁🚇</strong><br>一共两条线,均为分段收费,起步价两元,全程五元。 </p>\n<p><strong>火三轮??</strong><br>我也不知道是干啥的,可以去瞅瞅。起步大概是2~5元。 </p>\n<h3 id=\"其他景区交通\"><a href=\"#其他景区交通\" class=\"headerlink\" title=\"其他景区交通\"></a>其他景区交通</h3><blockquote>\n<p><strong>成都机场-峨眉山 収车时间:14:00,票价36元</strong><br><strong>成都机场-宜宾 収车时间:14:00,票价95元</strong><br><strong>成都机场-乐山 収车时间:14:00、15:50,票价46元。</strong></p>\n</blockquote>\n<p><strong>新南门车站(成都市旅游集散中心)</strong><br>位于新南路,成都新南门大桥边。可乘6、28、49、55路到达。<br>发往地区:成都周边,以及川内知名的旅游景区。</p>\n<pre><code>TIPS:(我在百度攻略上看的)\n什邡、绵竹两个地震遗址专线车已开通,票价98元,\n费用包括:去去回程车票、餐费、保险、导游、地震遗址安全维护费。\n路线为成都—幸汉—什邡—蓥华—绵竹—汉旺—绵竹—德阳—成都。\n上午8:00发车, 晚上6时过卲可返回成都。\n</code></pre><h2 id=\"游览地点汇总\"><a href=\"#游览地点汇总\" class=\"headerlink\" title=\"游览地点汇总\"></a>游览地点汇总</h2><h3 id=\"宽窄巷子\"><a href=\"#宽窄巷子\" class=\"headerlink\" title=\"宽窄巷子\"></a>宽窄巷子</h3><p>宽巷子的闲生活,窄巷子的慢生活,井巷子的新生活成为了成都的“上海新天地”触摸历史痕迹,体味成都原滋原味的休闲生活方式,</p>\n<blockquote>\n<p>门票/开放时间: 全天开放无门票<br>地址: 青羊区同仁路以东长顺街以西<br>交通: 公交车“长顺上街”站下车地铁2号线“人民公园”站下车。</p>\n</blockquote>\n<pre><code>宽窄巷子旅游最佳时间:\n1、清晨: 人很少,拍风景和拍人像都很不错。 \n2、下午: 特别是出太阳的下午,来宽窄巷子会很 \n挤,很多人在茶馆喝茶,打牌,掏耳朵。这是宽窄 \n巷子最成都的一个表现。来一杯盖碗茶,晒一下午 \n的太阳。这时候,就不那么适合拍照啦~\n3、晚上: 宽窄巷子里有一些酒吧,经常会举办各种各样的party, \n价格和品质都不菲。当然,环保一点的办法是, \n吃过晚饭之后到宽窄巷子散步,很惬意。很悠闲。 \n4、如果周末来,在井巷子还能看到创意集市哦~\n</code></pre><h3 id=\"武侯祠\"><a href=\"#武侯祠\" class=\"headerlink\" title=\"武侯祠\"></a>武侯祠</h3><p>我也不知道干啥的我就瞎转吧,是个历史遗迹啥的,就不废话了~ </p>\n<blockquote>\n<p>门票:60元,学生半价。<br>开放时间:夏 7:30-21:00冬 8:00-18:30<br>地址:武侯区武侯祠多街231号<br>交通:公交车在“武侯祠”站下车</p>\n</blockquote>\n<h3 id=\"锦里\"><a href=\"#锦里\" class=\"headerlink\" title=\"锦里\"></a>锦里</h3><p>这名字吉利,可以多转转。<br>400米长的老街上,传统小吃,饮食,客栈遍巷。感觉能玩两三天,我感觉旅店可以定在这附近。 </p>\n<blockquote>\n<p>全天开放无门票<br>地址:武侯区武侯祠多街231号<br>交通:同武侯祠</p>\n</blockquote>\n<h3 id=\"杜甫草堂\"><a href=\"#杜甫草堂\" class=\"headerlink\" title=\"杜甫草堂\"></a>杜甫草堂</h3><h3 id=\"春熙路\"><a href=\"#春熙路\" class=\"headerlink\" title=\"春熙路\"></a><strong>春熙路</strong></h3><h3 id=\"文殊院\"><a href=\"#文殊院\" class=\"headerlink\" title=\"文殊院\"></a>文殊院</h3><h3 id=\"望江楼\"><a href=\"#望江楼\" class=\"headerlink\" title=\"望江楼\"></a>望江楼</h3><h3 id=\"大熊猫基地\"><a href=\"#大熊猫基地\" class=\"headerlink\" title=\"大熊猫基地\"></a>大熊猫基地</h3><h3 id=\"稻城\"><a href=\"#稻城\" class=\"headerlink\" title=\"稻城\"></a>稻城</h3><h3 id=\"都江堰\"><a href=\"#都江堰\" class=\"headerlink\" title=\"都江堰\"></a>都江堰</h3><h3 id=\"青城山\"><a href=\"#青城山\" class=\"headerlink\" title=\"青城山\"></a>青城山</h3><h2 id=\"好吃的!!!\"><a href=\"#好吃的!!!\" class=\"headerlink\" title=\"好吃的!!!\"></a>好吃的!!!</h2><blockquote>\n<p><strong>田姗平给的清单全吃一遍!!!</strong></p>\n</blockquote>\n"},{"title":"数字电路电路板汇总","date":"2018-01-04T03:22:16.000Z","_content":"\n# 数字电路电路板汇总\n\n## 变量译码器74138\n三输入、八输出。 \ns1为一,s2和s3为零即可正常工作。 \n根据二进制输入输出十进制的特定端口。 \n两个同时使用的时候,低位s1接1,s2接高位s1作为输入的第四端口。如图\n![](a.png)\n## 7448显示译码器\n## TS547显示器\n## 数据选择器74LS153\n针脚如图所示 \n![](b.png) \n真值表如图所示 \n![](c.png) \n做题时会给多个输入端,此时想A0A1当成两个输入端,再从D端口中根据选择器的输出表达式连接相应第三段口即可,例如:\n![](d.png) \n![](e.png) \n![](f.png) \n\n## 多位数值比较器7485\n\n下图为数值比较器7485的单位针脚图 \n![](g.png) \n下图为用多个数值比较器7485的多位数值比较器的基本原理 \n![](h.png) \n\n## 奇偶校验器74LS280\n四位二进制奇偶校验的真值表 \n![](i.png) \n奇偶校验位逻辑表达式 \n![](j.png)\n\n74LS280奇偶校验/发生器 \n![](k.png) \n\n实际应用如下 \n\n![](l.png) \n\n\n\n\n\n\n\n","source":"_posts/数字电路电路板汇总.md","raw":"---\ntitle: 数字电路电路板汇总\ndate: 2018-01-04 11:22:16\ntags: [数字电路,笔记]\ncategories: 数字电路\n---\n\n# 数字电路电路板汇总\n\n## 变量译码器74138\n三输入、八输出。 \ns1为一,s2和s3为零即可正常工作。 \n根据二进制输入输出十进制的特定端口。 \n两个同时使用的时候,低位s1接1,s2接高位s1作为输入的第四端口。如图\n![](a.png)\n## 7448显示译码器\n## TS547显示器\n## 数据选择器74LS153\n针脚如图所示 \n![](b.png) \n真值表如图所示 \n![](c.png) \n做题时会给多个输入端,此时想A0A1当成两个输入端,再从D端口中根据选择器的输出表达式连接相应第三段口即可,例如:\n![](d.png) \n![](e.png) \n![](f.png) \n\n## 多位数值比较器7485\n\n下图为数值比较器7485的单位针脚图 \n![](g.png) \n下图为用多个数值比较器7485的多位数值比较器的基本原理 \n![](h.png) \n\n## 奇偶校验器74LS280\n四位二进制奇偶校验的真值表 \n![](i.png) \n奇偶校验位逻辑表达式 \n![](j.png)\n\n74LS280奇偶校验/发生器 \n![](k.png) \n\n实际应用如下 \n\n![](l.png) \n\n\n\n\n\n\n\n","slug":"数字电路电路板汇总","published":1,"updated":"2018-01-06T09:16:16.377Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkmg0017tzy459ln4cl5","content":"<h1 id=\"数字电路电路板汇总\"><a href=\"#数字电路电路板汇总\" class=\"headerlink\" title=\"数字电路电路板汇总\"></a>数字电路电路板汇总</h1><h2 id=\"变量译码器74138\"><a href=\"#变量译码器74138\" class=\"headerlink\" title=\"变量译码器74138\"></a>变量译码器74138</h2><p>三输入、八输出。<br>s1为一,s2和s3为零即可正常工作。<br>根据二进制输入输出十进制的特定端口。<br>两个同时使用的时候,低位s1接1,s2接高位s1作为输入的第四端口。如图<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"a.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n<h2 id=\"7448显示译码器\"><a href=\"#7448显示译码器\" class=\"headerlink\" title=\"7448显示译码器\"></a>7448显示译码器</h2><h2 id=\"TS547显示器\"><a href=\"#TS547显示器\" class=\"headerlink\" title=\"TS547显示器\"></a>TS547显示器</h2><h2 id=\"数据选择器74LS153\"><a href=\"#数据选择器74LS153\" class=\"headerlink\" title=\"数据选择器74LS153\"></a>数据选择器74LS153</h2><p>针脚如图所示<br><img src=\"b.png\" alt><br>真值表如图所示<br><img src=\"c.png\" alt><br>做题时会给多个输入端,此时想A0A1当成两个输入端,再从D端口中根据选择器的输出表达式连接相应第三段口即可,例如:<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"d.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure><br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"e.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure><br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"f.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> </p>\n<h2 id=\"多位数值比较器7485\"><a href=\"#多位数值比较器7485\" class=\"headerlink\" title=\"多位数值比较器7485\"></a>多位数值比较器7485</h2><p>下图为数值比较器7485的单位针脚图<br><img src=\"g.png\" alt><br>下图为用多个数值比较器7485的多位数值比较器的基本原理<br><img src=\"h.png\" alt> </p>\n<h2 id=\"奇偶校验器74LS280\"><a href=\"#奇偶校验器74LS280\" class=\"headerlink\" title=\"奇偶校验器74LS280\"></a>奇偶校验器74LS280</h2><p>四位二进制奇偶校验的真值表<br><img src=\"i.png\" alt><br>奇偶校验位逻辑表达式<br><img src=\"j.png\" alt></p>\n<p>74LS280奇偶校验/发生器<br><img src=\"k.png\" alt> </p>\n<p>实际应用如下 </p>\n<p><img src=\"l.png\" alt> </p>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"数字电路电路板汇总\"><a href=\"#数字电路电路板汇总\" class=\"headerlink\" title=\"数字电路电路板汇总\"></a>数字电路电路板汇总</h1><h2 id=\"变量译码器74138\"><a href=\"#变量译码器74138\" class=\"headerlink\" title=\"变量译码器74138\"></a>变量译码器74138</h2><p>三输入、八输出。<br>s1为一,s2和s3为零即可正常工作。<br>根据二进制输入输出十进制的特定端口。<br>两个同时使用的时候,低位s1接1,s2接高位s1作为输入的第四端口。如图<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"a.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n<h2 id=\"7448显示译码器\"><a href=\"#7448显示译码器\" class=\"headerlink\" title=\"7448显示译码器\"></a>7448显示译码器</h2><h2 id=\"TS547显示器\"><a href=\"#TS547显示器\" class=\"headerlink\" title=\"TS547显示器\"></a>TS547显示器</h2><h2 id=\"数据选择器74LS153\"><a href=\"#数据选择器74LS153\" class=\"headerlink\" title=\"数据选择器74LS153\"></a>数据选择器74LS153</h2><p>针脚如图所示<br><img src=\"b.png\" alt><br>真值表如图所示<br><img src=\"c.png\" alt><br>做题时会给多个输入端,此时想A0A1当成两个输入端,再从D端口中根据选择器的输出表达式连接相应第三段口即可,例如:<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"d.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure><br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"e.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure><br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"f.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> </p>\n<h2 id=\"多位数值比较器7485\"><a href=\"#多位数值比较器7485\" class=\"headerlink\" title=\"多位数值比较器7485\"></a>多位数值比较器7485</h2><p>下图为数值比较器7485的单位针脚图<br><img src=\"g.png\" alt><br>下图为用多个数值比较器7485的多位数值比较器的基本原理<br><img src=\"h.png\" alt> </p>\n<h2 id=\"奇偶校验器74LS280\"><a href=\"#奇偶校验器74LS280\" class=\"headerlink\" title=\"奇偶校验器74LS280\"></a>奇偶校验器74LS280</h2><p>四位二进制奇偶校验的真值表<br><img src=\"i.png\" alt><br>奇偶校验位逻辑表达式<br><img src=\"j.png\" alt></p>\n<p>74LS280奇偶校验/发生器<br><img src=\"k.png\" alt> </p>\n<p>实际应用如下 </p>\n<p><img src=\"l.png\" alt> </p>\n"},{"title":"在Android中Menu的使用","date":"2017-09-27T16:58:26.000Z","_content":"\n# 在Android中Menu的使用\n## Menu的分类\n1. 选项菜单(Options Menu);当用户触发 menu 项时弹出的菜单\n2. 上下文菜单(Context Menu):用户长按那个控件时弹出的类似对话框\n3. 弹出菜单,当用户点击某个 View 视图是弹出的菜单\n\n## 前提准备\n1. java创建了menu对象\n2. 使用XML方法定义Menu要在XML文件中正确填写并添加ID\n\n## 使用XML定义Menu\n\n> XML文件的基本属性 \n\n\t<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\t<menu xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\t <item\n\t android:id=\"@+id/daxiao\"\n\t android:title=\"设置字体大小\"\n\t android:orderInCategory=\"3\">\n\t </item>\n\t <item\n\t android:id=\"@+id/yanse\"\n\t android:title=\"设置字体颜色\"\n\t android:orderInCategory=\"2\"\n\t >\n\t </item>\n\t <item\n\t android:id=\"@+id/shuxing\"\n\t android:title=\"设置字体属性\"\n\t android:orderInCategory=\"1\">\n\t\n\t </item>\n\t</menu>\n\t\n\t\t\t\t\t<!--\n\t\t\t\t android:id=\"@+id/lalala_mune\" 设置id\n\t\t\t\t android:title=\"设置字体大小\" 设置title\n\t\t\t\t android:orderInCategory=\"3\" 显示顺序\n\t\t\t\t\t-->\n\t\t\t\t\t\n> Menu 菜单的嵌套使用规则 \n\r1. Item 中可以嵌套 menu,但是不能嵌套 group\r2. Menu 中既可以嵌套 group,又可以嵌套 item。\r3. Group 中只能嵌套 item,不能嵌套 menu\n\n\n## 选项菜单的添加\n### 添加XML文件中的Menu\n\n> 选项菜单需要重写在在java代码中重写onCreateOptionsMenu(Menu menu)方法 \n\n\tpublic boolean onCreateOptionsMenu(Menu menu) {\n /*第一步需要加载菜单选项*/\n /*菜单填充器将菜单获取然后添加至active中*/\n /*第一种比较麻烦的方法*/\n /*MenuInflater inflater = getMenuInflater();\n inflater.inflate(R.menu.options_menu,menu);*/\n /*第二种方法*/\n getMenuInflater().inflate(R.menu.options_menu,menu);\n \n return true;\n }\n \n### 在Java代码中动态定义Menu\n> 可以在java代码中的onCreateOptionsMenu(Menu menu)方法中使用menu.add()方法动态定义增加Menu\n\n\t\t/*另外可以通过代码添加menu项*/\n //menu.add(group id,itmeid 自己设置);里面填menu的分组 group可以是itme的父标签\n menu.add(Menu.NONE,ITMEID,Menu.NONE,\"lalala我是后设置的\");\n \n \n## 上下文菜单\n> 定义后添加的方法与选项菜单类似 \n> 当用户长按 Activity 页面时,弹出的菜单我们称为上下文菜单。我们经常在 Windows 中用鼠\r标右键单击弹出的菜单就是上下文菜单。\n\n1. 覆盖 Activity 的 onCreateContextMenu()方法,调用 Menu 的 add 方法添加菜单项\rMenuItem\n2. 覆盖 onContextItemSelected()方法,响应菜单单击事件\r3. 调用 registerForContextMenu()方法,为视图注册上下文菜单\n\n## 子菜单\n> 定义后添加的方法与选项菜单类似 \n> 子菜单就是将相同功能的分组进行多级显示的一种菜单,比如,Windows 的“文件”菜单中就\r有“新建”,“打开”,“关闭”等子菜单。创建子菜单的方法\n\n1. 覆盖 Activity 的 onCreateOptionsMenu()方法,调用 Menu 的 addSubMenu()方法 添加子菜单项\r2. 调用 SubMenu 的 add()饭饭,添加子菜单项\r3. 覆盖 onCreateItemSelected()方法,响应菜单单击事件\n\n## 添加单击事件\n\n### 选项菜单\n\n> 以下为对于使用XML文件加载的选项菜单为例 \n> 选项菜单需要重写onOptionsItemSelected(MenuItem item)方法使其触发 \n\n\t /**\n * !!只针对选项菜单!!\n * 当选项菜单被选中时调用的方法\n * @param item 表示菜单项对象\n * @return false表示不进行处理\n */\n @Override\n public boolean onOptionsItemSelected(MenuItem item) {\n \t//对于使用XML文件加载的菜单\n int itemid = item.getItemId();//获取触发的item的id\n float a;\n switch (itemid) {\n case R.id.daxiao:\n a = ceshi.getTextSize();\n Toast.makeText(MainActivity.this,\"\"+a,Toast.LENGTH_SHORT).show();\n if (a==100) ceshi.setTextSize(TypedValue.COMPLEX_UNIT_PX,50);\n else ceshi.setTextSize(TypedValue.COMPLEX_UNIT_PX,100);\n break;\n case R.id.yanse:\n //随机生成颜色\n int red = (int) (Math.random()*256);\n int green = (int) (Math.random()*256);\n int blue = (int) (Math.random()*256);\n ceshi.setTextColor(Color.rgb(red,green,blue));\n break;\n }\n return super.onOptionsItemSelected(item);\n }\n \n### 上下文菜单\n\n上下文菜单:上下文菜单是和某一种控件绑定使用的,也就是说每个控件只有注册了上下文菜单,并且长 按时弹出的菜单就是上下文菜单,\r上下文菜单加载菜单是通过重写 onCreateContextMenu()来完成的,\r上下文菜单的 点击事件是通过抽重写 onContextItemSelected()方法来实现的\n\n### PopMenu\n\n是通过创建 popMenu 的对象,再通过菜单加载器将其加载进来的, popMenu 的点击事件是通过 popMenu.setOnMenuItemClickListener()方法实现的。\n\n\n","source":"_posts/在Android中Menu的使用.md","raw":"---\ntitle: 在Android中Menu的使用\ndate: 2017-09-28 00:58:26\ntags:\n\t- Android\n\t- 入门\ncategories: Android\n---\n\n# 在Android中Menu的使用\n## Menu的分类\n1. 选项菜单(Options Menu);当用户触发 menu 项时弹出的菜单\n2. 上下文菜单(Context Menu):用户长按那个控件时弹出的类似对话框\n3. 弹出菜单,当用户点击某个 View 视图是弹出的菜单\n\n## 前提准备\n1. java创建了menu对象\n2. 使用XML方法定义Menu要在XML文件中正确填写并添加ID\n\n## 使用XML定义Menu\n\n> XML文件的基本属性 \n\n\t<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\t<menu xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\t <item\n\t android:id=\"@+id/daxiao\"\n\t android:title=\"设置字体大小\"\n\t android:orderInCategory=\"3\">\n\t </item>\n\t <item\n\t android:id=\"@+id/yanse\"\n\t android:title=\"设置字体颜色\"\n\t android:orderInCategory=\"2\"\n\t >\n\t </item>\n\t <item\n\t android:id=\"@+id/shuxing\"\n\t android:title=\"设置字体属性\"\n\t android:orderInCategory=\"1\">\n\t\n\t </item>\n\t</menu>\n\t\n\t\t\t\t\t<!--\n\t\t\t\t android:id=\"@+id/lalala_mune\" 设置id\n\t\t\t\t android:title=\"设置字体大小\" 设置title\n\t\t\t\t android:orderInCategory=\"3\" 显示顺序\n\t\t\t\t\t-->\n\t\t\t\t\t\n> Menu 菜单的嵌套使用规则 \n\r1. Item 中可以嵌套 menu,但是不能嵌套 group\r2. Menu 中既可以嵌套 group,又可以嵌套 item。\r3. Group 中只能嵌套 item,不能嵌套 menu\n\n\n## 选项菜单的添加\n### 添加XML文件中的Menu\n\n> 选项菜单需要重写在在java代码中重写onCreateOptionsMenu(Menu menu)方法 \n\n\tpublic boolean onCreateOptionsMenu(Menu menu) {\n /*第一步需要加载菜单选项*/\n /*菜单填充器将菜单获取然后添加至active中*/\n /*第一种比较麻烦的方法*/\n /*MenuInflater inflater = getMenuInflater();\n inflater.inflate(R.menu.options_menu,menu);*/\n /*第二种方法*/\n getMenuInflater().inflate(R.menu.options_menu,menu);\n \n return true;\n }\n \n### 在Java代码中动态定义Menu\n> 可以在java代码中的onCreateOptionsMenu(Menu menu)方法中使用menu.add()方法动态定义增加Menu\n\n\t\t/*另外可以通过代码添加menu项*/\n //menu.add(group id,itmeid 自己设置);里面填menu的分组 group可以是itme的父标签\n menu.add(Menu.NONE,ITMEID,Menu.NONE,\"lalala我是后设置的\");\n \n \n## 上下文菜单\n> 定义后添加的方法与选项菜单类似 \n> 当用户长按 Activity 页面时,弹出的菜单我们称为上下文菜单。我们经常在 Windows 中用鼠\r标右键单击弹出的菜单就是上下文菜单。\n\n1. 覆盖 Activity 的 onCreateContextMenu()方法,调用 Menu 的 add 方法添加菜单项\rMenuItem\n2. 覆盖 onContextItemSelected()方法,响应菜单单击事件\r3. 调用 registerForContextMenu()方法,为视图注册上下文菜单\n\n## 子菜单\n> 定义后添加的方法与选项菜单类似 \n> 子菜单就是将相同功能的分组进行多级显示的一种菜单,比如,Windows 的“文件”菜单中就\r有“新建”,“打开”,“关闭”等子菜单。创建子菜单的方法\n\n1. 覆盖 Activity 的 onCreateOptionsMenu()方法,调用 Menu 的 addSubMenu()方法 添加子菜单项\r2. 调用 SubMenu 的 add()饭饭,添加子菜单项\r3. 覆盖 onCreateItemSelected()方法,响应菜单单击事件\n\n## 添加单击事件\n\n### 选项菜单\n\n> 以下为对于使用XML文件加载的选项菜单为例 \n> 选项菜单需要重写onOptionsItemSelected(MenuItem item)方法使其触发 \n\n\t /**\n * !!只针对选项菜单!!\n * 当选项菜单被选中时调用的方法\n * @param item 表示菜单项对象\n * @return false表示不进行处理\n */\n @Override\n public boolean onOptionsItemSelected(MenuItem item) {\n \t//对于使用XML文件加载的菜单\n int itemid = item.getItemId();//获取触发的item的id\n float a;\n switch (itemid) {\n case R.id.daxiao:\n a = ceshi.getTextSize();\n Toast.makeText(MainActivity.this,\"\"+a,Toast.LENGTH_SHORT).show();\n if (a==100) ceshi.setTextSize(TypedValue.COMPLEX_UNIT_PX,50);\n else ceshi.setTextSize(TypedValue.COMPLEX_UNIT_PX,100);\n break;\n case R.id.yanse:\n //随机生成颜色\n int red = (int) (Math.random()*256);\n int green = (int) (Math.random()*256);\n int blue = (int) (Math.random()*256);\n ceshi.setTextColor(Color.rgb(red,green,blue));\n break;\n }\n return super.onOptionsItemSelected(item);\n }\n \n### 上下文菜单\n\n上下文菜单:上下文菜单是和某一种控件绑定使用的,也就是说每个控件只有注册了上下文菜单,并且长 按时弹出的菜单就是上下文菜单,\r上下文菜单加载菜单是通过重写 onCreateContextMenu()来完成的,\r上下文菜单的 点击事件是通过抽重写 onContextItemSelected()方法来实现的\n\n### PopMenu\n\n是通过创建 popMenu 的对象,再通过菜单加载器将其加载进来的, popMenu 的点击事件是通过 popMenu.setOnMenuItemClickListener()方法实现的。\n\n\n","slug":"在Android中Menu的使用","published":1,"updated":"2017-09-27T17:05:24.000Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkmh0019tzy48fcnnlim","content":"<h1 id=\"在Android中Menu的使用\"><a href=\"#在Android中Menu的使用\" class=\"headerlink\" title=\"在Android中Menu的使用\"></a>在Android中Menu的使用</h1><h2 id=\"Menu的分类\"><a href=\"#Menu的分类\" class=\"headerlink\" title=\"Menu的分类\"></a>Menu的分类</h2><ol>\n<li>选项菜单(Options Menu);当用户触发 menu 项时弹出的菜单</li>\n<li>上下文菜单(Context Menu):用户长按那个控件时弹出的类似对话框</li>\n<li>弹出菜单,当用户点击某个 View 视图是弹出的菜单</li>\n</ol>\n<h2 id=\"前提准备\"><a href=\"#前提准备\" class=\"headerlink\" title=\"前提准备\"></a>前提准备</h2><ol>\n<li>java创建了menu对象</li>\n<li>使用XML方法定义Menu要在XML文件中正确填写并添加ID</li>\n</ol>\n<h2 id=\"使用XML定义Menu\"><a href=\"#使用XML定义Menu\" class=\"headerlink\" title=\"使用XML定义Menu\"></a>使用XML定义Menu</h2><blockquote>\n<p>XML文件的基本属性 </p>\n</blockquote>\n<pre><code><?xml version="1.0" encoding="utf-8"?>\n<menu xmlns:android="http://schemas.android.com/apk/res/android">\n <item\n android:id="@+id/daxiao"\n android:title="设置字体大小"\n android:orderInCategory="3">\n </item>\n <item\n android:id="@+id/yanse"\n android:title="设置字体颜色"\n android:orderInCategory="2"\n >\n </item>\n <item\n android:id="@+id/shuxing"\n android:title="设置字体属性"\n android:orderInCategory="1">\n\n </item>\n</menu>\n\n <!--\n android:id="@+id/lalala_mune" 设置id\n android:title="设置字体大小" 设置title\n android:orderInCategory="3" 显示顺序\n -->\n</code></pre><blockquote>\n<p>Menu 菜单的嵌套使用规则 </p>\n</blockquote>\n<ol>\n<li>Item 中可以嵌套 menu,但是不能嵌套 group</li>\n<li>Menu 中既可以嵌套 group,又可以嵌套 item。</li>\n<li>Group 中只能嵌套 item,不能嵌套 menu</li>\n</ol>\n<h2 id=\"选项菜单的添加\"><a href=\"#选项菜单的添加\" class=\"headerlink\" title=\"选项菜单的添加\"></a>选项菜单的添加</h2><h3 id=\"添加XML文件中的Menu\"><a href=\"#添加XML文件中的Menu\" class=\"headerlink\" title=\"添加XML文件中的Menu\"></a>添加XML文件中的Menu</h3><blockquote>\n<p>选项菜单需要重写在在java代码中重写onCreateOptionsMenu(Menu menu)方法 </p>\n</blockquote>\n<pre><code>public boolean onCreateOptionsMenu(Menu menu) {\n /*第一步需要加载菜单选项*/\n /*菜单填充器将菜单获取然后添加至active中*/\n /*第一种比较麻烦的方法*/\n /*MenuInflater inflater = getMenuInflater();\n inflater.inflate(R.menu.options_menu,menu);*/\n /*第二种方法*/\n getMenuInflater().inflate(R.menu.options_menu,menu);\n\n return true;\n}\n</code></pre><h3 id=\"在Java代码中动态定义Menu\"><a href=\"#在Java代码中动态定义Menu\" class=\"headerlink\" title=\"在Java代码中动态定义Menu\"></a>在Java代码中动态定义Menu</h3><blockquote>\n<p>可以在java代码中的onCreateOptionsMenu(Menu menu)方法中使用menu.add()方法动态定义增加Menu</p>\n</blockquote>\n<pre><code>/*另外可以通过代码添加menu项*/\n//menu.add(group id,itmeid 自己设置);里面填menu的分组 group可以是itme的父标签\nmenu.add(Menu.NONE,ITMEID,Menu.NONE,"lalala我是后设置的");\n</code></pre><h2 id=\"上下文菜单\"><a href=\"#上下文菜单\" class=\"headerlink\" title=\"上下文菜单\"></a>上下文菜单</h2><blockquote>\n<p>定义后添加的方法与选项菜单类似<br>当用户长按 Activity 页面时,弹出的菜单我们称为上下文菜单。我们经常在 Windows 中用鼠<br>标右键单击弹出的菜单就是上下文菜单。</p>\n</blockquote>\n<ol>\n<li>覆盖 Activity 的 onCreateContextMenu()方法,调用 Menu 的 add 方法添加菜单项<br>MenuItem</li>\n<li>覆盖 onContextItemSelected()方法,响应菜单单击事件</li>\n<li>调用 registerForContextMenu()方法,为视图注册上下文菜单</li>\n</ol>\n<h2 id=\"子菜单\"><a href=\"#子菜单\" class=\"headerlink\" title=\"子菜单\"></a>子菜单</h2><blockquote>\n<p>定义后添加的方法与选项菜单类似<br>子菜单就是将相同功能的分组进行多级显示的一种菜单,比如,Windows 的“文件”菜单中就<br>有“新建”,“打开”,“关闭”等子菜单。创建子菜单的方法</p>\n</blockquote>\n<ol>\n<li>覆盖 Activity 的 onCreateOptionsMenu()方法,调用 Menu 的 addSubMenu()方法 添加子菜单项</li>\n<li>调用 SubMenu 的 add()饭饭,添加子菜单项</li>\n<li>覆盖 onCreateItemSelected()方法,响应菜单单击事件</li>\n</ol>\n<h2 id=\"添加单击事件\"><a href=\"#添加单击事件\" class=\"headerlink\" title=\"添加单击事件\"></a>添加单击事件</h2><h3 id=\"选项菜单\"><a href=\"#选项菜单\" class=\"headerlink\" title=\"选项菜单\"></a>选项菜单</h3><blockquote>\n<p>以下为对于使用XML文件加载的选项菜单为例<br>选项菜单需要重写onOptionsItemSelected(MenuItem item)方法使其触发 </p>\n</blockquote>\n<pre><code> /**\n * !!只针对选项菜单!!\n * 当选项菜单被选中时调用的方法\n * @param item 表示菜单项对象\n * @return false表示不进行处理\n */\n@Override\npublic boolean onOptionsItemSelected(MenuItem item) {\n //对于使用XML文件加载的菜单\n int itemid = item.getItemId();//获取触发的item的id\n float a;\n switch (itemid) {\n case R.id.daxiao:\n a = ceshi.getTextSize();\n Toast.makeText(MainActivity.this,""+a,Toast.LENGTH_SHORT).show();\n if (a==100) ceshi.setTextSize(TypedValue.COMPLEX_UNIT_PX,50);\n else ceshi.setTextSize(TypedValue.COMPLEX_UNIT_PX,100);\n break;\n case R.id.yanse:\n //随机生成颜色\n int red = (int) (Math.random()*256);\n int green = (int) (Math.random()*256);\n int blue = (int) (Math.random()*256);\n ceshi.setTextColor(Color.rgb(red,green,blue));\n break;\n }\n return super.onOptionsItemSelected(item);\n}\n</code></pre><h3 id=\"上下文菜单-1\"><a href=\"#上下文菜单-1\" class=\"headerlink\" title=\"上下文菜单\"></a>上下文菜单</h3><p>上下文菜单:上下文菜单是和某一种控件绑定使用的,也就是说每个控件只有注册了上下文菜单,并且长 按时弹出的菜单就是上下文菜单,<br>上下文菜单加载菜单是通过重写 onCreateContextMenu()来完成的,<br>上下文菜单的 点击事件是通过抽重写 onContextItemSelected()方法来实现的</p>\n<h3 id=\"PopMenu\"><a href=\"#PopMenu\" class=\"headerlink\" title=\"PopMenu\"></a>PopMenu</h3><p>是通过创建 popMenu 的对象,再通过菜单加载器将其加载进来的, popMenu 的点击事件是通过 popMenu.setOnMenuItemClickListener()方法实现的。</p>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"在Android中Menu的使用\"><a href=\"#在Android中Menu的使用\" class=\"headerlink\" title=\"在Android中Menu的使用\"></a>在Android中Menu的使用</h1><h2 id=\"Menu的分类\"><a href=\"#Menu的分类\" class=\"headerlink\" title=\"Menu的分类\"></a>Menu的分类</h2><ol>\n<li>选项菜单(Options Menu);当用户触发 menu 项时弹出的菜单</li>\n<li>上下文菜单(Context Menu):用户长按那个控件时弹出的类似对话框</li>\n<li>弹出菜单,当用户点击某个 View 视图是弹出的菜单</li>\n</ol>\n<h2 id=\"前提准备\"><a href=\"#前提准备\" class=\"headerlink\" title=\"前提准备\"></a>前提准备</h2><ol>\n<li>java创建了menu对象</li>\n<li>使用XML方法定义Menu要在XML文件中正确填写并添加ID</li>\n</ol>\n<h2 id=\"使用XML定义Menu\"><a href=\"#使用XML定义Menu\" class=\"headerlink\" title=\"使用XML定义Menu\"></a>使用XML定义Menu</h2><blockquote>\n<p>XML文件的基本属性 </p>\n</blockquote>\n<pre><code><?xml version="1.0" encoding="utf-8"?>\n<menu xmlns:android="http://schemas.android.com/apk/res/android">\n <item\n android:id="@+id/daxiao"\n android:title="设置字体大小"\n android:orderInCategory="3">\n </item>\n <item\n android:id="@+id/yanse"\n android:title="设置字体颜色"\n android:orderInCategory="2"\n >\n </item>\n <item\n android:id="@+id/shuxing"\n android:title="设置字体属性"\n android:orderInCategory="1">\n\n </item>\n</menu>\n\n <!--\n android:id="@+id/lalala_mune" 设置id\n android:title="设置字体大小" 设置title\n android:orderInCategory="3" 显示顺序\n -->\n</code></pre><blockquote>\n<p>Menu 菜单的嵌套使用规则 </p>\n</blockquote>\n<ol>\n<li>Item 中可以嵌套 menu,但是不能嵌套 group</li>\n<li>Menu 中既可以嵌套 group,又可以嵌套 item。</li>\n<li>Group 中只能嵌套 item,不能嵌套 menu</li>\n</ol>\n<h2 id=\"选项菜单的添加\"><a href=\"#选项菜单的添加\" class=\"headerlink\" title=\"选项菜单的添加\"></a>选项菜单的添加</h2><h3 id=\"添加XML文件中的Menu\"><a href=\"#添加XML文件中的Menu\" class=\"headerlink\" title=\"添加XML文件中的Menu\"></a>添加XML文件中的Menu</h3><blockquote>\n<p>选项菜单需要重写在在java代码中重写onCreateOptionsMenu(Menu menu)方法 </p>\n</blockquote>\n<pre><code>public boolean onCreateOptionsMenu(Menu menu) {\n /*第一步需要加载菜单选项*/\n /*菜单填充器将菜单获取然后添加至active中*/\n /*第一种比较麻烦的方法*/\n /*MenuInflater inflater = getMenuInflater();\n inflater.inflate(R.menu.options_menu,menu);*/\n /*第二种方法*/\n getMenuInflater().inflate(R.menu.options_menu,menu);\n\n return true;\n}\n</code></pre><h3 id=\"在Java代码中动态定义Menu\"><a href=\"#在Java代码中动态定义Menu\" class=\"headerlink\" title=\"在Java代码中动态定义Menu\"></a>在Java代码中动态定义Menu</h3><blockquote>\n<p>可以在java代码中的onCreateOptionsMenu(Menu menu)方法中使用menu.add()方法动态定义增加Menu</p>\n</blockquote>\n<pre><code>/*另外可以通过代码添加menu项*/\n//menu.add(group id,itmeid 自己设置);里面填menu的分组 group可以是itme的父标签\nmenu.add(Menu.NONE,ITMEID,Menu.NONE,"lalala我是后设置的");\n</code></pre><h2 id=\"上下文菜单\"><a href=\"#上下文菜单\" class=\"headerlink\" title=\"上下文菜单\"></a>上下文菜单</h2><blockquote>\n<p>定义后添加的方法与选项菜单类似<br>当用户长按 Activity 页面时,弹出的菜单我们称为上下文菜单。我们经常在 Windows 中用鼠<br>标右键单击弹出的菜单就是上下文菜单。</p>\n</blockquote>\n<ol>\n<li>覆盖 Activity 的 onCreateContextMenu()方法,调用 Menu 的 add 方法添加菜单项<br>MenuItem</li>\n<li>覆盖 onContextItemSelected()方法,响应菜单单击事件</li>\n<li>调用 registerForContextMenu()方法,为视图注册上下文菜单</li>\n</ol>\n<h2 id=\"子菜单\"><a href=\"#子菜单\" class=\"headerlink\" title=\"子菜单\"></a>子菜单</h2><blockquote>\n<p>定义后添加的方法与选项菜单类似<br>子菜单就是将相同功能的分组进行多级显示的一种菜单,比如,Windows 的“文件”菜单中就<br>有“新建”,“打开”,“关闭”等子菜单。创建子菜单的方法</p>\n</blockquote>\n<ol>\n<li>覆盖 Activity 的 onCreateOptionsMenu()方法,调用 Menu 的 addSubMenu()方法 添加子菜单项</li>\n<li>调用 SubMenu 的 add()饭饭,添加子菜单项</li>\n<li>覆盖 onCreateItemSelected()方法,响应菜单单击事件</li>\n</ol>\n<h2 id=\"添加单击事件\"><a href=\"#添加单击事件\" class=\"headerlink\" title=\"添加单击事件\"></a>添加单击事件</h2><h3 id=\"选项菜单\"><a href=\"#选项菜单\" class=\"headerlink\" title=\"选项菜单\"></a>选项菜单</h3><blockquote>\n<p>以下为对于使用XML文件加载的选项菜单为例<br>选项菜单需要重写onOptionsItemSelected(MenuItem item)方法使其触发 </p>\n</blockquote>\n<pre><code> /**\n * !!只针对选项菜单!!\n * 当选项菜单被选中时调用的方法\n * @param item 表示菜单项对象\n * @return false表示不进行处理\n */\n@Override\npublic boolean onOptionsItemSelected(MenuItem item) {\n //对于使用XML文件加载的菜单\n int itemid = item.getItemId();//获取触发的item的id\n float a;\n switch (itemid) {\n case R.id.daxiao:\n a = ceshi.getTextSize();\n Toast.makeText(MainActivity.this,""+a,Toast.LENGTH_SHORT).show();\n if (a==100) ceshi.setTextSize(TypedValue.COMPLEX_UNIT_PX,50);\n else ceshi.setTextSize(TypedValue.COMPLEX_UNIT_PX,100);\n break;\n case R.id.yanse:\n //随机生成颜色\n int red = (int) (Math.random()*256);\n int green = (int) (Math.random()*256);\n int blue = (int) (Math.random()*256);\n ceshi.setTextColor(Color.rgb(red,green,blue));\n break;\n }\n return super.onOptionsItemSelected(item);\n}\n</code></pre><h3 id=\"上下文菜单-1\"><a href=\"#上下文菜单-1\" class=\"headerlink\" title=\"上下文菜单\"></a>上下文菜单</h3><p>上下文菜单:上下文菜单是和某一种控件绑定使用的,也就是说每个控件只有注册了上下文菜单,并且长 按时弹出的菜单就是上下文菜单,<br>上下文菜单加载菜单是通过重写 onCreateContextMenu()来完成的,<br>上下文菜单的 点击事件是通过抽重写 onContextItemSelected()方法来实现的</p>\n<h3 id=\"PopMenu\"><a href=\"#PopMenu\" class=\"headerlink\" title=\"PopMenu\"></a>PopMenu</h3><p>是通过创建 popMenu 的对象,再通过菜单加载器将其加载进来的, popMenu 的点击事件是通过 popMenu.setOnMenuItemClickListener()方法实现的。</p>\n"},{"title":"数字电路第五章:集成双稳态触发器","date":"2018-01-04T11:31:33.000Z","_content":"# 集成双稳态触发器\n> 主要内容有 \n> 1. 触发器的特点及分类 \n> 2. 基本的RS触发器 \n> 3. 事中控制的RS触发器,D触发器,JK触发器,T触发器的电路结构、逻辑功能及其描述方法。 \n> 4. 触发器的性能参数。 \n\n## 触发器的基本特点及分类\n### 输入量和输出量的设置\n![](a.png) \ns0和R0代表初始状态预置输入量,X1和X2是正常工作的时候的输入量,Q为输出量,要求有两个相反的所以叫Q和非Q。 \n钟控式的再加一个CP为时钟控制输入量。 \n\n### 触发器输出与约束方程的一般表达式\n**设触发器输出次态的取值记作Qn+1,现态取值记Qn** \n触发器正常时要求R0 = S0 = 1!。 \n### 触发器的分类\n![](b.png)\n\n## 基本RS双稳态触发器及其分析\n> 本RS触发器是各种触发器电路中结构形式最简单的一种。同时,它又是复杂电路结构触发器的一个基本组成都分。\n\n### RS型(set reset)的电路结构和基本原理\n![](c.png)\n习惯上将电路画成图5-4(b)的对称形式。 \nQ和Q称为输出端,并且定义Q=1、Q=0为触发器的1状态, Q=0、Q=1为触发器的0状态。 \n**S为置位端或置1输入端,R成为复位端或置0输入端。**\n(1)当S=1,R=0时,Q=1,非Q=0。 \n(2)当S=0,R=1时,Q=0,非Q=1。 \n(3)当S=R=0时,电路维持原来状态不变。 \n(4)当S=R=1时,Q = 非Q= 0,既不是定义的1状态, 也不是定义的0状态。 \n真值表如下 \n![](d.png) \n输入信号在S或R为1的全部作用时间里, 都能直接改变输出端Q和Q的状态,这就是基本RS触发器的工作特点。 \n这个缘故,**也把S(非S)叫做直接置位端; 把R(非R)叫做直接复位端**\n\n\n## 时钟RS触发器及其分析\n触发器翻转的状态仍由输入控制端的电平情况决定,但翻转的时刻应由统一的脉冲信号来进行控制,这类控制信号称为**时钟脉冲**,CP (Clock Pulse)表示。 \n这类触发器成为**同步触发器**\n### 时钟RS触发器结构与工作特性\n![](e.png)\n真值表如下(即为只有CP为一时即触发)\n![](f.png)\n一般在使用同步触发器时,有时还需要在cp信号来之前将触发器预置成指定状态,所以可能会出现专门的异步置位输入端S和异步复位输入端R,使触发器置于指定状态。\n#### 空翻现象\n如果CP=1的期间内输入信号多次发生变化,则触发器的状态也会发生多次翻转,这就降低了电路的抗干扰能力,也叫“空翻”现象。\n### 主从触发器\n![](g.png)\n**主从RS触发器动作特点**: \n主从RS触发器的动作分两步完成。 \n先在CP=1期间,主触发器接收输入驱动RS信号进行主触发器的状态修改,但从触发器不动作。 \n第二步,在CP=0时刻,从触发器按照此时主触发器的状态进行动作。\n\n主从RS触发器解决了空翻问题,但在CP=1期间,RS仍存在约束条件。 \n**RS = 0 (约束条件)** \n特征表如下: \n![](h.png)\n\n## 时钟D触发器及其分析\n### 电路结构与工作原理\n为了适用于单端输入信号的场合,在有些集成电路中也把同步RS触发器作成下图的结构形式 通常把这种电路叫D型触发器(或D型锁存器)。\n![](i.png)\n### 逻辑功能及其描述方法\n#### 功能真值表和激励表\nRS触发器演变而来,它克服了RS触发器在 S=R=1时,次态不定的功能不完善缺点。\n![](j.png)\n#### D触发器的空翻\nD触发器依然存在“空翻”现象,实际广泛使用的集成D触 发器采用了维持阻塞结构,称为**维持阻塞D触发器。**\n![](k.png)\n\n**维持阻塞D触发器状态变化产升在时钟脉冲的上升沿,其次态决定于该时刻前瞬间输入信号D。**\n\n## 时钟JK触发器及其分析\n为了消除时钟控制RS 触发器输入信号的约束条件,又使触发器有两个输入端,可在时钟控制RS触发器中增加两条交叉反馈线,并将输入端S改为J,R改为K。 \n![](l.png)\n### 逻辑功能及其描述方法\n功能真值表和激励表\n![](m.png)\n特征方程: \n Qn+1 = J 非Q + 非k Q\n\n### 主从集成JK触发器\n和RS触发差不多\n## 时钟T触发器及其分析\nT触发器可看成是JK触发器在J=K条件下的特例 \nT触发器的逻辑功能可概括为:T=0时触发器保持原状太不变;T=1时触发器翻转。 \n\n![](n.png)\n\n## 特征方程总结\n![](o.png)\n\n\n\n\n\n\n\n\n\n\n","source":"_posts/数字电路第五章:集成双稳态触发器.md","raw":"---\ntitle: 数字电路第五章:集成双稳态触发器\ndate: 2018-01-04 19:31:33\ntags:\n\t- 数字电路\n\t- 笔记\ncategories: 数字电路\n---\n# 集成双稳态触发器\n> 主要内容有 \n> 1. 触发器的特点及分类 \n> 2. 基本的RS触发器 \n> 3. 事中控制的RS触发器,D触发器,JK触发器,T触发器的电路结构、逻辑功能及其描述方法。 \n> 4. 触发器的性能参数。 \n\n## 触发器的基本特点及分类\n### 输入量和输出量的设置\n![](a.png) \ns0和R0代表初始状态预置输入量,X1和X2是正常工作的时候的输入量,Q为输出量,要求有两个相反的所以叫Q和非Q。 \n钟控式的再加一个CP为时钟控制输入量。 \n\n### 触发器输出与约束方程的一般表达式\n**设触发器输出次态的取值记作Qn+1,现态取值记Qn** \n触发器正常时要求R0 = S0 = 1!。 \n### 触发器的分类\n![](b.png)\n\n## 基本RS双稳态触发器及其分析\n> 本RS触发器是各种触发器电路中结构形式最简单的一种。同时,它又是复杂电路结构触发器的一个基本组成都分。\n\n### RS型(set reset)的电路结构和基本原理\n![](c.png)\n习惯上将电路画成图5-4(b)的对称形式。 \nQ和Q称为输出端,并且定义Q=1、Q=0为触发器的1状态, Q=0、Q=1为触发器的0状态。 \n**S为置位端或置1输入端,R成为复位端或置0输入端。**\n(1)当S=1,R=0时,Q=1,非Q=0。 \n(2)当S=0,R=1时,Q=0,非Q=1。 \n(3)当S=R=0时,电路维持原来状态不变。 \n(4)当S=R=1时,Q = 非Q= 0,既不是定义的1状态, 也不是定义的0状态。 \n真值表如下 \n![](d.png) \n输入信号在S或R为1的全部作用时间里, 都能直接改变输出端Q和Q的状态,这就是基本RS触发器的工作特点。 \n这个缘故,**也把S(非S)叫做直接置位端; 把R(非R)叫做直接复位端**\n\n\n## 时钟RS触发器及其分析\n触发器翻转的状态仍由输入控制端的电平情况决定,但翻转的时刻应由统一的脉冲信号来进行控制,这类控制信号称为**时钟脉冲**,CP (Clock Pulse)表示。 \n这类触发器成为**同步触发器**\n### 时钟RS触发器结构与工作特性\n![](e.png)\n真值表如下(即为只有CP为一时即触发)\n![](f.png)\n一般在使用同步触发器时,有时还需要在cp信号来之前将触发器预置成指定状态,所以可能会出现专门的异步置位输入端S和异步复位输入端R,使触发器置于指定状态。\n#### 空翻现象\n如果CP=1的期间内输入信号多次发生变化,则触发器的状态也会发生多次翻转,这就降低了电路的抗干扰能力,也叫“空翻”现象。\n### 主从触发器\n![](g.png)\n**主从RS触发器动作特点**: \n主从RS触发器的动作分两步完成。 \n先在CP=1期间,主触发器接收输入驱动RS信号进行主触发器的状态修改,但从触发器不动作。 \n第二步,在CP=0时刻,从触发器按照此时主触发器的状态进行动作。\n\n主从RS触发器解决了空翻问题,但在CP=1期间,RS仍存在约束条件。 \n**RS = 0 (约束条件)** \n特征表如下: \n![](h.png)\n\n## 时钟D触发器及其分析\n### 电路结构与工作原理\n为了适用于单端输入信号的场合,在有些集成电路中也把同步RS触发器作成下图的结构形式 通常把这种电路叫D型触发器(或D型锁存器)。\n![](i.png)\n### 逻辑功能及其描述方法\n#### 功能真值表和激励表\nRS触发器演变而来,它克服了RS触发器在 S=R=1时,次态不定的功能不完善缺点。\n![](j.png)\n#### D触发器的空翻\nD触发器依然存在“空翻”现象,实际广泛使用的集成D触 发器采用了维持阻塞结构,称为**维持阻塞D触发器。**\n![](k.png)\n\n**维持阻塞D触发器状态变化产升在时钟脉冲的上升沿,其次态决定于该时刻前瞬间输入信号D。**\n\n## 时钟JK触发器及其分析\n为了消除时钟控制RS 触发器输入信号的约束条件,又使触发器有两个输入端,可在时钟控制RS触发器中增加两条交叉反馈线,并将输入端S改为J,R改为K。 \n![](l.png)\n### 逻辑功能及其描述方法\n功能真值表和激励表\n![](m.png)\n特征方程: \n Qn+1 = J 非Q + 非k Q\n\n### 主从集成JK触发器\n和RS触发差不多\n## 时钟T触发器及其分析\nT触发器可看成是JK触发器在J=K条件下的特例 \nT触发器的逻辑功能可概括为:T=0时触发器保持原状太不变;T=1时触发器翻转。 \n\n![](n.png)\n\n## 特征方程总结\n![](o.png)\n\n\n\n\n\n\n\n\n\n\n","slug":"数字电路第五章:集成双稳态触发器","published":1,"updated":"2018-01-04T14:53:13.378Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkmj001dtzy4ev08pup4","content":"<h1 id=\"集成双稳态触发器\"><a href=\"#集成双稳态触发器\" class=\"headerlink\" title=\"集成双稳态触发器\"></a>集成双稳态触发器</h1><blockquote>\n<p>主要内容有 </p>\n<ol>\n<li>触发器的特点及分类 </li>\n<li>基本的RS触发器 </li>\n<li>事中控制的RS触发器,D触发器,JK触发器,T触发器的电路结构、逻辑功能及其描述方法。 </li>\n<li>触发器的性能参数。 </li>\n</ol>\n</blockquote>\n<h2 id=\"触发器的基本特点及分类\"><a href=\"#触发器的基本特点及分类\" class=\"headerlink\" title=\"触发器的基本特点及分类\"></a>触发器的基本特点及分类</h2><h3 id=\"输入量和输出量的设置\"><a href=\"#输入量和输出量的设置\" class=\"headerlink\" title=\"输入量和输出量的设置\"></a>输入量和输出量的设置</h3><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"a.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> \n<p>s0和R0代表初始状态预置输入量,X1和X2是正常工作的时候的输入量,Q为输出量,要求有两个相反的所以叫Q和非Q。<br>钟控式的再加一个CP为时钟控制输入量。 </p>\n<h3 id=\"触发器输出与约束方程的一般表达式\"><a href=\"#触发器输出与约束方程的一般表达式\" class=\"headerlink\" title=\"触发器输出与约束方程的一般表达式\"></a>触发器输出与约束方程的一般表达式</h3><p><strong>设触发器输出次态的取值记作Qn+1,现态取值记Qn</strong><br>触发器正常时要求R0 = S0 = 1!。 </p>\n<h3 id=\"触发器的分类\"><a href=\"#触发器的分类\" class=\"headerlink\" title=\"触发器的分类\"></a>触发器的分类</h3><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"b.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<h2 id=\"基本RS双稳态触发器及其分析\"><a href=\"#基本RS双稳态触发器及其分析\" class=\"headerlink\" title=\"基本RS双稳态触发器及其分析\"></a>基本RS双稳态触发器及其分析</h2><blockquote>\n<p>本RS触发器是各种触发器电路中结构形式最简单的一种。同时,它又是复杂电路结构触发器的一个基本组成都分。</p>\n</blockquote>\n<h3 id=\"RS型(set-reset)的电路结构和基本原理\"><a href=\"#RS型(set-reset)的电路结构和基本原理\" class=\"headerlink\" title=\"RS型(set reset)的电路结构和基本原理\"></a>RS型(set reset)的电路结构和基本原理</h3><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"c.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<p>习惯上将电路画成图5-4(b)的对称形式。<br>Q和Q称为输出端,并且定义Q=1、Q=0为触发器的1状态, Q=0、Q=1为触发器的0状态。<br><strong>S为置位端或置1输入端,R成为复位端或置0输入端。</strong><br>(1)当S=1,R=0时,Q=1,非Q=0。<br>(2)当S=0,R=1时,Q=0,非Q=1。<br>(3)当S=R=0时,电路维持原来状态不变。<br>(4)当S=R=1时,Q = 非Q= 0,既不是定义的1状态, 也不是定义的0状态。<br>真值表如下<br><img src=\"d.png\" alt><br>输入信号在S或R为1的全部作用时间里, 都能直接改变输出端Q和Q的状态,这就是基本RS触发器的工作特点。<br>这个缘故,<strong>也把S(非S)叫做直接置位端; 把R(非R)叫做直接复位端</strong></p>\n<h2 id=\"时钟RS触发器及其分析\"><a href=\"#时钟RS触发器及其分析\" class=\"headerlink\" title=\"时钟RS触发器及其分析\"></a>时钟RS触发器及其分析</h2><p>触发器翻转的状态仍由输入控制端的电平情况决定,但翻转的时刻应由统一的脉冲信号来进行控制,这类控制信号称为<strong>时钟脉冲</strong>,CP (Clock Pulse)表示。<br>这类触发器成为<strong>同步触发器</strong></p>\n<h3 id=\"时钟RS触发器结构与工作特性\"><a href=\"#时钟RS触发器结构与工作特性\" class=\"headerlink\" title=\"时钟RS触发器结构与工作特性\"></a>时钟RS触发器结构与工作特性</h3><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"e.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<p>真值表如下(即为只有CP为一时即触发)<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"f.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure><br>一般在使用同步触发器时,有时还需要在cp信号来之前将触发器预置成指定状态,所以可能会出现专门的异步置位输入端S和异步复位输入端R,使触发器置于指定状态。</p>\n<h4 id=\"空翻现象\"><a href=\"#空翻现象\" class=\"headerlink\" title=\"空翻现象\"></a>空翻现象</h4><p>如果CP=1的期间内输入信号多次发生变化,则触发器的状态也会发生多次翻转,这就降低了电路的抗干扰能力,也叫“空翻”现象。</p>\n<h3 id=\"主从触发器\"><a href=\"#主从触发器\" class=\"headerlink\" title=\"主从触发器\"></a>主从触发器</h3><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"g.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<p><strong>主从RS触发器动作特点</strong>:<br>主从RS触发器的动作分两步完成。<br>先在CP=1期间,主触发器接收输入驱动RS信号进行主触发器的状态修改,但从触发器不动作。<br>第二步,在CP=0时刻,从触发器按照此时主触发器的状态进行动作。</p>\n<p>主从RS触发器解决了空翻问题,但在CP=1期间,RS仍存在约束条件。<br><strong>RS = 0 (约束条件)</strong><br>特征表如下:<br><img src=\"h.png\" alt></p>\n<h2 id=\"时钟D触发器及其分析\"><a href=\"#时钟D触发器及其分析\" class=\"headerlink\" title=\"时钟D触发器及其分析\"></a>时钟D触发器及其分析</h2><h3 id=\"电路结构与工作原理\"><a href=\"#电路结构与工作原理\" class=\"headerlink\" title=\"电路结构与工作原理\"></a>电路结构与工作原理</h3><p>为了适用于单端输入信号的场合,在有些集成电路中也把同步RS触发器作成下图的结构形式 通常把这种电路叫D型触发器(或D型锁存器)。<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"i.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n<h3 id=\"逻辑功能及其描述方法\"><a href=\"#逻辑功能及其描述方法\" class=\"headerlink\" title=\"逻辑功能及其描述方法\"></a>逻辑功能及其描述方法</h3><h4 id=\"功能真值表和激励表\"><a href=\"#功能真值表和激励表\" class=\"headerlink\" title=\"功能真值表和激励表\"></a>功能真值表和激励表</h4><p>RS触发器演变而来,它克服了RS触发器在 S=R=1时,次态不定的功能不完善缺点。<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"j.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n<h4 id=\"D触发器的空翻\"><a href=\"#D触发器的空翻\" class=\"headerlink\" title=\"D触发器的空翻\"></a>D触发器的空翻</h4><p>D触发器依然存在“空翻”现象,实际广泛使用的集成D触 发器采用了维持阻塞结构,称为<strong>维持阻塞D触发器。</strong><br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"k.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n<p><strong>维持阻塞D触发器状态变化产升在时钟脉冲的上升沿,其次态决定于该时刻前瞬间输入信号D。</strong></p>\n<h2 id=\"时钟JK触发器及其分析\"><a href=\"#时钟JK触发器及其分析\" class=\"headerlink\" title=\"时钟JK触发器及其分析\"></a>时钟JK触发器及其分析</h2><p>为了消除时钟控制RS 触发器输入信号的约束条件,又使触发器有两个输入端,可在时钟控制RS触发器中增加两条交叉反馈线,并将输入端S改为J,R改为K。<br><img src=\"l.png\" alt></p>\n<h3 id=\"逻辑功能及其描述方法-1\"><a href=\"#逻辑功能及其描述方法-1\" class=\"headerlink\" title=\"逻辑功能及其描述方法\"></a>逻辑功能及其描述方法</h3><p>功能真值表和激励表<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"m.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure><br>特征方程:<br> Qn+1 = J 非Q + 非k Q</p>\n<h3 id=\"主从集成JK触发器\"><a href=\"#主从集成JK触发器\" class=\"headerlink\" title=\"主从集成JK触发器\"></a>主从集成JK触发器</h3><p>和RS触发差不多</p>\n<h2 id=\"时钟T触发器及其分析\"><a href=\"#时钟T触发器及其分析\" class=\"headerlink\" title=\"时钟T触发器及其分析\"></a>时钟T触发器及其分析</h2><p>T触发器可看成是JK触发器在J=K条件下的特例<br>T触发器的逻辑功能可概括为:T=0时触发器保持原状太不变;T=1时触发器翻转。 </p>\n<p><img src=\"n.png\" alt></p>\n<h2 id=\"特征方程总结\"><a href=\"#特征方程总结\" class=\"headerlink\" title=\"特征方程总结\"></a>特征方程总结</h2><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"o.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"集成双稳态触发器\"><a href=\"#集成双稳态触发器\" class=\"headerlink\" title=\"集成双稳态触发器\"></a>集成双稳态触发器</h1><blockquote>\n<p>主要内容有 </p>\n<ol>\n<li>触发器的特点及分类 </li>\n<li>基本的RS触发器 </li>\n<li>事中控制的RS触发器,D触发器,JK触发器,T触发器的电路结构、逻辑功能及其描述方法。 </li>\n<li>触发器的性能参数。 </li>\n</ol>\n</blockquote>\n<h2 id=\"触发器的基本特点及分类\"><a href=\"#触发器的基本特点及分类\" class=\"headerlink\" title=\"触发器的基本特点及分类\"></a>触发器的基本特点及分类</h2><h3 id=\"输入量和输出量的设置\"><a href=\"#输入量和输出量的设置\" class=\"headerlink\" title=\"输入量和输出量的设置\"></a>输入量和输出量的设置</h3><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"a.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> \n<p>s0和R0代表初始状态预置输入量,X1和X2是正常工作的时候的输入量,Q为输出量,要求有两个相反的所以叫Q和非Q。<br>钟控式的再加一个CP为时钟控制输入量。 </p>\n<h3 id=\"触发器输出与约束方程的一般表达式\"><a href=\"#触发器输出与约束方程的一般表达式\" class=\"headerlink\" title=\"触发器输出与约束方程的一般表达式\"></a>触发器输出与约束方程的一般表达式</h3><p><strong>设触发器输出次态的取值记作Qn+1,现态取值记Qn</strong><br>触发器正常时要求R0 = S0 = 1!。 </p>\n<h3 id=\"触发器的分类\"><a href=\"#触发器的分类\" class=\"headerlink\" title=\"触发器的分类\"></a>触发器的分类</h3><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"b.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<h2 id=\"基本RS双稳态触发器及其分析\"><a href=\"#基本RS双稳态触发器及其分析\" class=\"headerlink\" title=\"基本RS双稳态触发器及其分析\"></a>基本RS双稳态触发器及其分析</h2><blockquote>\n<p>本RS触发器是各种触发器电路中结构形式最简单的一种。同时,它又是复杂电路结构触发器的一个基本组成都分。</p>\n</blockquote>\n<h3 id=\"RS型(set-reset)的电路结构和基本原理\"><a href=\"#RS型(set-reset)的电路结构和基本原理\" class=\"headerlink\" title=\"RS型(set reset)的电路结构和基本原理\"></a>RS型(set reset)的电路结构和基本原理</h3><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"c.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<p>习惯上将电路画成图5-4(b)的对称形式。<br>Q和Q称为输出端,并且定义Q=1、Q=0为触发器的1状态, Q=0、Q=1为触发器的0状态。<br><strong>S为置位端或置1输入端,R成为复位端或置0输入端。</strong><br>(1)当S=1,R=0时,Q=1,非Q=0。<br>(2)当S=0,R=1时,Q=0,非Q=1。<br>(3)当S=R=0时,电路维持原来状态不变。<br>(4)当S=R=1时,Q = 非Q= 0,既不是定义的1状态, 也不是定义的0状态。<br>真值表如下<br><img src=\"d.png\" alt><br>输入信号在S或R为1的全部作用时间里, 都能直接改变输出端Q和Q的状态,这就是基本RS触发器的工作特点。<br>这个缘故,<strong>也把S(非S)叫做直接置位端; 把R(非R)叫做直接复位端</strong></p>\n<h2 id=\"时钟RS触发器及其分析\"><a href=\"#时钟RS触发器及其分析\" class=\"headerlink\" title=\"时钟RS触发器及其分析\"></a>时钟RS触发器及其分析</h2><p>触发器翻转的状态仍由输入控制端的电平情况决定,但翻转的时刻应由统一的脉冲信号来进行控制,这类控制信号称为<strong>时钟脉冲</strong>,CP (Clock Pulse)表示。<br>这类触发器成为<strong>同步触发器</strong></p>\n<h3 id=\"时钟RS触发器结构与工作特性\"><a href=\"#时钟RS触发器结构与工作特性\" class=\"headerlink\" title=\"时钟RS触发器结构与工作特性\"></a>时钟RS触发器结构与工作特性</h3><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"e.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<p>真值表如下(即为只有CP为一时即触发)<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"f.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure><br>一般在使用同步触发器时,有时还需要在cp信号来之前将触发器预置成指定状态,所以可能会出现专门的异步置位输入端S和异步复位输入端R,使触发器置于指定状态。</p>\n<h4 id=\"空翻现象\"><a href=\"#空翻现象\" class=\"headerlink\" title=\"空翻现象\"></a>空翻现象</h4><p>如果CP=1的期间内输入信号多次发生变化,则触发器的状态也会发生多次翻转,这就降低了电路的抗干扰能力,也叫“空翻”现象。</p>\n<h3 id=\"主从触发器\"><a href=\"#主从触发器\" class=\"headerlink\" title=\"主从触发器\"></a>主从触发器</h3><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"g.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<p><strong>主从RS触发器动作特点</strong>:<br>主从RS触发器的动作分两步完成。<br>先在CP=1期间,主触发器接收输入驱动RS信号进行主触发器的状态修改,但从触发器不动作。<br>第二步,在CP=0时刻,从触发器按照此时主触发器的状态进行动作。</p>\n<p>主从RS触发器解决了空翻问题,但在CP=1期间,RS仍存在约束条件。<br><strong>RS = 0 (约束条件)</strong><br>特征表如下:<br><img src=\"h.png\" alt></p>\n<h2 id=\"时钟D触发器及其分析\"><a href=\"#时钟D触发器及其分析\" class=\"headerlink\" title=\"时钟D触发器及其分析\"></a>时钟D触发器及其分析</h2><h3 id=\"电路结构与工作原理\"><a href=\"#电路结构与工作原理\" class=\"headerlink\" title=\"电路结构与工作原理\"></a>电路结构与工作原理</h3><p>为了适用于单端输入信号的场合,在有些集成电路中也把同步RS触发器作成下图的结构形式 通常把这种电路叫D型触发器(或D型锁存器)。<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"i.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n<h3 id=\"逻辑功能及其描述方法\"><a href=\"#逻辑功能及其描述方法\" class=\"headerlink\" title=\"逻辑功能及其描述方法\"></a>逻辑功能及其描述方法</h3><h4 id=\"功能真值表和激励表\"><a href=\"#功能真值表和激励表\" class=\"headerlink\" title=\"功能真值表和激励表\"></a>功能真值表和激励表</h4><p>RS触发器演变而来,它克服了RS触发器在 S=R=1时,次态不定的功能不完善缺点。<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"j.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n<h4 id=\"D触发器的空翻\"><a href=\"#D触发器的空翻\" class=\"headerlink\" title=\"D触发器的空翻\"></a>D触发器的空翻</h4><p>D触发器依然存在“空翻”现象,实际广泛使用的集成D触 发器采用了维持阻塞结构,称为<strong>维持阻塞D触发器。</strong><br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"k.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n<p><strong>维持阻塞D触发器状态变化产升在时钟脉冲的上升沿,其次态决定于该时刻前瞬间输入信号D。</strong></p>\n<h2 id=\"时钟JK触发器及其分析\"><a href=\"#时钟JK触发器及其分析\" class=\"headerlink\" title=\"时钟JK触发器及其分析\"></a>时钟JK触发器及其分析</h2><p>为了消除时钟控制RS 触发器输入信号的约束条件,又使触发器有两个输入端,可在时钟控制RS触发器中增加两条交叉反馈线,并将输入端S改为J,R改为K。<br><img src=\"l.png\" alt></p>\n<h3 id=\"逻辑功能及其描述方法-1\"><a href=\"#逻辑功能及其描述方法-1\" class=\"headerlink\" title=\"逻辑功能及其描述方法\"></a>逻辑功能及其描述方法</h3><p>功能真值表和激励表<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"m.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure><br>特征方程:<br> Qn+1 = J 非Q + 非k Q</p>\n<h3 id=\"主从集成JK触发器\"><a href=\"#主从集成JK触发器\" class=\"headerlink\" title=\"主从集成JK触发器\"></a>主从集成JK触发器</h3><p>和RS触发差不多</p>\n<h2 id=\"时钟T触发器及其分析\"><a href=\"#时钟T触发器及其分析\" class=\"headerlink\" title=\"时钟T触发器及其分析\"></a>时钟T触发器及其分析</h2><p>T触发器可看成是JK触发器在J=K条件下的特例<br>T触发器的逻辑功能可概括为:T=0时触发器保持原状太不变;T=1时触发器翻转。 </p>\n<p><img src=\"n.png\" alt></p>\n<h2 id=\"特征方程总结\"><a href=\"#特征方程总结\" class=\"headerlink\" title=\"特征方程总结\"></a>特征方程总结</h2><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"o.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n"},{"title":"数字电路进阶(第六章以后)","date":"2018-01-08T13:46:16.000Z","_content":"\n# 数字电路进阶(第六章以后)\n## 时序逻辑电路的应用\n> 比如寄存器、锁存器、移位寄存器、计数器。。。\n\n寄存器什么都没有。 \n重点就是74ls290,看第六章的具体内容。 \n\n* [74LS290](http://ranxb.cn/2018/01/06/数字电路第六章:同步时序逻辑电路——下/#异步集成计数器74LS290)\n* 环形计数器是将移位型寄存器最后一级反馈到第一级的输入端,特点是构成寄存器的模数和所用触发器的个数相同,只能利用四个状态,比较浪费。利用的是74LS194 \n* 扭环形计数器是将最后一级的反变量反馈到第一级,不能自启动需要置零可以利用所有状态。","source":"_posts/数字电路进阶(第六章以后).md","raw":"---\ntitle: 数字电路进阶(第六章以后)\ndate: 2018-01-08 21:46:16\ntags: [数字电路,笔记]\ncategories: 数字电路\n---\n\n# 数字电路进阶(第六章以后)\n## 时序逻辑电路的应用\n> 比如寄存器、锁存器、移位寄存器、计数器。。。\n\n寄存器什么都没有。 \n重点就是74ls290,看第六章的具体内容。 \n\n* [74LS290](http://ranxb.cn/2018/01/06/数字电路第六章:同步时序逻辑电路——下/#异步集成计数器74LS290)\n* 环形计数器是将移位型寄存器最后一级反馈到第一级的输入端,特点是构成寄存器的模数和所用触发器的个数相同,只能利用四个状态,比较浪费。利用的是74LS194 \n* 扭环形计数器是将最后一级的反变量反馈到第一级,不能自启动需要置零可以利用所有状态。","slug":"数字电路进阶(第六章以后)","published":1,"updated":"2018-01-09T12:03:26.885Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkmk001ftzy40t8dv5iu","content":"<h1 id=\"数字电路进阶(第六章以后)\"><a href=\"#数字电路进阶(第六章以后)\" class=\"headerlink\" title=\"数字电路进阶(第六章以后)\"></a>数字电路进阶(第六章以后)</h1><h2 id=\"时序逻辑电路的应用\"><a href=\"#时序逻辑电路的应用\" class=\"headerlink\" title=\"时序逻辑电路的应用\"></a>时序逻辑电路的应用</h2><blockquote>\n<p>比如寄存器、锁存器、移位寄存器、计数器。。。</p>\n</blockquote>\n<p>寄存器什么都没有。<br>重点就是74ls290,看第六章的具体内容。 </p>\n<ul>\n<li><a href=\"http://ranxb.cn/2018/01/06/数字电路第六章:同步时序逻辑电路——下/#异步集成计数器74LS290\">74LS290</a></li>\n<li>环形计数器是将移位型寄存器最后一级反馈到第一级的输入端,特点是构成寄存器的模数和所用触发器的个数相同,只能利用四个状态,比较浪费。利用的是74LS194 </li>\n<li>扭环形计数器是将最后一级的反变量反馈到第一级,不能自启动需要置零可以利用所有状态。</li>\n</ul>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"数字电路进阶(第六章以后)\"><a href=\"#数字电路进阶(第六章以后)\" class=\"headerlink\" title=\"数字电路进阶(第六章以后)\"></a>数字电路进阶(第六章以后)</h1><h2 id=\"时序逻辑电路的应用\"><a href=\"#时序逻辑电路的应用\" class=\"headerlink\" title=\"时序逻辑电路的应用\"></a>时序逻辑电路的应用</h2><blockquote>\n<p>比如寄存器、锁存器、移位寄存器、计数器。。。</p>\n</blockquote>\n<p>寄存器什么都没有。<br>重点就是74ls290,看第六章的具体内容。 </p>\n<ul>\n<li><a href=\"http://ranxb.cn/2018/01/06/数字电路第六章:同步时序逻辑电路——下/#异步集成计数器74LS290\">74LS290</a></li>\n<li>环形计数器是将移位型寄存器最后一级反馈到第一级的输入端,特点是构成寄存器的模数和所用触发器的个数相同,只能利用四个状态,比较浪费。利用的是74LS194 </li>\n<li>扭环形计数器是将最后一级的反变量反馈到第一级,不能自启动需要置零可以利用所有状态。</li>\n</ul>\n"},{"title":"数字电路第六章:同步时序逻辑电路——下","date":"2018-01-06T08:29:26.000Z","_content":"# 数字电路第六章:同步时序逻辑电路——下\n## 状态编码\n> 在求得最简状态码之后,需要对状态表中用字母或数字表示的状态用一组二进制代码来代替,称之为状态编码(也叫状态赋值或状态分配)\n\n### 状态编码的任务\n1. 确定状态编码的长度,即二进制代码的位数或者是触发器的个数。 \n2. 确定二进制编码的分配方案。 \n\n### 状态编码的长度确定\n每个触发器可以代表一位二进制数,n个触发器可以代表n位二进制数,组成2<sup>n</sup>个二进制代码。\n\n所需状态数M和触发器个数n之间应满足以下关系: 2<sup>n-1</sup> < M ≤ 2<sup>n</sup> \n\n### 确定二进制编码分配方案\n因为编码和状态配合的方式很多,徐阿哟选择最佳的编码方式。 \n若当N=4, n=2时,就有24种状态分配方案。随着状 态数目的增加,状态分配方案的总数将急剧增加。**状态编码解决的主要问题是确定一组使次态函数(或驱动方程)和输出函数尽可能简单、可靠的 状态编码,称之为最佳编码。**\n### 分配的基本原则\n* 在状态表中同一输入下的相同次态所对应的现态,尽可能分配相邻编码。通常称为“**次态相同,现态编码相邻**”。\n* 在状态表中,同一现态,相邻输入下的不同次态,应尽可能分配相邻编码。通常称为“**同一现态,次态编码相邻**”。\n* 在状态表中某些输出完全相同的现态。那么尽可能给现态分配相邻的编码,通常称“**输出相同,现态编码相邻**”。\n* 在状态表中,**出现次数最多的状态通常给予逻辑0的编码**。 \n\n**注意**:一般情况下,应优先考虑原则(1),因为原则 (1)最重要!例: \n![](a.png) \n结果如下: \n![](b.png) \n\n## 同步时序逻辑电路设计举例\n### 例题一\n例题:试设计一个序列数据检测器,该电路用来检测输入的串行二进制序列,当输入连续出现110时,检测器输出为1,其他情况下输出为0。\n\n1. 进行逻辑抽象画出状态转换图和状态转换表\n![](c.png) \n![](d.png) \n2. 进行状态化简,因为全部确定,建立最简等效类 \n![](e.png)\n3. 状态编码,状态可用两个二进制编码表示,S0出现的最多设为00,S1=01,S2=11 \n![](f.png)\n4. 根据状态表求出状态方程,驱动方程和输出方程,画出Z的卡诺图,Q2n+1和Q1n+1的卡诺图\n![](g.png) \n并根据卡诺图的化简结果写出输出方程,状态方程,并带入触发器的特征方程写出驱动方程。\n![](h.png) \n5. 经过对比特征方程的标准形式,写出j和k,并画出逻辑电路图。 \n![](i.png)\n6. 判断自启动,当电路处于无关状态时,是否可以通过时钟脉冲的作用下进入有效状态。\n\n### 例题二\n例题:试设计一个同步七进制计数器,要求按二进制加计数规律变化。\n\n确定状态转换情况,注意看题是七进制,因此111位无效情况。 \n![](j.png) \n确定编码状态 \n![](k.png) \n因为是Moore型电路,跟输入无关,所以卡诺图这么画 \n![](l.png) \n通过卡诺图写出状态方程,经验来看Moore型电路都用D触发器 \n![](m.png) \n写出驱动方程,画出电路图 \n![](n.png) \n最后检查一下自启动 \n![](o.png) \n\n## 常用集成时序逻辑电路及应用\n> 寄存器好像不考,直接计数器了。\n\n### 计数器\n一种对输入脉冲信号进行计数的时序逻辑部件。 \n可以分为: \n* 二进制计数器和非二进制计数器\n* 加计数器、减计数器和可逆计数器\n* 同步计数器和异步计数器\n\n#### 集成计数器\n##### 同步集成计数器74LS191\n**74LS191** \n![](p.png) \n功能及其真值表 \n![](q.png)\n##### 异步集成计数器74LS290\n**74LS290重点!**\n![](r.png)\n中规模集成电路74LS290是典型的异步BCD码十进制计数器。 \n逻辑电路如下 \n![](s.png) \n**功能分析** \n* 若在CPa端输入时钟脉冲,则Qa输出信号是CPa的脉冲二分频 \n* FB,FC,FD三个触发器构成的逻辑电路是一个异步五进制计数器,其CPB为计数脉冲输入端,QD为输出端。即QD的输出信号是CPB脉冲的五分频。 \n* 若将CPB与QA相连,同时以CPA为输入计数脉冲端。QD的输出为十进制计数器(或十分频器)。 \n因此,又将这个电路称为二、五、十进制异步计数器。 \n**真值表** \n![](t.png)\n**真值表的分析** \n* 直接复位输入端R01和R02:当R01=R02=1,且S91,S92中有“0”时,可使各触发器清为零。 \n* 置“9”输入端S91和S92:其状态QDQCQBQA = 1001,这就是置“9”功能。 \n* 在置“9”输入端S91,S92和复位输入端R01,R02中均有“0”电平时,74LS290可实现计数功能。 \n \n**任意进制计数器的构造方法**\n例:用74LS290和适当的门电路构成64进制计数器,采用5421BCD码计数。\n![](u.png)\n\n* Cb和Qa接时,Ca输入时钟信号,输出顺序为dcba,计数方式为8421\n* Ca和Qd接时,Cb接时钟信号,输出顺序为adcb,计数方式为5421\n\n![](v.png)\n\n##### 环形计数器\n环形计数器是将移位寄存器的最后一级输出 反馈到第一级串行输入端SR,特点是构成的 计数器模数M和所用触发器个数n相等。\n![](w.png)\n\n\n\n\n\n\n\n\n\n\n\n\n\n","source":"_posts/数字电路第六章:同步时序逻辑电路——下.md","raw":"---\ntitle: 数字电路第六章:同步时序逻辑电路——下\ndate: 2018-01-06 16:29:26\ntags: [数字电路,笔记]\ncategories: 数字电路\n---\n# 数字电路第六章:同步时序逻辑电路——下\n## 状态编码\n> 在求得最简状态码之后,需要对状态表中用字母或数字表示的状态用一组二进制代码来代替,称之为状态编码(也叫状态赋值或状态分配)\n\n### 状态编码的任务\n1. 确定状态编码的长度,即二进制代码的位数或者是触发器的个数。 \n2. 确定二进制编码的分配方案。 \n\n### 状态编码的长度确定\n每个触发器可以代表一位二进制数,n个触发器可以代表n位二进制数,组成2<sup>n</sup>个二进制代码。\n\n所需状态数M和触发器个数n之间应满足以下关系: 2<sup>n-1</sup> < M ≤ 2<sup>n</sup> \n\n### 确定二进制编码分配方案\n因为编码和状态配合的方式很多,徐阿哟选择最佳的编码方式。 \n若当N=4, n=2时,就有24种状态分配方案。随着状 态数目的增加,状态分配方案的总数将急剧增加。**状态编码解决的主要问题是确定一组使次态函数(或驱动方程)和输出函数尽可能简单、可靠的 状态编码,称之为最佳编码。**\n### 分配的基本原则\n* 在状态表中同一输入下的相同次态所对应的现态,尽可能分配相邻编码。通常称为“**次态相同,现态编码相邻**”。\n* 在状态表中,同一现态,相邻输入下的不同次态,应尽可能分配相邻编码。通常称为“**同一现态,次态编码相邻**”。\n* 在状态表中某些输出完全相同的现态。那么尽可能给现态分配相邻的编码,通常称“**输出相同,现态编码相邻**”。\n* 在状态表中,**出现次数最多的状态通常给予逻辑0的编码**。 \n\n**注意**:一般情况下,应优先考虑原则(1),因为原则 (1)最重要!例: \n![](a.png) \n结果如下: \n![](b.png) \n\n## 同步时序逻辑电路设计举例\n### 例题一\n例题:试设计一个序列数据检测器,该电路用来检测输入的串行二进制序列,当输入连续出现110时,检测器输出为1,其他情况下输出为0。\n\n1. 进行逻辑抽象画出状态转换图和状态转换表\n![](c.png) \n![](d.png) \n2. 进行状态化简,因为全部确定,建立最简等效类 \n![](e.png)\n3. 状态编码,状态可用两个二进制编码表示,S0出现的最多设为00,S1=01,S2=11 \n![](f.png)\n4. 根据状态表求出状态方程,驱动方程和输出方程,画出Z的卡诺图,Q2n+1和Q1n+1的卡诺图\n![](g.png) \n并根据卡诺图的化简结果写出输出方程,状态方程,并带入触发器的特征方程写出驱动方程。\n![](h.png) \n5. 经过对比特征方程的标准形式,写出j和k,并画出逻辑电路图。 \n![](i.png)\n6. 判断自启动,当电路处于无关状态时,是否可以通过时钟脉冲的作用下进入有效状态。\n\n### 例题二\n例题:试设计一个同步七进制计数器,要求按二进制加计数规律变化。\n\n确定状态转换情况,注意看题是七进制,因此111位无效情况。 \n![](j.png) \n确定编码状态 \n![](k.png) \n因为是Moore型电路,跟输入无关,所以卡诺图这么画 \n![](l.png) \n通过卡诺图写出状态方程,经验来看Moore型电路都用D触发器 \n![](m.png) \n写出驱动方程,画出电路图 \n![](n.png) \n最后检查一下自启动 \n![](o.png) \n\n## 常用集成时序逻辑电路及应用\n> 寄存器好像不考,直接计数器了。\n\n### 计数器\n一种对输入脉冲信号进行计数的时序逻辑部件。 \n可以分为: \n* 二进制计数器和非二进制计数器\n* 加计数器、减计数器和可逆计数器\n* 同步计数器和异步计数器\n\n#### 集成计数器\n##### 同步集成计数器74LS191\n**74LS191** \n![](p.png) \n功能及其真值表 \n![](q.png)\n##### 异步集成计数器74LS290\n**74LS290重点!**\n![](r.png)\n中规模集成电路74LS290是典型的异步BCD码十进制计数器。 \n逻辑电路如下 \n![](s.png) \n**功能分析** \n* 若在CPa端输入时钟脉冲,则Qa输出信号是CPa的脉冲二分频 \n* FB,FC,FD三个触发器构成的逻辑电路是一个异步五进制计数器,其CPB为计数脉冲输入端,QD为输出端。即QD的输出信号是CPB脉冲的五分频。 \n* 若将CPB与QA相连,同时以CPA为输入计数脉冲端。QD的输出为十进制计数器(或十分频器)。 \n因此,又将这个电路称为二、五、十进制异步计数器。 \n**真值表** \n![](t.png)\n**真值表的分析** \n* 直接复位输入端R01和R02:当R01=R02=1,且S91,S92中有“0”时,可使各触发器清为零。 \n* 置“9”输入端S91和S92:其状态QDQCQBQA = 1001,这就是置“9”功能。 \n* 在置“9”输入端S91,S92和复位输入端R01,R02中均有“0”电平时,74LS290可实现计数功能。 \n \n**任意进制计数器的构造方法**\n例:用74LS290和适当的门电路构成64进制计数器,采用5421BCD码计数。\n![](u.png)\n\n* Cb和Qa接时,Ca输入时钟信号,输出顺序为dcba,计数方式为8421\n* Ca和Qd接时,Cb接时钟信号,输出顺序为adcb,计数方式为5421\n\n![](v.png)\n\n##### 环形计数器\n环形计数器是将移位寄存器的最后一级输出 反馈到第一级串行输入端SR,特点是构成的 计数器模数M和所用触发器个数n相等。\n![](w.png)\n\n\n\n\n\n\n\n\n\n\n\n\n\n","slug":"数字电路第六章:同步时序逻辑电路——下","published":1,"updated":"2018-01-06T13:47:29.410Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkmn001ktzy4cux07h7h","content":"<h1 id=\"数字电路第六章:同步时序逻辑电路——下\"><a href=\"#数字电路第六章:同步时序逻辑电路——下\" class=\"headerlink\" title=\"数字电路第六章:同步时序逻辑电路——下\"></a>数字电路第六章:同步时序逻辑电路——下</h1><h2 id=\"状态编码\"><a href=\"#状态编码\" class=\"headerlink\" title=\"状态编码\"></a>状态编码</h2><blockquote>\n<p>在求得最简状态码之后,需要对状态表中用字母或数字表示的状态用一组二进制代码来代替,称之为状态编码(也叫状态赋值或状态分配)</p>\n</blockquote>\n<h3 id=\"状态编码的任务\"><a href=\"#状态编码的任务\" class=\"headerlink\" title=\"状态编码的任务\"></a>状态编码的任务</h3><ol>\n<li>确定状态编码的长度,即二进制代码的位数或者是触发器的个数。 </li>\n<li>确定二进制编码的分配方案。 </li>\n</ol>\n<h3 id=\"状态编码的长度确定\"><a href=\"#状态编码的长度确定\" class=\"headerlink\" title=\"状态编码的长度确定\"></a>状态编码的长度确定</h3><p>每个触发器可以代表一位二进制数,n个触发器可以代表n位二进制数,组成2<sup>n</sup>个二进制代码。</p>\n<p>所需状态数M和触发器个数n之间应满足以下关系: 2<sup>n-1</sup> < M ≤ 2<sup>n</sup> </p>\n<h3 id=\"确定二进制编码分配方案\"><a href=\"#确定二进制编码分配方案\" class=\"headerlink\" title=\"确定二进制编码分配方案\"></a>确定二进制编码分配方案</h3><p>因为编码和状态配合的方式很多,徐阿哟选择最佳的编码方式。<br>若当N=4, n=2时,就有24种状态分配方案。随着状 态数目的增加,状态分配方案的总数将急剧增加。<strong>状态编码解决的主要问题是确定一组使次态函数(或驱动方程)和输出函数尽可能简单、可靠的 状态编码,称之为最佳编码。</strong></p>\n<h3 id=\"分配的基本原则\"><a href=\"#分配的基本原则\" class=\"headerlink\" title=\"分配的基本原则\"></a>分配的基本原则</h3><ul>\n<li>在状态表中同一输入下的相同次态所对应的现态,尽可能分配相邻编码。通常称为“<strong>次态相同,现态编码相邻</strong>”。</li>\n<li>在状态表中,同一现态,相邻输入下的不同次态,应尽可能分配相邻编码。通常称为“<strong>同一现态,次态编码相邻</strong>”。</li>\n<li>在状态表中某些输出完全相同的现态。那么尽可能给现态分配相邻的编码,通常称“<strong>输出相同,现态编码相邻</strong>”。</li>\n<li>在状态表中,<strong>出现次数最多的状态通常给予逻辑0的编码</strong>。 </li>\n</ul>\n<p><strong>注意</strong>:一般情况下,应优先考虑原则(1),因为原则 (1)最重要!例:<br><img src=\"a.png\" alt><br>结果如下:<br><img src=\"b.png\" alt> </p>\n<h2 id=\"同步时序逻辑电路设计举例\"><a href=\"#同步时序逻辑电路设计举例\" class=\"headerlink\" title=\"同步时序逻辑电路设计举例\"></a>同步时序逻辑电路设计举例</h2><h3 id=\"例题一\"><a href=\"#例题一\" class=\"headerlink\" title=\"例题一\"></a>例题一</h3><p>例题:试设计一个序列数据检测器,该电路用来检测输入的串行二进制序列,当输入连续出现110时,检测器输出为1,其他情况下输出为0。</p>\n<ol>\n<li>进行逻辑抽象画出状态转换图和状态转换表<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"c.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> \n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"d.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> </li>\n<li>进行状态化简,因为全部确定,建立最简等效类<br><img src=\"e.png\" alt></li>\n<li>状态编码,状态可用两个二进制编码表示,S0出现的最多设为00,S1=01,S2=11<br><img src=\"f.png\" alt></li>\n<li>根据状态表求出状态方程,驱动方程和输出方程,画出Z的卡诺图,Q2n+1和Q1n+1的卡诺图<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"g.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> \n并根据卡诺图的化简结果写出输出方程,状态方程,并带入触发器的特征方程写出驱动方程。<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"h.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> </li>\n<li>经过对比特征方程的标准形式,写出j和k,并画出逻辑电路图。<br><img src=\"i.png\" alt></li>\n<li>判断自启动,当电路处于无关状态时,是否可以通过时钟脉冲的作用下进入有效状态。</li>\n</ol>\n<h3 id=\"例题二\"><a href=\"#例题二\" class=\"headerlink\" title=\"例题二\"></a>例题二</h3><p>例题:试设计一个同步七进制计数器,要求按二进制加计数规律变化。</p>\n<p>确定状态转换情况,注意看题是七进制,因此111位无效情况。<br><img src=\"j.png\" alt><br>确定编码状态<br><img src=\"k.png\" alt><br>因为是Moore型电路,跟输入无关,所以卡诺图这么画<br><img src=\"l.png\" alt><br>通过卡诺图写出状态方程,经验来看Moore型电路都用D触发器<br><img src=\"m.png\" alt><br>写出驱动方程,画出电路图<br><img src=\"n.png\" alt><br>最后检查一下自启动<br><img src=\"o.png\" alt> </p>\n<h2 id=\"常用集成时序逻辑电路及应用\"><a href=\"#常用集成时序逻辑电路及应用\" class=\"headerlink\" title=\"常用集成时序逻辑电路及应用\"></a>常用集成时序逻辑电路及应用</h2><blockquote>\n<p>寄存器好像不考,直接计数器了。</p>\n</blockquote>\n<h3 id=\"计数器\"><a href=\"#计数器\" class=\"headerlink\" title=\"计数器\"></a>计数器</h3><p>一种对输入脉冲信号进行计数的时序逻辑部件。<br>可以分为: </p>\n<ul>\n<li>二进制计数器和非二进制计数器</li>\n<li>加计数器、减计数器和可逆计数器</li>\n<li>同步计数器和异步计数器</li>\n</ul>\n<h4 id=\"集成计数器\"><a href=\"#集成计数器\" class=\"headerlink\" title=\"集成计数器\"></a>集成计数器</h4><h5 id=\"同步集成计数器74LS191\"><a href=\"#同步集成计数器74LS191\" class=\"headerlink\" title=\"同步集成计数器74LS191\"></a>同步集成计数器74LS191</h5><p><strong>74LS191</strong><br><img src=\"p.png\" alt><br>功能及其真值表<br><img src=\"q.png\" alt></p>\n<h5 id=\"异步集成计数器74LS290\"><a href=\"#异步集成计数器74LS290\" class=\"headerlink\" title=\"异步集成计数器74LS290\"></a>异步集成计数器74LS290</h5><p><strong>74LS290重点!</strong><br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"r.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure><br>中规模集成电路74LS290是典型的异步BCD码十进制计数器。<br>逻辑电路如下<br><img src=\"s.png\" alt><br><strong>功能分析</strong> </p>\n<ul>\n<li>若在CPa端输入时钟脉冲,则Qa输出信号是CPa的脉冲二分频 </li>\n<li>FB,FC,FD三个触发器构成的逻辑电路是一个异步五进制计数器,其CPB为计数脉冲输入端,QD为输出端。即QD的输出信号是CPB脉冲的五分频。 </li>\n<li>若将CPB与QA相连,同时以CPA为输入计数脉冲端。QD的输出为十进制计数器(或十分频器)。<br>因此,又将这个电路称为二、五、十进制异步计数器。<br><strong>真值表</strong><br><img src=\"t.png\" alt><br><strong>真值表的分析</strong> </li>\n<li>直接复位输入端R01和R02:当R01=R02=1,且S91,S92中有“0”时,可使各触发器清为零。 </li>\n<li>置“9”输入端S91和S92:其状态QDQCQBQA = 1001,这就是置“9”功能。 </li>\n<li>在置“9”输入端S91,S92和复位输入端R01,R02中均有“0”电平时,74LS290可实现计数功能。 </li>\n</ul>\n<p><strong>任意进制计数器的构造方法</strong><br>例:用74LS290和适当的门电路构成64进制计数器,采用5421BCD码计数。<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"u.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n<ul>\n<li>Cb和Qa接时,Ca输入时钟信号,输出顺序为dcba,计数方式为8421</li>\n<li>Ca和Qd接时,Cb接时钟信号,输出顺序为adcb,计数方式为5421</li>\n</ul>\n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"v.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<h5 id=\"环形计数器\"><a href=\"#环形计数器\" class=\"headerlink\" title=\"环形计数器\"></a>环形计数器</h5><p>环形计数器是将移位寄存器的最后一级输出 反馈到第一级串行输入端SR,特点是构成的 计数器模数M和所用触发器个数n相等。<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"w.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"数字电路第六章:同步时序逻辑电路——下\"><a href=\"#数字电路第六章:同步时序逻辑电路——下\" class=\"headerlink\" title=\"数字电路第六章:同步时序逻辑电路——下\"></a>数字电路第六章:同步时序逻辑电路——下</h1><h2 id=\"状态编码\"><a href=\"#状态编码\" class=\"headerlink\" title=\"状态编码\"></a>状态编码</h2><blockquote>\n<p>在求得最简状态码之后,需要对状态表中用字母或数字表示的状态用一组二进制代码来代替,称之为状态编码(也叫状态赋值或状态分配)</p>\n</blockquote>\n<h3 id=\"状态编码的任务\"><a href=\"#状态编码的任务\" class=\"headerlink\" title=\"状态编码的任务\"></a>状态编码的任务</h3><ol>\n<li>确定状态编码的长度,即二进制代码的位数或者是触发器的个数。 </li>\n<li>确定二进制编码的分配方案。 </li>\n</ol>\n<h3 id=\"状态编码的长度确定\"><a href=\"#状态编码的长度确定\" class=\"headerlink\" title=\"状态编码的长度确定\"></a>状态编码的长度确定</h3><p>每个触发器可以代表一位二进制数,n个触发器可以代表n位二进制数,组成2<sup>n</sup>个二进制代码。</p>\n<p>所需状态数M和触发器个数n之间应满足以下关系: 2<sup>n-1</sup> < M ≤ 2<sup>n</sup> </p>\n<h3 id=\"确定二进制编码分配方案\"><a href=\"#确定二进制编码分配方案\" class=\"headerlink\" title=\"确定二进制编码分配方案\"></a>确定二进制编码分配方案</h3><p>因为编码和状态配合的方式很多,徐阿哟选择最佳的编码方式。<br>若当N=4, n=2时,就有24种状态分配方案。随着状 态数目的增加,状态分配方案的总数将急剧增加。<strong>状态编码解决的主要问题是确定一组使次态函数(或驱动方程)和输出函数尽可能简单、可靠的 状态编码,称之为最佳编码。</strong></p>\n<h3 id=\"分配的基本原则\"><a href=\"#分配的基本原则\" class=\"headerlink\" title=\"分配的基本原则\"></a>分配的基本原则</h3><ul>\n<li>在状态表中同一输入下的相同次态所对应的现态,尽可能分配相邻编码。通常称为“<strong>次态相同,现态编码相邻</strong>”。</li>\n<li>在状态表中,同一现态,相邻输入下的不同次态,应尽可能分配相邻编码。通常称为“<strong>同一现态,次态编码相邻</strong>”。</li>\n<li>在状态表中某些输出完全相同的现态。那么尽可能给现态分配相邻的编码,通常称“<strong>输出相同,现态编码相邻</strong>”。</li>\n<li>在状态表中,<strong>出现次数最多的状态通常给予逻辑0的编码</strong>。 </li>\n</ul>\n<p><strong>注意</strong>:一般情况下,应优先考虑原则(1),因为原则 (1)最重要!例:<br><img src=\"a.png\" alt><br>结果如下:<br><img src=\"b.png\" alt> </p>\n<h2 id=\"同步时序逻辑电路设计举例\"><a href=\"#同步时序逻辑电路设计举例\" class=\"headerlink\" title=\"同步时序逻辑电路设计举例\"></a>同步时序逻辑电路设计举例</h2><h3 id=\"例题一\"><a href=\"#例题一\" class=\"headerlink\" title=\"例题一\"></a>例题一</h3><p>例题:试设计一个序列数据检测器,该电路用来检测输入的串行二进制序列,当输入连续出现110时,检测器输出为1,其他情况下输出为0。</p>\n<ol>\n<li>进行逻辑抽象画出状态转换图和状态转换表<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"c.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> \n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"d.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> </li>\n<li>进行状态化简,因为全部确定,建立最简等效类<br><img src=\"e.png\" alt></li>\n<li>状态编码,状态可用两个二进制编码表示,S0出现的最多设为00,S1=01,S2=11<br><img src=\"f.png\" alt></li>\n<li>根据状态表求出状态方程,驱动方程和输出方程,画出Z的卡诺图,Q2n+1和Q1n+1的卡诺图<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"g.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> \n并根据卡诺图的化简结果写出输出方程,状态方程,并带入触发器的特征方程写出驱动方程。<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"h.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> </li>\n<li>经过对比特征方程的标准形式,写出j和k,并画出逻辑电路图。<br><img src=\"i.png\" alt></li>\n<li>判断自启动,当电路处于无关状态时,是否可以通过时钟脉冲的作用下进入有效状态。</li>\n</ol>\n<h3 id=\"例题二\"><a href=\"#例题二\" class=\"headerlink\" title=\"例题二\"></a>例题二</h3><p>例题:试设计一个同步七进制计数器,要求按二进制加计数规律变化。</p>\n<p>确定状态转换情况,注意看题是七进制,因此111位无效情况。<br><img src=\"j.png\" alt><br>确定编码状态<br><img src=\"k.png\" alt><br>因为是Moore型电路,跟输入无关,所以卡诺图这么画<br><img src=\"l.png\" alt><br>通过卡诺图写出状态方程,经验来看Moore型电路都用D触发器<br><img src=\"m.png\" alt><br>写出驱动方程,画出电路图<br><img src=\"n.png\" alt><br>最后检查一下自启动<br><img src=\"o.png\" alt> </p>\n<h2 id=\"常用集成时序逻辑电路及应用\"><a href=\"#常用集成时序逻辑电路及应用\" class=\"headerlink\" title=\"常用集成时序逻辑电路及应用\"></a>常用集成时序逻辑电路及应用</h2><blockquote>\n<p>寄存器好像不考,直接计数器了。</p>\n</blockquote>\n<h3 id=\"计数器\"><a href=\"#计数器\" class=\"headerlink\" title=\"计数器\"></a>计数器</h3><p>一种对输入脉冲信号进行计数的时序逻辑部件。<br>可以分为: </p>\n<ul>\n<li>二进制计数器和非二进制计数器</li>\n<li>加计数器、减计数器和可逆计数器</li>\n<li>同步计数器和异步计数器</li>\n</ul>\n<h4 id=\"集成计数器\"><a href=\"#集成计数器\" class=\"headerlink\" title=\"集成计数器\"></a>集成计数器</h4><h5 id=\"同步集成计数器74LS191\"><a href=\"#同步集成计数器74LS191\" class=\"headerlink\" title=\"同步集成计数器74LS191\"></a>同步集成计数器74LS191</h5><p><strong>74LS191</strong><br><img src=\"p.png\" alt><br>功能及其真值表<br><img src=\"q.png\" alt></p>\n<h5 id=\"异步集成计数器74LS290\"><a href=\"#异步集成计数器74LS290\" class=\"headerlink\" title=\"异步集成计数器74LS290\"></a>异步集成计数器74LS290</h5><p><strong>74LS290重点!</strong><br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"r.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure><br>中规模集成电路74LS290是典型的异步BCD码十进制计数器。<br>逻辑电路如下<br><img src=\"s.png\" alt><br><strong>功能分析</strong> </p>\n<ul>\n<li>若在CPa端输入时钟脉冲,则Qa输出信号是CPa的脉冲二分频 </li>\n<li>FB,FC,FD三个触发器构成的逻辑电路是一个异步五进制计数器,其CPB为计数脉冲输入端,QD为输出端。即QD的输出信号是CPB脉冲的五分频。 </li>\n<li>若将CPB与QA相连,同时以CPA为输入计数脉冲端。QD的输出为十进制计数器(或十分频器)。<br>因此,又将这个电路称为二、五、十进制异步计数器。<br><strong>真值表</strong><br><img src=\"t.png\" alt><br><strong>真值表的分析</strong> </li>\n<li>直接复位输入端R01和R02:当R01=R02=1,且S91,S92中有“0”时,可使各触发器清为零。 </li>\n<li>置“9”输入端S91和S92:其状态QDQCQBQA = 1001,这就是置“9”功能。 </li>\n<li>在置“9”输入端S91,S92和复位输入端R01,R02中均有“0”电平时,74LS290可实现计数功能。 </li>\n</ul>\n<p><strong>任意进制计数器的构造方法</strong><br>例:用74LS290和适当的门电路构成64进制计数器,采用5421BCD码计数。<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"u.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n<ul>\n<li>Cb和Qa接时,Ca输入时钟信号,输出顺序为dcba,计数方式为8421</li>\n<li>Ca和Qd接时,Cb接时钟信号,输出顺序为adcb,计数方式为5421</li>\n</ul>\n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"v.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<h5 id=\"环形计数器\"><a href=\"#环形计数器\" class=\"headerlink\" title=\"环形计数器\"></a>环形计数器</h5><p>环形计数器是将移位寄存器的最后一级输出 反馈到第一级串行输入端SR,特点是构成的 计数器模数M和所用触发器个数n相等。<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"w.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n"},{"title":"数字电路:基础知识","date":"2018-01-08T10:08:34.000Z","_content":"\n\n# 数字电路:基础知识\n> 你可以理解为第五章之前的内容\n\n## 各个码\n### 反码、补码\n* 反码:大于零的不变,小于零的除符号位全取反\n* 补码:大于零的和原码一样,小于零的在最低位加1\n* 运算:补码和补码都可以进行直接运算,两个直接相加,最高位溢出的话直接丢掉。反码运算的话需要把溢出位加到最后一位上。\n\n### 十进制的补数\n* 对十的补数:符号位是0(+)和9(-),两种方法,一是加后符号位后每个数值对十取反,就是用9减,然后最低位加一;二是几位就用10的几次方减原来那个数。 \n`[5493] = 05493 [-3250] = 96750 [-0.3267] = 9.6733`\n* 对9的补数:类似,符号位是0和8,数字位用9减。末尾不加一\n`[8954] = 08954 [-3250] = 95639 [-25.639] = 974.360` \n* 运算:对十的补码运算溢出要丢掉,对九的补码运算溢出要加到最低位\n\n### 码制和字符代码\n* 恒权代码:8421bcd、5421bcd、2421bcd、5211bcd\n* 循环码:只有一位和周边俩不同的码\n* 余三码:在8421的基础上加三个开始往后数\n* 余三循环码:在循环码的基础上加三开始往后数\n* 奇偶校验码:1的个数为奇偶数,在汇编中PF中当1的个数为偶数的时候标志为1\n* ASCII码:**小写字母在大写字母后面**,**大于61H的是小写**,将’a’的ASCII码**减20H就可以变成大写**字母’A’,将’A’的ASCII码**加20H就可以变成小写**字母’a’,ASCII码的**二进制形式第六位为1时是小写字母**,0时大写字母\n\n## 逻辑函数\n* 各个门的符号,与门(中间一个&),或门(中间一个>=1),非门(中间一个1后面加圈圈),异或(环和,中间=1),同或(环积,异或后面加圈圈)\n* 最大项(各个项加起来)、最小项(各个项乘起来)\n* 代数规律,两积可交换,乘零得零,分配律\n* 卡诺图,2<sup>n</sup>种的可以画圈圈,出来的圈圈是最小项的形式。\n* 三态门:高电平、低电平、高阻态\n\n## 组合逻辑电路\n* 做题方法:写出真值表需求逻辑表达式,用卡诺图化简,化简完成之后电路表达。\n* 竞争与冒险判别方法:各种情况的代入,只留一种变量不变,若出现如f = a + 非a的情况,存在竞争,竞争的结果是冒险。卡诺图法,有相切的部分有竞争\n* 消除竞争的方法:添加冗余项,把相切的地方添加至电路。滤波法选通法(这俩没用)\n\n## 优先编码器 74148\n允许同时输入两个以上编码信号,在同时存在两个或两个以上输入信号时,优先编码器只按优先级高的输入信号编码,优先级低的则不起作用。\n> 74148是一个8线-3线优先编码器,8线指的输入、3线是输出。特点是端口都是非。\n\n* 非I<sub>0</sub>~非I<sub>7</sub>是输入信号。 \n* 非I<sub>e</sub>是输入端,若为1则禁止编码。输出均为1,若为0则正常工作 \n* 非O<sub>e</sub>使能输出端,低电频工作表示“电路工作,但无编码输入” \n* 非G<sub>e</sub>为片优先编码输出端,低电频工作表示“电路工作,且有编码输入” \n\n\nIOG均为扩展时所用。 \n\n* 由于输出带非门,所以输出的是二进制反码\n* 由于输入带非门,所以输入0为有效\n\n扩展时例图为\n![](a.png)\n\n\n### 译码器 74138\n和74148差不离,输出是反码,输入是原码,3-8输出译码器。 S1是原码,S23是反码\n* S1要输入高电频,S23口要输入低电频才可以正常工作,否则都为1。正常工作示意图:\n![](b.png)\n可以把它当成最小项,做一些需要最小项的题 \n* 两个的扩展,可以把低位的s2或3接到高位的s1上,这样就可以控制一个工作一个不工作,其他的都接地,如图\n![](c.png)\n\n### 数据选择器\n> 只有非S是反码,是控制端,0正常工作,两个选择端,四个数据输入端。\n\n直接看题\n![](d.png)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","source":"_posts/数字电路:基础知识.md","raw":"---\ntitle: 数字电路:基础知识\ndate: 2018-01-08 18:08:34\ntags: [数字电路,笔记]\ncategories: 数字电路\n---\n\n\n# 数字电路:基础知识\n> 你可以理解为第五章之前的内容\n\n## 各个码\n### 反码、补码\n* 反码:大于零的不变,小于零的除符号位全取反\n* 补码:大于零的和原码一样,小于零的在最低位加1\n* 运算:补码和补码都可以进行直接运算,两个直接相加,最高位溢出的话直接丢掉。反码运算的话需要把溢出位加到最后一位上。\n\n### 十进制的补数\n* 对十的补数:符号位是0(+)和9(-),两种方法,一是加后符号位后每个数值对十取反,就是用9减,然后最低位加一;二是几位就用10的几次方减原来那个数。 \n`[5493] = 05493 [-3250] = 96750 [-0.3267] = 9.6733`\n* 对9的补数:类似,符号位是0和8,数字位用9减。末尾不加一\n`[8954] = 08954 [-3250] = 95639 [-25.639] = 974.360` \n* 运算:对十的补码运算溢出要丢掉,对九的补码运算溢出要加到最低位\n\n### 码制和字符代码\n* 恒权代码:8421bcd、5421bcd、2421bcd、5211bcd\n* 循环码:只有一位和周边俩不同的码\n* 余三码:在8421的基础上加三个开始往后数\n* 余三循环码:在循环码的基础上加三开始往后数\n* 奇偶校验码:1的个数为奇偶数,在汇编中PF中当1的个数为偶数的时候标志为1\n* ASCII码:**小写字母在大写字母后面**,**大于61H的是小写**,将’a’的ASCII码**减20H就可以变成大写**字母’A’,将’A’的ASCII码**加20H就可以变成小写**字母’a’,ASCII码的**二进制形式第六位为1时是小写字母**,0时大写字母\n\n## 逻辑函数\n* 各个门的符号,与门(中间一个&),或门(中间一个>=1),非门(中间一个1后面加圈圈),异或(环和,中间=1),同或(环积,异或后面加圈圈)\n* 最大项(各个项加起来)、最小项(各个项乘起来)\n* 代数规律,两积可交换,乘零得零,分配律\n* 卡诺图,2<sup>n</sup>种的可以画圈圈,出来的圈圈是最小项的形式。\n* 三态门:高电平、低电平、高阻态\n\n## 组合逻辑电路\n* 做题方法:写出真值表需求逻辑表达式,用卡诺图化简,化简完成之后电路表达。\n* 竞争与冒险判别方法:各种情况的代入,只留一种变量不变,若出现如f = a + 非a的情况,存在竞争,竞争的结果是冒险。卡诺图法,有相切的部分有竞争\n* 消除竞争的方法:添加冗余项,把相切的地方添加至电路。滤波法选通法(这俩没用)\n\n## 优先编码器 74148\n允许同时输入两个以上编码信号,在同时存在两个或两个以上输入信号时,优先编码器只按优先级高的输入信号编码,优先级低的则不起作用。\n> 74148是一个8线-3线优先编码器,8线指的输入、3线是输出。特点是端口都是非。\n\n* 非I<sub>0</sub>~非I<sub>7</sub>是输入信号。 \n* 非I<sub>e</sub>是输入端,若为1则禁止编码。输出均为1,若为0则正常工作 \n* 非O<sub>e</sub>使能输出端,低电频工作表示“电路工作,但无编码输入” \n* 非G<sub>e</sub>为片优先编码输出端,低电频工作表示“电路工作,且有编码输入” \n\n\nIOG均为扩展时所用。 \n\n* 由于输出带非门,所以输出的是二进制反码\n* 由于输入带非门,所以输入0为有效\n\n扩展时例图为\n![](a.png)\n\n\n### 译码器 74138\n和74148差不离,输出是反码,输入是原码,3-8输出译码器。 S1是原码,S23是反码\n* S1要输入高电频,S23口要输入低电频才可以正常工作,否则都为1。正常工作示意图:\n![](b.png)\n可以把它当成最小项,做一些需要最小项的题 \n* 两个的扩展,可以把低位的s2或3接到高位的s1上,这样就可以控制一个工作一个不工作,其他的都接地,如图\n![](c.png)\n\n### 数据选择器\n> 只有非S是反码,是控制端,0正常工作,两个选择端,四个数据输入端。\n\n直接看题\n![](d.png)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","slug":"数字电路:基础知识","published":1,"updated":"2018-01-09T12:04:02.295Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkmo001ntzy4s4rfrcp2","content":"<h1 id=\"数字电路:基础知识\"><a href=\"#数字电路:基础知识\" class=\"headerlink\" title=\"数字电路:基础知识\"></a>数字电路:基础知识</h1><blockquote>\n<p>你可以理解为第五章之前的内容</p>\n</blockquote>\n<h2 id=\"各个码\"><a href=\"#各个码\" class=\"headerlink\" title=\"各个码\"></a>各个码</h2><h3 id=\"反码、补码\"><a href=\"#反码、补码\" class=\"headerlink\" title=\"反码、补码\"></a>反码、补码</h3><ul>\n<li>反码:大于零的不变,小于零的除符号位全取反</li>\n<li>补码:大于零的和原码一样,小于零的在最低位加1</li>\n<li>运算:补码和补码都可以进行直接运算,两个直接相加,最高位溢出的话直接丢掉。反码运算的话需要把溢出位加到最后一位上。</li>\n</ul>\n<h3 id=\"十进制的补数\"><a href=\"#十进制的补数\" class=\"headerlink\" title=\"十进制的补数\"></a>十进制的补数</h3><ul>\n<li>对十的补数:符号位是0(+)和9(-),两种方法,一是加后符号位后每个数值对十取反,就是用9减,然后最低位加一;二是几位就用10的几次方减原来那个数。<br><code>[5493] = 05493 [-3250] = 96750 [-0.3267] = 9.6733</code></li>\n<li>对9的补数:类似,符号位是0和8,数字位用9减。末尾不加一<br><code>[8954] = 08954 [-3250] = 95639 [-25.639] = 974.360</code> </li>\n<li>运算:对十的补码运算溢出要丢掉,对九的补码运算溢出要加到最低位</li>\n</ul>\n<h3 id=\"码制和字符代码\"><a href=\"#码制和字符代码\" class=\"headerlink\" title=\"码制和字符代码\"></a>码制和字符代码</h3><ul>\n<li>恒权代码:8421bcd、5421bcd、2421bcd、5211bcd</li>\n<li>循环码:只有一位和周边俩不同的码</li>\n<li>余三码:在8421的基础上加三个开始往后数</li>\n<li>余三循环码:在循环码的基础上加三开始往后数</li>\n<li>奇偶校验码:1的个数为奇偶数,在汇编中PF中当1的个数为偶数的时候标志为1</li>\n<li>ASCII码:<strong>小写字母在大写字母后面</strong>,<strong>大于61H的是小写</strong>,将’a’的ASCII码<strong>减20H就可以变成大写</strong>字母’A’,将’A’的ASCII码<strong>加20H就可以变成小写</strong>字母’a’,ASCII码的<strong>二进制形式第六位为1时是小写字母</strong>,0时大写字母</li>\n</ul>\n<h2 id=\"逻辑函数\"><a href=\"#逻辑函数\" class=\"headerlink\" title=\"逻辑函数\"></a>逻辑函数</h2><ul>\n<li>各个门的符号,与门(中间一个&),或门(中间一个>=1),非门(中间一个1后面加圈圈),异或(环和,中间=1),同或(环积,异或后面加圈圈)</li>\n<li>最大项(各个项加起来)、最小项(各个项乘起来)</li>\n<li>代数规律,两积可交换,乘零得零,分配律</li>\n<li>卡诺图,2<sup>n</sup>种的可以画圈圈,出来的圈圈是最小项的形式。</li>\n<li>三态门:高电平、低电平、高阻态</li>\n</ul>\n<h2 id=\"组合逻辑电路\"><a href=\"#组合逻辑电路\" class=\"headerlink\" title=\"组合逻辑电路\"></a>组合逻辑电路</h2><ul>\n<li>做题方法:写出真值表需求逻辑表达式,用卡诺图化简,化简完成之后电路表达。</li>\n<li>竞争与冒险判别方法:各种情况的代入,只留一种变量不变,若出现如f = a + 非a的情况,存在竞争,竞争的结果是冒险。卡诺图法,有相切的部分有竞争</li>\n<li>消除竞争的方法:添加冗余项,把相切的地方添加至电路。滤波法选通法(这俩没用)</li>\n</ul>\n<h2 id=\"优先编码器-74148\"><a href=\"#优先编码器-74148\" class=\"headerlink\" title=\"优先编码器 74148\"></a>优先编码器 74148</h2><p>允许同时输入两个以上编码信号,在同时存在两个或两个以上输入信号时,优先编码器只按优先级高的输入信号编码,优先级低的则不起作用。</p>\n<blockquote>\n<p>74148是一个8线-3线优先编码器,8线指的输入、3线是输出。特点是端口都是非。</p>\n</blockquote>\n<ul>\n<li>非I<sub>0</sub>~非I<sub>7</sub>是输入信号。 </li>\n<li>非I<sub>e</sub>是输入端,若为1则禁止编码。输出均为1,若为0则正常工作 </li>\n<li>非O<sub>e</sub>使能输出端,低电频工作表示“电路工作,但无编码输入” </li>\n<li>非G<sub>e</sub>为片优先编码输出端,低电频工作表示“电路工作,且有编码输入” </li>\n</ul>\n<p>IOG均为扩展时所用。 </p>\n<ul>\n<li>由于输出带非门,所以输出的是二进制反码</li>\n<li>由于输入带非门,所以输入0为有效</li>\n</ul>\n<p>扩展时例图为<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"a.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n<h3 id=\"译码器-74138\"><a href=\"#译码器-74138\" class=\"headerlink\" title=\"译码器 74138\"></a>译码器 74138</h3><p>和74148差不离,输出是反码,输入是原码,3-8输出译码器。 S1是原码,S23是反码</p>\n<ul>\n<li>S1要输入高电频,S23口要输入低电频才可以正常工作,否则都为1。正常工作示意图:<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"b.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n可以把它当成最小项,做一些需要最小项的题 </li>\n<li>两个的扩展,可以把低位的s2或3接到高位的s1上,这样就可以控制一个工作一个不工作,其他的都接地,如图<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"c.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n</li>\n</ul>\n<h3 id=\"数据选择器\"><a href=\"#数据选择器\" class=\"headerlink\" title=\"数据选择器\"></a>数据选择器</h3><blockquote>\n<p>只有非S是反码,是控制端,0正常工作,两个选择端,四个数据输入端。</p>\n</blockquote>\n<p>直接看题<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"d.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"数字电路:基础知识\"><a href=\"#数字电路:基础知识\" class=\"headerlink\" title=\"数字电路:基础知识\"></a>数字电路:基础知识</h1><blockquote>\n<p>你可以理解为第五章之前的内容</p>\n</blockquote>\n<h2 id=\"各个码\"><a href=\"#各个码\" class=\"headerlink\" title=\"各个码\"></a>各个码</h2><h3 id=\"反码、补码\"><a href=\"#反码、补码\" class=\"headerlink\" title=\"反码、补码\"></a>反码、补码</h3><ul>\n<li>反码:大于零的不变,小于零的除符号位全取反</li>\n<li>补码:大于零的和原码一样,小于零的在最低位加1</li>\n<li>运算:补码和补码都可以进行直接运算,两个直接相加,最高位溢出的话直接丢掉。反码运算的话需要把溢出位加到最后一位上。</li>\n</ul>\n<h3 id=\"十进制的补数\"><a href=\"#十进制的补数\" class=\"headerlink\" title=\"十进制的补数\"></a>十进制的补数</h3><ul>\n<li>对十的补数:符号位是0(+)和9(-),两种方法,一是加后符号位后每个数值对十取反,就是用9减,然后最低位加一;二是几位就用10的几次方减原来那个数。<br><code>[5493] = 05493 [-3250] = 96750 [-0.3267] = 9.6733</code></li>\n<li>对9的补数:类似,符号位是0和8,数字位用9减。末尾不加一<br><code>[8954] = 08954 [-3250] = 95639 [-25.639] = 974.360</code> </li>\n<li>运算:对十的补码运算溢出要丢掉,对九的补码运算溢出要加到最低位</li>\n</ul>\n<h3 id=\"码制和字符代码\"><a href=\"#码制和字符代码\" class=\"headerlink\" title=\"码制和字符代码\"></a>码制和字符代码</h3><ul>\n<li>恒权代码:8421bcd、5421bcd、2421bcd、5211bcd</li>\n<li>循环码:只有一位和周边俩不同的码</li>\n<li>余三码:在8421的基础上加三个开始往后数</li>\n<li>余三循环码:在循环码的基础上加三开始往后数</li>\n<li>奇偶校验码:1的个数为奇偶数,在汇编中PF中当1的个数为偶数的时候标志为1</li>\n<li>ASCII码:<strong>小写字母在大写字母后面</strong>,<strong>大于61H的是小写</strong>,将’a’的ASCII码<strong>减20H就可以变成大写</strong>字母’A’,将’A’的ASCII码<strong>加20H就可以变成小写</strong>字母’a’,ASCII码的<strong>二进制形式第六位为1时是小写字母</strong>,0时大写字母</li>\n</ul>\n<h2 id=\"逻辑函数\"><a href=\"#逻辑函数\" class=\"headerlink\" title=\"逻辑函数\"></a>逻辑函数</h2><ul>\n<li>各个门的符号,与门(中间一个&),或门(中间一个>=1),非门(中间一个1后面加圈圈),异或(环和,中间=1),同或(环积,异或后面加圈圈)</li>\n<li>最大项(各个项加起来)、最小项(各个项乘起来)</li>\n<li>代数规律,两积可交换,乘零得零,分配律</li>\n<li>卡诺图,2<sup>n</sup>种的可以画圈圈,出来的圈圈是最小项的形式。</li>\n<li>三态门:高电平、低电平、高阻态</li>\n</ul>\n<h2 id=\"组合逻辑电路\"><a href=\"#组合逻辑电路\" class=\"headerlink\" title=\"组合逻辑电路\"></a>组合逻辑电路</h2><ul>\n<li>做题方法:写出真值表需求逻辑表达式,用卡诺图化简,化简完成之后电路表达。</li>\n<li>竞争与冒险判别方法:各种情况的代入,只留一种变量不变,若出现如f = a + 非a的情况,存在竞争,竞争的结果是冒险。卡诺图法,有相切的部分有竞争</li>\n<li>消除竞争的方法:添加冗余项,把相切的地方添加至电路。滤波法选通法(这俩没用)</li>\n</ul>\n<h2 id=\"优先编码器-74148\"><a href=\"#优先编码器-74148\" class=\"headerlink\" title=\"优先编码器 74148\"></a>优先编码器 74148</h2><p>允许同时输入两个以上编码信号,在同时存在两个或两个以上输入信号时,优先编码器只按优先级高的输入信号编码,优先级低的则不起作用。</p>\n<blockquote>\n<p>74148是一个8线-3线优先编码器,8线指的输入、3线是输出。特点是端口都是非。</p>\n</blockquote>\n<ul>\n<li>非I<sub>0</sub>~非I<sub>7</sub>是输入信号。 </li>\n<li>非I<sub>e</sub>是输入端,若为1则禁止编码。输出均为1,若为0则正常工作 </li>\n<li>非O<sub>e</sub>使能输出端,低电频工作表示“电路工作,但无编码输入” </li>\n<li>非G<sub>e</sub>为片优先编码输出端,低电频工作表示“电路工作,且有编码输入” </li>\n</ul>\n<p>IOG均为扩展时所用。 </p>\n<ul>\n<li>由于输出带非门,所以输出的是二进制反码</li>\n<li>由于输入带非门,所以输入0为有效</li>\n</ul>\n<p>扩展时例图为<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"a.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n<h3 id=\"译码器-74138\"><a href=\"#译码器-74138\" class=\"headerlink\" title=\"译码器 74138\"></a>译码器 74138</h3><p>和74148差不离,输出是反码,输入是原码,3-8输出译码器。 S1是原码,S23是反码</p>\n<ul>\n<li>S1要输入高电频,S23口要输入低电频才可以正常工作,否则都为1。正常工作示意图:<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"b.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n可以把它当成最小项,做一些需要最小项的题 </li>\n<li>两个的扩展,可以把低位的s2或3接到高位的s1上,这样就可以控制一个工作一个不工作,其他的都接地,如图<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"c.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n</li>\n</ul>\n<h3 id=\"数据选择器\"><a href=\"#数据选择器\" class=\"headerlink\" title=\"数据选择器\"></a>数据选择器</h3><blockquote>\n<p>只有非S是反码,是控制端,0正常工作,两个选择端,四个数据输入端。</p>\n</blockquote>\n<p>直接看题<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"d.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n"},{"title":"无显示器条件下查询树莓派IP的方法","date":"2018-02-14T04:18:09.000Z","_content":"\n# 无显示器条件下查询树莓派IP的方法\n> 方法都根据树莓派的网卡物理地址为`b8:27:eb:`开头\t。因此有以下自动化方法\n\n## Mac下打开网络实用工具\n\n直接查询Netstat下的路由表找到树莓派的物理地址对应的就是树莓派的IP地址。\n\n## Shell脚本\n> 整个代码逻辑为依次pingIP地址,之后通过arp映射找到对应的物理地址,取到对应的IP。\n\n代码如下\n\n\tclear\n\t\n\t\n\techo \"程序运行中...\"\n\tipLine=\"`ifconfig | grep \"inet 192.168\" `\"\n\tpreIp=${ipLine:5:11}\n\techo \"程序默认将在$preIp 2 - $preIp 255范围内进行扫描\"\n\techo \"但这将花费较多时间,请问是否进行手动设置?(y/n)\"\n\tread choice\n\tif test $choice = \"y\"\n\t\tthen\n\t\t\techo -n \"请输入起始位置(2-255):\"\n\t\t\tread i\n\t\t\techo -n \"请输入结束位置($i-255):\"\n\t\t\tread j\n\t\t\techo \"下面将对 $i 到 $j 范围进行扫描\"\n\t\telse\n\t\t\ti=2\n\t\t\tj=255\n\t\t\techo \"下面将直接对2-255整个范围进行扫描\"\n\tfi\n\twhile test $i -ne $j\n\tdo\n\t\techo \"正在检测ip的连接情况,请耐心等待\"\n\t\tip=$preIp$i\n\t\techo \"正在ping端口$ip ...\"\n\t\t\"`ping -t 1 -q $ip `\"\n\t\tlet i=i+1\n\t\tclear\n\tdone\n\tclear\n\techo \"所有ip检测完毕,正在计算结果...\"\n\tresult=\"`arp -a | grep \"b8:27:eb:\" ` \"\n\tresultIp=${result:3:14}\n\tresultMac=${result:19:17}\n\tclear\n\techo \"已经得到结果:\"\n\techo \"您的树莓派Mac地址为:$resultMac\"\n\techo \" 当前连接的IP为:$resultIp\"\n\techo\n\techo \"程序结束\"","source":"_posts/无显示器条件下查询树莓派IP的方法.md","raw":"---\ntitle: 无显示器条件下查询树莓派IP的方法\ndate: 2018-02-14 12:18:09\ntags: [树莓派,Unix]\ncategories: 树莓派\n---\n\n# 无显示器条件下查询树莓派IP的方法\n> 方法都根据树莓派的网卡物理地址为`b8:27:eb:`开头\t。因此有以下自动化方法\n\n## Mac下打开网络实用工具\n\n直接查询Netstat下的路由表找到树莓派的物理地址对应的就是树莓派的IP地址。\n\n## Shell脚本\n> 整个代码逻辑为依次pingIP地址,之后通过arp映射找到对应的物理地址,取到对应的IP。\n\n代码如下\n\n\tclear\n\t\n\t\n\techo \"程序运行中...\"\n\tipLine=\"`ifconfig | grep \"inet 192.168\" `\"\n\tpreIp=${ipLine:5:11}\n\techo \"程序默认将在$preIp 2 - $preIp 255范围内进行扫描\"\n\techo \"但这将花费较多时间,请问是否进行手动设置?(y/n)\"\n\tread choice\n\tif test $choice = \"y\"\n\t\tthen\n\t\t\techo -n \"请输入起始位置(2-255):\"\n\t\t\tread i\n\t\t\techo -n \"请输入结束位置($i-255):\"\n\t\t\tread j\n\t\t\techo \"下面将对 $i 到 $j 范围进行扫描\"\n\t\telse\n\t\t\ti=2\n\t\t\tj=255\n\t\t\techo \"下面将直接对2-255整个范围进行扫描\"\n\tfi\n\twhile test $i -ne $j\n\tdo\n\t\techo \"正在检测ip的连接情况,请耐心等待\"\n\t\tip=$preIp$i\n\t\techo \"正在ping端口$ip ...\"\n\t\t\"`ping -t 1 -q $ip `\"\n\t\tlet i=i+1\n\t\tclear\n\tdone\n\tclear\n\techo \"所有ip检测完毕,正在计算结果...\"\n\tresult=\"`arp -a | grep \"b8:27:eb:\" ` \"\n\tresultIp=${result:3:14}\n\tresultMac=${result:19:17}\n\tclear\n\techo \"已经得到结果:\"\n\techo \"您的树莓派Mac地址为:$resultMac\"\n\techo \" 当前连接的IP为:$resultIp\"\n\techo\n\techo \"程序结束\"","slug":"无显示器条件下查询树莓派IP的方法","published":1,"updated":"2018-02-14T04:19:48.296Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkmp001rtzy4gi24kh8f","content":"<h1 id=\"无显示器条件下查询树莓派IP的方法\"><a href=\"#无显示器条件下查询树莓派IP的方法\" class=\"headerlink\" title=\"无显示器条件下查询树莓派IP的方法\"></a>无显示器条件下查询树莓派IP的方法</h1><blockquote>\n<p>方法都根据树莓派的网卡物理地址为<code>b8:27:eb:</code>开头 。因此有以下自动化方法</p>\n</blockquote>\n<h2 id=\"Mac下打开网络实用工具\"><a href=\"#Mac下打开网络实用工具\" class=\"headerlink\" title=\"Mac下打开网络实用工具\"></a>Mac下打开网络实用工具</h2><p>直接查询Netstat下的路由表找到树莓派的物理地址对应的就是树莓派的IP地址。</p>\n<h2 id=\"Shell脚本\"><a href=\"#Shell脚本\" class=\"headerlink\" title=\"Shell脚本\"></a>Shell脚本</h2><blockquote>\n<p>整个代码逻辑为依次pingIP地址,之后通过arp映射找到对应的物理地址,取到对应的IP。</p>\n</blockquote>\n<p>代码如下</p>\n<pre><code>clear\n\n\necho "程序运行中..."\nipLine="`ifconfig | grep "inet 192.168" `"\npreIp=${ipLine:5:11}\necho "程序默认将在$preIp 2 - $preIp 255范围内进行扫描"\necho "但这将花费较多时间,请问是否进行手动设置?(y/n)"\nread choice\nif test $choice = "y"\n then\n echo -n "请输入起始位置(2-255):"\n read i\n echo -n "请输入结束位置($i-255):"\n read j\n echo "下面将对 $i 到 $j 范围进行扫描"\n else\n i=2\n j=255\n echo "下面将直接对2-255整个范围进行扫描"\nfi\nwhile test $i -ne $j\ndo\n echo "正在检测ip的连接情况,请耐心等待"\n ip=$preIp$i\n echo "正在ping端口$ip ..."\n "`ping -t 1 -q $ip `"\n let i=i+1\n clear\ndone\nclear\necho "所有ip检测完毕,正在计算结果..."\nresult="`arp -a | grep "b8:27:eb:" ` "\nresultIp=${result:3:14}\nresultMac=${result:19:17}\nclear\necho "已经得到结果:"\necho "您的树莓派Mac地址为:$resultMac"\necho " 当前连接的IP为:$resultIp"\necho\necho "程序结束"\n</code></pre>","site":{"data":{}},"excerpt":"","more":"<h1 id=\"无显示器条件下查询树莓派IP的方法\"><a href=\"#无显示器条件下查询树莓派IP的方法\" class=\"headerlink\" title=\"无显示器条件下查询树莓派IP的方法\"></a>无显示器条件下查询树莓派IP的方法</h1><blockquote>\n<p>方法都根据树莓派的网卡物理地址为<code>b8:27:eb:</code>开头 。因此有以下自动化方法</p>\n</blockquote>\n<h2 id=\"Mac下打开网络实用工具\"><a href=\"#Mac下打开网络实用工具\" class=\"headerlink\" title=\"Mac下打开网络实用工具\"></a>Mac下打开网络实用工具</h2><p>直接查询Netstat下的路由表找到树莓派的物理地址对应的就是树莓派的IP地址。</p>\n<h2 id=\"Shell脚本\"><a href=\"#Shell脚本\" class=\"headerlink\" title=\"Shell脚本\"></a>Shell脚本</h2><blockquote>\n<p>整个代码逻辑为依次pingIP地址,之后通过arp映射找到对应的物理地址,取到对应的IP。</p>\n</blockquote>\n<p>代码如下</p>\n<pre><code>clear\n\n\necho "程序运行中..."\nipLine="`ifconfig | grep "inet 192.168" `"\npreIp=${ipLine:5:11}\necho "程序默认将在$preIp 2 - $preIp 255范围内进行扫描"\necho "但这将花费较多时间,请问是否进行手动设置?(y/n)"\nread choice\nif test $choice = "y"\n then\n echo -n "请输入起始位置(2-255):"\n read i\n echo -n "请输入结束位置($i-255):"\n read j\n echo "下面将对 $i 到 $j 范围进行扫描"\n else\n i=2\n j=255\n echo "下面将直接对2-255整个范围进行扫描"\nfi\nwhile test $i -ne $j\ndo\n echo "正在检测ip的连接情况,请耐心等待"\n ip=$preIp$i\n echo "正在ping端口$ip ..."\n "`ping -t 1 -q $ip `"\n let i=i+1\n clear\ndone\nclear\necho "所有ip检测完毕,正在计算结果..."\nresult="`arp -a | grep "b8:27:eb:" ` "\nresultIp=${result:3:14}\nresultMac=${result:19:17}\nclear\necho "已经得到结果:"\necho "您的树莓派Mac地址为:$resultMac"\necho " 当前连接的IP为:$resultIp"\necho\necho "程序结束"\n</code></pre>"},{"title":"数电笔记:第一章数字逻辑基础","date":"2017-10-29T15:05:21.000Z","_content":"# 数电笔记2017-10-29\n## 第一章\t数字逻辑基础\n> 模拟信号\n> 电信号\n\n### 二进制的转换\n\t按权展开\n\n#### 整数转换\n***除2取余***\n#### 纯小数转换\n***乘2取整***\n\n### 十进制转R进制数的转换\n\n#### 整数转换\n***除R取余***\n#### 纯小数转换\n***乘R取整***\n\n### 二、八、十六进制数之间的转换\n***三位二进制为一个八进制*** \n***四位二进制为一个十六进制*** \n>\t例如:二进制转八进制从小数点向左或向右分别按三位一组转换为八进制,最后不满三位的用零补齐 \n\n### 带符号数的代码表示\n一个带符号的数由两部分组成:一部分表示数的符号;另一部分表示数的数值。 \n在计算机中习惯用0表示正数、1用来表示负数。 \n> \t为了在计算机中防止电路过于复杂,使乘法变成加法运算,人们提出了3种机器数的表示形式,称为:原码、补码、反码。\n\n#### 原码\n>\t原码又称为“符号--数值表示”\n特点: \n1. 当N为正数时,N的原码与N的区别仅为最高位增加一位用0表示的符号位,对本身数值并无影响。\n2. 当N为负数时,N的原码与N的区别是在最高位增加一位用1表示的符号位。\n3. 在原码表示中,有两种零,即为正负零。0.000和1.000\n\n#### 反码\n>\t反码又被称为“对1的补数”。\n对于负数,反码的数值是将原码数值按位求反,即原码的某位为1,反码相应为0. \n对于正数反码与原码相同\n\n#### 补码\n\n\n### 计算机中的运算\n\n## 码制和字符的代码表示\n1. 8421码\n2. 余3码\n3. 2421码\n4. 余3循环码\n\n> 可靠性编码 \n> 1. 格雷码(循环码) \n> 2. 奇偶校验码\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","source":"_posts/数电笔记:第一章数字逻辑基础.md","raw":"---\ntitle: 数电笔记:第一章数字逻辑基础\ndate: 2017-10-29 23:05:21\ntags:\n\t- 笔记\n\t- 数字电路\ncategories: 数字电路\n---\n# 数电笔记2017-10-29\n## 第一章\t数字逻辑基础\n> 模拟信号\n> 电信号\n\n### 二进制的转换\n\t按权展开\n\n#### 整数转换\n***除2取余***\n#### 纯小数转换\n***乘2取整***\n\n### 十进制转R进制数的转换\n\n#### 整数转换\n***除R取余***\n#### 纯小数转换\n***乘R取整***\n\n### 二、八、十六进制数之间的转换\n***三位二进制为一个八进制*** \n***四位二进制为一个十六进制*** \n>\t例如:二进制转八进制从小数点向左或向右分别按三位一组转换为八进制,最后不满三位的用零补齐 \n\n### 带符号数的代码表示\n一个带符号的数由两部分组成:一部分表示数的符号;另一部分表示数的数值。 \n在计算机中习惯用0表示正数、1用来表示负数。 \n> \t为了在计算机中防止电路过于复杂,使乘法变成加法运算,人们提出了3种机器数的表示形式,称为:原码、补码、反码。\n\n#### 原码\n>\t原码又称为“符号--数值表示”\n特点: \n1. 当N为正数时,N的原码与N的区别仅为最高位增加一位用0表示的符号位,对本身数值并无影响。\n2. 当N为负数时,N的原码与N的区别是在最高位增加一位用1表示的符号位。\n3. 在原码表示中,有两种零,即为正负零。0.000和1.000\n\n#### 反码\n>\t反码又被称为“对1的补数”。\n对于负数,反码的数值是将原码数值按位求反,即原码的某位为1,反码相应为0. \n对于正数反码与原码相同\n\n#### 补码\n\n\n### 计算机中的运算\n\n## 码制和字符的代码表示\n1. 8421码\n2. 余3码\n3. 2421码\n4. 余3循环码\n\n> 可靠性编码 \n> 1. 格雷码(循环码) \n> 2. 奇偶校验码\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","slug":"数电笔记:第一章数字逻辑基础","published":1,"updated":"2017-12-28T12:12:28.786Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkms001utzy478xhuca7","content":"<h1 id=\"数电笔记2017-10-29\"><a href=\"#数电笔记2017-10-29\" class=\"headerlink\" title=\"数电笔记2017-10-29\"></a>数电笔记2017-10-29</h1><h2 id=\"第一章-数字逻辑基础\"><a href=\"#第一章-数字逻辑基础\" class=\"headerlink\" title=\"第一章 数字逻辑基础\"></a>第一章 数字逻辑基础</h2><blockquote>\n<p>模拟信号<br>电信号</p>\n</blockquote>\n<h3 id=\"二进制的转换\"><a href=\"#二进制的转换\" class=\"headerlink\" title=\"二进制的转换\"></a>二进制的转换</h3><pre><code>按权展开\n</code></pre><h4 id=\"整数转换\"><a href=\"#整数转换\" class=\"headerlink\" title=\"整数转换\"></a>整数转换</h4><p><strong><em>除2取余</em></strong></p>\n<h4 id=\"纯小数转换\"><a href=\"#纯小数转换\" class=\"headerlink\" title=\"纯小数转换\"></a>纯小数转换</h4><p><strong><em>乘2取整</em></strong></p>\n<h3 id=\"十进制转R进制数的转换\"><a href=\"#十进制转R进制数的转换\" class=\"headerlink\" title=\"十进制转R进制数的转换\"></a>十进制转R进制数的转换</h3><h4 id=\"整数转换-1\"><a href=\"#整数转换-1\" class=\"headerlink\" title=\"整数转换\"></a>整数转换</h4><p><strong><em>除R取余</em></strong></p>\n<h4 id=\"纯小数转换-1\"><a href=\"#纯小数转换-1\" class=\"headerlink\" title=\"纯小数转换\"></a>纯小数转换</h4><p><strong><em>乘R取整</em></strong></p>\n<h3 id=\"二、八、十六进制数之间的转换\"><a href=\"#二、八、十六进制数之间的转换\" class=\"headerlink\" title=\"二、八、十六进制数之间的转换\"></a>二、八、十六进制数之间的转换</h3><p><strong><em>三位二进制为一个八进制</em></strong><br><strong><em>四位二进制为一个十六进制</em></strong> </p>\n<blockquote>\n<p> 例如:二进制转八进制从小数点向左或向右分别按三位一组转换为八进制,最后不满三位的用零补齐 </p>\n</blockquote>\n<h3 id=\"带符号数的代码表示\"><a href=\"#带符号数的代码表示\" class=\"headerlink\" title=\"带符号数的代码表示\"></a>带符号数的代码表示</h3><p>一个带符号的数由两部分组成:一部分表示数的符号;另一部分表示数的数值。<br>在计算机中习惯用0表示正数、1用来表示负数。 </p>\n<blockquote>\n<pre><code>为了在计算机中防止电路过于复杂,使乘法变成加法运算,人们提出了3种机器数的表示形式,称为:原码、补码、反码。\n</code></pre></blockquote>\n<h4 id=\"原码\"><a href=\"#原码\" class=\"headerlink\" title=\"原码\"></a>原码</h4><blockquote>\n<p> 原码又称为“符号–数值表示”<br>特点: </p>\n<ol>\n<li>当N为正数时,N的原码与N的区别仅为最高位增加一位用0表示的符号位,对本身数值并无影响。</li>\n<li>当N为负数时,N的原码与N的区别是在最高位增加一位用1表示的符号位。</li>\n<li>在原码表示中,有两种零,即为正负零。0.000和1.000</li>\n</ol>\n</blockquote>\n<h4 id=\"反码\"><a href=\"#反码\" class=\"headerlink\" title=\"反码\"></a>反码</h4><blockquote>\n<p> 反码又被称为“对1的补数”。<br>对于负数,反码的数值是将原码数值按位求反,即原码的某位为1,反码相应为0.<br>对于正数反码与原码相同</p>\n</blockquote>\n<h4 id=\"补码\"><a href=\"#补码\" class=\"headerlink\" title=\"补码\"></a>补码</h4><h3 id=\"计算机中的运算\"><a href=\"#计算机中的运算\" class=\"headerlink\" title=\"计算机中的运算\"></a>计算机中的运算</h3><h2 id=\"码制和字符的代码表示\"><a href=\"#码制和字符的代码表示\" class=\"headerlink\" title=\"码制和字符的代码表示\"></a>码制和字符的代码表示</h2><ol>\n<li>8421码</li>\n<li>余3码</li>\n<li>2421码</li>\n<li>余3循环码</li>\n</ol>\n<blockquote>\n<p>可靠性编码 </p>\n<ol>\n<li>格雷码(循环码) </li>\n<li>奇偶校验码</li>\n</ol>\n</blockquote>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"数电笔记2017-10-29\"><a href=\"#数电笔记2017-10-29\" class=\"headerlink\" title=\"数电笔记2017-10-29\"></a>数电笔记2017-10-29</h1><h2 id=\"第一章-数字逻辑基础\"><a href=\"#第一章-数字逻辑基础\" class=\"headerlink\" title=\"第一章 数字逻辑基础\"></a>第一章 数字逻辑基础</h2><blockquote>\n<p>模拟信号<br>电信号</p>\n</blockquote>\n<h3 id=\"二进制的转换\"><a href=\"#二进制的转换\" class=\"headerlink\" title=\"二进制的转换\"></a>二进制的转换</h3><pre><code>按权展开\n</code></pre><h4 id=\"整数转换\"><a href=\"#整数转换\" class=\"headerlink\" title=\"整数转换\"></a>整数转换</h4><p><strong><em>除2取余</em></strong></p>\n<h4 id=\"纯小数转换\"><a href=\"#纯小数转换\" class=\"headerlink\" title=\"纯小数转换\"></a>纯小数转换</h4><p><strong><em>乘2取整</em></strong></p>\n<h3 id=\"十进制转R进制数的转换\"><a href=\"#十进制转R进制数的转换\" class=\"headerlink\" title=\"十进制转R进制数的转换\"></a>十进制转R进制数的转换</h3><h4 id=\"整数转换-1\"><a href=\"#整数转换-1\" class=\"headerlink\" title=\"整数转换\"></a>整数转换</h4><p><strong><em>除R取余</em></strong></p>\n<h4 id=\"纯小数转换-1\"><a href=\"#纯小数转换-1\" class=\"headerlink\" title=\"纯小数转换\"></a>纯小数转换</h4><p><strong><em>乘R取整</em></strong></p>\n<h3 id=\"二、八、十六进制数之间的转换\"><a href=\"#二、八、十六进制数之间的转换\" class=\"headerlink\" title=\"二、八、十六进制数之间的转换\"></a>二、八、十六进制数之间的转换</h3><p><strong><em>三位二进制为一个八进制</em></strong><br><strong><em>四位二进制为一个十六进制</em></strong> </p>\n<blockquote>\n<p> 例如:二进制转八进制从小数点向左或向右分别按三位一组转换为八进制,最后不满三位的用零补齐 </p>\n</blockquote>\n<h3 id=\"带符号数的代码表示\"><a href=\"#带符号数的代码表示\" class=\"headerlink\" title=\"带符号数的代码表示\"></a>带符号数的代码表示</h3><p>一个带符号的数由两部分组成:一部分表示数的符号;另一部分表示数的数值。<br>在计算机中习惯用0表示正数、1用来表示负数。 </p>\n<blockquote>\n<pre><code>为了在计算机中防止电路过于复杂,使乘法变成加法运算,人们提出了3种机器数的表示形式,称为:原码、补码、反码。\n</code></pre></blockquote>\n<h4 id=\"原码\"><a href=\"#原码\" class=\"headerlink\" title=\"原码\"></a>原码</h4><blockquote>\n<p> 原码又称为“符号–数值表示”<br>特点: </p>\n<ol>\n<li>当N为正数时,N的原码与N的区别仅为最高位增加一位用0表示的符号位,对本身数值并无影响。</li>\n<li>当N为负数时,N的原码与N的区别是在最高位增加一位用1表示的符号位。</li>\n<li>在原码表示中,有两种零,即为正负零。0.000和1.000</li>\n</ol>\n</blockquote>\n<h4 id=\"反码\"><a href=\"#反码\" class=\"headerlink\" title=\"反码\"></a>反码</h4><blockquote>\n<p> 反码又被称为“对1的补数”。<br>对于负数,反码的数值是将原码数值按位求反,即原码的某位为1,反码相应为0.<br>对于正数反码与原码相同</p>\n</blockquote>\n<h4 id=\"补码\"><a href=\"#补码\" class=\"headerlink\" title=\"补码\"></a>补码</h4><h3 id=\"计算机中的运算\"><a href=\"#计算机中的运算\" class=\"headerlink\" title=\"计算机中的运算\"></a>计算机中的运算</h3><h2 id=\"码制和字符的代码表示\"><a href=\"#码制和字符的代码表示\" class=\"headerlink\" title=\"码制和字符的代码表示\"></a>码制和字符的代码表示</h2><ol>\n<li>8421码</li>\n<li>余3码</li>\n<li>2421码</li>\n<li>余3循环码</li>\n</ol>\n<blockquote>\n<p>可靠性编码 </p>\n<ol>\n<li>格雷码(循环码) </li>\n<li>奇偶校验码</li>\n</ol>\n</blockquote>\n"},{"title":"毛概下重点整理","toc":false,"date":"2019-06-21T16:16:11.000Z","_content":"\n# 毛概下重点整理\n\n> 从台湾回来要补修政治课。。。。。。。大部分都是女朋友教我的,我做一下整理。\n\n## 如何理解我国社会主义矛盾发生的变化\n\n> 3次矛盾的变化\n\n* 三次矛盾分别是\n\n - 是⼈⺠民对于建⽴先进的⼯业国的要求同落后的农业国的现实之间的⽭盾,是⼈⺠民对于经济⽂化迅速发展的需要同当前经济⽂化不能满⾜⼈⺠民需要的状况之间 的⽭盾。 \n\n - ⼈⺠民⽇益增⻓长的物质⽂化需要同落后的社会⽣产之间的⽭盾。 \n\n - ⼈⺠民⽇益增⻓长的美好⽣活需要和不平衡不充分的发展之间的⽭盾。\n\n* 我国的社会主要矛盾的变化,没有改变我们对我国社会主义所处历史阶段的判断,我国仍处理并将长期处于社会主义初级阶段的基本国情没有变,我国是世界上最大的发展中国家的国际地位也没有变。\n\n* 领导和团结全国各族人民,以经济建设为中心。坚持四项基本原则,坚持改革开放,自力更生,艰苦创业,为把我国建设成为富强民主文明和谐美丽的社会主义现代化强国而奋斗。\n\n\n\n### 如何正确理解坚持党的领导、人民当家作主和依法治国的有机统一\n\n走中国特色社会主义政治发展道路,必须坚持党的领导、人民当家作主、依法治国的有机统一。\n\n党的领导是人民当家作主和依法治国的根本保证,人民当家作主是社会主义民主政治的本质特征,依法治国是党领导人民治理国家的基本方式,三者统一于我国社会主义民主政治的伟大实践。\n\n* 坚持党的领导,就要发挥党总揽全局、协调各方的领导核心作用。改进党的领导方式和执政方式,保证党领导人民有效治理国家\n* 实现人民当家作主,就要扩大人民有序政治参与,保证人民依法实行民主选举、民主协商、民主决策、民主管理、民主监督。巩固基层政权,完善基层民主制度,保障人民知情权、参与权、表达权、监督权\n* 坚持依法治国,就要维护国家法制统一、尊严、权威,加强人权法治保障,保证人民依法享有广泛权利和自由。健全依法决策机制,构建决策科学、执行坚决、监督有力的权利运行机制\n\n\n\n\n\n## 如何建设美丽中国\n\n> 生态文明建设\n\n* 建设⽣态⽂明是关系⼈⺠民福祉、关乎⺠民族未来的千年⼤计,是实现中华⺠民族伟 ⼤复兴的重要战略任务。 \n* 坚持⼈与⾃然和谐共⽣,树⽴和践⾏绿⽔⻘青⼭就是⾦⼭银⼭理念,推动形成绿 ⾊发展⽅式和⽣活⽅式,统筹⼭⽔林⽥湖草系统治理,实⾏最严格⽣态环境保护 制度,开创⽣态⽂明建设和环境保护新局⾯。\n\n\n\n## 决胜全面建成小康社会提出了哪些新的要求\n\n全⾯建成⼩康社会,覆盖领域要全⾯,是“五位⼀体”的全⾯ 要实事求是、因地制宜、全⾯建成⼩康社会是针对全国讲的不是每个地区、每个 ⺠民族、每个⼈达到同⼀⽔平。\n\n> 五位一体:\n>\n> - 经济建设\n> - 政治建设\n> - 文化建设\n> - 社会建设\n> - 生态文明建设\n>\n> 四个全面\n>\n> * 全面建成小康社会\n> * 全面深化改革\n> * 全面依法治国\n> * 全面从严治党\n\n\n\n## 如何理解构建人类命运共同体思想的科学内涵\n\n内涵(核⼼):“建设持久和平、普遍安全、共同繁荣、开放包容、清洁美丽的世界” \n\n* 政治上,要互相尊重、平等协商 。\n* 安全上,要就坚持以对话解决争端、以协商化解分歧,统筹应对传统和⾮传安 全安全威胁,反对⼀切形式的恐怖主义。 \n* 经济上,要同⾈共济,促进贸易和投资⾃由化便利化,推动经济全球化朝着更 加开放、包容、普惠、平衡、共赢的⽅向发展。\n* ⽂化上,要尊重世界⽂明多样性 E ⽣态上,要坚持环境友好,合作应对⽓候变化,保护好⼈类赖以⽣存的地球家园。\n\n\n\n\n\n## 如何理解当时最高政治领导力量\n\n> 如何理解当时历史和人民的选择\n\n1. 中国共产党是中国⼯⼈阶级的先锋队,同时也是中国⼈⺠民和中华⺠民族 的先锋队。是中国特⾊社会主义事业的领导核⼼。**(党的地位重要性)**\n2. 中国共产党成⽴以后,团结带领中国⼈⺠民,建⽴中华⼈⺠民共和国,完 成社会主义⾰命,确⽴社会主义基本制度,消灭剥削,进⾏改⾰开放新的违⼤⾰ 命,极⼤激发⼴⼤⼈⺠民群众的创造性。近代以来,争取⺠民族独⽴、⼈⺠民解放,实 现国家富强、⼈⺠民幸福,是中国⼈⺠民必须完成的两⼤历史任务。**(党的伟绩)**\n3. 历史表明,历史和⼈⺠民选择中国共产党领导中华⺠民族伟⼤复兴的事业 是正确的,中国共产党领导中国⼈⺠民开辟的中国特⾊社会主义道路是正确的,中 国共产党和中国⼈⺠民扎根中国⼤地、、吸纳⼈类⽂明的优秀成果、独⽴⾃主实现 国家发展的战略是正确的,必须⻓长期坚持、绝不动摇;**(历史⻆角度)**\n\n\n\n\n\n## 其他\n\n### 改革开放\n\n**四个基于:**\n\n* 是基于对党和国家前途命运的深刻把握是 \n* 是基于对社会主义⾰命和建设实践的深刻总结 \n* 是基于对时代潮流的深刻洞察 \n* 是基于对⼈⺠民群众期盼和需要的深刻体悟\n\n评价:是我们党的⼀次伟⼤觉醒。是中国⼈⺠和中华⺠民族发展史上⼀次伟⼤⾰命。\n\n\n\n### 供给侧改革\n\n1. 推动产业优化升级,加快发展先进制造业为重点全⾯提升实体经济。 \n2. 深化要素市场化配置改⾰,实现由以价取胜向以质取胜的转变。 \n3. 注重调动和保护⼈的积极性 \n4. 优化市场供求结构,坚持去产能、去杠杆\n\n\n\n### 新时代如何坚持⾛中国特⾊社会主义道路\n\n\n\n> **十四个坚持:**\n>\n> 坚持党对⼀切⼯作的领导;坚持以⼈⺠民为中⼼;\n>\n> 坚持全⺠民深化改⾰;坚持新发展 理念;\n>\n> 坚持⼈⺠民当家作主;坚持全⾯依法治国;\n>\n> 坚持社会主义核⼼价值体系;坚持在发展中保障和改善⺠民⽣;\n>\n> 坚持⼈与⾃然和谐共⽣;坚持总体国家安全观;\n>\n> 坚持党对⼈⺠民军队的绝对领导;坚持⼀国两制和推荐祖国统⼀;\n>\n> 坚持推动构建⼈类命运共同体;坚持全⾯从严治党;\n\n### 新时代如何推进现代化经济体系建设\n\n* 坚持以新发展理念为指导,以供给侧结构改革为主线\n - 贯彻新发展理念,坚持质量第一、效益优先\n - 坚持以供给侧结构性改革为主线推动和各项经济工作\n - 推动经济发展质量变革,效率变革,动力变革\n* 加快建设适应现代化经济体系要求的产业体系和经济体制\n - 着力加快建设实体经济、科技创新、现代金融、人力资源协同发展的产业体系\n - 着力构建市场机制有效、微观主体有活力、宏观调控有度的经济体制","source":"_posts/毛概下重点整理.md","raw":"---\ntitle: 毛概下重点整理\ntags: []\ncategories:\n - 笔记\ntoc: false\ndate: 2019-06-22 00:16:11\n---\n\n# 毛概下重点整理\n\n> 从台湾回来要补修政治课。。。。。。。大部分都是女朋友教我的,我做一下整理。\n\n## 如何理解我国社会主义矛盾发生的变化\n\n> 3次矛盾的变化\n\n* 三次矛盾分别是\n\n - 是⼈⺠民对于建⽴先进的⼯业国的要求同落后的农业国的现实之间的⽭盾,是⼈⺠民对于经济⽂化迅速发展的需要同当前经济⽂化不能满⾜⼈⺠民需要的状况之间 的⽭盾。 \n\n - ⼈⺠民⽇益增⻓长的物质⽂化需要同落后的社会⽣产之间的⽭盾。 \n\n - ⼈⺠民⽇益增⻓长的美好⽣活需要和不平衡不充分的发展之间的⽭盾。\n\n* 我国的社会主要矛盾的变化,没有改变我们对我国社会主义所处历史阶段的判断,我国仍处理并将长期处于社会主义初级阶段的基本国情没有变,我国是世界上最大的发展中国家的国际地位也没有变。\n\n* 领导和团结全国各族人民,以经济建设为中心。坚持四项基本原则,坚持改革开放,自力更生,艰苦创业,为把我国建设成为富强民主文明和谐美丽的社会主义现代化强国而奋斗。\n\n\n\n### 如何正确理解坚持党的领导、人民当家作主和依法治国的有机统一\n\n走中国特色社会主义政治发展道路,必须坚持党的领导、人民当家作主、依法治国的有机统一。\n\n党的领导是人民当家作主和依法治国的根本保证,人民当家作主是社会主义民主政治的本质特征,依法治国是党领导人民治理国家的基本方式,三者统一于我国社会主义民主政治的伟大实践。\n\n* 坚持党的领导,就要发挥党总揽全局、协调各方的领导核心作用。改进党的领导方式和执政方式,保证党领导人民有效治理国家\n* 实现人民当家作主,就要扩大人民有序政治参与,保证人民依法实行民主选举、民主协商、民主决策、民主管理、民主监督。巩固基层政权,完善基层民主制度,保障人民知情权、参与权、表达权、监督权\n* 坚持依法治国,就要维护国家法制统一、尊严、权威,加强人权法治保障,保证人民依法享有广泛权利和自由。健全依法决策机制,构建决策科学、执行坚决、监督有力的权利运行机制\n\n\n\n\n\n## 如何建设美丽中国\n\n> 生态文明建设\n\n* 建设⽣态⽂明是关系⼈⺠民福祉、关乎⺠民族未来的千年⼤计,是实现中华⺠民族伟 ⼤复兴的重要战略任务。 \n* 坚持⼈与⾃然和谐共⽣,树⽴和践⾏绿⽔⻘青⼭就是⾦⼭银⼭理念,推动形成绿 ⾊发展⽅式和⽣活⽅式,统筹⼭⽔林⽥湖草系统治理,实⾏最严格⽣态环境保护 制度,开创⽣态⽂明建设和环境保护新局⾯。\n\n\n\n## 决胜全面建成小康社会提出了哪些新的要求\n\n全⾯建成⼩康社会,覆盖领域要全⾯,是“五位⼀体”的全⾯ 要实事求是、因地制宜、全⾯建成⼩康社会是针对全国讲的不是每个地区、每个 ⺠民族、每个⼈达到同⼀⽔平。\n\n> 五位一体:\n>\n> - 经济建设\n> - 政治建设\n> - 文化建设\n> - 社会建设\n> - 生态文明建设\n>\n> 四个全面\n>\n> * 全面建成小康社会\n> * 全面深化改革\n> * 全面依法治国\n> * 全面从严治党\n\n\n\n## 如何理解构建人类命运共同体思想的科学内涵\n\n内涵(核⼼):“建设持久和平、普遍安全、共同繁荣、开放包容、清洁美丽的世界” \n\n* 政治上,要互相尊重、平等协商 。\n* 安全上,要就坚持以对话解决争端、以协商化解分歧,统筹应对传统和⾮传安 全安全威胁,反对⼀切形式的恐怖主义。 \n* 经济上,要同⾈共济,促进贸易和投资⾃由化便利化,推动经济全球化朝着更 加开放、包容、普惠、平衡、共赢的⽅向发展。\n* ⽂化上,要尊重世界⽂明多样性 E ⽣态上,要坚持环境友好,合作应对⽓候变化,保护好⼈类赖以⽣存的地球家园。\n\n\n\n\n\n## 如何理解当时最高政治领导力量\n\n> 如何理解当时历史和人民的选择\n\n1. 中国共产党是中国⼯⼈阶级的先锋队,同时也是中国⼈⺠民和中华⺠民族 的先锋队。是中国特⾊社会主义事业的领导核⼼。**(党的地位重要性)**\n2. 中国共产党成⽴以后,团结带领中国⼈⺠民,建⽴中华⼈⺠民共和国,完 成社会主义⾰命,确⽴社会主义基本制度,消灭剥削,进⾏改⾰开放新的违⼤⾰ 命,极⼤激发⼴⼤⼈⺠民群众的创造性。近代以来,争取⺠民族独⽴、⼈⺠民解放,实 现国家富强、⼈⺠民幸福,是中国⼈⺠民必须完成的两⼤历史任务。**(党的伟绩)**\n3. 历史表明,历史和⼈⺠民选择中国共产党领导中华⺠民族伟⼤复兴的事业 是正确的,中国共产党领导中国⼈⺠民开辟的中国特⾊社会主义道路是正确的,中 国共产党和中国⼈⺠民扎根中国⼤地、、吸纳⼈类⽂明的优秀成果、独⽴⾃主实现 国家发展的战略是正确的,必须⻓长期坚持、绝不动摇;**(历史⻆角度)**\n\n\n\n\n\n## 其他\n\n### 改革开放\n\n**四个基于:**\n\n* 是基于对党和国家前途命运的深刻把握是 \n* 是基于对社会主义⾰命和建设实践的深刻总结 \n* 是基于对时代潮流的深刻洞察 \n* 是基于对⼈⺠民群众期盼和需要的深刻体悟\n\n评价:是我们党的⼀次伟⼤觉醒。是中国⼈⺠和中华⺠民族发展史上⼀次伟⼤⾰命。\n\n\n\n### 供给侧改革\n\n1. 推动产业优化升级,加快发展先进制造业为重点全⾯提升实体经济。 \n2. 深化要素市场化配置改⾰,实现由以价取胜向以质取胜的转变。 \n3. 注重调动和保护⼈的积极性 \n4. 优化市场供求结构,坚持去产能、去杠杆\n\n\n\n### 新时代如何坚持⾛中国特⾊社会主义道路\n\n\n\n> **十四个坚持:**\n>\n> 坚持党对⼀切⼯作的领导;坚持以⼈⺠民为中⼼;\n>\n> 坚持全⺠民深化改⾰;坚持新发展 理念;\n>\n> 坚持⼈⺠民当家作主;坚持全⾯依法治国;\n>\n> 坚持社会主义核⼼价值体系;坚持在发展中保障和改善⺠民⽣;\n>\n> 坚持⼈与⾃然和谐共⽣;坚持总体国家安全观;\n>\n> 坚持党对⼈⺠民军队的绝对领导;坚持⼀国两制和推荐祖国统⼀;\n>\n> 坚持推动构建⼈类命运共同体;坚持全⾯从严治党;\n\n### 新时代如何推进现代化经济体系建设\n\n* 坚持以新发展理念为指导,以供给侧结构改革为主线\n - 贯彻新发展理念,坚持质量第一、效益优先\n - 坚持以供给侧结构性改革为主线推动和各项经济工作\n - 推动经济发展质量变革,效率变革,动力变革\n* 加快建设适应现代化经济体系要求的产业体系和经济体制\n - 着力加快建设实体经济、科技创新、现代金融、人力资源协同发展的产业体系\n - 着力构建市场机制有效、微观主体有活力、宏观调控有度的经济体制","slug":"毛概下重点整理","published":1,"updated":"2019-06-21T17:00:31.489Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkmu001wtzy4tk0f7rcx","content":"<h1 id=\"毛概下重点整理\"><a href=\"#毛概下重点整理\" class=\"headerlink\" title=\"毛概下重点整理\"></a>毛概下重点整理</h1><blockquote>\n<p>从台湾回来要补修政治课。。。。。。。大部分都是女朋友教我的,我做一下整理。</p>\n</blockquote>\n<h2 id=\"如何理解我国社会主义矛盾发生的变化\"><a href=\"#如何理解我国社会主义矛盾发生的变化\" class=\"headerlink\" title=\"如何理解我国社会主义矛盾发生的变化\"></a>如何理解我国社会主义矛盾发生的变化</h2><blockquote>\n<p>3次矛盾的变化</p>\n</blockquote>\n<ul>\n<li><p>三次矛盾分别是</p>\n<ul>\n<li><p>是⼈⺠民对于建⽴先进的⼯业国的要求同落后的农业国的现实之间的⽭盾,是⼈⺠民对于经济⽂化迅速发展的需要同当前经济⽂化不能满⾜⼈⺠民需要的状况之间 的⽭盾。 </p>\n</li>\n<li><p>⼈⺠民⽇益增⻓长的物质⽂化需要同落后的社会⽣产之间的⽭盾。 </p>\n</li>\n<li><p>⼈⺠民⽇益增⻓长的美好⽣活需要和不平衡不充分的发展之间的⽭盾。</p>\n</li>\n</ul>\n</li>\n<li><p>我国的社会主要矛盾的变化,没有改变我们对我国社会主义所处历史阶段的判断,我国仍处理并将长期处于社会主义初级阶段的基本国情没有变,我国是世界上最大的发展中国家的国际地位也没有变。</p>\n</li>\n<li><p>领导和团结全国各族人民,以经济建设为中心。坚持四项基本原则,坚持改革开放,自力更生,艰苦创业,为把我国建设成为富强民主文明和谐美丽的社会主义现代化强国而奋斗。</p>\n</li>\n</ul>\n<h3 id=\"如何正确理解坚持党的领导、人民当家作主和依法治国的有机统一\"><a href=\"#如何正确理解坚持党的领导、人民当家作主和依法治国的有机统一\" class=\"headerlink\" title=\"如何正确理解坚持党的领导、人民当家作主和依法治国的有机统一\"></a>如何正确理解坚持党的领导、人民当家作主和依法治国的有机统一</h3><p>走中国特色社会主义政治发展道路,必须坚持党的领导、人民当家作主、依法治国的有机统一。</p>\n<p>党的领导是人民当家作主和依法治国的根本保证,人民当家作主是社会主义民主政治的本质特征,依法治国是党领导人民治理国家的基本方式,三者统一于我国社会主义民主政治的伟大实践。</p>\n<ul>\n<li>坚持党的领导,就要发挥党总揽全局、协调各方的领导核心作用。改进党的领导方式和执政方式,保证党领导人民有效治理国家</li>\n<li>实现人民当家作主,就要扩大人民有序政治参与,保证人民依法实行民主选举、民主协商、民主决策、民主管理、民主监督。巩固基层政权,完善基层民主制度,保障人民知情权、参与权、表达权、监督权</li>\n<li>坚持依法治国,就要维护国家法制统一、尊严、权威,加强人权法治保障,保证人民依法享有广泛权利和自由。健全依法决策机制,构建决策科学、执行坚决、监督有力的权利运行机制</li>\n</ul>\n<h2 id=\"如何建设美丽中国\"><a href=\"#如何建设美丽中国\" class=\"headerlink\" title=\"如何建设美丽中国\"></a>如何建设美丽中国</h2><blockquote>\n<p>生态文明建设</p>\n</blockquote>\n<ul>\n<li>建设⽣态⽂明是关系⼈⺠民福祉、关乎⺠民族未来的千年⼤计,是实现中华⺠民族伟 ⼤复兴的重要战略任务。 </li>\n<li>坚持⼈与⾃然和谐共⽣,树⽴和践⾏绿⽔⻘青⼭就是⾦⼭银⼭理念,推动形成绿 ⾊发展⽅式和⽣活⽅式,统筹⼭⽔林⽥湖草系统治理,实⾏最严格⽣态环境保护 制度,开创⽣态⽂明建设和环境保护新局⾯。</li>\n</ul>\n<h2 id=\"决胜全面建成小康社会提出了哪些新的要求\"><a href=\"#决胜全面建成小康社会提出了哪些新的要求\" class=\"headerlink\" title=\"决胜全面建成小康社会提出了哪些新的要求\"></a>决胜全面建成小康社会提出了哪些新的要求</h2><p>全⾯建成⼩康社会,覆盖领域要全⾯,是“五位⼀体”的全⾯ 要实事求是、因地制宜、全⾯建成⼩康社会是针对全国讲的不是每个地区、每个 ⺠民族、每个⼈达到同⼀⽔平。</p>\n<blockquote>\n<p>五位一体:</p>\n<ul>\n<li>经济建设</li>\n<li>政治建设</li>\n<li>文化建设</li>\n<li>社会建设</li>\n<li>生态文明建设</li>\n</ul>\n<p>四个全面</p>\n<ul>\n<li>全面建成小康社会</li>\n<li>全面深化改革</li>\n<li>全面依法治国</li>\n<li>全面从严治党</li>\n</ul>\n</blockquote>\n<h2 id=\"如何理解构建人类命运共同体思想的科学内涵\"><a href=\"#如何理解构建人类命运共同体思想的科学内涵\" class=\"headerlink\" title=\"如何理解构建人类命运共同体思想的科学内涵\"></a>如何理解构建人类命运共同体思想的科学内涵</h2><p>内涵(核⼼):“建设持久和平、普遍安全、共同繁荣、开放包容、清洁美丽的世界” </p>\n<ul>\n<li>政治上,要互相尊重、平等协商 。</li>\n<li>安全上,要就坚持以对话解决争端、以协商化解分歧,统筹应对传统和⾮传安 全安全威胁,反对⼀切形式的恐怖主义。 </li>\n<li>经济上,要同⾈共济,促进贸易和投资⾃由化便利化,推动经济全球化朝着更 加开放、包容、普惠、平衡、共赢的⽅向发展。</li>\n<li>⽂化上,要尊重世界⽂明多样性 E ⽣态上,要坚持环境友好,合作应对⽓候变化,保护好⼈类赖以⽣存的地球家园。</li>\n</ul>\n<h2 id=\"如何理解当时最高政治领导力量\"><a href=\"#如何理解当时最高政治领导力量\" class=\"headerlink\" title=\"如何理解当时最高政治领导力量\"></a>如何理解当时最高政治领导力量</h2><blockquote>\n<p>如何理解当时历史和人民的选择</p>\n</blockquote>\n<ol>\n<li>中国共产党是中国⼯⼈阶级的先锋队,同时也是中国⼈⺠民和中华⺠民族 的先锋队。是中国特⾊社会主义事业的领导核⼼。<strong>(党的地位重要性)</strong></li>\n<li>中国共产党成⽴以后,团结带领中国⼈⺠民,建⽴中华⼈⺠民共和国,完 成社会主义⾰命,确⽴社会主义基本制度,消灭剥削,进⾏改⾰开放新的违⼤⾰ 命,极⼤激发⼴⼤⼈⺠民群众的创造性。近代以来,争取⺠民族独⽴、⼈⺠民解放,实 现国家富强、⼈⺠民幸福,是中国⼈⺠民必须完成的两⼤历史任务。<strong>(党的伟绩)</strong></li>\n<li>历史表明,历史和⼈⺠民选择中国共产党领导中华⺠民族伟⼤复兴的事业 是正确的,中国共产党领导中国⼈⺠民开辟的中国特⾊社会主义道路是正确的,中 国共产党和中国⼈⺠民扎根中国⼤地、、吸纳⼈类⽂明的优秀成果、独⽴⾃主实现 国家发展的战略是正确的,必须⻓长期坚持、绝不动摇;<strong>(历史⻆角度)</strong></li>\n</ol>\n<h2 id=\"其他\"><a href=\"#其他\" class=\"headerlink\" title=\"其他\"></a>其他</h2><h3 id=\"改革开放\"><a href=\"#改革开放\" class=\"headerlink\" title=\"改革开放\"></a>改革开放</h3><p><strong>四个基于:</strong></p>\n<ul>\n<li>是基于对党和国家前途命运的深刻把握是 </li>\n<li>是基于对社会主义⾰命和建设实践的深刻总结 </li>\n<li>是基于对时代潮流的深刻洞察 </li>\n<li>是基于对⼈⺠民群众期盼和需要的深刻体悟</li>\n</ul>\n<p>评价:是我们党的⼀次伟⼤觉醒。是中国⼈⺠和中华⺠民族发展史上⼀次伟⼤⾰命。</p>\n<h3 id=\"供给侧改革\"><a href=\"#供给侧改革\" class=\"headerlink\" title=\"供给侧改革\"></a>供给侧改革</h3><ol>\n<li>推动产业优化升级,加快发展先进制造业为重点全⾯提升实体经济。 </li>\n<li>深化要素市场化配置改⾰,实现由以价取胜向以质取胜的转变。 </li>\n<li>注重调动和保护⼈的积极性 </li>\n<li>优化市场供求结构,坚持去产能、去杠杆</li>\n</ol>\n<h3 id=\"新时代如何坚持⾛中国特⾊社会主义道路\"><a href=\"#新时代如何坚持⾛中国特⾊社会主义道路\" class=\"headerlink\" title=\"新时代如何坚持⾛中国特⾊社会主义道路\"></a>新时代如何坚持⾛中国特⾊社会主义道路</h3><blockquote>\n<p><strong>十四个坚持:</strong></p>\n<p>坚持党对⼀切⼯作的领导;坚持以⼈⺠民为中⼼;</p>\n<p>坚持全⺠民深化改⾰;坚持新发展 理念;</p>\n<p>坚持⼈⺠民当家作主;坚持全⾯依法治国;</p>\n<p>坚持社会主义核⼼价值体系;坚持在发展中保障和改善⺠民⽣;</p>\n<p>坚持⼈与⾃然和谐共⽣;坚持总体国家安全观;</p>\n<p>坚持党对⼈⺠民军队的绝对领导;坚持⼀国两制和推荐祖国统⼀;</p>\n<p>坚持推动构建⼈类命运共同体;坚持全⾯从严治党;</p>\n</blockquote>\n<h3 id=\"新时代如何推进现代化经济体系建设\"><a href=\"#新时代如何推进现代化经济体系建设\" class=\"headerlink\" title=\"新时代如何推进现代化经济体系建设\"></a>新时代如何推进现代化经济体系建设</h3><ul>\n<li>坚持以新发展理念为指导,以供给侧结构改革为主线<ul>\n<li>贯彻新发展理念,坚持质量第一、效益优先</li>\n<li>坚持以供给侧结构性改革为主线推动和各项经济工作</li>\n<li>推动经济发展质量变革,效率变革,动力变革</li>\n</ul>\n</li>\n<li>加快建设适应现代化经济体系要求的产业体系和经济体制<ul>\n<li>着力加快建设实体经济、科技创新、现代金融、人力资源协同发展的产业体系</li>\n<li>着力构建市场机制有效、微观主体有活力、宏观调控有度的经济体制</li>\n</ul>\n</li>\n</ul>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"毛概下重点整理\"><a href=\"#毛概下重点整理\" class=\"headerlink\" title=\"毛概下重点整理\"></a>毛概下重点整理</h1><blockquote>\n<p>从台湾回来要补修政治课。。。。。。。大部分都是女朋友教我的,我做一下整理。</p>\n</blockquote>\n<h2 id=\"如何理解我国社会主义矛盾发生的变化\"><a href=\"#如何理解我国社会主义矛盾发生的变化\" class=\"headerlink\" title=\"如何理解我国社会主义矛盾发生的变化\"></a>如何理解我国社会主义矛盾发生的变化</h2><blockquote>\n<p>3次矛盾的变化</p>\n</blockquote>\n<ul>\n<li><p>三次矛盾分别是</p>\n<ul>\n<li><p>是⼈⺠民对于建⽴先进的⼯业国的要求同落后的农业国的现实之间的⽭盾,是⼈⺠民对于经济⽂化迅速发展的需要同当前经济⽂化不能满⾜⼈⺠民需要的状况之间 的⽭盾。 </p>\n</li>\n<li><p>⼈⺠民⽇益增⻓长的物质⽂化需要同落后的社会⽣产之间的⽭盾。 </p>\n</li>\n<li><p>⼈⺠民⽇益增⻓长的美好⽣活需要和不平衡不充分的发展之间的⽭盾。</p>\n</li>\n</ul>\n</li>\n<li><p>我国的社会主要矛盾的变化,没有改变我们对我国社会主义所处历史阶段的判断,我国仍处理并将长期处于社会主义初级阶段的基本国情没有变,我国是世界上最大的发展中国家的国际地位也没有变。</p>\n</li>\n<li><p>领导和团结全国各族人民,以经济建设为中心。坚持四项基本原则,坚持改革开放,自力更生,艰苦创业,为把我国建设成为富强民主文明和谐美丽的社会主义现代化强国而奋斗。</p>\n</li>\n</ul>\n<h3 id=\"如何正确理解坚持党的领导、人民当家作主和依法治国的有机统一\"><a href=\"#如何正确理解坚持党的领导、人民当家作主和依法治国的有机统一\" class=\"headerlink\" title=\"如何正确理解坚持党的领导、人民当家作主和依法治国的有机统一\"></a>如何正确理解坚持党的领导、人民当家作主和依法治国的有机统一</h3><p>走中国特色社会主义政治发展道路,必须坚持党的领导、人民当家作主、依法治国的有机统一。</p>\n<p>党的领导是人民当家作主和依法治国的根本保证,人民当家作主是社会主义民主政治的本质特征,依法治国是党领导人民治理国家的基本方式,三者统一于我国社会主义民主政治的伟大实践。</p>\n<ul>\n<li>坚持党的领导,就要发挥党总揽全局、协调各方的领导核心作用。改进党的领导方式和执政方式,保证党领导人民有效治理国家</li>\n<li>实现人民当家作主,就要扩大人民有序政治参与,保证人民依法实行民主选举、民主协商、民主决策、民主管理、民主监督。巩固基层政权,完善基层民主制度,保障人民知情权、参与权、表达权、监督权</li>\n<li>坚持依法治国,就要维护国家法制统一、尊严、权威,加强人权法治保障,保证人民依法享有广泛权利和自由。健全依法决策机制,构建决策科学、执行坚决、监督有力的权利运行机制</li>\n</ul>\n<h2 id=\"如何建设美丽中国\"><a href=\"#如何建设美丽中国\" class=\"headerlink\" title=\"如何建设美丽中国\"></a>如何建设美丽中国</h2><blockquote>\n<p>生态文明建设</p>\n</blockquote>\n<ul>\n<li>建设⽣态⽂明是关系⼈⺠民福祉、关乎⺠民族未来的千年⼤计,是实现中华⺠民族伟 ⼤复兴的重要战略任务。 </li>\n<li>坚持⼈与⾃然和谐共⽣,树⽴和践⾏绿⽔⻘青⼭就是⾦⼭银⼭理念,推动形成绿 ⾊发展⽅式和⽣活⽅式,统筹⼭⽔林⽥湖草系统治理,实⾏最严格⽣态环境保护 制度,开创⽣态⽂明建设和环境保护新局⾯。</li>\n</ul>\n<h2 id=\"决胜全面建成小康社会提出了哪些新的要求\"><a href=\"#决胜全面建成小康社会提出了哪些新的要求\" class=\"headerlink\" title=\"决胜全面建成小康社会提出了哪些新的要求\"></a>决胜全面建成小康社会提出了哪些新的要求</h2><p>全⾯建成⼩康社会,覆盖领域要全⾯,是“五位⼀体”的全⾯ 要实事求是、因地制宜、全⾯建成⼩康社会是针对全国讲的不是每个地区、每个 ⺠民族、每个⼈达到同⼀⽔平。</p>\n<blockquote>\n<p>五位一体:</p>\n<ul>\n<li>经济建设</li>\n<li>政治建设</li>\n<li>文化建设</li>\n<li>社会建设</li>\n<li>生态文明建设</li>\n</ul>\n<p>四个全面</p>\n<ul>\n<li>全面建成小康社会</li>\n<li>全面深化改革</li>\n<li>全面依法治国</li>\n<li>全面从严治党</li>\n</ul>\n</blockquote>\n<h2 id=\"如何理解构建人类命运共同体思想的科学内涵\"><a href=\"#如何理解构建人类命运共同体思想的科学内涵\" class=\"headerlink\" title=\"如何理解构建人类命运共同体思想的科学内涵\"></a>如何理解构建人类命运共同体思想的科学内涵</h2><p>内涵(核⼼):“建设持久和平、普遍安全、共同繁荣、开放包容、清洁美丽的世界” </p>\n<ul>\n<li>政治上,要互相尊重、平等协商 。</li>\n<li>安全上,要就坚持以对话解决争端、以协商化解分歧,统筹应对传统和⾮传安 全安全威胁,反对⼀切形式的恐怖主义。 </li>\n<li>经济上,要同⾈共济,促进贸易和投资⾃由化便利化,推动经济全球化朝着更 加开放、包容、普惠、平衡、共赢的⽅向发展。</li>\n<li>⽂化上,要尊重世界⽂明多样性 E ⽣态上,要坚持环境友好,合作应对⽓候变化,保护好⼈类赖以⽣存的地球家园。</li>\n</ul>\n<h2 id=\"如何理解当时最高政治领导力量\"><a href=\"#如何理解当时最高政治领导力量\" class=\"headerlink\" title=\"如何理解当时最高政治领导力量\"></a>如何理解当时最高政治领导力量</h2><blockquote>\n<p>如何理解当时历史和人民的选择</p>\n</blockquote>\n<ol>\n<li>中国共产党是中国⼯⼈阶级的先锋队,同时也是中国⼈⺠民和中华⺠民族 的先锋队。是中国特⾊社会主义事业的领导核⼼。<strong>(党的地位重要性)</strong></li>\n<li>中国共产党成⽴以后,团结带领中国⼈⺠民,建⽴中华⼈⺠民共和国,完 成社会主义⾰命,确⽴社会主义基本制度,消灭剥削,进⾏改⾰开放新的违⼤⾰ 命,极⼤激发⼴⼤⼈⺠民群众的创造性。近代以来,争取⺠民族独⽴、⼈⺠民解放,实 现国家富强、⼈⺠民幸福,是中国⼈⺠民必须完成的两⼤历史任务。<strong>(党的伟绩)</strong></li>\n<li>历史表明,历史和⼈⺠民选择中国共产党领导中华⺠民族伟⼤复兴的事业 是正确的,中国共产党领导中国⼈⺠民开辟的中国特⾊社会主义道路是正确的,中 国共产党和中国⼈⺠民扎根中国⼤地、、吸纳⼈类⽂明的优秀成果、独⽴⾃主实现 国家发展的战略是正确的,必须⻓长期坚持、绝不动摇;<strong>(历史⻆角度)</strong></li>\n</ol>\n<h2 id=\"其他\"><a href=\"#其他\" class=\"headerlink\" title=\"其他\"></a>其他</h2><h3 id=\"改革开放\"><a href=\"#改革开放\" class=\"headerlink\" title=\"改革开放\"></a>改革开放</h3><p><strong>四个基于:</strong></p>\n<ul>\n<li>是基于对党和国家前途命运的深刻把握是 </li>\n<li>是基于对社会主义⾰命和建设实践的深刻总结 </li>\n<li>是基于对时代潮流的深刻洞察 </li>\n<li>是基于对⼈⺠民群众期盼和需要的深刻体悟</li>\n</ul>\n<p>评价:是我们党的⼀次伟⼤觉醒。是中国⼈⺠和中华⺠民族发展史上⼀次伟⼤⾰命。</p>\n<h3 id=\"供给侧改革\"><a href=\"#供给侧改革\" class=\"headerlink\" title=\"供给侧改革\"></a>供给侧改革</h3><ol>\n<li>推动产业优化升级,加快发展先进制造业为重点全⾯提升实体经济。 </li>\n<li>深化要素市场化配置改⾰,实现由以价取胜向以质取胜的转变。 </li>\n<li>注重调动和保护⼈的积极性 </li>\n<li>优化市场供求结构,坚持去产能、去杠杆</li>\n</ol>\n<h3 id=\"新时代如何坚持⾛中国特⾊社会主义道路\"><a href=\"#新时代如何坚持⾛中国特⾊社会主义道路\" class=\"headerlink\" title=\"新时代如何坚持⾛中国特⾊社会主义道路\"></a>新时代如何坚持⾛中国特⾊社会主义道路</h3><blockquote>\n<p><strong>十四个坚持:</strong></p>\n<p>坚持党对⼀切⼯作的领导;坚持以⼈⺠民为中⼼;</p>\n<p>坚持全⺠民深化改⾰;坚持新发展 理念;</p>\n<p>坚持⼈⺠民当家作主;坚持全⾯依法治国;</p>\n<p>坚持社会主义核⼼价值体系;坚持在发展中保障和改善⺠民⽣;</p>\n<p>坚持⼈与⾃然和谐共⽣;坚持总体国家安全观;</p>\n<p>坚持党对⼈⺠民军队的绝对领导;坚持⼀国两制和推荐祖国统⼀;</p>\n<p>坚持推动构建⼈类命运共同体;坚持全⾯从严治党;</p>\n</blockquote>\n<h3 id=\"新时代如何推进现代化经济体系建设\"><a href=\"#新时代如何推进现代化经济体系建设\" class=\"headerlink\" title=\"新时代如何推进现代化经济体系建设\"></a>新时代如何推进现代化经济体系建设</h3><ul>\n<li>坚持以新发展理念为指导,以供给侧结构改革为主线<ul>\n<li>贯彻新发展理念,坚持质量第一、效益优先</li>\n<li>坚持以供给侧结构性改革为主线推动和各项经济工作</li>\n<li>推动经济发展质量变革,效率变革,动力变革</li>\n</ul>\n</li>\n<li>加快建设适应现代化经济体系要求的产业体系和经济体制<ul>\n<li>着力加快建设实体经济、科技创新、现代金融、人力资源协同发展的产业体系</li>\n<li>着力构建市场机制有效、微观主体有活力、宏观调控有度的经济体制</li>\n</ul>\n</li>\n</ul>\n"},{"title":"汇编第七章:更灵活的定位内存地址的方式","date":"2017-12-28T18:46:40.000Z","_content":"\n# 汇编第七章:更灵活的定位内存地址的方式\n## and、or指令\n**and** 按位与 \n\n\tmov al,01100011B\n\tand al,00111011B\n结果为***al = 00100011B*** \n \n**or** 按位和 \n\n\tmov al,01100011B\n\tor al,00111011B\n结果为***al = 01111011B*** \n\n## 关于ASCII码\n\n\tdata segment\n\t\tdb 'unIX'\n\tdata ends\n相当于\n\n\tdata segment\n\t\tdb 75H,6EH,49H,58H\n\tdata ends\n一个字母一个字节 \n1. **小写字母ASCII码比大写字母大** \n2. **将'a'的ASCII码减20H就可以变成大写字母'A'** \n3. **将'A'的ASCII码加20H就可以变成小写字母'a'** \n4. **当ASCII码大于61H的时候是小写字母** \n5. **ASCII码的二进制形式第六位为1时是小写字母,0时大写字母** \n\n> 根据上面第五条可以进行大小写转换! \n\n\tand al,11011111B\n可以把字母变成大写 \n\n\tor al,00100000B\n可以把字母变成小写 \n## [bx+idata]\n***[bx+idata]表示一个内存单元,他的偏移地址是(bx)+idata(bx的值加上idata)*** \n> mov ax,[bx+200] == ax = ((dx)*16 + (bx) + 200) \n\n该指令也可以写成\n\n\tmov ax,[200+bx]\n\tmov ax,200[bx]\n\tmov ax,[bx].200\n因此,[bx+idata]的方式为高级语言实现数组提供了便利机制 \n\t\n\tC语言:a[i],b[i]\n\t汇编语言:0[bx],5[bx]([bx+0],[bx+5])\n\n## SI和DI\n**SI和DI是8086中和bx相似的寄存器**,但是不能像bx一样分成两个八位寄存器来使用 \n因此我们可以更灵活的使用:***[bx+si]***类似的方式表示一个内存一个内存单元 \n例如:\n\n\tmov ax,[bx+si]\n意为(ax) = (dx*16) + (bx) + (si) \n也可以写成\n\n\tmov ax,[bx][si]\n## 不同的寻址方式的灵活应用\n1. [idata]用一个常量来表示地址,可用于直接定位一个内存\n2. [bx]用一个变量来表示一个内存,可用于间接定位一个内存单元\n3. [bx+idata]用一个变量和一个常量来表示内存地址,可在一个起始地址的基础上用变量简介定位一个内存,例如数组。\n4. [bx+si]用两个变量表示一个内存地址\n5. [bx+si+idata]用两个变量和一个常量表示一个内存地址\n\n## 一道大题问题7.9(先复习,回头再写)","source":"_posts/汇编第七章:更灵活的定位内存地址的方式.md","raw":"---\ntitle: 汇编第七章:更灵活的定位内存地址的方式\ndate: 2017-12-29 02:46:40\ntags:\n\t- 汇编语言\n\t- 笔记\ncategories: 汇编语言\n---\n\n# 汇编第七章:更灵活的定位内存地址的方式\n## and、or指令\n**and** 按位与 \n\n\tmov al,01100011B\n\tand al,00111011B\n结果为***al = 00100011B*** \n \n**or** 按位和 \n\n\tmov al,01100011B\n\tor al,00111011B\n结果为***al = 01111011B*** \n\n## 关于ASCII码\n\n\tdata segment\n\t\tdb 'unIX'\n\tdata ends\n相当于\n\n\tdata segment\n\t\tdb 75H,6EH,49H,58H\n\tdata ends\n一个字母一个字节 \n1. **小写字母ASCII码比大写字母大** \n2. **将'a'的ASCII码减20H就可以变成大写字母'A'** \n3. **将'A'的ASCII码加20H就可以变成小写字母'a'** \n4. **当ASCII码大于61H的时候是小写字母** \n5. **ASCII码的二进制形式第六位为1时是小写字母,0时大写字母** \n\n> 根据上面第五条可以进行大小写转换! \n\n\tand al,11011111B\n可以把字母变成大写 \n\n\tor al,00100000B\n可以把字母变成小写 \n## [bx+idata]\n***[bx+idata]表示一个内存单元,他的偏移地址是(bx)+idata(bx的值加上idata)*** \n> mov ax,[bx+200] == ax = ((dx)*16 + (bx) + 200) \n\n该指令也可以写成\n\n\tmov ax,[200+bx]\n\tmov ax,200[bx]\n\tmov ax,[bx].200\n因此,[bx+idata]的方式为高级语言实现数组提供了便利机制 \n\t\n\tC语言:a[i],b[i]\n\t汇编语言:0[bx],5[bx]([bx+0],[bx+5])\n\n## SI和DI\n**SI和DI是8086中和bx相似的寄存器**,但是不能像bx一样分成两个八位寄存器来使用 \n因此我们可以更灵活的使用:***[bx+si]***类似的方式表示一个内存一个内存单元 \n例如:\n\n\tmov ax,[bx+si]\n意为(ax) = (dx*16) + (bx) + (si) \n也可以写成\n\n\tmov ax,[bx][si]\n## 不同的寻址方式的灵活应用\n1. [idata]用一个常量来表示地址,可用于直接定位一个内存\n2. [bx]用一个变量来表示一个内存,可用于间接定位一个内存单元\n3. [bx+idata]用一个变量和一个常量来表示内存地址,可在一个起始地址的基础上用变量简介定位一个内存,例如数组。\n4. [bx+si]用两个变量表示一个内存地址\n5. [bx+si+idata]用两个变量和一个常量表示一个内存地址\n\n## 一道大题问题7.9(先复习,回头再写)","slug":"汇编第七章:更灵活的定位内存地址的方式","published":1,"updated":"2018-01-09T12:05:30.076Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkmw0021tzy4o00xr7uf","content":"<h1 id=\"汇编第七章:更灵活的定位内存地址的方式\"><a href=\"#汇编第七章:更灵活的定位内存地址的方式\" class=\"headerlink\" title=\"汇编第七章:更灵活的定位内存地址的方式\"></a>汇编第七章:更灵活的定位内存地址的方式</h1><h2 id=\"and、or指令\"><a href=\"#and、or指令\" class=\"headerlink\" title=\"and、or指令\"></a>and、or指令</h2><p><strong>and</strong> 按位与 </p>\n<pre><code>mov al,01100011B\nand al,00111011B\n</code></pre><p>结果为<strong><em>al = 00100011B</em></strong> </p>\n<p><strong>or</strong> 按位和 </p>\n<pre><code>mov al,01100011B\nor al,00111011B\n</code></pre><p>结果为<strong><em>al = 01111011B</em></strong> </p>\n<h2 id=\"关于ASCII码\"><a href=\"#关于ASCII码\" class=\"headerlink\" title=\"关于ASCII码\"></a>关于ASCII码</h2><pre><code>data segment\n db 'unIX'\ndata ends\n</code></pre><p>相当于</p>\n<pre><code>data segment\n db 75H,6EH,49H,58H\ndata ends\n</code></pre><p>一个字母一个字节 </p>\n<ol>\n<li><strong>小写字母ASCII码比大写字母大</strong> </li>\n<li><strong>将’a’的ASCII码减20H就可以变成大写字母’A’</strong> </li>\n<li><strong>将’A’的ASCII码加20H就可以变成小写字母’a’</strong> </li>\n<li><strong>当ASCII码大于61H的时候是小写字母</strong> </li>\n<li><strong>ASCII码的二进制形式第六位为1时是小写字母,0时大写字母</strong> </li>\n</ol>\n<blockquote>\n<p>根据上面第五条可以进行大小写转换! </p>\n</blockquote>\n<pre><code>and al,11011111B\n</code></pre><p>可以把字母变成大写 </p>\n<pre><code>or al,00100000B\n</code></pre><p>可以把字母变成小写 </p>\n<h2 id=\"bx-idata\"><a href=\"#bx-idata\" class=\"headerlink\" title=\"[bx+idata]\"></a>[bx+idata]</h2><p><strong><em>[bx+idata]表示一个内存单元,他的偏移地址是(bx)+idata(bx的值加上idata)</em></strong> </p>\n<blockquote>\n<p>mov ax,[bx+200] == ax = ((dx)*16 + (bx) + 200) </p>\n</blockquote>\n<p>该指令也可以写成</p>\n<pre><code>mov ax,[200+bx]\nmov ax,200[bx]\nmov ax,[bx].200\n</code></pre><p>因此,[bx+idata]的方式为高级语言实现数组提供了便利机制 </p>\n<pre><code>C语言:a[i],b[i]\n汇编语言:0[bx],5[bx]([bx+0],[bx+5])\n</code></pre><h2 id=\"SI和DI\"><a href=\"#SI和DI\" class=\"headerlink\" title=\"SI和DI\"></a>SI和DI</h2><p><strong>SI和DI是8086中和bx相似的寄存器</strong>,但是不能像bx一样分成两个八位寄存器来使用<br>因此我们可以更灵活的使用:<strong><em>[bx+si]</em></strong>类似的方式表示一个内存一个内存单元<br>例如:</p>\n<pre><code>mov ax,[bx+si]\n</code></pre><p>意为(ax) = (dx*16) + (bx) + (si)<br>也可以写成</p>\n<pre><code>mov ax,[bx][si]\n</code></pre><h2 id=\"不同的寻址方式的灵活应用\"><a href=\"#不同的寻址方式的灵活应用\" class=\"headerlink\" title=\"不同的寻址方式的灵活应用\"></a>不同的寻址方式的灵活应用</h2><ol>\n<li>[idata]用一个常量来表示地址,可用于直接定位一个内存</li>\n<li>[bx]用一个变量来表示一个内存,可用于间接定位一个内存单元</li>\n<li>[bx+idata]用一个变量和一个常量来表示内存地址,可在一个起始地址的基础上用变量简介定位一个内存,例如数组。</li>\n<li>[bx+si]用两个变量表示一个内存地址</li>\n<li>[bx+si+idata]用两个变量和一个常量表示一个内存地址</li>\n</ol>\n<h2 id=\"一道大题问题7-9(先复习,回头再写)\"><a href=\"#一道大题问题7-9(先复习,回头再写)\" class=\"headerlink\" title=\"一道大题问题7.9(先复习,回头再写)\"></a>一道大题问题7.9(先复习,回头再写)</h2>","site":{"data":{}},"excerpt":"","more":"<h1 id=\"汇编第七章:更灵活的定位内存地址的方式\"><a href=\"#汇编第七章:更灵活的定位内存地址的方式\" class=\"headerlink\" title=\"汇编第七章:更灵活的定位内存地址的方式\"></a>汇编第七章:更灵活的定位内存地址的方式</h1><h2 id=\"and、or指令\"><a href=\"#and、or指令\" class=\"headerlink\" title=\"and、or指令\"></a>and、or指令</h2><p><strong>and</strong> 按位与 </p>\n<pre><code>mov al,01100011B\nand al,00111011B\n</code></pre><p>结果为<strong><em>al = 00100011B</em></strong> </p>\n<p><strong>or</strong> 按位和 </p>\n<pre><code>mov al,01100011B\nor al,00111011B\n</code></pre><p>结果为<strong><em>al = 01111011B</em></strong> </p>\n<h2 id=\"关于ASCII码\"><a href=\"#关于ASCII码\" class=\"headerlink\" title=\"关于ASCII码\"></a>关于ASCII码</h2><pre><code>data segment\n db 'unIX'\ndata ends\n</code></pre><p>相当于</p>\n<pre><code>data segment\n db 75H,6EH,49H,58H\ndata ends\n</code></pre><p>一个字母一个字节 </p>\n<ol>\n<li><strong>小写字母ASCII码比大写字母大</strong> </li>\n<li><strong>将’a’的ASCII码减20H就可以变成大写字母’A’</strong> </li>\n<li><strong>将’A’的ASCII码加20H就可以变成小写字母’a’</strong> </li>\n<li><strong>当ASCII码大于61H的时候是小写字母</strong> </li>\n<li><strong>ASCII码的二进制形式第六位为1时是小写字母,0时大写字母</strong> </li>\n</ol>\n<blockquote>\n<p>根据上面第五条可以进行大小写转换! </p>\n</blockquote>\n<pre><code>and al,11011111B\n</code></pre><p>可以把字母变成大写 </p>\n<pre><code>or al,00100000B\n</code></pre><p>可以把字母变成小写 </p>\n<h2 id=\"bx-idata\"><a href=\"#bx-idata\" class=\"headerlink\" title=\"[bx+idata]\"></a>[bx+idata]</h2><p><strong><em>[bx+idata]表示一个内存单元,他的偏移地址是(bx)+idata(bx的值加上idata)</em></strong> </p>\n<blockquote>\n<p>mov ax,[bx+200] == ax = ((dx)*16 + (bx) + 200) </p>\n</blockquote>\n<p>该指令也可以写成</p>\n<pre><code>mov ax,[200+bx]\nmov ax,200[bx]\nmov ax,[bx].200\n</code></pre><p>因此,[bx+idata]的方式为高级语言实现数组提供了便利机制 </p>\n<pre><code>C语言:a[i],b[i]\n汇编语言:0[bx],5[bx]([bx+0],[bx+5])\n</code></pre><h2 id=\"SI和DI\"><a href=\"#SI和DI\" class=\"headerlink\" title=\"SI和DI\"></a>SI和DI</h2><p><strong>SI和DI是8086中和bx相似的寄存器</strong>,但是不能像bx一样分成两个八位寄存器来使用<br>因此我们可以更灵活的使用:<strong><em>[bx+si]</em></strong>类似的方式表示一个内存一个内存单元<br>例如:</p>\n<pre><code>mov ax,[bx+si]\n</code></pre><p>意为(ax) = (dx*16) + (bx) + (si)<br>也可以写成</p>\n<pre><code>mov ax,[bx][si]\n</code></pre><h2 id=\"不同的寻址方式的灵活应用\"><a href=\"#不同的寻址方式的灵活应用\" class=\"headerlink\" title=\"不同的寻址方式的灵活应用\"></a>不同的寻址方式的灵活应用</h2><ol>\n<li>[idata]用一个常量来表示地址,可用于直接定位一个内存</li>\n<li>[bx]用一个变量来表示一个内存,可用于间接定位一个内存单元</li>\n<li>[bx+idata]用一个变量和一个常量来表示内存地址,可在一个起始地址的基础上用变量简介定位一个内存,例如数组。</li>\n<li>[bx+si]用两个变量表示一个内存地址</li>\n<li>[bx+si+idata]用两个变量和一个常量表示一个内存地址</li>\n</ol>\n<h2 id=\"一道大题问题7-9(先复习,回头再写)\"><a href=\"#一道大题问题7-9(先复习,回头再写)\" class=\"headerlink\" title=\"一道大题问题7.9(先复习,回头再写)\"></a>一道大题问题7.9(先复习,回头再写)</h2>"},{"title":"汇编第九章:转移指令的原理","date":"2017-12-30T09:41:24.000Z","_content":"\n# 汇编第九章:转移指令的原理\n> 概括地讲,转移指令就是可以控制CPU执行内存中某处代码的指令。 \n> 表现为可以修改IP或者同时修改CS和IP的指令。\n\n以下讨论8086 \n***转移行为的分类*** \n**第一类:只修改IP的转移行为叫做段内转移** \n> 根据转一指令对IP的修改范围不同,段内转移可分为。 \n\n1. 短转移:IP的修改范围为-128 ~ 127.\n2. 近转移:IP的修改范围为-32768 ~ 32767.\n\n**第二类:同时修改CS和IP的转移行为叫段间转移** \n \n***转一指令的分类*** \n1. 无条件转移指令,例如jmp \n2. 条件转移指令 \n3. 循环指令,例如loop \n4. 过程 \n5. 中断 \n\n本章主要通过深入学习无条件转移指令jmp来理解CPU执行转移指令的基本原理 \n\n## offset\n**功能是取得标号地址的偏移地址**\n\n\tcode segment\n\tstart:\n\t\tmov ax,offset start\t\t;相当于mov ax,0\n\ts:\n\t\tmov ax,offset s\t\t\t;相当于mov ax,3\t\t\t\t\t\t\t\t\t\n## jmp\njmp为无条件跳转指令,可以只修改IP,也可以同时修改CS和IP。 \njmp指令要给出两种信息: \n1. 转移的目的地址 \n2. 转移的距离(段间转移、段内转移、段内近转移)\n\n### 依据位移进行转移的jmp指令\nNO.1\n\n\tjmp short 标号(转到标号处执行指令)\n这种格式实现的事段内短转移,他对IP的修改范围是-128 ~ 127,转移指令结束后,CS:IP应该指向标号指令。 \n\n根据机器码可得出**CPU执行jmp指令时机器码中并不需要转移的目的地址** \n> CPU执行指令的过程 \n> 1. 从CS:IP执行内存单元读取指令,读取的指令进入指令缓冲器; \n> 2. (IP) = (IP) + 读取的长度,从而指向下一个指令; \n> 3. 执行指令。转到(1),重复.\n\n由此可得,执行jmp并不需要目的地址,而是需要**位移地址** \nshort的位移量存储空间占一个字节,8个二进制位,首位为符号位,用补码表示,因此可表示的位移量为-128 ~ 127。 \n同理,near的位移量储存空间占两个字节,16个二进制位,首位为符号位,用补码表示,因此可表示的位移量为-32768 ~ 32767。\n\n由上引入近转移\n\n\tjmp near ptr 标号(段内近转移)\n\t\t\n### 转移的目的地址在指令中的jmp指令\n前面讲的是段内转移,因此jmp只需要位移地址即可进行对IP的修改。\n\t\n\tjmp far ptr 标号\n以上实现的是段间转移,又称远转移。可以让(CS) = 标号所在的段地址;(IP) = 标号所在的偏移地址。\n\n### 转移地址在寄存器中的jmp指令\n\tjmp 16位reg\n功能:(IP) = (16位reg) \n用寄存器中的值修改IP。\n\n### 转移地址在内存中的jmp指令\n> 两种格式 \n\n**段内转移**\n\n\tjmp word ptr 内存单元地址 ;(段内转移)\n从内存单元地址处开始存放着一个字,是转移的目的的偏移地址。 \n例如:\n\n\tmov ax,0123H\n\tmov ds:[0],ax\n\tjmp word ptr ds:[0]\n执行后(IP) = 0123H \n\n**段间转移**\n\n\tjmp dword ptr 内存单元地址 ;(段间转移)\n从内存单元地址处开始存放着两个字节,是转移的目的的段地址和偏移地址,**高地址是段地址**,**低地址是偏移地址** \n(CS) = 内存单元地址+2 \n(IP) = 内存单元地址\n比如一下指令: \n\n\tmov ax,0123H\n\tmov ds:[0],ax\n\tmov ax,4567H\n\tmov ds:[2],ax\n\tjmp dword ptr ds:[0]\n执行完后(CS) = 4567H,(IP) = 0123H。 \n\t\t\n## jcxz指令\njcxz是有条件转移指令,**所有的有条件转移指令都是短转移指令**,对应的机器码中包含的是转移位移,不是目的地址。对IP的修改范围都是-128 ~ 127。\n\n**jcxz == jmp when cx is zero** \n当cx为零时,执行转移指令,若不为零,则不转移 \n使用格式:\n\t\n\tjcxz 标号\n\t\n## loop指令\nloop指令位循环指令,所有的循环指令都是短转移。 \n**详见第五章**\n\n## 根据位移进行转移的意义\n\tjmp short x\n\tjmp near ptr x\n\tjcxz x\n\tloop\n以上都是根据转移的位移量进行转移的,这样有利于程序在内存中的浮动装配,意思就是把这段程序装在内存中的任意一段空间内都可以执行,不会因为转移的地址不同而导致程序不能执行。\n\n## 编译器对转移位移超界的检测\n\t\t\n**jmp超界编译器会报错**,别的没其他知识点\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t","source":"_posts/汇编第九章:转移指令的原理.md","raw":"---\ntitle: 汇编第九章:转移指令的原理\ndate: 2017-12-30 17:41:24\ntags:\n\t- 汇编语言\n\t- 笔记\ncategories: 汇编语言\n---\n\n# 汇编第九章:转移指令的原理\n> 概括地讲,转移指令就是可以控制CPU执行内存中某处代码的指令。 \n> 表现为可以修改IP或者同时修改CS和IP的指令。\n\n以下讨论8086 \n***转移行为的分类*** \n**第一类:只修改IP的转移行为叫做段内转移** \n> 根据转一指令对IP的修改范围不同,段内转移可分为。 \n\n1. 短转移:IP的修改范围为-128 ~ 127.\n2. 近转移:IP的修改范围为-32768 ~ 32767.\n\n**第二类:同时修改CS和IP的转移行为叫段间转移** \n \n***转一指令的分类*** \n1. 无条件转移指令,例如jmp \n2. 条件转移指令 \n3. 循环指令,例如loop \n4. 过程 \n5. 中断 \n\n本章主要通过深入学习无条件转移指令jmp来理解CPU执行转移指令的基本原理 \n\n## offset\n**功能是取得标号地址的偏移地址**\n\n\tcode segment\n\tstart:\n\t\tmov ax,offset start\t\t;相当于mov ax,0\n\ts:\n\t\tmov ax,offset s\t\t\t;相当于mov ax,3\t\t\t\t\t\t\t\t\t\n## jmp\njmp为无条件跳转指令,可以只修改IP,也可以同时修改CS和IP。 \njmp指令要给出两种信息: \n1. 转移的目的地址 \n2. 转移的距离(段间转移、段内转移、段内近转移)\n\n### 依据位移进行转移的jmp指令\nNO.1\n\n\tjmp short 标号(转到标号处执行指令)\n这种格式实现的事段内短转移,他对IP的修改范围是-128 ~ 127,转移指令结束后,CS:IP应该指向标号指令。 \n\n根据机器码可得出**CPU执行jmp指令时机器码中并不需要转移的目的地址** \n> CPU执行指令的过程 \n> 1. 从CS:IP执行内存单元读取指令,读取的指令进入指令缓冲器; \n> 2. (IP) = (IP) + 读取的长度,从而指向下一个指令; \n> 3. 执行指令。转到(1),重复.\n\n由此可得,执行jmp并不需要目的地址,而是需要**位移地址** \nshort的位移量存储空间占一个字节,8个二进制位,首位为符号位,用补码表示,因此可表示的位移量为-128 ~ 127。 \n同理,near的位移量储存空间占两个字节,16个二进制位,首位为符号位,用补码表示,因此可表示的位移量为-32768 ~ 32767。\n\n由上引入近转移\n\n\tjmp near ptr 标号(段内近转移)\n\t\t\n### 转移的目的地址在指令中的jmp指令\n前面讲的是段内转移,因此jmp只需要位移地址即可进行对IP的修改。\n\t\n\tjmp far ptr 标号\n以上实现的是段间转移,又称远转移。可以让(CS) = 标号所在的段地址;(IP) = 标号所在的偏移地址。\n\n### 转移地址在寄存器中的jmp指令\n\tjmp 16位reg\n功能:(IP) = (16位reg) \n用寄存器中的值修改IP。\n\n### 转移地址在内存中的jmp指令\n> 两种格式 \n\n**段内转移**\n\n\tjmp word ptr 内存单元地址 ;(段内转移)\n从内存单元地址处开始存放着一个字,是转移的目的的偏移地址。 \n例如:\n\n\tmov ax,0123H\n\tmov ds:[0],ax\n\tjmp word ptr ds:[0]\n执行后(IP) = 0123H \n\n**段间转移**\n\n\tjmp dword ptr 内存单元地址 ;(段间转移)\n从内存单元地址处开始存放着两个字节,是转移的目的的段地址和偏移地址,**高地址是段地址**,**低地址是偏移地址** \n(CS) = 内存单元地址+2 \n(IP) = 内存单元地址\n比如一下指令: \n\n\tmov ax,0123H\n\tmov ds:[0],ax\n\tmov ax,4567H\n\tmov ds:[2],ax\n\tjmp dword ptr ds:[0]\n执行完后(CS) = 4567H,(IP) = 0123H。 \n\t\t\n## jcxz指令\njcxz是有条件转移指令,**所有的有条件转移指令都是短转移指令**,对应的机器码中包含的是转移位移,不是目的地址。对IP的修改范围都是-128 ~ 127。\n\n**jcxz == jmp when cx is zero** \n当cx为零时,执行转移指令,若不为零,则不转移 \n使用格式:\n\t\n\tjcxz 标号\n\t\n## loop指令\nloop指令位循环指令,所有的循环指令都是短转移。 \n**详见第五章**\n\n## 根据位移进行转移的意义\n\tjmp short x\n\tjmp near ptr x\n\tjcxz x\n\tloop\n以上都是根据转移的位移量进行转移的,这样有利于程序在内存中的浮动装配,意思就是把这段程序装在内存中的任意一段空间内都可以执行,不会因为转移的地址不同而导致程序不能执行。\n\n## 编译器对转移位移超界的检测\n\t\t\n**jmp超界编译器会报错**,别的没其他知识点\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t","slug":"汇编第九章:转移指令的原理","published":1,"updated":"2017-12-30T13:30:04.582Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkmx0023tzy41nhhsz7i","content":"<h1 id=\"汇编第九章:转移指令的原理\"><a href=\"#汇编第九章:转移指令的原理\" class=\"headerlink\" title=\"汇编第九章:转移指令的原理\"></a>汇编第九章:转移指令的原理</h1><blockquote>\n<p>概括地讲,转移指令就是可以控制CPU执行内存中某处代码的指令。<br>表现为可以修改IP或者同时修改CS和IP的指令。</p>\n</blockquote>\n<p>以下讨论8086<br><strong><em>转移行为的分类</em></strong><br><strong>第一类:只修改IP的转移行为叫做段内转移</strong> </p>\n<blockquote>\n<p>根据转一指令对IP的修改范围不同,段内转移可分为。 </p>\n</blockquote>\n<ol>\n<li>短转移:IP的修改范围为-128 ~ 127.</li>\n<li>近转移:IP的修改范围为-32768 ~ 32767.</li>\n</ol>\n<p><strong>第二类:同时修改CS和IP的转移行为叫段间转移</strong> </p>\n<p><strong><em>转一指令的分类</em></strong> </p>\n<ol>\n<li>无条件转移指令,例如jmp </li>\n<li>条件转移指令 </li>\n<li>循环指令,例如loop </li>\n<li>过程 </li>\n<li>中断 </li>\n</ol>\n<p>本章主要通过深入学习无条件转移指令jmp来理解CPU执行转移指令的基本原理 </p>\n<h2 id=\"offset\"><a href=\"#offset\" class=\"headerlink\" title=\"offset\"></a>offset</h2><p><strong>功能是取得标号地址的偏移地址</strong></p>\n<pre><code>code segment\nstart:\n mov ax,offset start ;相当于mov ax,0\ns:\n mov ax,offset s ;相当于mov ax,3 \n</code></pre><h2 id=\"jmp\"><a href=\"#jmp\" class=\"headerlink\" title=\"jmp\"></a>jmp</h2><p>jmp为无条件跳转指令,可以只修改IP,也可以同时修改CS和IP。<br>jmp指令要给出两种信息: </p>\n<ol>\n<li>转移的目的地址 </li>\n<li>转移的距离(段间转移、段内转移、段内近转移)</li>\n</ol>\n<h3 id=\"依据位移进行转移的jmp指令\"><a href=\"#依据位移进行转移的jmp指令\" class=\"headerlink\" title=\"依据位移进行转移的jmp指令\"></a>依据位移进行转移的jmp指令</h3><p>NO.1</p>\n<pre><code>jmp short 标号(转到标号处执行指令)\n</code></pre><p>这种格式实现的事段内短转移,他对IP的修改范围是-128 ~ 127,转移指令结束后,CS:IP应该指向标号指令。 </p>\n<p>根据机器码可得出<strong>CPU执行jmp指令时机器码中并不需要转移的目的地址</strong> </p>\n<blockquote>\n<p>CPU执行指令的过程 </p>\n<ol>\n<li>从CS:IP执行内存单元读取指令,读取的指令进入指令缓冲器; </li>\n<li>(IP) = (IP) + 读取的长度,从而指向下一个指令; </li>\n<li>执行指令。转到(1),重复.</li>\n</ol>\n</blockquote>\n<p>由此可得,执行jmp并不需要目的地址,而是需要<strong>位移地址</strong><br>short的位移量存储空间占一个字节,8个二进制位,首位为符号位,用补码表示,因此可表示的位移量为-128 ~ 127。<br>同理,near的位移量储存空间占两个字节,16个二进制位,首位为符号位,用补码表示,因此可表示的位移量为-32768 ~ 32767。</p>\n<p>由上引入近转移</p>\n<pre><code>jmp near ptr 标号(段内近转移)\n</code></pre><h3 id=\"转移的目的地址在指令中的jmp指令\"><a href=\"#转移的目的地址在指令中的jmp指令\" class=\"headerlink\" title=\"转移的目的地址在指令中的jmp指令\"></a>转移的目的地址在指令中的jmp指令</h3><p>前面讲的是段内转移,因此jmp只需要位移地址即可进行对IP的修改。</p>\n<pre><code>jmp far ptr 标号\n</code></pre><p>以上实现的是段间转移,又称远转移。可以让(CS) = 标号所在的段地址;(IP) = 标号所在的偏移地址。</p>\n<h3 id=\"转移地址在寄存器中的jmp指令\"><a href=\"#转移地址在寄存器中的jmp指令\" class=\"headerlink\" title=\"转移地址在寄存器中的jmp指令\"></a>转移地址在寄存器中的jmp指令</h3><pre><code>jmp 16位reg\n</code></pre><p>功能:(IP) = (16位reg)<br>用寄存器中的值修改IP。</p>\n<h3 id=\"转移地址在内存中的jmp指令\"><a href=\"#转移地址在内存中的jmp指令\" class=\"headerlink\" title=\"转移地址在内存中的jmp指令\"></a>转移地址在内存中的jmp指令</h3><blockquote>\n<p>两种格式 </p>\n</blockquote>\n<p><strong>段内转移</strong></p>\n<pre><code>jmp word ptr 内存单元地址 ;(段内转移)\n</code></pre><p>从内存单元地址处开始存放着一个字,是转移的目的的偏移地址。<br>例如:</p>\n<pre><code>mov ax,0123H\nmov ds:[0],ax\njmp word ptr ds:[0]\n</code></pre><p>执行后(IP) = 0123H </p>\n<p><strong>段间转移</strong></p>\n<pre><code>jmp dword ptr 内存单元地址 ;(段间转移)\n</code></pre><p>从内存单元地址处开始存放着两个字节,是转移的目的的段地址和偏移地址,<strong>高地址是段地址</strong>,<strong>低地址是偏移地址</strong><br>(CS) = 内存单元地址+2<br>(IP) = 内存单元地址<br>比如一下指令: </p>\n<pre><code>mov ax,0123H\nmov ds:[0],ax\nmov ax,4567H\nmov ds:[2],ax\njmp dword ptr ds:[0]\n</code></pre><p>执行完后(CS) = 4567H,(IP) = 0123H。 </p>\n<h2 id=\"jcxz指令\"><a href=\"#jcxz指令\" class=\"headerlink\" title=\"jcxz指令\"></a>jcxz指令</h2><p>jcxz是有条件转移指令,<strong>所有的有条件转移指令都是短转移指令</strong>,对应的机器码中包含的是转移位移,不是目的地址。对IP的修改范围都是-128 ~ 127。</p>\n<p><strong>jcxz == jmp when cx is zero</strong><br>当cx为零时,执行转移指令,若不为零,则不转移<br>使用格式:</p>\n<pre><code>jcxz 标号\n</code></pre><h2 id=\"loop指令\"><a href=\"#loop指令\" class=\"headerlink\" title=\"loop指令\"></a>loop指令</h2><p>loop指令位循环指令,所有的循环指令都是短转移。<br><strong>详见第五章</strong></p>\n<h2 id=\"根据位移进行转移的意义\"><a href=\"#根据位移进行转移的意义\" class=\"headerlink\" title=\"根据位移进行转移的意义\"></a>根据位移进行转移的意义</h2><pre><code>jmp short x\njmp near ptr x\njcxz x\nloop\n</code></pre><p>以上都是根据转移的位移量进行转移的,这样有利于程序在内存中的浮动装配,意思就是把这段程序装在内存中的任意一段空间内都可以执行,不会因为转移的地址不同而导致程序不能执行。</p>\n<h2 id=\"编译器对转移位移超界的检测\"><a href=\"#编译器对转移位移超界的检测\" class=\"headerlink\" title=\"编译器对转移位移超界的检测\"></a>编译器对转移位移超界的检测</h2><p><strong>jmp超界编译器会报错</strong>,别的没其他知识点</p>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"汇编第九章:转移指令的原理\"><a href=\"#汇编第九章:转移指令的原理\" class=\"headerlink\" title=\"汇编第九章:转移指令的原理\"></a>汇编第九章:转移指令的原理</h1><blockquote>\n<p>概括地讲,转移指令就是可以控制CPU执行内存中某处代码的指令。<br>表现为可以修改IP或者同时修改CS和IP的指令。</p>\n</blockquote>\n<p>以下讨论8086<br><strong><em>转移行为的分类</em></strong><br><strong>第一类:只修改IP的转移行为叫做段内转移</strong> </p>\n<blockquote>\n<p>根据转一指令对IP的修改范围不同,段内转移可分为。 </p>\n</blockquote>\n<ol>\n<li>短转移:IP的修改范围为-128 ~ 127.</li>\n<li>近转移:IP的修改范围为-32768 ~ 32767.</li>\n</ol>\n<p><strong>第二类:同时修改CS和IP的转移行为叫段间转移</strong> </p>\n<p><strong><em>转一指令的分类</em></strong> </p>\n<ol>\n<li>无条件转移指令,例如jmp </li>\n<li>条件转移指令 </li>\n<li>循环指令,例如loop </li>\n<li>过程 </li>\n<li>中断 </li>\n</ol>\n<p>本章主要通过深入学习无条件转移指令jmp来理解CPU执行转移指令的基本原理 </p>\n<h2 id=\"offset\"><a href=\"#offset\" class=\"headerlink\" title=\"offset\"></a>offset</h2><p><strong>功能是取得标号地址的偏移地址</strong></p>\n<pre><code>code segment\nstart:\n mov ax,offset start ;相当于mov ax,0\ns:\n mov ax,offset s ;相当于mov ax,3 \n</code></pre><h2 id=\"jmp\"><a href=\"#jmp\" class=\"headerlink\" title=\"jmp\"></a>jmp</h2><p>jmp为无条件跳转指令,可以只修改IP,也可以同时修改CS和IP。<br>jmp指令要给出两种信息: </p>\n<ol>\n<li>转移的目的地址 </li>\n<li>转移的距离(段间转移、段内转移、段内近转移)</li>\n</ol>\n<h3 id=\"依据位移进行转移的jmp指令\"><a href=\"#依据位移进行转移的jmp指令\" class=\"headerlink\" title=\"依据位移进行转移的jmp指令\"></a>依据位移进行转移的jmp指令</h3><p>NO.1</p>\n<pre><code>jmp short 标号(转到标号处执行指令)\n</code></pre><p>这种格式实现的事段内短转移,他对IP的修改范围是-128 ~ 127,转移指令结束后,CS:IP应该指向标号指令。 </p>\n<p>根据机器码可得出<strong>CPU执行jmp指令时机器码中并不需要转移的目的地址</strong> </p>\n<blockquote>\n<p>CPU执行指令的过程 </p>\n<ol>\n<li>从CS:IP执行内存单元读取指令,读取的指令进入指令缓冲器; </li>\n<li>(IP) = (IP) + 读取的长度,从而指向下一个指令; </li>\n<li>执行指令。转到(1),重复.</li>\n</ol>\n</blockquote>\n<p>由此可得,执行jmp并不需要目的地址,而是需要<strong>位移地址</strong><br>short的位移量存储空间占一个字节,8个二进制位,首位为符号位,用补码表示,因此可表示的位移量为-128 ~ 127。<br>同理,near的位移量储存空间占两个字节,16个二进制位,首位为符号位,用补码表示,因此可表示的位移量为-32768 ~ 32767。</p>\n<p>由上引入近转移</p>\n<pre><code>jmp near ptr 标号(段内近转移)\n</code></pre><h3 id=\"转移的目的地址在指令中的jmp指令\"><a href=\"#转移的目的地址在指令中的jmp指令\" class=\"headerlink\" title=\"转移的目的地址在指令中的jmp指令\"></a>转移的目的地址在指令中的jmp指令</h3><p>前面讲的是段内转移,因此jmp只需要位移地址即可进行对IP的修改。</p>\n<pre><code>jmp far ptr 标号\n</code></pre><p>以上实现的是段间转移,又称远转移。可以让(CS) = 标号所在的段地址;(IP) = 标号所在的偏移地址。</p>\n<h3 id=\"转移地址在寄存器中的jmp指令\"><a href=\"#转移地址在寄存器中的jmp指令\" class=\"headerlink\" title=\"转移地址在寄存器中的jmp指令\"></a>转移地址在寄存器中的jmp指令</h3><pre><code>jmp 16位reg\n</code></pre><p>功能:(IP) = (16位reg)<br>用寄存器中的值修改IP。</p>\n<h3 id=\"转移地址在内存中的jmp指令\"><a href=\"#转移地址在内存中的jmp指令\" class=\"headerlink\" title=\"转移地址在内存中的jmp指令\"></a>转移地址在内存中的jmp指令</h3><blockquote>\n<p>两种格式 </p>\n</blockquote>\n<p><strong>段内转移</strong></p>\n<pre><code>jmp word ptr 内存单元地址 ;(段内转移)\n</code></pre><p>从内存单元地址处开始存放着一个字,是转移的目的的偏移地址。<br>例如:</p>\n<pre><code>mov ax,0123H\nmov ds:[0],ax\njmp word ptr ds:[0]\n</code></pre><p>执行后(IP) = 0123H </p>\n<p><strong>段间转移</strong></p>\n<pre><code>jmp dword ptr 内存单元地址 ;(段间转移)\n</code></pre><p>从内存单元地址处开始存放着两个字节,是转移的目的的段地址和偏移地址,<strong>高地址是段地址</strong>,<strong>低地址是偏移地址</strong><br>(CS) = 内存单元地址+2<br>(IP) = 内存单元地址<br>比如一下指令: </p>\n<pre><code>mov ax,0123H\nmov ds:[0],ax\nmov ax,4567H\nmov ds:[2],ax\njmp dword ptr ds:[0]\n</code></pre><p>执行完后(CS) = 4567H,(IP) = 0123H。 </p>\n<h2 id=\"jcxz指令\"><a href=\"#jcxz指令\" class=\"headerlink\" title=\"jcxz指令\"></a>jcxz指令</h2><p>jcxz是有条件转移指令,<strong>所有的有条件转移指令都是短转移指令</strong>,对应的机器码中包含的是转移位移,不是目的地址。对IP的修改范围都是-128 ~ 127。</p>\n<p><strong>jcxz == jmp when cx is zero</strong><br>当cx为零时,执行转移指令,若不为零,则不转移<br>使用格式:</p>\n<pre><code>jcxz 标号\n</code></pre><h2 id=\"loop指令\"><a href=\"#loop指令\" class=\"headerlink\" title=\"loop指令\"></a>loop指令</h2><p>loop指令位循环指令,所有的循环指令都是短转移。<br><strong>详见第五章</strong></p>\n<h2 id=\"根据位移进行转移的意义\"><a href=\"#根据位移进行转移的意义\" class=\"headerlink\" title=\"根据位移进行转移的意义\"></a>根据位移进行转移的意义</h2><pre><code>jmp short x\njmp near ptr x\njcxz x\nloop\n</code></pre><p>以上都是根据转移的位移量进行转移的,这样有利于程序在内存中的浮动装配,意思就是把这段程序装在内存中的任意一段空间内都可以执行,不会因为转移的地址不同而导致程序不能执行。</p>\n<h2 id=\"编译器对转移位移超界的检测\"><a href=\"#编译器对转移位移超界的检测\" class=\"headerlink\" title=\"编译器对转移位移超界的检测\"></a>编译器对转移位移超界的检测</h2><p><strong>jmp超界编译器会报错</strong>,别的没其他知识点</p>\n"},{"title":"汇编第八章:数据处理的两个基本问题","date":"2017-12-28T19:23:25.000Z","_content":"\n# 汇编第八章:数据处理的两个基本问题\n> 章前言说的是对前面所有的内容是有总结性的,这里主要探讨两个问题: \n> 1. 处理的数据在什么地方? \n> 2. 处理的数据有多长?\n\n定义两个符号**reg**和**sreg**\n**reg**代表寄存器,包括:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di \n**sreg**代表段寄存器,包括:ds,ss,cs,es\n## bx、si、di、bp的使用规则\n> 三个规则,一会总结,字比较多,等会打。\n\n1. 只有这四个寄存器可以用在[...]中进行寻址 \n\t\t\n\t\tmov ax,[bx]\n\t\tmov ax,[bx+si]\n以下的是错误的\n\n\t\tmov ax,[cx]\n\t\tmov ax,[ax]\n\n2. 这四个可以单独出现,但是组合的情况只有四种可以使用:bx和si、bx和di、bp和si、bp和di。 \n\n\t\tmov ax,[bx+si]\n\t\tmov ax,[bx+di]\n\t\tmov ax,[bp+si]\n\t\tmov ax,[bp+di+idata]\n以下的是错误的\n\n\t\tmov ax.[bx+dp]\n\t\tmov ax,[si+di]\n3. 只要使用[...]中bp寄存器时,若没有显式的给出段寄存器,则默认为段地址在ss中\n\n\t\tmov ax,[bp]\t\t\t ;(ax) = ((ss)*16+(bp))\n\t\t\n## 机器指令处理的数据在什么地方\n机器指令都是经过处理过的数据:1、读取。2、存入。3、运行 \n\n所有处理的数据可以在三个地方:CPU内部、内存、端口(后面说先不用管) \n例如:\n\n\tmov bx,[0]\t\t\t\t;内存\n\tmov bx,ax\t\t\t\t;CPU内部ax寄存器\n\tmov bx,1\t\t\t\t;CPU内部指令缓冲器\n\t\t\n## 汇编语言中数据位置的表达\n汇编语言用3个概念来表达数据的位置: \n1. 立即数[idata] \n例如:\n\n\tmov ax,1\n\tadd bx,2000H\n\tor bx,00010000B\n\tmov al,'a'\n \n以上 \n2. 寄存器 \n例如\n\n\tmov ax,bx\n\tpush ds\n以上 \n3. 段地址和偏移地址 \n例如\n\n\tmov ax,[bx]\t\t\t;段地址默认在ds中\n\n## 寻址方式\n**五种寻址方式:** \n1. [idata] **直接寻址** \n2. [bx] **寄存器间接寻址** \n3. [bx+idata] **寄存器相对寻址** \n4. [bx+si] **基址变址寻址** \n5. [bx+si+idata] **相对基址变址寻址**\n\n总结:**有两个寄存器就是基址变址,只要有idata就是相对(只有idata是直接寻址,只有一个寄存器是寄存器间接寻址)**\n\n## 指令要处理的数据有多长\n1. 通过寄存器名可以致命处理的数据长度\n2. 在没有寄存器的情况下,用操作符“X ptr”指明要操作的长度,X可以是byte或者是word。 \n例如\n\n\t\tmov word prt ds:[0],1\n\t\tinc word prt [bx]\n\t\t\n\t\tmov byte ptr ds:[0],1\n\t\tadd byte ptr [bx],2\n## 寻址的综合应用\n> 主要就是类c语言的数组的操作,看看书看就行了。\n\n## **div**\n> 两种div方式!(被除数是除号之前的。)\n\n1. 16位寄存器除以8位寄存器:16位做被除数放在AX里面。商在AL里,余数在AH里\n2. 32位寄存器除以16位寄存器:高16位放在DX,低16位放在AX里,共32位做被除数。商在AX里,余数在DX里。 \n\n**商都放在低位寄存器中,余数放在高位,除数放在一个内存单元或者reg中**\n例如:\n\n\t16位/8位:\n\t\tdiv byte ptr ds:[0]\t\t\n\t\t;(al) = (ax)/((ds)*16+0)\n\t\t;(ah) = (ax)mod((ds)*16+0)\n\t\n\t32位/8位:\n\t\tdiv word ptr ds:[0]\t\t\n\t\t;(ax) = [(dx)*10000H + (ax)] / ((ds)*16+0)\n\t\t;(dx) = [(dx)*10000H + (ax)] mod ((ds)*16+0)\n\t\t\n实际应用,例如100001/100,100001 = 186A1H\n\n\tmov dx,1H\n\tmov ax,86A1H\n\tmov bx,100\n\tdiv bx\n\t;商在AX里,余数在DX里\n\t\n## dd\n> dd(define double),用于定义双精度字节,一个双精度占2个字,4个字节。\n\n\tdata segment\n\t\tdb 1\n\t\tdw 1\n\t\tdd 1\n\tdata ends\n\n上面这段: \n\t1. 第一个数据是01H,在data:[0]处 \n\t2. 第二个数据是0001H,在data:[1] - data:[2]处 \n\t3. 第三个数据是00000001H,在data:[3] - data:[6]处 \n\n## dup\n和dd一样都是一个操作符,它是和db、dw、dd等数据定义伪指令配合使用的,用来进行数据的重复,比如:\n\n\tdb 3 dup (0)\n定义了3个字节,他们的值都是0,相当于\n\n\tdb 0,0,0\n又例如:\n\n\tdb 3 dup (0,1,2)\n定义了9个字节,分别是0,1,2,0,1,2,0,1,2,相当于\n\n\tdb 0,1,2,0,1,2,0,1,2\n**使用规范如下**\n\n\tdb 重复次数 dup (内容)\t\t;(重复的字节型数据)\n\tdw 重复次数 dup (内容)\t\t;(重复的字型数据)\n\tdd 重复次数 dup (内容)\t\t;(重复的双精度字型数据)\n\n\n\t\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","source":"_posts/汇编第八章:数据处理的两个基本问题.md","raw":"---\ntitle: 汇编第八章:数据处理的两个基本问题\ndate: 2017-12-29 03:23:25\ntags:\n\t- 汇编语言\n\t- 笔记\ncategories: 汇编语言\n---\n\n# 汇编第八章:数据处理的两个基本问题\n> 章前言说的是对前面所有的内容是有总结性的,这里主要探讨两个问题: \n> 1. 处理的数据在什么地方? \n> 2. 处理的数据有多长?\n\n定义两个符号**reg**和**sreg**\n**reg**代表寄存器,包括:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di \n**sreg**代表段寄存器,包括:ds,ss,cs,es\n## bx、si、di、bp的使用规则\n> 三个规则,一会总结,字比较多,等会打。\n\n1. 只有这四个寄存器可以用在[...]中进行寻址 \n\t\t\n\t\tmov ax,[bx]\n\t\tmov ax,[bx+si]\n以下的是错误的\n\n\t\tmov ax,[cx]\n\t\tmov ax,[ax]\n\n2. 这四个可以单独出现,但是组合的情况只有四种可以使用:bx和si、bx和di、bp和si、bp和di。 \n\n\t\tmov ax,[bx+si]\n\t\tmov ax,[bx+di]\n\t\tmov ax,[bp+si]\n\t\tmov ax,[bp+di+idata]\n以下的是错误的\n\n\t\tmov ax.[bx+dp]\n\t\tmov ax,[si+di]\n3. 只要使用[...]中bp寄存器时,若没有显式的给出段寄存器,则默认为段地址在ss中\n\n\t\tmov ax,[bp]\t\t\t ;(ax) = ((ss)*16+(bp))\n\t\t\n## 机器指令处理的数据在什么地方\n机器指令都是经过处理过的数据:1、读取。2、存入。3、运行 \n\n所有处理的数据可以在三个地方:CPU内部、内存、端口(后面说先不用管) \n例如:\n\n\tmov bx,[0]\t\t\t\t;内存\n\tmov bx,ax\t\t\t\t;CPU内部ax寄存器\n\tmov bx,1\t\t\t\t;CPU内部指令缓冲器\n\t\t\n## 汇编语言中数据位置的表达\n汇编语言用3个概念来表达数据的位置: \n1. 立即数[idata] \n例如:\n\n\tmov ax,1\n\tadd bx,2000H\n\tor bx,00010000B\n\tmov al,'a'\n \n以上 \n2. 寄存器 \n例如\n\n\tmov ax,bx\n\tpush ds\n以上 \n3. 段地址和偏移地址 \n例如\n\n\tmov ax,[bx]\t\t\t;段地址默认在ds中\n\n## 寻址方式\n**五种寻址方式:** \n1. [idata] **直接寻址** \n2. [bx] **寄存器间接寻址** \n3. [bx+idata] **寄存器相对寻址** \n4. [bx+si] **基址变址寻址** \n5. [bx+si+idata] **相对基址变址寻址**\n\n总结:**有两个寄存器就是基址变址,只要有idata就是相对(只有idata是直接寻址,只有一个寄存器是寄存器间接寻址)**\n\n## 指令要处理的数据有多长\n1. 通过寄存器名可以致命处理的数据长度\n2. 在没有寄存器的情况下,用操作符“X ptr”指明要操作的长度,X可以是byte或者是word。 \n例如\n\n\t\tmov word prt ds:[0],1\n\t\tinc word prt [bx]\n\t\t\n\t\tmov byte ptr ds:[0],1\n\t\tadd byte ptr [bx],2\n## 寻址的综合应用\n> 主要就是类c语言的数组的操作,看看书看就行了。\n\n## **div**\n> 两种div方式!(被除数是除号之前的。)\n\n1. 16位寄存器除以8位寄存器:16位做被除数放在AX里面。商在AL里,余数在AH里\n2. 32位寄存器除以16位寄存器:高16位放在DX,低16位放在AX里,共32位做被除数。商在AX里,余数在DX里。 \n\n**商都放在低位寄存器中,余数放在高位,除数放在一个内存单元或者reg中**\n例如:\n\n\t16位/8位:\n\t\tdiv byte ptr ds:[0]\t\t\n\t\t;(al) = (ax)/((ds)*16+0)\n\t\t;(ah) = (ax)mod((ds)*16+0)\n\t\n\t32位/8位:\n\t\tdiv word ptr ds:[0]\t\t\n\t\t;(ax) = [(dx)*10000H + (ax)] / ((ds)*16+0)\n\t\t;(dx) = [(dx)*10000H + (ax)] mod ((ds)*16+0)\n\t\t\n实际应用,例如100001/100,100001 = 186A1H\n\n\tmov dx,1H\n\tmov ax,86A1H\n\tmov bx,100\n\tdiv bx\n\t;商在AX里,余数在DX里\n\t\n## dd\n> dd(define double),用于定义双精度字节,一个双精度占2个字,4个字节。\n\n\tdata segment\n\t\tdb 1\n\t\tdw 1\n\t\tdd 1\n\tdata ends\n\n上面这段: \n\t1. 第一个数据是01H,在data:[0]处 \n\t2. 第二个数据是0001H,在data:[1] - data:[2]处 \n\t3. 第三个数据是00000001H,在data:[3] - data:[6]处 \n\n## dup\n和dd一样都是一个操作符,它是和db、dw、dd等数据定义伪指令配合使用的,用来进行数据的重复,比如:\n\n\tdb 3 dup (0)\n定义了3个字节,他们的值都是0,相当于\n\n\tdb 0,0,0\n又例如:\n\n\tdb 3 dup (0,1,2)\n定义了9个字节,分别是0,1,2,0,1,2,0,1,2,相当于\n\n\tdb 0,1,2,0,1,2,0,1,2\n**使用规范如下**\n\n\tdb 重复次数 dup (内容)\t\t;(重复的字节型数据)\n\tdw 重复次数 dup (内容)\t\t;(重复的字型数据)\n\tdd 重复次数 dup (内容)\t\t;(重复的双精度字型数据)\n\n\n\t\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","slug":"汇编第八章:数据处理的两个基本问题","published":1,"updated":"2017-12-30T09:40:34.461Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkmz0028tzy47trp3ycv","content":"<h1 id=\"汇编第八章:数据处理的两个基本问题\"><a href=\"#汇编第八章:数据处理的两个基本问题\" class=\"headerlink\" title=\"汇编第八章:数据处理的两个基本问题\"></a>汇编第八章:数据处理的两个基本问题</h1><blockquote>\n<p>章前言说的是对前面所有的内容是有总结性的,这里主要探讨两个问题: </p>\n<ol>\n<li>处理的数据在什么地方? </li>\n<li>处理的数据有多长?</li>\n</ol>\n</blockquote>\n<p>定义两个符号<strong>reg</strong>和<strong>sreg</strong><br><strong>reg</strong>代表寄存器,包括:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di<br><strong>sreg</strong>代表段寄存器,包括:ds,ss,cs,es</p>\n<h2 id=\"bx、si、di、bp的使用规则\"><a href=\"#bx、si、di、bp的使用规则\" class=\"headerlink\" title=\"bx、si、di、bp的使用规则\"></a>bx、si、di、bp的使用规则</h2><blockquote>\n<p>三个规则,一会总结,字比较多,等会打。</p>\n</blockquote>\n<ol>\n<li><p>只有这四个寄存器可以用在[…]中进行寻址 </p>\n<pre><code>mov ax,[bx]\nmov ax,[bx+si]\n</code></pre><p>以下的是错误的</p>\n<pre><code>mov ax,[cx]\nmov ax,[ax]\n</code></pre></li>\n<li><p>这四个可以单独出现,但是组合的情况只有四种可以使用:bx和si、bx和di、bp和si、bp和di。 </p>\n<pre><code>mov ax,[bx+si]\nmov ax,[bx+di]\nmov ax,[bp+si]\nmov ax,[bp+di+idata]\n</code></pre><p>以下的是错误的</p>\n<pre><code>mov ax.[bx+dp]\nmov ax,[si+di]\n</code></pre></li>\n<li><p>只要使用[…]中bp寄存器时,若没有显式的给出段寄存器,则默认为段地址在ss中</p>\n<pre><code>mov ax,[bp] ;(ax) = ((ss)*16+(bp))\n</code></pre></li>\n</ol>\n<h2 id=\"机器指令处理的数据在什么地方\"><a href=\"#机器指令处理的数据在什么地方\" class=\"headerlink\" title=\"机器指令处理的数据在什么地方\"></a>机器指令处理的数据在什么地方</h2><p>机器指令都是经过处理过的数据:1、读取。2、存入。3、运行 </p>\n<p>所有处理的数据可以在三个地方:CPU内部、内存、端口(后面说先不用管)<br>例如:</p>\n<pre><code>mov bx,[0] ;内存\nmov bx,ax ;CPU内部ax寄存器\nmov bx,1 ;CPU内部指令缓冲器\n</code></pre><h2 id=\"汇编语言中数据位置的表达\"><a href=\"#汇编语言中数据位置的表达\" class=\"headerlink\" title=\"汇编语言中数据位置的表达\"></a>汇编语言中数据位置的表达</h2><p>汇编语言用3个概念来表达数据的位置: </p>\n<ol>\n<li><p>立即数[idata]<br>例如:</p>\n<p> mov ax,1<br> add bx,2000H<br> or bx,00010000B<br> mov al,’a’</p>\n</li>\n</ol>\n<p>以上 </p>\n<ol start=\"2\">\n<li><p>寄存器<br>例如</p>\n<p> mov ax,bx<br> push ds<br>以上 </p>\n</li>\n<li><p>段地址和偏移地址<br>例如</p>\n<p> mov ax,[bx] ;段地址默认在ds中</p>\n</li>\n</ol>\n<h2 id=\"寻址方式\"><a href=\"#寻址方式\" class=\"headerlink\" title=\"寻址方式\"></a>寻址方式</h2><p><strong>五种寻址方式:</strong> </p>\n<ol>\n<li>[idata] <strong>直接寻址</strong> </li>\n<li>[bx] <strong>寄存器间接寻址</strong> </li>\n<li>[bx+idata] <strong>寄存器相对寻址</strong> </li>\n<li>[bx+si] <strong>基址变址寻址</strong> </li>\n<li>[bx+si+idata] <strong>相对基址变址寻址</strong></li>\n</ol>\n<p>总结:<strong>有两个寄存器就是基址变址,只要有idata就是相对(只有idata是直接寻址,只有一个寄存器是寄存器间接寻址)</strong></p>\n<h2 id=\"指令要处理的数据有多长\"><a href=\"#指令要处理的数据有多长\" class=\"headerlink\" title=\"指令要处理的数据有多长\"></a>指令要处理的数据有多长</h2><ol>\n<li>通过寄存器名可以致命处理的数据长度</li>\n<li><p>在没有寄存器的情况下,用操作符“X ptr”指明要操作的长度,X可以是byte或者是word。<br>例如</p>\n<pre><code>mov word prt ds:[0],1\ninc word prt [bx]\n\nmov byte ptr ds:[0],1\nadd byte ptr [bx],2\n</code></pre><h2 id=\"寻址的综合应用\"><a href=\"#寻址的综合应用\" class=\"headerlink\" title=\"寻址的综合应用\"></a>寻址的综合应用</h2><blockquote>\n<p>主要就是类c语言的数组的操作,看看书看就行了。</p>\n</blockquote>\n</li>\n</ol>\n<h2 id=\"div\"><a href=\"#div\" class=\"headerlink\" title=\"div\"></a><strong>div</strong></h2><blockquote>\n<p>两种div方式!(被除数是除号之前的。)</p>\n</blockquote>\n<ol>\n<li>16位寄存器除以8位寄存器:16位做被除数放在AX里面。商在AL里,余数在AH里</li>\n<li>32位寄存器除以16位寄存器:高16位放在DX,低16位放在AX里,共32位做被除数。商在AX里,余数在DX里。 </li>\n</ol>\n<p><strong>商都放在低位寄存器中,余数放在高位,除数放在一个内存单元或者reg中</strong><br>例如:</p>\n<pre><code>16位/8位:\n div byte ptr ds:[0] \n ;(al) = (ax)/((ds)*16+0)\n ;(ah) = (ax)mod((ds)*16+0)\n\n32位/8位:\n div word ptr ds:[0] \n ;(ax) = [(dx)*10000H + (ax)] / ((ds)*16+0)\n ;(dx) = [(dx)*10000H + (ax)] mod ((ds)*16+0)\n</code></pre><p>实际应用,例如100001/100,100001 = 186A1H</p>\n<pre><code>mov dx,1H\nmov ax,86A1H\nmov bx,100\ndiv bx\n;商在AX里,余数在DX里\n</code></pre><h2 id=\"dd\"><a href=\"#dd\" class=\"headerlink\" title=\"dd\"></a>dd</h2><blockquote>\n<p>dd(define double),用于定义双精度字节,一个双精度占2个字,4个字节。</p>\n</blockquote>\n<pre><code>data segment\n db 1\n dw 1\n dd 1\ndata ends\n</code></pre><p>上面这段: </p>\n<pre><code>1. 第一个数据是01H,在data:[0]处 \n2. 第二个数据是0001H,在data:[1] - data:[2]处 \n3. 第三个数据是00000001H,在data:[3] - data:[6]处 \n</code></pre><h2 id=\"dup\"><a href=\"#dup\" class=\"headerlink\" title=\"dup\"></a>dup</h2><p>和dd一样都是一个操作符,它是和db、dw、dd等数据定义伪指令配合使用的,用来进行数据的重复,比如:</p>\n<pre><code>db 3 dup (0)\n</code></pre><p>定义了3个字节,他们的值都是0,相当于</p>\n<pre><code>db 0,0,0\n</code></pre><p>又例如:</p>\n<pre><code>db 3 dup (0,1,2)\n</code></pre><p>定义了9个字节,分别是0,1,2,0,1,2,0,1,2,相当于</p>\n<pre><code>db 0,1,2,0,1,2,0,1,2\n</code></pre><p><strong>使用规范如下</strong></p>\n<pre><code>db 重复次数 dup (内容) ;(重复的字节型数据)\ndw 重复次数 dup (内容) ;(重复的字型数据)\ndd 重复次数 dup (内容) ;(重复的双精度字型数据)\n</code></pre>","site":{"data":{}},"excerpt":"","more":"<h1 id=\"汇编第八章:数据处理的两个基本问题\"><a href=\"#汇编第八章:数据处理的两个基本问题\" class=\"headerlink\" title=\"汇编第八章:数据处理的两个基本问题\"></a>汇编第八章:数据处理的两个基本问题</h1><blockquote>\n<p>章前言说的是对前面所有的内容是有总结性的,这里主要探讨两个问题: </p>\n<ol>\n<li>处理的数据在什么地方? </li>\n<li>处理的数据有多长?</li>\n</ol>\n</blockquote>\n<p>定义两个符号<strong>reg</strong>和<strong>sreg</strong><br><strong>reg</strong>代表寄存器,包括:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di<br><strong>sreg</strong>代表段寄存器,包括:ds,ss,cs,es</p>\n<h2 id=\"bx、si、di、bp的使用规则\"><a href=\"#bx、si、di、bp的使用规则\" class=\"headerlink\" title=\"bx、si、di、bp的使用规则\"></a>bx、si、di、bp的使用规则</h2><blockquote>\n<p>三个规则,一会总结,字比较多,等会打。</p>\n</blockquote>\n<ol>\n<li><p>只有这四个寄存器可以用在[…]中进行寻址 </p>\n<pre><code>mov ax,[bx]\nmov ax,[bx+si]\n</code></pre><p>以下的是错误的</p>\n<pre><code>mov ax,[cx]\nmov ax,[ax]\n</code></pre></li>\n<li><p>这四个可以单独出现,但是组合的情况只有四种可以使用:bx和si、bx和di、bp和si、bp和di。 </p>\n<pre><code>mov ax,[bx+si]\nmov ax,[bx+di]\nmov ax,[bp+si]\nmov ax,[bp+di+idata]\n</code></pre><p>以下的是错误的</p>\n<pre><code>mov ax.[bx+dp]\nmov ax,[si+di]\n</code></pre></li>\n<li><p>只要使用[…]中bp寄存器时,若没有显式的给出段寄存器,则默认为段地址在ss中</p>\n<pre><code>mov ax,[bp] ;(ax) = ((ss)*16+(bp))\n</code></pre></li>\n</ol>\n<h2 id=\"机器指令处理的数据在什么地方\"><a href=\"#机器指令处理的数据在什么地方\" class=\"headerlink\" title=\"机器指令处理的数据在什么地方\"></a>机器指令处理的数据在什么地方</h2><p>机器指令都是经过处理过的数据:1、读取。2、存入。3、运行 </p>\n<p>所有处理的数据可以在三个地方:CPU内部、内存、端口(后面说先不用管)<br>例如:</p>\n<pre><code>mov bx,[0] ;内存\nmov bx,ax ;CPU内部ax寄存器\nmov bx,1 ;CPU内部指令缓冲器\n</code></pre><h2 id=\"汇编语言中数据位置的表达\"><a href=\"#汇编语言中数据位置的表达\" class=\"headerlink\" title=\"汇编语言中数据位置的表达\"></a>汇编语言中数据位置的表达</h2><p>汇编语言用3个概念来表达数据的位置: </p>\n<ol>\n<li><p>立即数[idata]<br>例如:</p>\n<p> mov ax,1<br> add bx,2000H<br> or bx,00010000B<br> mov al,’a’</p>\n</li>\n</ol>\n<p>以上 </p>\n<ol start=\"2\">\n<li><p>寄存器<br>例如</p>\n<p> mov ax,bx<br> push ds<br>以上 </p>\n</li>\n<li><p>段地址和偏移地址<br>例如</p>\n<p> mov ax,[bx] ;段地址默认在ds中</p>\n</li>\n</ol>\n<h2 id=\"寻址方式\"><a href=\"#寻址方式\" class=\"headerlink\" title=\"寻址方式\"></a>寻址方式</h2><p><strong>五种寻址方式:</strong> </p>\n<ol>\n<li>[idata] <strong>直接寻址</strong> </li>\n<li>[bx] <strong>寄存器间接寻址</strong> </li>\n<li>[bx+idata] <strong>寄存器相对寻址</strong> </li>\n<li>[bx+si] <strong>基址变址寻址</strong> </li>\n<li>[bx+si+idata] <strong>相对基址变址寻址</strong></li>\n</ol>\n<p>总结:<strong>有两个寄存器就是基址变址,只要有idata就是相对(只有idata是直接寻址,只有一个寄存器是寄存器间接寻址)</strong></p>\n<h2 id=\"指令要处理的数据有多长\"><a href=\"#指令要处理的数据有多长\" class=\"headerlink\" title=\"指令要处理的数据有多长\"></a>指令要处理的数据有多长</h2><ol>\n<li>通过寄存器名可以致命处理的数据长度</li>\n<li><p>在没有寄存器的情况下,用操作符“X ptr”指明要操作的长度,X可以是byte或者是word。<br>例如</p>\n<pre><code>mov word prt ds:[0],1\ninc word prt [bx]\n\nmov byte ptr ds:[0],1\nadd byte ptr [bx],2\n</code></pre><h2 id=\"寻址的综合应用\"><a href=\"#寻址的综合应用\" class=\"headerlink\" title=\"寻址的综合应用\"></a>寻址的综合应用</h2><blockquote>\n<p>主要就是类c语言的数组的操作,看看书看就行了。</p>\n</blockquote>\n</li>\n</ol>\n<h2 id=\"div\"><a href=\"#div\" class=\"headerlink\" title=\"div\"></a><strong>div</strong></h2><blockquote>\n<p>两种div方式!(被除数是除号之前的。)</p>\n</blockquote>\n<ol>\n<li>16位寄存器除以8位寄存器:16位做被除数放在AX里面。商在AL里,余数在AH里</li>\n<li>32位寄存器除以16位寄存器:高16位放在DX,低16位放在AX里,共32位做被除数。商在AX里,余数在DX里。 </li>\n</ol>\n<p><strong>商都放在低位寄存器中,余数放在高位,除数放在一个内存单元或者reg中</strong><br>例如:</p>\n<pre><code>16位/8位:\n div byte ptr ds:[0] \n ;(al) = (ax)/((ds)*16+0)\n ;(ah) = (ax)mod((ds)*16+0)\n\n32位/8位:\n div word ptr ds:[0] \n ;(ax) = [(dx)*10000H + (ax)] / ((ds)*16+0)\n ;(dx) = [(dx)*10000H + (ax)] mod ((ds)*16+0)\n</code></pre><p>实际应用,例如100001/100,100001 = 186A1H</p>\n<pre><code>mov dx,1H\nmov ax,86A1H\nmov bx,100\ndiv bx\n;商在AX里,余数在DX里\n</code></pre><h2 id=\"dd\"><a href=\"#dd\" class=\"headerlink\" title=\"dd\"></a>dd</h2><blockquote>\n<p>dd(define double),用于定义双精度字节,一个双精度占2个字,4个字节。</p>\n</blockquote>\n<pre><code>data segment\n db 1\n dw 1\n dd 1\ndata ends\n</code></pre><p>上面这段: </p>\n<pre><code>1. 第一个数据是01H,在data:[0]处 \n2. 第二个数据是0001H,在data:[1] - data:[2]处 \n3. 第三个数据是00000001H,在data:[3] - data:[6]处 \n</code></pre><h2 id=\"dup\"><a href=\"#dup\" class=\"headerlink\" title=\"dup\"></a>dup</h2><p>和dd一样都是一个操作符,它是和db、dw、dd等数据定义伪指令配合使用的,用来进行数据的重复,比如:</p>\n<pre><code>db 3 dup (0)\n</code></pre><p>定义了3个字节,他们的值都是0,相当于</p>\n<pre><code>db 0,0,0\n</code></pre><p>又例如:</p>\n<pre><code>db 3 dup (0,1,2)\n</code></pre><p>定义了9个字节,分别是0,1,2,0,1,2,0,1,2,相当于</p>\n<pre><code>db 0,1,2,0,1,2,0,1,2\n</code></pre><p><strong>使用规范如下</strong></p>\n<pre><code>db 重复次数 dup (内容) ;(重复的字节型数据)\ndw 重复次数 dup (内容) ;(重复的字型数据)\ndd 重复次数 dup (内容) ;(重复的双精度字型数据)\n</code></pre>"},{"title":"汇编第五章 [BX]和loop指令","date":"2017-12-28T12:07:35.000Z","_content":"\n# 汇编第五章 [BX]和loop指令\n\n**[bx]**表示偏移地址 \n**ss:ip** 表示栈段 \n**push ax**的具体流程 \n\t\t\n\tpush ax:\n\tsp = sp - 2;\n\t(ss:sp) = ax;\n\n**pop ax**的具体操作 \n\n\tpop ax:\n\tax = (ss:sp);\n\tsp+=2; \n\t\n**inc ax** ax的内容加1 \n\n**mov ax,2000H** 其中ah = 20 al = 00 \n\n\t当\n\tBE 21000H\n\t00 21001H\n\t.\n\t.\n\t.\n\t\n\tmov ax,2100H;\n\tmox dx,ax;\n\tmov bx,0;\n\tmov ax,[bx]\n\t\n\t此时 ax = 00BE\n!!意为先存低位,在存高位。 \n\n## LOOP指令 \n**LOOP执行顺序**\n\n\tLOOP执行顺序:\n\t1.CX--;\n\t2.CX==0?顺序执行:循环\n\n**CX设置循环次数**\n\t\n\t 例如:\n\t mov cx,11\n\tL:add ax,1\n\t LOOP L\n\n**将ffff传入ax中的时候要前面加零**\n\n\tmov ax,0ffffH\n\tmov dx,ax\n\t.\n\t.\n\t.\n**汇编语言程序中,数据不能以字母开头**\n## DEBUG和汇编编译器MASM对指令的不同处理\n\n**DEBUG中:** \n*mov al,[0]* ;含义:(al) = ((dx)*16+0) \n**源程序中:**\t \n*mov al,[0]* ;含义:(al) = 0 \n>在源程序中,如果用指令访问一个内存单元,则在指令中必须用“[...]”来表示内存单元\n>,如果在“[]”里直接用一个常量idata直接给出内存单元的偏移地址,就要在\"[]\"的前面\n>显示的给出段地址所在的段寄存器。 \n\n例如:\n\t\n\tmov ax,dx:[0]\n## 段前缀\n以上这样的表示方法dx叫做**段前缀** \n类似的比如 \n\t\n\tmov ax,ds:[0]\n\tmov ax,cx:[0]\n\tmov ax,ss:[0]\n\tmov ax,es:[0]\n\n等等ds:、cx:、ss:、es:、都叫做段前缀 \n\n## 一段安全的空间 \n直接向内存中写入数据时,要用: \n**0:200 ~ 0:2ff** \n\n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t ","source":"_posts/汇编第五章-BX-和loop指令.md","raw":"---\ntitle: '汇编第五章 [BX]和loop指令'\ndate: 2017-12-28 20:07:35\ntags:\n\t- 汇编语言\n\t- 笔记\ncategories: 汇编语言\n---\n\n# 汇编第五章 [BX]和loop指令\n\n**[bx]**表示偏移地址 \n**ss:ip** 表示栈段 \n**push ax**的具体流程 \n\t\t\n\tpush ax:\n\tsp = sp - 2;\n\t(ss:sp) = ax;\n\n**pop ax**的具体操作 \n\n\tpop ax:\n\tax = (ss:sp);\n\tsp+=2; \n\t\n**inc ax** ax的内容加1 \n\n**mov ax,2000H** 其中ah = 20 al = 00 \n\n\t当\n\tBE 21000H\n\t00 21001H\n\t.\n\t.\n\t.\n\t\n\tmov ax,2100H;\n\tmox dx,ax;\n\tmov bx,0;\n\tmov ax,[bx]\n\t\n\t此时 ax = 00BE\n!!意为先存低位,在存高位。 \n\n## LOOP指令 \n**LOOP执行顺序**\n\n\tLOOP执行顺序:\n\t1.CX--;\n\t2.CX==0?顺序执行:循环\n\n**CX设置循环次数**\n\t\n\t 例如:\n\t mov cx,11\n\tL:add ax,1\n\t LOOP L\n\n**将ffff传入ax中的时候要前面加零**\n\n\tmov ax,0ffffH\n\tmov dx,ax\n\t.\n\t.\n\t.\n**汇编语言程序中,数据不能以字母开头**\n## DEBUG和汇编编译器MASM对指令的不同处理\n\n**DEBUG中:** \n*mov al,[0]* ;含义:(al) = ((dx)*16+0) \n**源程序中:**\t \n*mov al,[0]* ;含义:(al) = 0 \n>在源程序中,如果用指令访问一个内存单元,则在指令中必须用“[...]”来表示内存单元\n>,如果在“[]”里直接用一个常量idata直接给出内存单元的偏移地址,就要在\"[]\"的前面\n>显示的给出段地址所在的段寄存器。 \n\n例如:\n\t\n\tmov ax,dx:[0]\n## 段前缀\n以上这样的表示方法dx叫做**段前缀** \n类似的比如 \n\t\n\tmov ax,ds:[0]\n\tmov ax,cx:[0]\n\tmov ax,ss:[0]\n\tmov ax,es:[0]\n\n等等ds:、cx:、ss:、es:、都叫做段前缀 \n\n## 一段安全的空间 \n直接向内存中写入数据时,要用: \n**0:200 ~ 0:2ff** \n\n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t \n\t ","slug":"汇编第五章-BX-和loop指令","published":1,"updated":"2017-12-28T19:33:59.114Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkn0002btzy49v4i83vk","content":"<h1 id=\"汇编第五章-BX-和loop指令\"><a href=\"#汇编第五章-BX-和loop指令\" class=\"headerlink\" title=\"汇编第五章 [BX]和loop指令\"></a>汇编第五章 [BX]和loop指令</h1><p><strong>[bx]</strong>表示偏移地址<br><strong>ss:ip</strong> 表示栈段<br><strong>push ax</strong>的具体流程 </p>\n<pre><code>push ax:\nsp = sp - 2;\n(ss:sp) = ax;\n</code></pre><p><strong>pop ax</strong>的具体操作 </p>\n<pre><code>pop ax:\nax = (ss:sp);\nsp+=2; \n</code></pre><p><strong>inc ax</strong> ax的内容加1 </p>\n<p><strong>mov ax,2000H</strong> 其中ah = 20 al = 00 </p>\n<pre><code>当\nBE 21000H\n00 21001H\n.\n.\n.\n\nmov ax,2100H;\nmox dx,ax;\nmov bx,0;\nmov ax,[bx]\n\n此时 ax = 00BE\n</code></pre><p>!!意为先存低位,在存高位。 </p>\n<h2 id=\"LOOP指令\"><a href=\"#LOOP指令\" class=\"headerlink\" title=\"LOOP指令\"></a>LOOP指令</h2><p><strong>LOOP执行顺序</strong></p>\n<pre><code>LOOP执行顺序:\n1.CX--;\n2.CX==0?顺序执行:循环\n</code></pre><p><strong>CX设置循环次数</strong></p>\n<pre><code> 例如:\n mov cx,11\nL:add ax,1\n LOOP L\n</code></pre><p><strong>将ffff传入ax中的时候要前面加零</strong></p>\n<pre><code>mov ax,0ffffH\nmov dx,ax\n.\n.\n.\n</code></pre><p><strong>汇编语言程序中,数据不能以字母开头</strong></p>\n<h2 id=\"DEBUG和汇编编译器MASM对指令的不同处理\"><a href=\"#DEBUG和汇编编译器MASM对指令的不同处理\" class=\"headerlink\" title=\"DEBUG和汇编编译器MASM对指令的不同处理\"></a>DEBUG和汇编编译器MASM对指令的不同处理</h2><p><strong>DEBUG中:</strong><br><em>mov al,[0]</em> ;含义:(al) = ((dx)<em>16+0)<br><strong>源程序中:</strong> \n</em>mov al,[0]* ;含义:(al) = 0 </p>\n<blockquote>\n<p>在源程序中,如果用指令访问一个内存单元,则在指令中必须用“[…]”来表示内存单元<br>,如果在“[]”里直接用一个常量idata直接给出内存单元的偏移地址,就要在”[]”的前面<br>显示的给出段地址所在的段寄存器。 </p>\n</blockquote>\n<p>例如:</p>\n<pre><code>mov ax,dx:[0]\n</code></pre><h2 id=\"段前缀\"><a href=\"#段前缀\" class=\"headerlink\" title=\"段前缀\"></a>段前缀</h2><p>以上这样的表示方法dx叫做<strong>段前缀</strong><br>类似的比如 </p>\n<pre><code>mov ax,ds:[0]\nmov ax,cx:[0]\nmov ax,ss:[0]\nmov ax,es:[0]\n</code></pre><p>等等ds:、cx:、ss:、es:、都叫做段前缀 </p>\n<h2 id=\"一段安全的空间\"><a href=\"#一段安全的空间\" class=\"headerlink\" title=\"一段安全的空间\"></a>一段安全的空间</h2><p>直接向内存中写入数据时,要用:<br><strong>0:200 ~ 0:2ff</strong> </p>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"汇编第五章-BX-和loop指令\"><a href=\"#汇编第五章-BX-和loop指令\" class=\"headerlink\" title=\"汇编第五章 [BX]和loop指令\"></a>汇编第五章 [BX]和loop指令</h1><p><strong>[bx]</strong>表示偏移地址<br><strong>ss:ip</strong> 表示栈段<br><strong>push ax</strong>的具体流程 </p>\n<pre><code>push ax:\nsp = sp - 2;\n(ss:sp) = ax;\n</code></pre><p><strong>pop ax</strong>的具体操作 </p>\n<pre><code>pop ax:\nax = (ss:sp);\nsp+=2; \n</code></pre><p><strong>inc ax</strong> ax的内容加1 </p>\n<p><strong>mov ax,2000H</strong> 其中ah = 20 al = 00 </p>\n<pre><code>当\nBE 21000H\n00 21001H\n.\n.\n.\n\nmov ax,2100H;\nmox dx,ax;\nmov bx,0;\nmov ax,[bx]\n\n此时 ax = 00BE\n</code></pre><p>!!意为先存低位,在存高位。 </p>\n<h2 id=\"LOOP指令\"><a href=\"#LOOP指令\" class=\"headerlink\" title=\"LOOP指令\"></a>LOOP指令</h2><p><strong>LOOP执行顺序</strong></p>\n<pre><code>LOOP执行顺序:\n1.CX--;\n2.CX==0?顺序执行:循环\n</code></pre><p><strong>CX设置循环次数</strong></p>\n<pre><code> 例如:\n mov cx,11\nL:add ax,1\n LOOP L\n</code></pre><p><strong>将ffff传入ax中的时候要前面加零</strong></p>\n<pre><code>mov ax,0ffffH\nmov dx,ax\n.\n.\n.\n</code></pre><p><strong>汇编语言程序中,数据不能以字母开头</strong></p>\n<h2 id=\"DEBUG和汇编编译器MASM对指令的不同处理\"><a href=\"#DEBUG和汇编编译器MASM对指令的不同处理\" class=\"headerlink\" title=\"DEBUG和汇编编译器MASM对指令的不同处理\"></a>DEBUG和汇编编译器MASM对指令的不同处理</h2><p><strong>DEBUG中:</strong><br><em>mov al,[0]</em> ;含义:(al) = ((dx)<em>16+0)<br><strong>源程序中:</strong> \n</em>mov al,[0]* ;含义:(al) = 0 </p>\n<blockquote>\n<p>在源程序中,如果用指令访问一个内存单元,则在指令中必须用“[…]”来表示内存单元<br>,如果在“[]”里直接用一个常量idata直接给出内存单元的偏移地址,就要在”[]”的前面<br>显示的给出段地址所在的段寄存器。 </p>\n</blockquote>\n<p>例如:</p>\n<pre><code>mov ax,dx:[0]\n</code></pre><h2 id=\"段前缀\"><a href=\"#段前缀\" class=\"headerlink\" title=\"段前缀\"></a>段前缀</h2><p>以上这样的表示方法dx叫做<strong>段前缀</strong><br>类似的比如 </p>\n<pre><code>mov ax,ds:[0]\nmov ax,cx:[0]\nmov ax,ss:[0]\nmov ax,es:[0]\n</code></pre><p>等等ds:、cx:、ss:、es:、都叫做段前缀 </p>\n<h2 id=\"一段安全的空间\"><a href=\"#一段安全的空间\" class=\"headerlink\" title=\"一段安全的空间\"></a>一段安全的空间</h2><p>直接向内存中写入数据时,要用:<br><strong>0:200 ~ 0:2ff</strong> </p>\n"},{"title":"汇编第六章:包含多个短的程序","date":"2017-12-28T12:07:59.000Z","_content":"\n# 汇编第六章:包含多个短的程序\n> dw == define word \n\n一个dw:**16位两字节** \n## start...end start\n如果程序入口不是我们想要执行的指令可以使用start指令指明程序入口所在 \n\n\tassume cs:code\n\tcode segment\n\t\t\t.\n\t\t\t.\n\t\t\t.\n\t\t\tdw 0123h,1456h;数据\n\t\t\t.\n\t\t\t.\n\t\t\t.\n\tstart:\n\t\t\t.\n\t\t\t.\n\t\t\t.\n\t\t\tmov ax,0;代码\n\t\t\t.\n\t\t\t.\n\t\t\t.\n\t\t\tmov ax,4c00H\n\t\t\tint 21H\n\tcode ends\n\tend start\n\t\n**一个段的容量不能大于64kb** \n因此可以考虑使用多个段来存放数据、代码、和栈。 \n**stack** == 栈 \n> 8086不允许将一个数值直接送入段寄存器,例如“mov ds,data”。data也会被编译器处理为表示一个段地址的数值 \n\ndata、satck、code也仅仅是命名而已,就跟标号一样,需要用assume将他们和cpu联系起来 \n因此程序有以下模板 \n\n\tassume cs:code,ss:stack,ds:data\n\t\n\tdata segment\n\t\tdw ..........\n\tdata ends\n\t\n\tstack segment\n\t\tdw 0,0,0,0,0,0.....\n\tstack ends\n\t\n\tcode segment\n\t\n\t\tstart:\n\t\t\tmov ax,data\t\t\t\t;数据段空间\n\t\t\tmov ds,ax\n\t\t\tmov bx,0\n\t\t\t\n\t\t\tmov ax,stack\t\t\t;栈空间\n\t\t\tmov ss,ax\n\t\t\tmov sp,0\n\t\t\t.\n\t\t\t.\n\t\t\t.\n\tcode ends\n\t\n\tstart end \n\t\t\n\n\n\n\n\n\n\n\n\n\n\n","source":"_posts/汇编第六章:包含多个短的程序.md","raw":"---\ntitle: 汇编第六章:包含多个短的程序\ndate: 2017-12-28 20:07:59\ntags:\n\t- 汇编语言\n\t- 笔记\ncategories: 汇编语言\n---\n\n# 汇编第六章:包含多个短的程序\n> dw == define word \n\n一个dw:**16位两字节** \n## start...end start\n如果程序入口不是我们想要执行的指令可以使用start指令指明程序入口所在 \n\n\tassume cs:code\n\tcode segment\n\t\t\t.\n\t\t\t.\n\t\t\t.\n\t\t\tdw 0123h,1456h;数据\n\t\t\t.\n\t\t\t.\n\t\t\t.\n\tstart:\n\t\t\t.\n\t\t\t.\n\t\t\t.\n\t\t\tmov ax,0;代码\n\t\t\t.\n\t\t\t.\n\t\t\t.\n\t\t\tmov ax,4c00H\n\t\t\tint 21H\n\tcode ends\n\tend start\n\t\n**一个段的容量不能大于64kb** \n因此可以考虑使用多个段来存放数据、代码、和栈。 \n**stack** == 栈 \n> 8086不允许将一个数值直接送入段寄存器,例如“mov ds,data”。data也会被编译器处理为表示一个段地址的数值 \n\ndata、satck、code也仅仅是命名而已,就跟标号一样,需要用assume将他们和cpu联系起来 \n因此程序有以下模板 \n\n\tassume cs:code,ss:stack,ds:data\n\t\n\tdata segment\n\t\tdw ..........\n\tdata ends\n\t\n\tstack segment\n\t\tdw 0,0,0,0,0,0.....\n\tstack ends\n\t\n\tcode segment\n\t\n\t\tstart:\n\t\t\tmov ax,data\t\t\t\t;数据段空间\n\t\t\tmov ds,ax\n\t\t\tmov bx,0\n\t\t\t\n\t\t\tmov ax,stack\t\t\t;栈空间\n\t\t\tmov ss,ax\n\t\t\tmov sp,0\n\t\t\t.\n\t\t\t.\n\t\t\t.\n\tcode ends\n\t\n\tstart end \n\t\t\n\n\n\n\n\n\n\n\n\n\n\n","slug":"汇编第六章:包含多个短的程序","published":1,"updated":"2017-12-28T18:21:14.005Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkn2002ftzy48zai980u","content":"<h1 id=\"汇编第六章:包含多个短的程序\"><a href=\"#汇编第六章:包含多个短的程序\" class=\"headerlink\" title=\"汇编第六章:包含多个短的程序\"></a>汇编第六章:包含多个短的程序</h1><blockquote>\n<p>dw == define word </p>\n</blockquote>\n<p>一个dw:<strong>16位两字节</strong> </p>\n<h2 id=\"start…end-start\"><a href=\"#start…end-start\" class=\"headerlink\" title=\"start…end start\"></a>start…end start</h2><p>如果程序入口不是我们想要执行的指令可以使用start指令指明程序入口所在 </p>\n<pre><code>assume cs:code\ncode segment\n .\n .\n .\n dw 0123h,1456h;数据\n .\n .\n .\nstart:\n .\n .\n .\n mov ax,0;代码\n .\n .\n .\n mov ax,4c00H\n int 21H\ncode ends\nend start\n</code></pre><p><strong>一个段的容量不能大于64kb</strong><br>因此可以考虑使用多个段来存放数据、代码、和栈。<br><strong>stack</strong> == 栈 </p>\n<blockquote>\n<p>8086不允许将一个数值直接送入段寄存器,例如“mov ds,data”。data也会被编译器处理为表示一个段地址的数值 </p>\n</blockquote>\n<p>data、satck、code也仅仅是命名而已,就跟标号一样,需要用assume将他们和cpu联系起来<br>因此程序有以下模板 </p>\n<pre><code>assume cs:code,ss:stack,ds:data\n\ndata segment\n dw ..........\ndata ends\n\nstack segment\n dw 0,0,0,0,0,0.....\nstack ends\n\ncode segment\n\n start:\n mov ax,data ;数据段空间\n mov ds,ax\n mov bx,0\n\n mov ax,stack ;栈空间\n mov ss,ax\n mov sp,0\n .\n .\n .\ncode ends\n\nstart end \n</code></pre>","site":{"data":{}},"excerpt":"","more":"<h1 id=\"汇编第六章:包含多个短的程序\"><a href=\"#汇编第六章:包含多个短的程序\" class=\"headerlink\" title=\"汇编第六章:包含多个短的程序\"></a>汇编第六章:包含多个短的程序</h1><blockquote>\n<p>dw == define word </p>\n</blockquote>\n<p>一个dw:<strong>16位两字节</strong> </p>\n<h2 id=\"start…end-start\"><a href=\"#start…end-start\" class=\"headerlink\" title=\"start…end start\"></a>start…end start</h2><p>如果程序入口不是我们想要执行的指令可以使用start指令指明程序入口所在 </p>\n<pre><code>assume cs:code\ncode segment\n .\n .\n .\n dw 0123h,1456h;数据\n .\n .\n .\nstart:\n .\n .\n .\n mov ax,0;代码\n .\n .\n .\n mov ax,4c00H\n int 21H\ncode ends\nend start\n</code></pre><p><strong>一个段的容量不能大于64kb</strong><br>因此可以考虑使用多个段来存放数据、代码、和栈。<br><strong>stack</strong> == 栈 </p>\n<blockquote>\n<p>8086不允许将一个数值直接送入段寄存器,例如“mov ds,data”。data也会被编译器处理为表示一个段地址的数值 </p>\n</blockquote>\n<p>data、satck、code也仅仅是命名而已,就跟标号一样,需要用assume将他们和cpu联系起来<br>因此程序有以下模板 </p>\n<pre><code>assume cs:code,ss:stack,ds:data\n\ndata segment\n dw ..........\ndata ends\n\nstack segment\n dw 0,0,0,0,0,0.....\nstack ends\n\ncode segment\n\n start:\n mov ax,data ;数据段空间\n mov ds,ax\n mov bx,0\n\n mov ax,stack ;栈空间\n mov ss,ax\n mov sp,0\n .\n .\n .\ncode ends\n\nstart end \n</code></pre>"},{"title":"汇编语言第十章:CALL和RET指令","date":"2018-01-04T15:33:06.000Z","_content":"\n# 汇编语言第十章:CALL和RET指令\n> 都是修改ip的,重点不多,会用就行,随便写写。\n\n## ret和retf\n**ret进行近转移,只修改IP** \n**retf进行远转移,修改IP和CS** \n### ret指令的操作\n**出栈操作** \n1. (IP) = ((ss)*16+sp) \n2. (sp) = (sp)+2 \n相当于pop IP\n\n### retf指令的操作\n**先出ip,再出cs** \n1. (IP) = ((ss)\\*16+sp) \n2. (sp) = (sp)+2 \n3. (CS) = ((ss)*16+sp) \n4. (sp) = (sp)+2 \n相当于pop ip;pop cs\n\n## CALL指令\n> 两步操作 \n> 1. IP或CS和IP压入栈 \n> 2. 转移\n\n(CALL的转移位移是16位的,也就是短转移,不支持近转移)\n### 根据位移进行转移的CALL指令\n**先压栈,在转移** \n1. (sp) = (sp)-2 \n2. ((ss)*16+sp) = ip \n3. ip转移 \n\n格式:CALL 标号 \n\n### 根据目的地址转移的CALL指令\n格式: \n \n\tcall far prt 标号\n实现的是段间转移 \n执行此命令时进行如下操作: \n1. push CS\n2. push IP\n3. CS:IP转移\n\n### 地址在寄存器中的CALL指令\n格式: call 16位的reg \n例如: call ax \n相当于: \npush ip\njmp ax\n\n### 转移地址在内存中的CALL指令\n#### CALL WORD PRT 地址\n两个字节16位,只转移IP\n#### CALL DWOERD PRT 地址\n四个字节32位,转移CS和IP\n\n## RET和CALL的配合使用\n当正常函数用,没什么区别 \n要先push 前面用到的寄存器的值 \n前面CALL,后面RET\n\n## MUL指令\n乘法指令,和除法指令类似,只是要不都是8位的,要不都是16位的。 \n### 8位的\nAL放一个,然后MUL一个8位的内存单元,结果放在AX里面 \n如100*10: \n\t\n\tmov al,100\n\tmov bl,10\n\tmul bl\n最后结果在AX里 \n或者mul一个内存单元,还是例如:\n\n\tmov al,100\n\tmov ds:[0],10\n\tmul byte ptr ds:[0]\n### 16位的\nAX放一个,然后MUL一个16位寄存器或者内存单元,结果高位在DX里,低位在AX里。 \n例如1000*10:\n\n\tmov ax,1000\n\tmov bx,10\n\tmul bx\n结果换成16进制,高位在DX里,低位在AX里。\n\n**除法在第八章**\n\n\n\n\n\n\n\n","source":"_posts/汇编语言第十章:CALL和RET指令.md","raw":"---\ntitle: 汇编语言第十章:CALL和RET指令\ndate: 2018-01-04 23:33:06\ntags:\n\t- 汇编语言\n\t- 笔记\ncategories: 汇编语言\n---\n\n# 汇编语言第十章:CALL和RET指令\n> 都是修改ip的,重点不多,会用就行,随便写写。\n\n## ret和retf\n**ret进行近转移,只修改IP** \n**retf进行远转移,修改IP和CS** \n### ret指令的操作\n**出栈操作** \n1. (IP) = ((ss)*16+sp) \n2. (sp) = (sp)+2 \n相当于pop IP\n\n### retf指令的操作\n**先出ip,再出cs** \n1. (IP) = ((ss)\\*16+sp) \n2. (sp) = (sp)+2 \n3. (CS) = ((ss)*16+sp) \n4. (sp) = (sp)+2 \n相当于pop ip;pop cs\n\n## CALL指令\n> 两步操作 \n> 1. IP或CS和IP压入栈 \n> 2. 转移\n\n(CALL的转移位移是16位的,也就是短转移,不支持近转移)\n### 根据位移进行转移的CALL指令\n**先压栈,在转移** \n1. (sp) = (sp)-2 \n2. ((ss)*16+sp) = ip \n3. ip转移 \n\n格式:CALL 标号 \n\n### 根据目的地址转移的CALL指令\n格式: \n \n\tcall far prt 标号\n实现的是段间转移 \n执行此命令时进行如下操作: \n1. push CS\n2. push IP\n3. CS:IP转移\n\n### 地址在寄存器中的CALL指令\n格式: call 16位的reg \n例如: call ax \n相当于: \npush ip\njmp ax\n\n### 转移地址在内存中的CALL指令\n#### CALL WORD PRT 地址\n两个字节16位,只转移IP\n#### CALL DWOERD PRT 地址\n四个字节32位,转移CS和IP\n\n## RET和CALL的配合使用\n当正常函数用,没什么区别 \n要先push 前面用到的寄存器的值 \n前面CALL,后面RET\n\n## MUL指令\n乘法指令,和除法指令类似,只是要不都是8位的,要不都是16位的。 \n### 8位的\nAL放一个,然后MUL一个8位的内存单元,结果放在AX里面 \n如100*10: \n\t\n\tmov al,100\n\tmov bl,10\n\tmul bl\n最后结果在AX里 \n或者mul一个内存单元,还是例如:\n\n\tmov al,100\n\tmov ds:[0],10\n\tmul byte ptr ds:[0]\n### 16位的\nAX放一个,然后MUL一个16位寄存器或者内存单元,结果高位在DX里,低位在AX里。 \n例如1000*10:\n\n\tmov ax,1000\n\tmov bx,10\n\tmul bx\n结果换成16进制,高位在DX里,低位在AX里。\n\n**除法在第八章**\n\n\n\n\n\n\n\n","slug":"汇编语言第十章:CALL和RET指令","published":1,"updated":"2018-01-04T16:27:28.652Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkn2002gtzy48eta1sqm","content":"<h1 id=\"汇编语言第十章:CALL和RET指令\"><a href=\"#汇编语言第十章:CALL和RET指令\" class=\"headerlink\" title=\"汇编语言第十章:CALL和RET指令\"></a>汇编语言第十章:CALL和RET指令</h1><blockquote>\n<p>都是修改ip的,重点不多,会用就行,随便写写。</p>\n</blockquote>\n<h2 id=\"ret和retf\"><a href=\"#ret和retf\" class=\"headerlink\" title=\"ret和retf\"></a>ret和retf</h2><p><strong>ret进行近转移,只修改IP</strong><br><strong>retf进行远转移,修改IP和CS</strong> </p>\n<h3 id=\"ret指令的操作\"><a href=\"#ret指令的操作\" class=\"headerlink\" title=\"ret指令的操作\"></a>ret指令的操作</h3><p><strong>出栈操作</strong> </p>\n<ol>\n<li>(IP) = ((ss)*16+sp) </li>\n<li>(sp) = (sp)+2<br>相当于pop IP</li>\n</ol>\n<h3 id=\"retf指令的操作\"><a href=\"#retf指令的操作\" class=\"headerlink\" title=\"retf指令的操作\"></a>retf指令的操作</h3><p><strong>先出ip,再出cs</strong> </p>\n<ol>\n<li>(IP) = ((ss)*16+sp) </li>\n<li>(sp) = (sp)+2 </li>\n<li>(CS) = ((ss)*16+sp) </li>\n<li>(sp) = (sp)+2<br>相当于pop ip;pop cs</li>\n</ol>\n<h2 id=\"CALL指令\"><a href=\"#CALL指令\" class=\"headerlink\" title=\"CALL指令\"></a>CALL指令</h2><blockquote>\n<p>两步操作 </p>\n<ol>\n<li>IP或CS和IP压入栈 </li>\n<li>转移</li>\n</ol>\n</blockquote>\n<p>(CALL的转移位移是16位的,也就是短转移,不支持近转移)</p>\n<h3 id=\"根据位移进行转移的CALL指令\"><a href=\"#根据位移进行转移的CALL指令\" class=\"headerlink\" title=\"根据位移进行转移的CALL指令\"></a>根据位移进行转移的CALL指令</h3><p><strong>先压栈,在转移</strong> </p>\n<ol>\n<li>(sp) = (sp)-2 </li>\n<li>((ss)*16+sp) = ip </li>\n<li>ip转移 </li>\n</ol>\n<p>格式:CALL 标号 </p>\n<h3 id=\"根据目的地址转移的CALL指令\"><a href=\"#根据目的地址转移的CALL指令\" class=\"headerlink\" title=\"根据目的地址转移的CALL指令\"></a>根据目的地址转移的CALL指令</h3><p>格式: </p>\n<pre><code>call far prt 标号\n</code></pre><p>实现的是段间转移<br>执行此命令时进行如下操作: </p>\n<ol>\n<li>push CS</li>\n<li>push IP</li>\n<li>CS:IP转移</li>\n</ol>\n<h3 id=\"地址在寄存器中的CALL指令\"><a href=\"#地址在寄存器中的CALL指令\" class=\"headerlink\" title=\"地址在寄存器中的CALL指令\"></a>地址在寄存器中的CALL指令</h3><p>格式: call 16位的reg<br>例如: call ax<br>相当于:<br>push ip<br>jmp ax</p>\n<h3 id=\"转移地址在内存中的CALL指令\"><a href=\"#转移地址在内存中的CALL指令\" class=\"headerlink\" title=\"转移地址在内存中的CALL指令\"></a>转移地址在内存中的CALL指令</h3><h4 id=\"CALL-WORD-PRT-地址\"><a href=\"#CALL-WORD-PRT-地址\" class=\"headerlink\" title=\"CALL WORD PRT 地址\"></a>CALL WORD PRT 地址</h4><p>两个字节16位,只转移IP</p>\n<h4 id=\"CALL-DWOERD-PRT-地址\"><a href=\"#CALL-DWOERD-PRT-地址\" class=\"headerlink\" title=\"CALL DWOERD PRT 地址\"></a>CALL DWOERD PRT 地址</h4><p>四个字节32位,转移CS和IP</p>\n<h2 id=\"RET和CALL的配合使用\"><a href=\"#RET和CALL的配合使用\" class=\"headerlink\" title=\"RET和CALL的配合使用\"></a>RET和CALL的配合使用</h2><p>当正常函数用,没什么区别<br>要先push 前面用到的寄存器的值<br>前面CALL,后面RET</p>\n<h2 id=\"MUL指令\"><a href=\"#MUL指令\" class=\"headerlink\" title=\"MUL指令\"></a>MUL指令</h2><p>乘法指令,和除法指令类似,只是要不都是8位的,要不都是16位的。 </p>\n<h3 id=\"8位的\"><a href=\"#8位的\" class=\"headerlink\" title=\"8位的\"></a>8位的</h3><p>AL放一个,然后MUL一个8位的内存单元,结果放在AX里面<br>如100*10: </p>\n<pre><code>mov al,100\nmov bl,10\nmul bl\n</code></pre><p>最后结果在AX里<br>或者mul一个内存单元,还是例如:</p>\n<pre><code>mov al,100\nmov ds:[0],10\nmul byte ptr ds:[0]\n</code></pre><h3 id=\"16位的\"><a href=\"#16位的\" class=\"headerlink\" title=\"16位的\"></a>16位的</h3><p>AX放一个,然后MUL一个16位寄存器或者内存单元,结果高位在DX里,低位在AX里。<br>例如1000*10:</p>\n<pre><code>mov ax,1000\nmov bx,10\nmul bx\n</code></pre><p>结果换成16进制,高位在DX里,低位在AX里。</p>\n<p><strong>除法在第八章</strong></p>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"汇编语言第十章:CALL和RET指令\"><a href=\"#汇编语言第十章:CALL和RET指令\" class=\"headerlink\" title=\"汇编语言第十章:CALL和RET指令\"></a>汇编语言第十章:CALL和RET指令</h1><blockquote>\n<p>都是修改ip的,重点不多,会用就行,随便写写。</p>\n</blockquote>\n<h2 id=\"ret和retf\"><a href=\"#ret和retf\" class=\"headerlink\" title=\"ret和retf\"></a>ret和retf</h2><p><strong>ret进行近转移,只修改IP</strong><br><strong>retf进行远转移,修改IP和CS</strong> </p>\n<h3 id=\"ret指令的操作\"><a href=\"#ret指令的操作\" class=\"headerlink\" title=\"ret指令的操作\"></a>ret指令的操作</h3><p><strong>出栈操作</strong> </p>\n<ol>\n<li>(IP) = ((ss)*16+sp) </li>\n<li>(sp) = (sp)+2<br>相当于pop IP</li>\n</ol>\n<h3 id=\"retf指令的操作\"><a href=\"#retf指令的操作\" class=\"headerlink\" title=\"retf指令的操作\"></a>retf指令的操作</h3><p><strong>先出ip,再出cs</strong> </p>\n<ol>\n<li>(IP) = ((ss)*16+sp) </li>\n<li>(sp) = (sp)+2 </li>\n<li>(CS) = ((ss)*16+sp) </li>\n<li>(sp) = (sp)+2<br>相当于pop ip;pop cs</li>\n</ol>\n<h2 id=\"CALL指令\"><a href=\"#CALL指令\" class=\"headerlink\" title=\"CALL指令\"></a>CALL指令</h2><blockquote>\n<p>两步操作 </p>\n<ol>\n<li>IP或CS和IP压入栈 </li>\n<li>转移</li>\n</ol>\n</blockquote>\n<p>(CALL的转移位移是16位的,也就是短转移,不支持近转移)</p>\n<h3 id=\"根据位移进行转移的CALL指令\"><a href=\"#根据位移进行转移的CALL指令\" class=\"headerlink\" title=\"根据位移进行转移的CALL指令\"></a>根据位移进行转移的CALL指令</h3><p><strong>先压栈,在转移</strong> </p>\n<ol>\n<li>(sp) = (sp)-2 </li>\n<li>((ss)*16+sp) = ip </li>\n<li>ip转移 </li>\n</ol>\n<p>格式:CALL 标号 </p>\n<h3 id=\"根据目的地址转移的CALL指令\"><a href=\"#根据目的地址转移的CALL指令\" class=\"headerlink\" title=\"根据目的地址转移的CALL指令\"></a>根据目的地址转移的CALL指令</h3><p>格式: </p>\n<pre><code>call far prt 标号\n</code></pre><p>实现的是段间转移<br>执行此命令时进行如下操作: </p>\n<ol>\n<li>push CS</li>\n<li>push IP</li>\n<li>CS:IP转移</li>\n</ol>\n<h3 id=\"地址在寄存器中的CALL指令\"><a href=\"#地址在寄存器中的CALL指令\" class=\"headerlink\" title=\"地址在寄存器中的CALL指令\"></a>地址在寄存器中的CALL指令</h3><p>格式: call 16位的reg<br>例如: call ax<br>相当于:<br>push ip<br>jmp ax</p>\n<h3 id=\"转移地址在内存中的CALL指令\"><a href=\"#转移地址在内存中的CALL指令\" class=\"headerlink\" title=\"转移地址在内存中的CALL指令\"></a>转移地址在内存中的CALL指令</h3><h4 id=\"CALL-WORD-PRT-地址\"><a href=\"#CALL-WORD-PRT-地址\" class=\"headerlink\" title=\"CALL WORD PRT 地址\"></a>CALL WORD PRT 地址</h4><p>两个字节16位,只转移IP</p>\n<h4 id=\"CALL-DWOERD-PRT-地址\"><a href=\"#CALL-DWOERD-PRT-地址\" class=\"headerlink\" title=\"CALL DWOERD PRT 地址\"></a>CALL DWOERD PRT 地址</h4><p>四个字节32位,转移CS和IP</p>\n<h2 id=\"RET和CALL的配合使用\"><a href=\"#RET和CALL的配合使用\" class=\"headerlink\" title=\"RET和CALL的配合使用\"></a>RET和CALL的配合使用</h2><p>当正常函数用,没什么区别<br>要先push 前面用到的寄存器的值<br>前面CALL,后面RET</p>\n<h2 id=\"MUL指令\"><a href=\"#MUL指令\" class=\"headerlink\" title=\"MUL指令\"></a>MUL指令</h2><p>乘法指令,和除法指令类似,只是要不都是8位的,要不都是16位的。 </p>\n<h3 id=\"8位的\"><a href=\"#8位的\" class=\"headerlink\" title=\"8位的\"></a>8位的</h3><p>AL放一个,然后MUL一个8位的内存单元,结果放在AX里面<br>如100*10: </p>\n<pre><code>mov al,100\nmov bl,10\nmul bl\n</code></pre><p>最后结果在AX里<br>或者mul一个内存单元,还是例如:</p>\n<pre><code>mov al,100\nmov ds:[0],10\nmul byte ptr ds:[0]\n</code></pre><h3 id=\"16位的\"><a href=\"#16位的\" class=\"headerlink\" title=\"16位的\"></a>16位的</h3><p>AX放一个,然后MUL一个16位寄存器或者内存单元,结果高位在DX里,低位在AX里。<br>例如1000*10:</p>\n<pre><code>mov ax,1000\nmov bx,10\nmul bx\n</code></pre><p>结果换成16进制,高位在DX里,低位在AX里。</p>\n<p><strong>除法在第八章</strong></p>\n"},{"title":"汇编语言第十一章:标志寄存器","date":"2018-01-04T16:26:41.000Z","_content":"\n# 汇编语言第十一章:标志寄存器\n> 标志寄存器就是CPU处理数据的时候做标记的 \n> 这一章学的有ZF,SF,PF,CF,OF标志寄存器,还有adc,sbb,movsb,movsw,cld,std,rep等操作\n\n## 第六位:ZF\nzero flag \n零标志位 \n处理完之后是否为零,0的话ZF则为一\n\n## 第二位:PF\nParity flag\n奇偶校验位\n换成二进制之后,1的个数是偶数?PF = 1 :PF = 0 \n\n## 第七位:SF\nsign flag\n符号标志位\n结果是否为负,只看第一位符号位\n\n## 第零位:CF\ncarry flag \n进位标识符 \n是否有进位或者借位 \n**inc和loop不影响CF位**\n\n## 第十一位:OF\noverflow flag \n溢出标志位\n\n\n## adc指令\n带进位的加法指令add carry\nadc a,b \n相当于a = a + b + cf \n作用:\n\n\tadd ax,bx\n\t\n\t相当于\n\t\n\tadd al,bl\n\tadc ah,bh\n\n## sbb指令\n带借位的减法指令sub borrow \nsbb a,b\n相当于a = a - b - CF\n\n## CMP指令\n相当于减法,但不保存结果,只会影响标志寄存器CF和ZF \n\n### 检测比较结果的条件转移指令\n和CMP配合使用\n1. je\tequal\n2. jne\tnot equal\n3. jb\tbelow\n4. jnb\tnot below\n5. ja\tabove\n6. jna\tnot above\n\n## 第十位:DF标志和串的传送\nDF direcition(down?) flag\n格式:movsb (mov string byte?) \n功能:复制一段数据?差不多,主要就是执行以下操作 \n1. ((es)\\*16+di) = ((ds)\\*16+si) \n2. 若df = 0: si++; di++ \n3. 若df = 1: si--; di--\n\n上面的是传一个内存单元,也可以传一个字 \n格式:movsw (mov string word?) \n1. mov word ptr es:[di],ds:[si]\\(并不支持这样的指令,只是描述) \n2. 若df = 0: si+=2; di+=2 \n3. 若df = 1: si-=2; di-=2\n\n可以配合rep使用,rep就是重复cx次当前指令,例如\n\t\t\n\trep mov sb\n\t\n\t相当于\n\t\n\ts:\n\t\tmovsb\n\t\tloop s\n这样就可以实现cx个字符的传送 \n\n### 设置DF的指令\n1. cld:将DF设置为零(clear df)\n2. std:将DF设置为一 (set df)\n\n## pushf和popf\n标志寄存器的出入栈\n\n\n\n\n\n\n","source":"_posts/汇编语言第十一章:标志寄存器.md","raw":"---\ntitle: 汇编语言第十一章:标志寄存器\ndate: 2018-01-05 00:26:41\ntags:\n\t- 汇编语言\n\t- 笔记\ncategories: 汇编语言\n---\n\n# 汇编语言第十一章:标志寄存器\n> 标志寄存器就是CPU处理数据的时候做标记的 \n> 这一章学的有ZF,SF,PF,CF,OF标志寄存器,还有adc,sbb,movsb,movsw,cld,std,rep等操作\n\n## 第六位:ZF\nzero flag \n零标志位 \n处理完之后是否为零,0的话ZF则为一\n\n## 第二位:PF\nParity flag\n奇偶校验位\n换成二进制之后,1的个数是偶数?PF = 1 :PF = 0 \n\n## 第七位:SF\nsign flag\n符号标志位\n结果是否为负,只看第一位符号位\n\n## 第零位:CF\ncarry flag \n进位标识符 \n是否有进位或者借位 \n**inc和loop不影响CF位**\n\n## 第十一位:OF\noverflow flag \n溢出标志位\n\n\n## adc指令\n带进位的加法指令add carry\nadc a,b \n相当于a = a + b + cf \n作用:\n\n\tadd ax,bx\n\t\n\t相当于\n\t\n\tadd al,bl\n\tadc ah,bh\n\n## sbb指令\n带借位的减法指令sub borrow \nsbb a,b\n相当于a = a - b - CF\n\n## CMP指令\n相当于减法,但不保存结果,只会影响标志寄存器CF和ZF \n\n### 检测比较结果的条件转移指令\n和CMP配合使用\n1. je\tequal\n2. jne\tnot equal\n3. jb\tbelow\n4. jnb\tnot below\n5. ja\tabove\n6. jna\tnot above\n\n## 第十位:DF标志和串的传送\nDF direcition(down?) flag\n格式:movsb (mov string byte?) \n功能:复制一段数据?差不多,主要就是执行以下操作 \n1. ((es)\\*16+di) = ((ds)\\*16+si) \n2. 若df = 0: si++; di++ \n3. 若df = 1: si--; di--\n\n上面的是传一个内存单元,也可以传一个字 \n格式:movsw (mov string word?) \n1. mov word ptr es:[di],ds:[si]\\(并不支持这样的指令,只是描述) \n2. 若df = 0: si+=2; di+=2 \n3. 若df = 1: si-=2; di-=2\n\n可以配合rep使用,rep就是重复cx次当前指令,例如\n\t\t\n\trep mov sb\n\t\n\t相当于\n\t\n\ts:\n\t\tmovsb\n\t\tloop s\n这样就可以实现cx个字符的传送 \n\n### 设置DF的指令\n1. cld:将DF设置为零(clear df)\n2. std:将DF设置为一 (set df)\n\n## pushf和popf\n标志寄存器的出入栈\n\n\n\n\n\n\n","slug":"汇编语言第十一章:标志寄存器","published":1,"updated":"2018-01-04T16:28:56.877Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkn4002ktzy459wq1mh8","content":"<h1 id=\"汇编语言第十一章:标志寄存器\"><a href=\"#汇编语言第十一章:标志寄存器\" class=\"headerlink\" title=\"汇编语言第十一章:标志寄存器\"></a>汇编语言第十一章:标志寄存器</h1><blockquote>\n<p>标志寄存器就是CPU处理数据的时候做标记的<br>这一章学的有ZF,SF,PF,CF,OF标志寄存器,还有adc,sbb,movsb,movsw,cld,std,rep等操作</p>\n</blockquote>\n<h2 id=\"第六位:ZF\"><a href=\"#第六位:ZF\" class=\"headerlink\" title=\"第六位:ZF\"></a>第六位:ZF</h2><p>zero flag<br>零标志位<br>处理完之后是否为零,0的话ZF则为一</p>\n<h2 id=\"第二位:PF\"><a href=\"#第二位:PF\" class=\"headerlink\" title=\"第二位:PF\"></a>第二位:PF</h2><p>Parity flag<br>奇偶校验位<br>换成二进制之后,1的个数是偶数?PF = 1 :PF = 0 </p>\n<h2 id=\"第七位:SF\"><a href=\"#第七位:SF\" class=\"headerlink\" title=\"第七位:SF\"></a>第七位:SF</h2><p>sign flag<br>符号标志位<br>结果是否为负,只看第一位符号位</p>\n<h2 id=\"第零位:CF\"><a href=\"#第零位:CF\" class=\"headerlink\" title=\"第零位:CF\"></a>第零位:CF</h2><p>carry flag<br>进位标识符<br>是否有进位或者借位<br><strong>inc和loop不影响CF位</strong></p>\n<h2 id=\"第十一位:OF\"><a href=\"#第十一位:OF\" class=\"headerlink\" title=\"第十一位:OF\"></a>第十一位:OF</h2><p>overflow flag<br>溢出标志位</p>\n<h2 id=\"adc指令\"><a href=\"#adc指令\" class=\"headerlink\" title=\"adc指令\"></a>adc指令</h2><p>带进位的加法指令add carry<br>adc a,b<br>相当于a = a + b + cf<br>作用:</p>\n<pre><code>add ax,bx\n\n相当于\n\nadd al,bl\nadc ah,bh\n</code></pre><h2 id=\"sbb指令\"><a href=\"#sbb指令\" class=\"headerlink\" title=\"sbb指令\"></a>sbb指令</h2><p>带借位的减法指令sub borrow<br>sbb a,b<br>相当于a = a - b - CF</p>\n<h2 id=\"CMP指令\"><a href=\"#CMP指令\" class=\"headerlink\" title=\"CMP指令\"></a>CMP指令</h2><p>相当于减法,但不保存结果,只会影响标志寄存器CF和ZF </p>\n<h3 id=\"检测比较结果的条件转移指令\"><a href=\"#检测比较结果的条件转移指令\" class=\"headerlink\" title=\"检测比较结果的条件转移指令\"></a>检测比较结果的条件转移指令</h3><p>和CMP配合使用</p>\n<ol>\n<li>je equal</li>\n<li>jne not equal</li>\n<li>jb below</li>\n<li>jnb not below</li>\n<li>ja above</li>\n<li>jna not above</li>\n</ol>\n<h2 id=\"第十位:DF标志和串的传送\"><a href=\"#第十位:DF标志和串的传送\" class=\"headerlink\" title=\"第十位:DF标志和串的传送\"></a>第十位:DF标志和串的传送</h2><p>DF direcition(down?) flag<br>格式:movsb (mov string byte?)<br>功能:复制一段数据?差不多,主要就是执行以下操作 </p>\n<ol>\n<li>((es)*16+di) = ((ds)*16+si) </li>\n<li>若df = 0: si++; di++ </li>\n<li>若df = 1: si–; di–</li>\n</ol>\n<p>上面的是传一个内存单元,也可以传一个字<br>格式:movsw (mov string word?) </p>\n<ol>\n<li>mov word ptr es:[di],ds:[si](并不支持这样的指令,只是描述) </li>\n<li>若df = 0: si+=2; di+=2 </li>\n<li>若df = 1: si-=2; di-=2</li>\n</ol>\n<p>可以配合rep使用,rep就是重复cx次当前指令,例如</p>\n<pre><code>rep mov sb\n\n相当于\n\ns:\n movsb\n loop s\n</code></pre><p>这样就可以实现cx个字符的传送 </p>\n<h3 id=\"设置DF的指令\"><a href=\"#设置DF的指令\" class=\"headerlink\" title=\"设置DF的指令\"></a>设置DF的指令</h3><ol>\n<li>cld:将DF设置为零(clear df)</li>\n<li>std:将DF设置为一 (set df)</li>\n</ol>\n<h2 id=\"pushf和popf\"><a href=\"#pushf和popf\" class=\"headerlink\" title=\"pushf和popf\"></a>pushf和popf</h2><p>标志寄存器的出入栈</p>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"汇编语言第十一章:标志寄存器\"><a href=\"#汇编语言第十一章:标志寄存器\" class=\"headerlink\" title=\"汇编语言第十一章:标志寄存器\"></a>汇编语言第十一章:标志寄存器</h1><blockquote>\n<p>标志寄存器就是CPU处理数据的时候做标记的<br>这一章学的有ZF,SF,PF,CF,OF标志寄存器,还有adc,sbb,movsb,movsw,cld,std,rep等操作</p>\n</blockquote>\n<h2 id=\"第六位:ZF\"><a href=\"#第六位:ZF\" class=\"headerlink\" title=\"第六位:ZF\"></a>第六位:ZF</h2><p>zero flag<br>零标志位<br>处理完之后是否为零,0的话ZF则为一</p>\n<h2 id=\"第二位:PF\"><a href=\"#第二位:PF\" class=\"headerlink\" title=\"第二位:PF\"></a>第二位:PF</h2><p>Parity flag<br>奇偶校验位<br>换成二进制之后,1的个数是偶数?PF = 1 :PF = 0 </p>\n<h2 id=\"第七位:SF\"><a href=\"#第七位:SF\" class=\"headerlink\" title=\"第七位:SF\"></a>第七位:SF</h2><p>sign flag<br>符号标志位<br>结果是否为负,只看第一位符号位</p>\n<h2 id=\"第零位:CF\"><a href=\"#第零位:CF\" class=\"headerlink\" title=\"第零位:CF\"></a>第零位:CF</h2><p>carry flag<br>进位标识符<br>是否有进位或者借位<br><strong>inc和loop不影响CF位</strong></p>\n<h2 id=\"第十一位:OF\"><a href=\"#第十一位:OF\" class=\"headerlink\" title=\"第十一位:OF\"></a>第十一位:OF</h2><p>overflow flag<br>溢出标志位</p>\n<h2 id=\"adc指令\"><a href=\"#adc指令\" class=\"headerlink\" title=\"adc指令\"></a>adc指令</h2><p>带进位的加法指令add carry<br>adc a,b<br>相当于a = a + b + cf<br>作用:</p>\n<pre><code>add ax,bx\n\n相当于\n\nadd al,bl\nadc ah,bh\n</code></pre><h2 id=\"sbb指令\"><a href=\"#sbb指令\" class=\"headerlink\" title=\"sbb指令\"></a>sbb指令</h2><p>带借位的减法指令sub borrow<br>sbb a,b<br>相当于a = a - b - CF</p>\n<h2 id=\"CMP指令\"><a href=\"#CMP指令\" class=\"headerlink\" title=\"CMP指令\"></a>CMP指令</h2><p>相当于减法,但不保存结果,只会影响标志寄存器CF和ZF </p>\n<h3 id=\"检测比较结果的条件转移指令\"><a href=\"#检测比较结果的条件转移指令\" class=\"headerlink\" title=\"检测比较结果的条件转移指令\"></a>检测比较结果的条件转移指令</h3><p>和CMP配合使用</p>\n<ol>\n<li>je equal</li>\n<li>jne not equal</li>\n<li>jb below</li>\n<li>jnb not below</li>\n<li>ja above</li>\n<li>jna not above</li>\n</ol>\n<h2 id=\"第十位:DF标志和串的传送\"><a href=\"#第十位:DF标志和串的传送\" class=\"headerlink\" title=\"第十位:DF标志和串的传送\"></a>第十位:DF标志和串的传送</h2><p>DF direcition(down?) flag<br>格式:movsb (mov string byte?)<br>功能:复制一段数据?差不多,主要就是执行以下操作 </p>\n<ol>\n<li>((es)*16+di) = ((ds)*16+si) </li>\n<li>若df = 0: si++; di++ </li>\n<li>若df = 1: si–; di–</li>\n</ol>\n<p>上面的是传一个内存单元,也可以传一个字<br>格式:movsw (mov string word?) </p>\n<ol>\n<li>mov word ptr es:[di],ds:[si](并不支持这样的指令,只是描述) </li>\n<li>若df = 0: si+=2; di+=2 </li>\n<li>若df = 1: si-=2; di-=2</li>\n</ol>\n<p>可以配合rep使用,rep就是重复cx次当前指令,例如</p>\n<pre><code>rep mov sb\n\n相当于\n\ns:\n movsb\n loop s\n</code></pre><p>这样就可以实现cx个字符的传送 </p>\n<h3 id=\"设置DF的指令\"><a href=\"#设置DF的指令\" class=\"headerlink\" title=\"设置DF的指令\"></a>设置DF的指令</h3><ol>\n<li>cld:将DF设置为零(clear df)</li>\n<li>std:将DF设置为一 (set df)</li>\n</ol>\n<h2 id=\"pushf和popf\"><a href=\"#pushf和popf\" class=\"headerlink\" title=\"pushf和popf\"></a>pushf和popf</h2><p>标志寄存器的出入栈</p>\n"},{"title":"汇编语言中寄存器ESP和EBP的理解","date":"2017-11-04T04:31:45.000Z","_content":"\n# 汇编语言中寄存器ESP和EBP的理解\n\n>\t学校在做信息活动月,有个活动是对xp系统中的一个应用程序进行反汇编,了解他的运行机制,但是在中间有一部分对寄存器的概念有点生疏,所以在网上看到一个好的材料,所以码一下\n\n一直对寄存器ESP和EBP的概念总是有些混淆,查看定义ESP是栈顶指针,EBP是存取堆栈指针。还是不能很透彻理解。之后借于一段汇编代码,总算是对两者有个比较清晰的理解。\n下面是按调用约定__stdcall 调用函数test(int p1,int p2)的汇编代码\n\n\t;假设执行函数前堆栈指针ESP为NN\n\tpush p2 ;参数2入栈, ESP -= 4h , ESP = NN - 4h\n\tpush p1 ;参数1入栈, ESP -= 4h , ESP = NN - 8h\n\tcall test ;压入返回地址 ESP -= 4h, ESP = NN - 0Ch \n\t;//进入函数内\n\n看完汇编后,再看EBP和ESP的定义,哦,豁然开朗,\n原来ESP就是一直指向栈顶的指针,而EBP只是存取某时刻的栈顶指针,以方便对栈的操作,如获取函数参数、局部变量等。\n\n\n\n\t{\n\t\t\tpush ebp ;保护先前EBP指针, EBP入栈, ESP-=4h, ESP = NN - 10h\n\t\t\tmov ebp, esp ;设置EBP指针指向栈顶 NN-10h\n\t\t\tmov eax, dword ptr [ebp+0ch] ;ebp+0ch为NN-4h,即参数2的位置\n\t\t\tmov ebx, dword ptr [ebp+08h] ;ebp+08h为NN-8h,即参数1的位置\n\t\t\tsub esp, 8 ;局部变量所占空间ESP-=8, ESP = NN-18h\n\t\t\t...\n\t\t\tadd esp, 8 ;释放局部变量, ESP+=8, ESP = NN-10h\n\t\t\tpop ebp ;出栈,恢复EBP, ESP+=4, ESP = NN-0Ch\n\t\t\tret 8 ;ret返回,弹出返回地址,ESP+=4, ESP=NN-08h,\n\t\t\t\t\t\t\t\t\t\t\t\t后面加操作数8为平衡堆栈,ESP+=8,ESP=NN, 恢复进入函数前的堆栈.\n\t}\n\t\n\t\n转自:[通过一段汇编,加深对寄存器ESP和EBP的理解](http://blog.csdn.net/zsjum/article/details/6117043)","source":"_posts/汇编语言中寄存器ESP和EBP的理解.md","raw":"---\ntitle: 汇编语言中寄存器ESP和EBP的理解\ndate: 2017-11-04 12:31:45\ntags:\n\t- 汇编语言\n\t- 笔记\ncategories: 汇编语言\n---\n\n# 汇编语言中寄存器ESP和EBP的理解\n\n>\t学校在做信息活动月,有个活动是对xp系统中的一个应用程序进行反汇编,了解他的运行机制,但是在中间有一部分对寄存器的概念有点生疏,所以在网上看到一个好的材料,所以码一下\n\n一直对寄存器ESP和EBP的概念总是有些混淆,查看定义ESP是栈顶指针,EBP是存取堆栈指针。还是不能很透彻理解。之后借于一段汇编代码,总算是对两者有个比较清晰的理解。\n下面是按调用约定__stdcall 调用函数test(int p1,int p2)的汇编代码\n\n\t;假设执行函数前堆栈指针ESP为NN\n\tpush p2 ;参数2入栈, ESP -= 4h , ESP = NN - 4h\n\tpush p1 ;参数1入栈, ESP -= 4h , ESP = NN - 8h\n\tcall test ;压入返回地址 ESP -= 4h, ESP = NN - 0Ch \n\t;//进入函数内\n\n看完汇编后,再看EBP和ESP的定义,哦,豁然开朗,\n原来ESP就是一直指向栈顶的指针,而EBP只是存取某时刻的栈顶指针,以方便对栈的操作,如获取函数参数、局部变量等。\n\n\n\n\t{\n\t\t\tpush ebp ;保护先前EBP指针, EBP入栈, ESP-=4h, ESP = NN - 10h\n\t\t\tmov ebp, esp ;设置EBP指针指向栈顶 NN-10h\n\t\t\tmov eax, dword ptr [ebp+0ch] ;ebp+0ch为NN-4h,即参数2的位置\n\t\t\tmov ebx, dword ptr [ebp+08h] ;ebp+08h为NN-8h,即参数1的位置\n\t\t\tsub esp, 8 ;局部变量所占空间ESP-=8, ESP = NN-18h\n\t\t\t...\n\t\t\tadd esp, 8 ;释放局部变量, ESP+=8, ESP = NN-10h\n\t\t\tpop ebp ;出栈,恢复EBP, ESP+=4, ESP = NN-0Ch\n\t\t\tret 8 ;ret返回,弹出返回地址,ESP+=4, ESP=NN-08h,\n\t\t\t\t\t\t\t\t\t\t\t\t后面加操作数8为平衡堆栈,ESP+=8,ESP=NN, 恢复进入函数前的堆栈.\n\t}\n\t\n\t\n转自:[通过一段汇编,加深对寄存器ESP和EBP的理解](http://blog.csdn.net/zsjum/article/details/6117043)","slug":"汇编语言中寄存器ESP和EBP的理解","published":1,"updated":"2017-12-28T19:25:54.068Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkn5002mtzy4felf32wg","content":"<h1 id=\"汇编语言中寄存器ESP和EBP的理解\"><a href=\"#汇编语言中寄存器ESP和EBP的理解\" class=\"headerlink\" title=\"汇编语言中寄存器ESP和EBP的理解\"></a>汇编语言中寄存器ESP和EBP的理解</h1><blockquote>\n<p> 学校在做信息活动月,有个活动是对xp系统中的一个应用程序进行反汇编,了解他的运行机制,但是在中间有一部分对寄存器的概念有点生疏,所以在网上看到一个好的材料,所以码一下</p>\n</blockquote>\n<p>一直对寄存器ESP和EBP的概念总是有些混淆,查看定义ESP是栈顶指针,EBP是存取堆栈指针。还是不能很透彻理解。之后借于一段汇编代码,总算是对两者有个比较清晰的理解。<br>下面是按调用约定__stdcall 调用函数test(int p1,int p2)的汇编代码</p>\n<pre><code>;假设执行函数前堆栈指针ESP为NN\npush p2 ;参数2入栈, ESP -= 4h , ESP = NN - 4h\npush p1 ;参数1入栈, ESP -= 4h , ESP = NN - 8h\ncall test ;压入返回地址 ESP -= 4h, ESP = NN - 0Ch \n;//进入函数内\n</code></pre><p>看完汇编后,再看EBP和ESP的定义,哦,豁然开朗,<br>原来ESP就是一直指向栈顶的指针,而EBP只是存取某时刻的栈顶指针,以方便对栈的操作,如获取函数参数、局部变量等。</p>\n<pre><code>{\n push ebp ;保护先前EBP指针, EBP入栈, ESP-=4h, ESP = NN - 10h\n mov ebp, esp ;设置EBP指针指向栈顶 NN-10h\n mov eax, dword ptr [ebp+0ch] ;ebp+0ch为NN-4h,即参数2的位置\n mov ebx, dword ptr [ebp+08h] ;ebp+08h为NN-8h,即参数1的位置\n sub esp, 8 ;局部变量所占空间ESP-=8, ESP = NN-18h\n ...\n add esp, 8 ;释放局部变量, ESP+=8, ESP = NN-10h\n pop ebp ;出栈,恢复EBP, ESP+=4, ESP = NN-0Ch\n ret 8 ;ret返回,弹出返回地址,ESP+=4, ESP=NN-08h,\n 后面加操作数8为平衡堆栈,ESP+=8,ESP=NN, 恢复进入函数前的堆栈.\n}\n</code></pre><p>转自:<a href=\"http://blog.csdn.net/zsjum/article/details/6117043\" target=\"_blank\" rel=\"noopener\">通过一段汇编,加深对寄存器ESP和EBP的理解</a></p>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"汇编语言中寄存器ESP和EBP的理解\"><a href=\"#汇编语言中寄存器ESP和EBP的理解\" class=\"headerlink\" title=\"汇编语言中寄存器ESP和EBP的理解\"></a>汇编语言中寄存器ESP和EBP的理解</h1><blockquote>\n<p> 学校在做信息活动月,有个活动是对xp系统中的一个应用程序进行反汇编,了解他的运行机制,但是在中间有一部分对寄存器的概念有点生疏,所以在网上看到一个好的材料,所以码一下</p>\n</blockquote>\n<p>一直对寄存器ESP和EBP的概念总是有些混淆,查看定义ESP是栈顶指针,EBP是存取堆栈指针。还是不能很透彻理解。之后借于一段汇编代码,总算是对两者有个比较清晰的理解。<br>下面是按调用约定__stdcall 调用函数test(int p1,int p2)的汇编代码</p>\n<pre><code>;假设执行函数前堆栈指针ESP为NN\npush p2 ;参数2入栈, ESP -= 4h , ESP = NN - 4h\npush p1 ;参数1入栈, ESP -= 4h , ESP = NN - 8h\ncall test ;压入返回地址 ESP -= 4h, ESP = NN - 0Ch \n;//进入函数内\n</code></pre><p>看完汇编后,再看EBP和ESP的定义,哦,豁然开朗,<br>原来ESP就是一直指向栈顶的指针,而EBP只是存取某时刻的栈顶指针,以方便对栈的操作,如获取函数参数、局部变量等。</p>\n<pre><code>{\n push ebp ;保护先前EBP指针, EBP入栈, ESP-=4h, ESP = NN - 10h\n mov ebp, esp ;设置EBP指针指向栈顶 NN-10h\n mov eax, dword ptr [ebp+0ch] ;ebp+0ch为NN-4h,即参数2的位置\n mov ebx, dword ptr [ebp+08h] ;ebp+08h为NN-8h,即参数1的位置\n sub esp, 8 ;局部变量所占空间ESP-=8, ESP = NN-18h\n ...\n add esp, 8 ;释放局部变量, ESP+=8, ESP = NN-10h\n pop ebp ;出栈,恢复EBP, ESP+=4, ESP = NN-0Ch\n ret 8 ;ret返回,弹出返回地址,ESP+=4, ESP=NN-08h,\n 后面加操作数8为平衡堆栈,ESP+=8,ESP=NN, 恢复进入函数前的堆栈.\n}\n</code></pre><p>转自:<a href=\"http://blog.csdn.net/zsjum/article/details/6117043\" target=\"_blank\" rel=\"noopener\">通过一段汇编,加深对寄存器ESP和EBP的理解</a></p>\n"},{"title":"汇编语言:基础知识(第五章以前)","date":"2018-01-09T07:22:19.000Z","_content":"# 汇编语言:基础知识(第五章以前)\n## 基基础\n* 数据总线:传数据用的,8线一次传1b,8086有16线\n* 地址总线:最高可以寻到的地址,8086是20线,4线一个16进制位。\n* 一个地址是一个内存单元就是1b,2个十六进制位。\n* 要知道给定一个段地址之后的地址寻址范围。\n* inc\n* dec\n\n## 寄存器的总结\n### 段寄存器\n段寄存器就是存放段地址的\n\n* CS\n* DS\n* SS\n* ES\n\n**段地址不支持直接将数据送入** \n\n* SS:SP永远指向栈顶元素 \n\n**在自己写程序的过程中要注意的问题!**\n\n* assume写全\n* 最后int 21h\n* 数据不能以字母开头\n* 使用es存放目标空间的段地址\n* 正式的程序开始时写`start`,最后写`end start`\n\n## 寻址方式\n### 多种寻址方式\n* 寄存器直接寻址\n* 寄存器相对寻址(寄存器+idata)\n* 基址变址寻址(寄存器+寄存器)\n* 相对基址变址寻址(寄存器+寄存器+idata)\n\n### 转大小写的单循环例子\n\n\tassume cs:code,ds:data,ss:strack\n\tstrack segment\n\t dw 8 dup(0)\n\tstrack ends\n\tdata segment\n\t db '1. display '\n\t db '2. dsjk '\n\t db '3. dasdasdasd '\n\tdata ends\n\tcode segment\n\tstart:\n\t\tmov ax,data\n\t\tmov ds,ax\n\t\tmov ax,strack\n\t\tmov ss,ax\n\t\tmov sp,10h\n\t\tmov di,0\n\t\tmov cx,4h\n\tl:\n\t\tmov al,[di+3]\n\t\tand al,11011111b\n\t\tmov [di+3],al\n\t\tmov al,[di+10h+3]\n\t\tand al,11011111b\n\t\tmov [di+10h+3],al\n\t\tmov al,[di+32+3]\n\t\tand al,11011111b\n\t\tmov [di+32+3],al\n\t\tinc di\n\t\tloop l\n\t\n\tmov ax,4c00h\n\tint 21h\n\t\n\t\n\tcode ends\n\tend start\n\n结果![](a.png)\n### 转大小写的双循环例子\n> 注意bx和si的同时使用,di和si不能同时使用\n\n\tassume cs:code,ds:data,ss:strack\n\tstrack segment\n\t dw 8 dup(0)\n\tstrack ends\n\tdata segment\n\t db '1. display '\n\t db '2. dsjk '\n\t db '3. dasdasdasd '\n\tdata ends\n\tcode segment\n\tstart:\n\tmov ax,data\n\tmov ds,ax\n\tmov ax,strack\n\tmov ss,ax\n\tmov sp,10h\n\tmov di,0\n\tmov cx,4\n\tmov si,0\n\tl:\n\tpush cx\n\tmov cx,3\n\tl0:\n\tmov al,[si+di+3]\n\tand al,11011111b\n\tmov [di+3],al\n\tinc di\n\tloop l0\n\tmov di,0\n\tadd si,16\n\tpop cx\n\tloop l\n\tmov ax,4c00h\n\tint 21h\n\tcode ends\n\tend start\n\n\n结果![](b.png)\n\n\n## 指令的转移\n### jmp\n* `jmp short 标号` -128~127\n* `jmp near ptr 标号`\t\t-32768~32767\n* `jmp far ptr 标号`\n* `jmp 16位reg` IP = reg\n* `jmp word ptr 地址`\t\t段内转移:jmp word ptr ds:[0],设置IP\n* `jmp dword ptr 地址`\t段间转移,先赋值IP\n\n### jcxz\n当cx为0时跳转,范围-128~127\n\n### ret和retf\n都是先对IP进行操作\n\t\n\tpop ip\n\tpop cs\n\n### call\n* call 标号\n* call far ptr 标号 \n\n```\npush cs\npush ip\n```\n\n* call word ptr 地址\n* call dword ptr 地址\n\n### mul乘法\n* 双8位,一个放al,结果ax\n* 双16位,一个放ax,结果高位dx低位ax\n\n```\nmov al,1\nmov bl,2\nmul bl\n```\n或者\n```\nmov al,1\nmov byte ptr ds:[0],2\nmul byte ptr ds:[0]\n```\n\n### div除法\n> 低位是商高位是余数\n\n* 16位除以8位,前面的数放在ax里\n* 32位除以16位,高位dx,低位ax\n\n```\ndiv byte ptr ds:[0];默认被除数是ax\n```\n或者\n```\nmov bx,10\ndiv bx;默认被除数高位是dx,低位时ax\n```\n\n## 中断\n流程:\n* 取得中断码\n* pushf\n* 设置标志寄存器\n* CS和IP入栈\n* 设置IP,设置CS\n\n### 中断向量表\n四个字节一个中断地址 \n前两个是IP \n后两个是CS\n\n### 安装\n> 这里进行模拟loop的安装,位置7ch。\n\n\n\n\n\n","source":"_posts/汇编语言:基础知识(第五章以前).md","raw":"---\ntitle: 汇编语言:基础知识(第五章以前)\ndate: 2018-01-09 15:22:19\ntags: [汇编语言,笔记]\ncategories: 汇编语言\n---\n# 汇编语言:基础知识(第五章以前)\n## 基基础\n* 数据总线:传数据用的,8线一次传1b,8086有16线\n* 地址总线:最高可以寻到的地址,8086是20线,4线一个16进制位。\n* 一个地址是一个内存单元就是1b,2个十六进制位。\n* 要知道给定一个段地址之后的地址寻址范围。\n* inc\n* dec\n\n## 寄存器的总结\n### 段寄存器\n段寄存器就是存放段地址的\n\n* CS\n* DS\n* SS\n* ES\n\n**段地址不支持直接将数据送入** \n\n* SS:SP永远指向栈顶元素 \n\n**在自己写程序的过程中要注意的问题!**\n\n* assume写全\n* 最后int 21h\n* 数据不能以字母开头\n* 使用es存放目标空间的段地址\n* 正式的程序开始时写`start`,最后写`end start`\n\n## 寻址方式\n### 多种寻址方式\n* 寄存器直接寻址\n* 寄存器相对寻址(寄存器+idata)\n* 基址变址寻址(寄存器+寄存器)\n* 相对基址变址寻址(寄存器+寄存器+idata)\n\n### 转大小写的单循环例子\n\n\tassume cs:code,ds:data,ss:strack\n\tstrack segment\n\t dw 8 dup(0)\n\tstrack ends\n\tdata segment\n\t db '1. display '\n\t db '2. dsjk '\n\t db '3. dasdasdasd '\n\tdata ends\n\tcode segment\n\tstart:\n\t\tmov ax,data\n\t\tmov ds,ax\n\t\tmov ax,strack\n\t\tmov ss,ax\n\t\tmov sp,10h\n\t\tmov di,0\n\t\tmov cx,4h\n\tl:\n\t\tmov al,[di+3]\n\t\tand al,11011111b\n\t\tmov [di+3],al\n\t\tmov al,[di+10h+3]\n\t\tand al,11011111b\n\t\tmov [di+10h+3],al\n\t\tmov al,[di+32+3]\n\t\tand al,11011111b\n\t\tmov [di+32+3],al\n\t\tinc di\n\t\tloop l\n\t\n\tmov ax,4c00h\n\tint 21h\n\t\n\t\n\tcode ends\n\tend start\n\n结果![](a.png)\n### 转大小写的双循环例子\n> 注意bx和si的同时使用,di和si不能同时使用\n\n\tassume cs:code,ds:data,ss:strack\n\tstrack segment\n\t dw 8 dup(0)\n\tstrack ends\n\tdata segment\n\t db '1. display '\n\t db '2. dsjk '\n\t db '3. dasdasdasd '\n\tdata ends\n\tcode segment\n\tstart:\n\tmov ax,data\n\tmov ds,ax\n\tmov ax,strack\n\tmov ss,ax\n\tmov sp,10h\n\tmov di,0\n\tmov cx,4\n\tmov si,0\n\tl:\n\tpush cx\n\tmov cx,3\n\tl0:\n\tmov al,[si+di+3]\n\tand al,11011111b\n\tmov [di+3],al\n\tinc di\n\tloop l0\n\tmov di,0\n\tadd si,16\n\tpop cx\n\tloop l\n\tmov ax,4c00h\n\tint 21h\n\tcode ends\n\tend start\n\n\n结果![](b.png)\n\n\n## 指令的转移\n### jmp\n* `jmp short 标号` -128~127\n* `jmp near ptr 标号`\t\t-32768~32767\n* `jmp far ptr 标号`\n* `jmp 16位reg` IP = reg\n* `jmp word ptr 地址`\t\t段内转移:jmp word ptr ds:[0],设置IP\n* `jmp dword ptr 地址`\t段间转移,先赋值IP\n\n### jcxz\n当cx为0时跳转,范围-128~127\n\n### ret和retf\n都是先对IP进行操作\n\t\n\tpop ip\n\tpop cs\n\n### call\n* call 标号\n* call far ptr 标号 \n\n```\npush cs\npush ip\n```\n\n* call word ptr 地址\n* call dword ptr 地址\n\n### mul乘法\n* 双8位,一个放al,结果ax\n* 双16位,一个放ax,结果高位dx低位ax\n\n```\nmov al,1\nmov bl,2\nmul bl\n```\n或者\n```\nmov al,1\nmov byte ptr ds:[0],2\nmul byte ptr ds:[0]\n```\n\n### div除法\n> 低位是商高位是余数\n\n* 16位除以8位,前面的数放在ax里\n* 32位除以16位,高位dx,低位ax\n\n```\ndiv byte ptr ds:[0];默认被除数是ax\n```\n或者\n```\nmov bx,10\ndiv bx;默认被除数高位是dx,低位时ax\n```\n\n## 中断\n流程:\n* 取得中断码\n* pushf\n* 设置标志寄存器\n* CS和IP入栈\n* 设置IP,设置CS\n\n### 中断向量表\n四个字节一个中断地址 \n前两个是IP \n后两个是CS\n\n### 安装\n> 这里进行模拟loop的安装,位置7ch。\n\n\n\n\n\n","slug":"汇编语言:基础知识(第五章以前)","published":1,"updated":"2018-01-09T15:21:05.093Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkn6002qtzy4klt3wr8v","content":"<h1 id=\"汇编语言:基础知识(第五章以前)\"><a href=\"#汇编语言:基础知识(第五章以前)\" class=\"headerlink\" title=\"汇编语言:基础知识(第五章以前)\"></a>汇编语言:基础知识(第五章以前)</h1><h2 id=\"基基础\"><a href=\"#基基础\" class=\"headerlink\" title=\"基基础\"></a>基基础</h2><ul>\n<li>数据总线:传数据用的,8线一次传1b,8086有16线</li>\n<li>地址总线:最高可以寻到的地址,8086是20线,4线一个16进制位。</li>\n<li>一个地址是一个内存单元就是1b,2个十六进制位。</li>\n<li>要知道给定一个段地址之后的地址寻址范围。</li>\n<li>inc</li>\n<li>dec</li>\n</ul>\n<h2 id=\"寄存器的总结\"><a href=\"#寄存器的总结\" class=\"headerlink\" title=\"寄存器的总结\"></a>寄存器的总结</h2><h3 id=\"段寄存器\"><a href=\"#段寄存器\" class=\"headerlink\" title=\"段寄存器\"></a>段寄存器</h3><p>段寄存器就是存放段地址的</p>\n<ul>\n<li>CS</li>\n<li>DS</li>\n<li>SS</li>\n<li>ES</li>\n</ul>\n<p><strong>段地址不支持直接将数据送入</strong> </p>\n<ul>\n<li>SS:SP永远指向栈顶元素 </li>\n</ul>\n<p><strong>在自己写程序的过程中要注意的问题!</strong></p>\n<ul>\n<li>assume写全</li>\n<li>最后int 21h</li>\n<li>数据不能以字母开头</li>\n<li>使用es存放目标空间的段地址</li>\n<li>正式的程序开始时写<code>start</code>,最后写<code>end start</code></li>\n</ul>\n<h2 id=\"寻址方式\"><a href=\"#寻址方式\" class=\"headerlink\" title=\"寻址方式\"></a>寻址方式</h2><h3 id=\"多种寻址方式\"><a href=\"#多种寻址方式\" class=\"headerlink\" title=\"多种寻址方式\"></a>多种寻址方式</h3><ul>\n<li>寄存器直接寻址</li>\n<li>寄存器相对寻址(寄存器+idata)</li>\n<li>基址变址寻址(寄存器+寄存器)</li>\n<li>相对基址变址寻址(寄存器+寄存器+idata)</li>\n</ul>\n<h3 id=\"转大小写的单循环例子\"><a href=\"#转大小写的单循环例子\" class=\"headerlink\" title=\"转大小写的单循环例子\"></a>转大小写的单循环例子</h3><pre><code>assume cs:code,ds:data,ss:strack\nstrack segment\n dw 8 dup(0)\nstrack ends\ndata segment\n db '1. display '\n db '2. dsjk '\n db '3. dasdasdasd '\ndata ends\ncode segment\nstart:\n mov ax,data\n mov ds,ax\n mov ax,strack\n mov ss,ax\n mov sp,10h\n mov di,0\n mov cx,4h\nl:\n mov al,[di+3]\n and al,11011111b\n mov [di+3],al\n mov al,[di+10h+3]\n and al,11011111b\n mov [di+10h+3],al\n mov al,[di+32+3]\n and al,11011111b\n mov [di+32+3],al\n inc di\n loop l\n\nmov ax,4c00h\nint 21h\n\n\ncode ends\nend start\n</code></pre><p>结果<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"a.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n<h3 id=\"转大小写的双循环例子\"><a href=\"#转大小写的双循环例子\" class=\"headerlink\" title=\"转大小写的双循环例子\"></a>转大小写的双循环例子</h3><blockquote>\n<p>注意bx和si的同时使用,di和si不能同时使用</p>\n</blockquote>\n<pre><code>assume cs:code,ds:data,ss:strack\nstrack segment\n dw 8 dup(0)\nstrack ends\ndata segment\n db '1. display '\n db '2. dsjk '\n db '3. dasdasdasd '\ndata ends\ncode segment\nstart:\nmov ax,data\nmov ds,ax\nmov ax,strack\nmov ss,ax\nmov sp,10h\nmov di,0\nmov cx,4\nmov si,0\nl:\npush cx\nmov cx,3\nl0:\nmov al,[si+di+3]\nand al,11011111b\nmov [di+3],al\ninc di\nloop l0\nmov di,0\nadd si,16\npop cx\nloop l\nmov ax,4c00h\nint 21h\ncode ends\nend start\n</code></pre><p>结果<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"b.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n<h2 id=\"指令的转移\"><a href=\"#指令的转移\" class=\"headerlink\" title=\"指令的转移\"></a>指令的转移</h2><h3 id=\"jmp\"><a href=\"#jmp\" class=\"headerlink\" title=\"jmp\"></a>jmp</h3><ul>\n<li><code>jmp short 标号</code> -128~127</li>\n<li><code>jmp near ptr 标号</code> -32768~32767</li>\n<li><code>jmp far ptr 标号</code></li>\n<li><code>jmp 16位reg</code> IP = reg</li>\n<li><code>jmp word ptr 地址</code> 段内转移:jmp word ptr ds:[0],设置IP</li>\n<li><code>jmp dword ptr 地址</code> 段间转移,先赋值IP</li>\n</ul>\n<h3 id=\"jcxz\"><a href=\"#jcxz\" class=\"headerlink\" title=\"jcxz\"></a>jcxz</h3><p>当cx为0时跳转,范围-128~127</p>\n<h3 id=\"ret和retf\"><a href=\"#ret和retf\" class=\"headerlink\" title=\"ret和retf\"></a>ret和retf</h3><p>都是先对IP进行操作</p>\n<pre><code>pop ip\npop cs\n</code></pre><h3 id=\"call\"><a href=\"#call\" class=\"headerlink\" title=\"call\"></a>call</h3><ul>\n<li>call 标号</li>\n<li>call far ptr 标号 </li>\n</ul>\n<figure class=\"highlight plain\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">push cs</span><br><span class=\"line\">push ip</span><br></pre></td></tr></table></figure>\n<ul>\n<li>call word ptr 地址</li>\n<li>call dword ptr 地址</li>\n</ul>\n<h3 id=\"mul乘法\"><a href=\"#mul乘法\" class=\"headerlink\" title=\"mul乘法\"></a>mul乘法</h3><ul>\n<li>双8位,一个放al,结果ax</li>\n<li>双16位,一个放ax,结果高位dx低位ax</li>\n</ul>\n<figure class=\"highlight plain\"><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><span class=\"line\">mov al,1</span><br><span class=\"line\">mov bl,2</span><br><span class=\"line\">mul bl</span><br></pre></td></tr></table></figure>\n<p>或者<br><figure class=\"highlight plain\"><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><span class=\"line\">mov al,1</span><br><span class=\"line\">mov byte ptr ds:[0],2</span><br><span class=\"line\">mul byte ptr ds:[0]</span><br></pre></td></tr></table></figure></p>\n<h3 id=\"div除法\"><a href=\"#div除法\" class=\"headerlink\" title=\"div除法\"></a>div除法</h3><blockquote>\n<p>低位是商高位是余数</p>\n</blockquote>\n<ul>\n<li>16位除以8位,前面的数放在ax里</li>\n<li>32位除以16位,高位dx,低位ax</li>\n</ul>\n<figure class=\"highlight plain\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">div byte ptr ds:[0];默认被除数是ax</span><br></pre></td></tr></table></figure>\n<p>或者<br><figure class=\"highlight plain\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">mov bx,10</span><br><span class=\"line\">div bx;默认被除数高位是dx,低位时ax</span><br></pre></td></tr></table></figure></p>\n<h2 id=\"中断\"><a href=\"#中断\" class=\"headerlink\" title=\"中断\"></a>中断</h2><p>流程:</p>\n<ul>\n<li>取得中断码</li>\n<li>pushf</li>\n<li>设置标志寄存器</li>\n<li>CS和IP入栈</li>\n<li>设置IP,设置CS</li>\n</ul>\n<h3 id=\"中断向量表\"><a href=\"#中断向量表\" class=\"headerlink\" title=\"中断向量表\"></a>中断向量表</h3><p>四个字节一个中断地址<br>前两个是IP<br>后两个是CS</p>\n<h3 id=\"安装\"><a href=\"#安装\" class=\"headerlink\" title=\"安装\"></a>安装</h3><blockquote>\n<p>这里进行模拟loop的安装,位置7ch。</p>\n</blockquote>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"汇编语言:基础知识(第五章以前)\"><a href=\"#汇编语言:基础知识(第五章以前)\" class=\"headerlink\" title=\"汇编语言:基础知识(第五章以前)\"></a>汇编语言:基础知识(第五章以前)</h1><h2 id=\"基基础\"><a href=\"#基基础\" class=\"headerlink\" title=\"基基础\"></a>基基础</h2><ul>\n<li>数据总线:传数据用的,8线一次传1b,8086有16线</li>\n<li>地址总线:最高可以寻到的地址,8086是20线,4线一个16进制位。</li>\n<li>一个地址是一个内存单元就是1b,2个十六进制位。</li>\n<li>要知道给定一个段地址之后的地址寻址范围。</li>\n<li>inc</li>\n<li>dec</li>\n</ul>\n<h2 id=\"寄存器的总结\"><a href=\"#寄存器的总结\" class=\"headerlink\" title=\"寄存器的总结\"></a>寄存器的总结</h2><h3 id=\"段寄存器\"><a href=\"#段寄存器\" class=\"headerlink\" title=\"段寄存器\"></a>段寄存器</h3><p>段寄存器就是存放段地址的</p>\n<ul>\n<li>CS</li>\n<li>DS</li>\n<li>SS</li>\n<li>ES</li>\n</ul>\n<p><strong>段地址不支持直接将数据送入</strong> </p>\n<ul>\n<li>SS:SP永远指向栈顶元素 </li>\n</ul>\n<p><strong>在自己写程序的过程中要注意的问题!</strong></p>\n<ul>\n<li>assume写全</li>\n<li>最后int 21h</li>\n<li>数据不能以字母开头</li>\n<li>使用es存放目标空间的段地址</li>\n<li>正式的程序开始时写<code>start</code>,最后写<code>end start</code></li>\n</ul>\n<h2 id=\"寻址方式\"><a href=\"#寻址方式\" class=\"headerlink\" title=\"寻址方式\"></a>寻址方式</h2><h3 id=\"多种寻址方式\"><a href=\"#多种寻址方式\" class=\"headerlink\" title=\"多种寻址方式\"></a>多种寻址方式</h3><ul>\n<li>寄存器直接寻址</li>\n<li>寄存器相对寻址(寄存器+idata)</li>\n<li>基址变址寻址(寄存器+寄存器)</li>\n<li>相对基址变址寻址(寄存器+寄存器+idata)</li>\n</ul>\n<h3 id=\"转大小写的单循环例子\"><a href=\"#转大小写的单循环例子\" class=\"headerlink\" title=\"转大小写的单循环例子\"></a>转大小写的单循环例子</h3><pre><code>assume cs:code,ds:data,ss:strack\nstrack segment\n dw 8 dup(0)\nstrack ends\ndata segment\n db '1. display '\n db '2. dsjk '\n db '3. dasdasdasd '\ndata ends\ncode segment\nstart:\n mov ax,data\n mov ds,ax\n mov ax,strack\n mov ss,ax\n mov sp,10h\n mov di,0\n mov cx,4h\nl:\n mov al,[di+3]\n and al,11011111b\n mov [di+3],al\n mov al,[di+10h+3]\n and al,11011111b\n mov [di+10h+3],al\n mov al,[di+32+3]\n and al,11011111b\n mov [di+32+3],al\n inc di\n loop l\n\nmov ax,4c00h\nint 21h\n\n\ncode ends\nend start\n</code></pre><p>结果<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"a.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n<h3 id=\"转大小写的双循环例子\"><a href=\"#转大小写的双循环例子\" class=\"headerlink\" title=\"转大小写的双循环例子\"></a>转大小写的双循环例子</h3><blockquote>\n<p>注意bx和si的同时使用,di和si不能同时使用</p>\n</blockquote>\n<pre><code>assume cs:code,ds:data,ss:strack\nstrack segment\n dw 8 dup(0)\nstrack ends\ndata segment\n db '1. display '\n db '2. dsjk '\n db '3. dasdasdasd '\ndata ends\ncode segment\nstart:\nmov ax,data\nmov ds,ax\nmov ax,strack\nmov ss,ax\nmov sp,10h\nmov di,0\nmov cx,4\nmov si,0\nl:\npush cx\nmov cx,3\nl0:\nmov al,[si+di+3]\nand al,11011111b\nmov [di+3],al\ninc di\nloop l0\nmov di,0\nadd si,16\npop cx\nloop l\nmov ax,4c00h\nint 21h\ncode ends\nend start\n</code></pre><p>结果<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"b.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n<h2 id=\"指令的转移\"><a href=\"#指令的转移\" class=\"headerlink\" title=\"指令的转移\"></a>指令的转移</h2><h3 id=\"jmp\"><a href=\"#jmp\" class=\"headerlink\" title=\"jmp\"></a>jmp</h3><ul>\n<li><code>jmp short 标号</code> -128~127</li>\n<li><code>jmp near ptr 标号</code> -32768~32767</li>\n<li><code>jmp far ptr 标号</code></li>\n<li><code>jmp 16位reg</code> IP = reg</li>\n<li><code>jmp word ptr 地址</code> 段内转移:jmp word ptr ds:[0],设置IP</li>\n<li><code>jmp dword ptr 地址</code> 段间转移,先赋值IP</li>\n</ul>\n<h3 id=\"jcxz\"><a href=\"#jcxz\" class=\"headerlink\" title=\"jcxz\"></a>jcxz</h3><p>当cx为0时跳转,范围-128~127</p>\n<h3 id=\"ret和retf\"><a href=\"#ret和retf\" class=\"headerlink\" title=\"ret和retf\"></a>ret和retf</h3><p>都是先对IP进行操作</p>\n<pre><code>pop ip\npop cs\n</code></pre><h3 id=\"call\"><a href=\"#call\" class=\"headerlink\" title=\"call\"></a>call</h3><ul>\n<li>call 标号</li>\n<li>call far ptr 标号 </li>\n</ul>\n<figure class=\"highlight plain\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">push cs</span><br><span class=\"line\">push ip</span><br></pre></td></tr></table></figure>\n<ul>\n<li>call word ptr 地址</li>\n<li>call dword ptr 地址</li>\n</ul>\n<h3 id=\"mul乘法\"><a href=\"#mul乘法\" class=\"headerlink\" title=\"mul乘法\"></a>mul乘法</h3><ul>\n<li>双8位,一个放al,结果ax</li>\n<li>双16位,一个放ax,结果高位dx低位ax</li>\n</ul>\n<figure class=\"highlight plain\"><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><span class=\"line\">mov al,1</span><br><span class=\"line\">mov bl,2</span><br><span class=\"line\">mul bl</span><br></pre></td></tr></table></figure>\n<p>或者<br><figure class=\"highlight plain\"><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><span class=\"line\">mov al,1</span><br><span class=\"line\">mov byte ptr ds:[0],2</span><br><span class=\"line\">mul byte ptr ds:[0]</span><br></pre></td></tr></table></figure></p>\n<h3 id=\"div除法\"><a href=\"#div除法\" class=\"headerlink\" title=\"div除法\"></a>div除法</h3><blockquote>\n<p>低位是商高位是余数</p>\n</blockquote>\n<ul>\n<li>16位除以8位,前面的数放在ax里</li>\n<li>32位除以16位,高位dx,低位ax</li>\n</ul>\n<figure class=\"highlight plain\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">div byte ptr ds:[0];默认被除数是ax</span><br></pre></td></tr></table></figure>\n<p>或者<br><figure class=\"highlight plain\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">mov bx,10</span><br><span class=\"line\">div bx;默认被除数高位是dx,低位时ax</span><br></pre></td></tr></table></figure></p>\n<h2 id=\"中断\"><a href=\"#中断\" class=\"headerlink\" title=\"中断\"></a>中断</h2><p>流程:</p>\n<ul>\n<li>取得中断码</li>\n<li>pushf</li>\n<li>设置标志寄存器</li>\n<li>CS和IP入栈</li>\n<li>设置IP,设置CS</li>\n</ul>\n<h3 id=\"中断向量表\"><a href=\"#中断向量表\" class=\"headerlink\" title=\"中断向量表\"></a>中断向量表</h3><p>四个字节一个中断地址<br>前两个是IP<br>后两个是CS</p>\n<h3 id=\"安装\"><a href=\"#安装\" class=\"headerlink\" title=\"安装\"></a>安装</h3><blockquote>\n<p>这里进行模拟loop的安装,位置7ch。</p>\n</blockquote>\n"},{"title":"现代第二章","date":"2017-12-28T12:08:13.000Z","_content":"\n# 矩阵\n\n## 向量引入\n### 线性相关无关性\n### 向量的秩\n\n## 矩阵的运算\n\n\t1)!*不可逆乘*\n\t2)一个行 * 一个列 = 一个数\n\t3)对角全为一的矩阵是单位矩阵计为E\n\t4)单位矩阵相当于乘法中的1\n\t5)任何矩阵与单位矩阵相乘都等于本身\n\t6)若AB == BA ,则称AB是可交换的\n\t7)矩阵的乘法不满足消除律\n\t8)矩阵的转置计为A\n\t9)(AB)t == Bt*At\n\t10) (kA)t == kAt\n\t11)如果At == A,那么这个矩阵式是对称的\n\t12)如果At == -A,那么这个矩阵式是反对称的\n\t13)对角矩阵是只有对角线上的矩阵,A = diag(a,b,c,d...)\n\t14)对角矩阵的数都一样的时候是数量矩阵,全是一的时候单位矩阵。\n\t\n### 可交换矩阵(逆矩阵)\n\t可交换矩阵的充要条件:\n\t\n\t(1) 设A , B 至少有一个为零矩阵,则A , B 可交换;\n\t(2) 设A , B 至少有一个为单位矩阵, 则A , B可交换;\n\t(3) 设A , B 至少有一个为数量矩阵, 则A , B可交换;\n\t(4) 设A , B 均为对角矩阵,则A , B 可交换;\n\t(5) 设A , B 均为准对角矩阵(准对角矩阵是分块矩阵概念下的一种矩阵。即除去主对角线上分块矩阵不为零矩阵外,其余分块矩阵均为零矩阵),且对角线上的子块均可交换,则A , B 可交换;\n\t(6) 设A*是A 的伴随矩阵,则A*与A可交换;\n\t(7) 设A可逆,则A 与其逆矩阵可交换;\n\t注:A的逆矩阵经过数乘变换所得到的矩阵也可以与A进行交换。\n\t(8)(n=0,1..., )可与 (m=0,1..., )交换.这一点由矩阵乘法的结合律证明。\n求所有可交换矩阵\n\t\n\t求A的所有可交换矩阵,所以设AZ == ZA,Z = [a,b;c,d],求出Z即可~\n\n\n\t\n## 矩阵的初等变化及其标准型\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","source":"_posts/现代第二章.md","raw":"---\ntitle: 现代第二章\ndate: 2017-12-28 20:08:13\ntags:\n\t- 线性代数\n\t- 笔记\ncategories: 线性代数\n---\n\n# 矩阵\n\n## 向量引入\n### 线性相关无关性\n### 向量的秩\n\n## 矩阵的运算\n\n\t1)!*不可逆乘*\n\t2)一个行 * 一个列 = 一个数\n\t3)对角全为一的矩阵是单位矩阵计为E\n\t4)单位矩阵相当于乘法中的1\n\t5)任何矩阵与单位矩阵相乘都等于本身\n\t6)若AB == BA ,则称AB是可交换的\n\t7)矩阵的乘法不满足消除律\n\t8)矩阵的转置计为A\n\t9)(AB)t == Bt*At\n\t10) (kA)t == kAt\n\t11)如果At == A,那么这个矩阵式是对称的\n\t12)如果At == -A,那么这个矩阵式是反对称的\n\t13)对角矩阵是只有对角线上的矩阵,A = diag(a,b,c,d...)\n\t14)对角矩阵的数都一样的时候是数量矩阵,全是一的时候单位矩阵。\n\t\n### 可交换矩阵(逆矩阵)\n\t可交换矩阵的充要条件:\n\t\n\t(1) 设A , B 至少有一个为零矩阵,则A , B 可交换;\n\t(2) 设A , B 至少有一个为单位矩阵, 则A , B可交换;\n\t(3) 设A , B 至少有一个为数量矩阵, 则A , B可交换;\n\t(4) 设A , B 均为对角矩阵,则A , B 可交换;\n\t(5) 设A , B 均为准对角矩阵(准对角矩阵是分块矩阵概念下的一种矩阵。即除去主对角线上分块矩阵不为零矩阵外,其余分块矩阵均为零矩阵),且对角线上的子块均可交换,则A , B 可交换;\n\t(6) 设A*是A 的伴随矩阵,则A*与A可交换;\n\t(7) 设A可逆,则A 与其逆矩阵可交换;\n\t注:A的逆矩阵经过数乘变换所得到的矩阵也可以与A进行交换。\n\t(8)(n=0,1..., )可与 (m=0,1..., )交换.这一点由矩阵乘法的结合律证明。\n求所有可交换矩阵\n\t\n\t求A的所有可交换矩阵,所以设AZ == ZA,Z = [a,b;c,d],求出Z即可~\n\n\n\t\n## 矩阵的初等变化及其标准型\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","slug":"现代第二章","published":1,"updated":"2017-12-28T19:34:15.439Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkn8002stzy4pubuk2uf","content":"<h1 id=\"矩阵\"><a href=\"#矩阵\" class=\"headerlink\" title=\"矩阵\"></a>矩阵</h1><h2 id=\"向量引入\"><a href=\"#向量引入\" class=\"headerlink\" title=\"向量引入\"></a>向量引入</h2><h3 id=\"线性相关无关性\"><a href=\"#线性相关无关性\" class=\"headerlink\" title=\"线性相关无关性\"></a>线性相关无关性</h3><h3 id=\"向量的秩\"><a href=\"#向量的秩\" class=\"headerlink\" title=\"向量的秩\"></a>向量的秩</h3><h2 id=\"矩阵的运算\"><a href=\"#矩阵的运算\" class=\"headerlink\" title=\"矩阵的运算\"></a>矩阵的运算</h2><pre><code>1)!*不可逆乘*\n2)一个行 * 一个列 = 一个数\n3)对角全为一的矩阵是单位矩阵计为E\n4)单位矩阵相当于乘法中的1\n5)任何矩阵与单位矩阵相乘都等于本身\n6)若AB == BA ,则称AB是可交换的\n7)矩阵的乘法不满足消除律\n8)矩阵的转置计为A\n9)(AB)t == Bt*At\n10) (kA)t == kAt\n11)如果At == A,那么这个矩阵式是对称的\n12)如果At == -A,那么这个矩阵式是反对称的\n13)对角矩阵是只有对角线上的矩阵,A = diag(a,b,c,d...)\n14)对角矩阵的数都一样的时候是数量矩阵,全是一的时候单位矩阵。\n</code></pre><h3 id=\"可交换矩阵-逆矩阵\"><a href=\"#可交换矩阵-逆矩阵\" class=\"headerlink\" title=\"可交换矩阵(逆矩阵)\"></a>可交换矩阵(逆矩阵)</h3><pre><code>可交换矩阵的充要条件:\n\n(1) 设A , B 至少有一个为零矩阵,则A , B 可交换;\n(2) 设A , B 至少有一个为单位矩阵, 则A , B可交换;\n(3) 设A , B 至少有一个为数量矩阵, 则A , B可交换;\n(4) 设A , B 均为对角矩阵,则A , B 可交换;\n(5) 设A , B 均为准对角矩阵(准对角矩阵是分块矩阵概念下的一种矩阵。即除去主对角线上分块矩阵不为零矩阵外,其余分块矩阵均为零矩阵),且对角线上的子块均可交换,则A , B 可交换;\n(6) 设A*是A 的伴随矩阵,则A*与A可交换;\n(7) 设A可逆,则A 与其逆矩阵可交换;\n注:A的逆矩阵经过数乘变换所得到的矩阵也可以与A进行交换。\n(8)(n=0,1..., )可与 (m=0,1..., )交换.这一点由矩阵乘法的结合律证明。\n</code></pre><p>求所有可交换矩阵</p>\n<pre><code>求A的所有可交换矩阵,所以设AZ == ZA,Z = [a,b;c,d],求出Z即可~\n</code></pre><h2 id=\"矩阵的初等变化及其标准型\"><a href=\"#矩阵的初等变化及其标准型\" class=\"headerlink\" title=\"矩阵的初等变化及其标准型\"></a>矩阵的初等变化及其标准型</h2>","site":{"data":{}},"excerpt":"","more":"<h1 id=\"矩阵\"><a href=\"#矩阵\" class=\"headerlink\" title=\"矩阵\"></a>矩阵</h1><h2 id=\"向量引入\"><a href=\"#向量引入\" class=\"headerlink\" title=\"向量引入\"></a>向量引入</h2><h3 id=\"线性相关无关性\"><a href=\"#线性相关无关性\" class=\"headerlink\" title=\"线性相关无关性\"></a>线性相关无关性</h3><h3 id=\"向量的秩\"><a href=\"#向量的秩\" class=\"headerlink\" title=\"向量的秩\"></a>向量的秩</h3><h2 id=\"矩阵的运算\"><a href=\"#矩阵的运算\" class=\"headerlink\" title=\"矩阵的运算\"></a>矩阵的运算</h2><pre><code>1)!*不可逆乘*\n2)一个行 * 一个列 = 一个数\n3)对角全为一的矩阵是单位矩阵计为E\n4)单位矩阵相当于乘法中的1\n5)任何矩阵与单位矩阵相乘都等于本身\n6)若AB == BA ,则称AB是可交换的\n7)矩阵的乘法不满足消除律\n8)矩阵的转置计为A\n9)(AB)t == Bt*At\n10) (kA)t == kAt\n11)如果At == A,那么这个矩阵式是对称的\n12)如果At == -A,那么这个矩阵式是反对称的\n13)对角矩阵是只有对角线上的矩阵,A = diag(a,b,c,d...)\n14)对角矩阵的数都一样的时候是数量矩阵,全是一的时候单位矩阵。\n</code></pre><h3 id=\"可交换矩阵-逆矩阵\"><a href=\"#可交换矩阵-逆矩阵\" class=\"headerlink\" title=\"可交换矩阵(逆矩阵)\"></a>可交换矩阵(逆矩阵)</h3><pre><code>可交换矩阵的充要条件:\n\n(1) 设A , B 至少有一个为零矩阵,则A , B 可交换;\n(2) 设A , B 至少有一个为单位矩阵, 则A , B可交换;\n(3) 设A , B 至少有一个为数量矩阵, 则A , B可交换;\n(4) 设A , B 均为对角矩阵,则A , B 可交换;\n(5) 设A , B 均为准对角矩阵(准对角矩阵是分块矩阵概念下的一种矩阵。即除去主对角线上分块矩阵不为零矩阵外,其余分块矩阵均为零矩阵),且对角线上的子块均可交换,则A , B 可交换;\n(6) 设A*是A 的伴随矩阵,则A*与A可交换;\n(7) 设A可逆,则A 与其逆矩阵可交换;\n注:A的逆矩阵经过数乘变换所得到的矩阵也可以与A进行交换。\n(8)(n=0,1..., )可与 (m=0,1..., )交换.这一点由矩阵乘法的结合律证明。\n</code></pre><p>求所有可交换矩阵</p>\n<pre><code>求A的所有可交换矩阵,所以设AZ == ZA,Z = [a,b;c,d],求出Z即可~\n</code></pre><h2 id=\"矩阵的初等变化及其标准型\"><a href=\"#矩阵的初等变化及其标准型\" class=\"headerlink\" title=\"矩阵的初等变化及其标准型\"></a>矩阵的初等变化及其标准型</h2>"},{"title":"第一篇文章","date":"2017-09-03T14:42:24.000Z","description":"这里写内容简介","_content":"# 这是第一篇文章~\n> 我就试试看能不能成功。\n\n我的\n第一篇文章\n","source":"_posts/第一篇文章.md","raw":"---\ntitle: 第一篇文章\ndate: 2017-09-03 22:42:24\ntags: \n - 新手\n - 入门\n - hexo\n\ncategories: hexo\ndescription: 这里写内容简介\n---\n# 这是第一篇文章~\n> 我就试试看能不能成功。\n\n我的\n第一篇文章\n","slug":"第一篇文章","published":1,"updated":"2017-09-08T03:34:51.000Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkn9002vtzy41aea084r","content":"<h1 id=\"这是第一篇文章~\"><a href=\"#这是第一篇文章~\" class=\"headerlink\" title=\"这是第一篇文章~\"></a>这是第一篇文章~</h1><blockquote>\n<p>我就试试看能不能成功。</p>\n</blockquote>\n<p>我的<br>第一篇文章</p>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"这是第一篇文章~\"><a href=\"#这是第一篇文章~\" class=\"headerlink\" title=\"这是第一篇文章~\"></a>这是第一篇文章~</h1><blockquote>\n<p>我就试试看能不能成功。</p>\n</blockquote>\n<p>我的<br>第一篇文章</p>\n"},{"title":"近期的一些更新计划","date":"2017-09-05T01:17:45.000Z","description":"刚刚建了Blog的一些计划","_content":"# 近期的一些更新计划 \n>刚接触Blog没多久所以想写的东西有点多,但是这玩意吧~他得用MarkDown语法写,挺别扭的,我还得学一学,所以先列一下自己最近想要写的一些东西(可能刚开始都是比较基础的,但是还是主要做给自己看,相当于笔记的东西吧,但是因为在公网上,还是认认真真写比较好)。\n\n**MarkDown的一些基本语法 \nLinux的一些命令操作(持续更新) \n常用的默认网络端口号 \nLinux布置http环境 \n个人Blog——Hexo在GitHub上的配置**\n","source":"_posts/近期的一些更新计划.md","raw":"---\ntitle: 近期的一些更新计划\ndate: 2017-09-05 09:17:45\ntags: 随笔\ncategories: 随笔\ndescription: 刚刚建了Blog的一些计划\n---\n# 近期的一些更新计划 \n>刚接触Blog没多久所以想写的东西有点多,但是这玩意吧~他得用MarkDown语法写,挺别扭的,我还得学一学,所以先列一下自己最近想要写的一些东西(可能刚开始都是比较基础的,但是还是主要做给自己看,相当于笔记的东西吧,但是因为在公网上,还是认认真真写比较好)。\n\n**MarkDown的一些基本语法 \nLinux的一些命令操作(持续更新) \n常用的默认网络端口号 \nLinux布置http环境 \n个人Blog——Hexo在GitHub上的配置**\n","slug":"近期的一些更新计划","published":1,"updated":"2017-09-08T03:31:04.000Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkna002xtzy4np6wc5ef","content":"<h1 id=\"近期的一些更新计划\"><a href=\"#近期的一些更新计划\" class=\"headerlink\" title=\"近期的一些更新计划\"></a>近期的一些更新计划</h1><blockquote>\n<p>刚接触Blog没多久所以想写的东西有点多,但是这玩意吧~他得用MarkDown语法写,挺别扭的,我还得学一学,所以先列一下自己最近想要写的一些东西(可能刚开始都是比较基础的,但是还是主要做给自己看,相当于笔记的东西吧,但是因为在公网上,还是认认真真写比较好)。</p>\n</blockquote>\n<p><strong>MarkDown的一些基本语法<br>Linux的一些命令操作(持续更新)<br>常用的默认网络端口号<br>Linux布置http环境<br>个人Blog——Hexo在GitHub上的配置</strong></p>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"近期的一些更新计划\"><a href=\"#近期的一些更新计划\" class=\"headerlink\" title=\"近期的一些更新计划\"></a>近期的一些更新计划</h1><blockquote>\n<p>刚接触Blog没多久所以想写的东西有点多,但是这玩意吧~他得用MarkDown语法写,挺别扭的,我还得学一学,所以先列一下自己最近想要写的一些东西(可能刚开始都是比较基础的,但是还是主要做给自己看,相当于笔记的东西吧,但是因为在公网上,还是认认真真写比较好)。</p>\n</blockquote>\n<p><strong>MarkDown的一些基本语法<br>Linux的一些命令操作(持续更新)<br>常用的默认网络端口号<br>Linux布置http环境<br>个人Blog——Hexo在GitHub上的配置</strong></p>\n"},{"title":"甘肃政务服务网证件办理自动查询","date":"2018-07-06T11:07:45.000Z","_content":"\n# 甘肃政务服务网证件办理自动查询\n> 办理护照和大通证的时候发现有个甘肃政务服务网可以查到办证的进度信息,因为着急要就随时盯着,所以写了个自动查询脚本,进度变化的时候会发邮件给我。\n\n[甘肃政务信息网](http://crj.gsgaw.gov.cn:7770/crj/crjmsjw/wsyy/ajax/bzjdquery.html)\n\n![](a.png) \n\n效果如下: \n![](b.png) \n## 源码\n\n```python\n# -*- coding: UTF-8 -*-\nimport json\nimport time\nimport requests\nimport smtplib\nfrom email.mime.text import MIMEText\nfrom email.header import Header\n\nfrom bs4 import BeautifulSoup\n\n\ndef send_mail(sub, text):\n # 第三方 SMTP 服务\n mail_host = \"smtp.lzu.edu.cn\" # 设置服务器\n mail_user = \"***\" # 用户名\n mail_pass = \"***\" # 口令\n\n sender = '[email protected]'\n # receivers = ['[email protected]'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱\n receivers = ','.join(['[email protected]'])\n message = MIMEText(text, 'plain', 'utf-8')\n message['From'] = Header(\"自动发送\", 'utf-8')\n message['To'] = Header(\"Rankin\", 'utf-8')\n\n subject = sub\n message['Subject'] = Header(subject, 'utf-8')\n try:\n smtpObj = smtplib.SMTP()\n smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号\n smtpObj.login(mail_user, mail_pass)\n smtpObj.sendmail(sender, receivers, message.as_string())\n print(\"邮件发送成功\")\n except smtplib.SMTPException:\n print(\"send mail error!\")\n\nmessage = 'Pass the first stage'\nloginurl = 'http://crj.gsgaw.gov.cn:7770/crj/crjmsjw/wssb/ajax/bzjdcx'\n\nheaders = {\n \"User-Agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1 Safari/605.1.15\",\n \"Accept\": \"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\": \"gzip, deflate\",\n \"Host\": 'nj.gsaic.gov.cn',\n \"Accept-Language\": 'zh-cn',\n \"Content-Type\": 'application/x-www-form-urlencoded; charset=UTF-8',\n 'Referer': 'http://crj.gsgaw.gov.cn:7770/crj/crjmsjw/wsyy/ajax/bzjdquery.html',\n \"Upgrade-Insecure-Requests\": \"1\",\n \"Origin\": 'http://crj.gsgaw.gov.cn:7770',\n \"DNT\": '1',\n \"Connection\": 'keep-alive'\n\n}\n\npayload = {\n 'sfzh': '632824199809070519',\n 'rylb': 'R'\n}\nsession = requests.Session()\n\n\nmessage = \"\"\nwhile 1:\n try:\n content = session.post(loginurl, headers=headers, data=payload)\n except:\n print(\"login error!\")\n\n tagert = json.loads(content.text)\n\n res = tagert['data'][0]['fullbzjd']\n print(time.strftime(\"%a %b %d %H:%M:%S %Y\", time.localtime()) + \" \" + res)\n if message != res:\n send_mail(\"赴台证\", res)\n message = res\n time.sleep(120)\n```","source":"_posts/甘肃政务服务网证件办理自动查询.md","raw":"---\ntitle: 甘肃政务服务网证件办理自动查询\ndate: 2018-07-06 19:07:45\ntags: [脚本,办证进度,甘肃政务服务网]\ncategories: 脚本\n---\n\n# 甘肃政务服务网证件办理自动查询\n> 办理护照和大通证的时候发现有个甘肃政务服务网可以查到办证的进度信息,因为着急要就随时盯着,所以写了个自动查询脚本,进度变化的时候会发邮件给我。\n\n[甘肃政务信息网](http://crj.gsgaw.gov.cn:7770/crj/crjmsjw/wsyy/ajax/bzjdquery.html)\n\n![](a.png) \n\n效果如下: \n![](b.png) \n## 源码\n\n```python\n# -*- coding: UTF-8 -*-\nimport json\nimport time\nimport requests\nimport smtplib\nfrom email.mime.text import MIMEText\nfrom email.header import Header\n\nfrom bs4 import BeautifulSoup\n\n\ndef send_mail(sub, text):\n # 第三方 SMTP 服务\n mail_host = \"smtp.lzu.edu.cn\" # 设置服务器\n mail_user = \"***\" # 用户名\n mail_pass = \"***\" # 口令\n\n sender = '[email protected]'\n # receivers = ['[email protected]'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱\n receivers = ','.join(['[email protected]'])\n message = MIMEText(text, 'plain', 'utf-8')\n message['From'] = Header(\"自动发送\", 'utf-8')\n message['To'] = Header(\"Rankin\", 'utf-8')\n\n subject = sub\n message['Subject'] = Header(subject, 'utf-8')\n try:\n smtpObj = smtplib.SMTP()\n smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号\n smtpObj.login(mail_user, mail_pass)\n smtpObj.sendmail(sender, receivers, message.as_string())\n print(\"邮件发送成功\")\n except smtplib.SMTPException:\n print(\"send mail error!\")\n\nmessage = 'Pass the first stage'\nloginurl = 'http://crj.gsgaw.gov.cn:7770/crj/crjmsjw/wssb/ajax/bzjdcx'\n\nheaders = {\n \"User-Agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1 Safari/605.1.15\",\n \"Accept\": \"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\": \"gzip, deflate\",\n \"Host\": 'nj.gsaic.gov.cn',\n \"Accept-Language\": 'zh-cn',\n \"Content-Type\": 'application/x-www-form-urlencoded; charset=UTF-8',\n 'Referer': 'http://crj.gsgaw.gov.cn:7770/crj/crjmsjw/wsyy/ajax/bzjdquery.html',\n \"Upgrade-Insecure-Requests\": \"1\",\n \"Origin\": 'http://crj.gsgaw.gov.cn:7770',\n \"DNT\": '1',\n \"Connection\": 'keep-alive'\n\n}\n\npayload = {\n 'sfzh': '632824199809070519',\n 'rylb': 'R'\n}\nsession = requests.Session()\n\n\nmessage = \"\"\nwhile 1:\n try:\n content = session.post(loginurl, headers=headers, data=payload)\n except:\n print(\"login error!\")\n\n tagert = json.loads(content.text)\n\n res = tagert['data'][0]['fullbzjd']\n print(time.strftime(\"%a %b %d %H:%M:%S %Y\", time.localtime()) + \" \" + res)\n if message != res:\n send_mail(\"赴台证\", res)\n message = res\n time.sleep(120)\n```","slug":"甘肃政务服务网证件办理自动查询","published":1,"updated":"2018-07-06T11:23:41.506Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vknc0031tzy48tfwure5","content":"<h1 id=\"甘肃政务服务网证件办理自动查询\"><a href=\"#甘肃政务服务网证件办理自动查询\" class=\"headerlink\" title=\"甘肃政务服务网证件办理自动查询\"></a>甘肃政务服务网证件办理自动查询</h1><blockquote>\n<p>办理护照和大通证的时候发现有个甘肃政务服务网可以查到办证的进度信息,因为着急要就随时盯着,所以写了个自动查询脚本,进度变化的时候会发邮件给我。</p>\n</blockquote>\n<p><a href=\"http://crj.gsgaw.gov.cn:7770/crj/crjmsjw/wsyy/ajax/bzjdquery.html\" target=\"_blank\" rel=\"noopener\">甘肃政务信息网</a></p>\n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"a.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> \n<p>效果如下:<br><img src=\"b.png\" alt> </p>\n<h2 id=\"源码\"><a href=\"#源码\" class=\"headerlink\" title=\"源码\"></a>源码</h2><figure class=\"highlight python\"><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><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br><span class=\"line\">43</span><br><span class=\"line\">44</span><br><span class=\"line\">45</span><br><span class=\"line\">46</span><br><span class=\"line\">47</span><br><span class=\"line\">48</span><br><span class=\"line\">49</span><br><span class=\"line\">50</span><br><span class=\"line\">51</span><br><span class=\"line\">52</span><br><span class=\"line\">53</span><br><span class=\"line\">54</span><br><span class=\"line\">55</span><br><span class=\"line\">56</span><br><span class=\"line\">57</span><br><span class=\"line\">58</span><br><span class=\"line\">59</span><br><span class=\"line\">60</span><br><span class=\"line\">61</span><br><span class=\"line\">62</span><br><span class=\"line\">63</span><br><span class=\"line\">64</span><br><span class=\"line\">65</span><br><span class=\"line\">66</span><br><span class=\"line\">67</span><br><span class=\"line\">68</span><br><span class=\"line\">69</span><br><span class=\"line\">70</span><br><span class=\"line\">71</span><br><span class=\"line\">72</span><br><span class=\"line\">73</span><br><span class=\"line\">74</span><br><span class=\"line\">75</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\"># -*- coding: UTF-8 -*-</span></span><br><span class=\"line\"><span class=\"keyword\">import</span> json</span><br><span class=\"line\"><span class=\"keyword\">import</span> time</span><br><span class=\"line\"><span class=\"keyword\">import</span> requests</span><br><span class=\"line\"><span class=\"keyword\">import</span> smtplib</span><br><span class=\"line\"><span class=\"keyword\">from</span> email.mime.text <span class=\"keyword\">import</span> MIMEText</span><br><span class=\"line\"><span class=\"keyword\">from</span> email.header <span class=\"keyword\">import</span> Header</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"keyword\">from</span> bs4 <span class=\"keyword\">import</span> BeautifulSoup</span><br><span class=\"line\"></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"function\"><span class=\"keyword\">def</span> <span class=\"title\">send_mail</span><span class=\"params\">(sub, text)</span>:</span></span><br><span class=\"line\"> <span class=\"comment\"># 第三方 SMTP 服务</span></span><br><span class=\"line\"> mail_host = <span class=\"string\">\"smtp.lzu.edu.cn\"</span> <span class=\"comment\"># 设置服务器</span></span><br><span class=\"line\"> mail_user = <span class=\"string\">\"***\"</span> <span class=\"comment\"># 用户名</span></span><br><span class=\"line\"> mail_pass = <span class=\"string\">\"***\"</span> <span class=\"comment\"># 口令</span></span><br><span class=\"line\"></span><br><span class=\"line\"> sender = <span class=\"string\">'[email protected]'</span></span><br><span class=\"line\"> <span class=\"comment\"># receivers = ['[email protected]'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱</span></span><br><span class=\"line\"> receivers = <span class=\"string\">','</span>.join([<span class=\"string\">'[email protected]'</span>])</span><br><span class=\"line\"> message = MIMEText(text, <span class=\"string\">'plain'</span>, <span class=\"string\">'utf-8'</span>)</span><br><span class=\"line\"> message[<span class=\"string\">'From'</span>] = Header(<span class=\"string\">\"自动发送\"</span>, <span class=\"string\">'utf-8'</span>)</span><br><span class=\"line\"> message[<span class=\"string\">'To'</span>] = Header(<span class=\"string\">\"Rankin\"</span>, <span class=\"string\">'utf-8'</span>)</span><br><span class=\"line\"></span><br><span class=\"line\"> subject = sub</span><br><span class=\"line\"> message[<span class=\"string\">'Subject'</span>] = Header(subject, <span class=\"string\">'utf-8'</span>)</span><br><span class=\"line\"> <span class=\"keyword\">try</span>:</span><br><span class=\"line\"> smtpObj = smtplib.SMTP()</span><br><span class=\"line\"> smtpObj.connect(mail_host, <span class=\"number\">25</span>) <span class=\"comment\"># 25 为 SMTP 端口号</span></span><br><span class=\"line\"> smtpObj.login(mail_user, mail_pass)</span><br><span class=\"line\"> smtpObj.sendmail(sender, receivers, message.as_string())</span><br><span class=\"line\"> print(<span class=\"string\">\"邮件发送成功\"</span>)</span><br><span class=\"line\"> <span class=\"keyword\">except</span> smtplib.SMTPException:</span><br><span class=\"line\"> print(<span class=\"string\">\"send mail error!\"</span>)</span><br><span class=\"line\"></span><br><span class=\"line\">message = <span class=\"string\">'Pass the first stage'</span></span><br><span class=\"line\">loginurl = <span class=\"string\">'http://crj.gsgaw.gov.cn:7770/crj/crjmsjw/wssb/ajax/bzjdcx'</span></span><br><span class=\"line\"></span><br><span class=\"line\">headers = {</span><br><span class=\"line\"> <span class=\"string\">\"User-Agent\"</span>: <span class=\"string\">\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1 Safari/605.1.15\"</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Accept\"</span>: <span class=\"string\">\"application/json, text/javascript, */*; q=0.01\"</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Accept-Encoding\"</span>: <span class=\"string\">\"gzip, deflate\"</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Host\"</span>: <span class=\"string\">'nj.gsaic.gov.cn'</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Accept-Language\"</span>: <span class=\"string\">'zh-cn'</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Content-Type\"</span>: <span class=\"string\">'application/x-www-form-urlencoded; charset=UTF-8'</span>,</span><br><span class=\"line\"> <span class=\"string\">'Referer'</span>: <span class=\"string\">'http://crj.gsgaw.gov.cn:7770/crj/crjmsjw/wsyy/ajax/bzjdquery.html'</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Upgrade-Insecure-Requests\"</span>: <span class=\"string\">\"1\"</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Origin\"</span>: <span class=\"string\">'http://crj.gsgaw.gov.cn:7770'</span>,</span><br><span class=\"line\"> <span class=\"string\">\"DNT\"</span>: <span class=\"string\">'1'</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Connection\"</span>: <span class=\"string\">'keep-alive'</span></span><br><span class=\"line\"></span><br><span class=\"line\">}</span><br><span class=\"line\"></span><br><span class=\"line\">payload = {</span><br><span class=\"line\"> <span class=\"string\">'sfzh'</span>: <span class=\"string\">'632824199809070519'</span>,</span><br><span class=\"line\"> <span class=\"string\">'rylb'</span>: <span class=\"string\">'R'</span></span><br><span class=\"line\">}</span><br><span class=\"line\">session = requests.Session()</span><br><span class=\"line\"></span><br><span class=\"line\"></span><br><span class=\"line\">message = <span class=\"string\">\"\"</span></span><br><span class=\"line\"><span class=\"keyword\">while</span> <span class=\"number\">1</span>:</span><br><span class=\"line\"> <span class=\"keyword\">try</span>:</span><br><span class=\"line\"> content = session.post(loginurl, headers=headers, data=payload)</span><br><span class=\"line\"> <span class=\"keyword\">except</span>:</span><br><span class=\"line\"> print(<span class=\"string\">\"login error!\"</span>)</span><br><span class=\"line\"></span><br><span class=\"line\"> tagert = json.loads(content.text)</span><br><span class=\"line\"></span><br><span class=\"line\"> res = tagert[<span class=\"string\">'data'</span>][<span class=\"number\">0</span>][<span class=\"string\">'fullbzjd'</span>]</span><br><span class=\"line\"> print(time.strftime(<span class=\"string\">\"%a %b %d %H:%M:%S %Y\"</span>, time.localtime()) + <span class=\"string\">\" \"</span> + res)</span><br><span class=\"line\"> <span class=\"keyword\">if</span> message != res:</span><br><span class=\"line\"> send_mail(<span class=\"string\">\"赴台证\"</span>, res)</span><br><span class=\"line\"> message = res</span><br><span class=\"line\"> time.sleep(<span class=\"number\">120</span>)</span><br></pre></td></tr></table></figure>","site":{"data":{}},"excerpt":"","more":"<h1 id=\"甘肃政务服务网证件办理自动查询\"><a href=\"#甘肃政务服务网证件办理自动查询\" class=\"headerlink\" title=\"甘肃政务服务网证件办理自动查询\"></a>甘肃政务服务网证件办理自动查询</h1><blockquote>\n<p>办理护照和大通证的时候发现有个甘肃政务服务网可以查到办证的进度信息,因为着急要就随时盯着,所以写了个自动查询脚本,进度变化的时候会发邮件给我。</p>\n</blockquote>\n<p><a href=\"http://crj.gsgaw.gov.cn:7770/crj/crjmsjw/wsyy/ajax/bzjdquery.html\" target=\"_blank\" rel=\"noopener\">甘肃政务信息网</a></p>\n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"a.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> \n<p>效果如下:<br><img src=\"b.png\" alt> </p>\n<h2 id=\"源码\"><a href=\"#源码\" class=\"headerlink\" title=\"源码\"></a>源码</h2><figure class=\"highlight python\"><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><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br><span class=\"line\">43</span><br><span class=\"line\">44</span><br><span class=\"line\">45</span><br><span class=\"line\">46</span><br><span class=\"line\">47</span><br><span class=\"line\">48</span><br><span class=\"line\">49</span><br><span class=\"line\">50</span><br><span class=\"line\">51</span><br><span class=\"line\">52</span><br><span class=\"line\">53</span><br><span class=\"line\">54</span><br><span class=\"line\">55</span><br><span class=\"line\">56</span><br><span class=\"line\">57</span><br><span class=\"line\">58</span><br><span class=\"line\">59</span><br><span class=\"line\">60</span><br><span class=\"line\">61</span><br><span class=\"line\">62</span><br><span class=\"line\">63</span><br><span class=\"line\">64</span><br><span class=\"line\">65</span><br><span class=\"line\">66</span><br><span class=\"line\">67</span><br><span class=\"line\">68</span><br><span class=\"line\">69</span><br><span class=\"line\">70</span><br><span class=\"line\">71</span><br><span class=\"line\">72</span><br><span class=\"line\">73</span><br><span class=\"line\">74</span><br><span class=\"line\">75</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\"># -*- coding: UTF-8 -*-</span></span><br><span class=\"line\"><span class=\"keyword\">import</span> json</span><br><span class=\"line\"><span class=\"keyword\">import</span> time</span><br><span class=\"line\"><span class=\"keyword\">import</span> requests</span><br><span class=\"line\"><span class=\"keyword\">import</span> smtplib</span><br><span class=\"line\"><span class=\"keyword\">from</span> email.mime.text <span class=\"keyword\">import</span> MIMEText</span><br><span class=\"line\"><span class=\"keyword\">from</span> email.header <span class=\"keyword\">import</span> Header</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"keyword\">from</span> bs4 <span class=\"keyword\">import</span> BeautifulSoup</span><br><span class=\"line\"></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"function\"><span class=\"keyword\">def</span> <span class=\"title\">send_mail</span><span class=\"params\">(sub, text)</span>:</span></span><br><span class=\"line\"> <span class=\"comment\"># 第三方 SMTP 服务</span></span><br><span class=\"line\"> mail_host = <span class=\"string\">\"smtp.lzu.edu.cn\"</span> <span class=\"comment\"># 设置服务器</span></span><br><span class=\"line\"> mail_user = <span class=\"string\">\"***\"</span> <span class=\"comment\"># 用户名</span></span><br><span class=\"line\"> mail_pass = <span class=\"string\">\"***\"</span> <span class=\"comment\"># 口令</span></span><br><span class=\"line\"></span><br><span class=\"line\"> sender = <span class=\"string\">'[email protected]'</span></span><br><span class=\"line\"> <span class=\"comment\"># receivers = ['[email protected]'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱</span></span><br><span class=\"line\"> receivers = <span class=\"string\">','</span>.join([<span class=\"string\">'[email protected]'</span>])</span><br><span class=\"line\"> message = MIMEText(text, <span class=\"string\">'plain'</span>, <span class=\"string\">'utf-8'</span>)</span><br><span class=\"line\"> message[<span class=\"string\">'From'</span>] = Header(<span class=\"string\">\"自动发送\"</span>, <span class=\"string\">'utf-8'</span>)</span><br><span class=\"line\"> message[<span class=\"string\">'To'</span>] = Header(<span class=\"string\">\"Rankin\"</span>, <span class=\"string\">'utf-8'</span>)</span><br><span class=\"line\"></span><br><span class=\"line\"> subject = sub</span><br><span class=\"line\"> message[<span class=\"string\">'Subject'</span>] = Header(subject, <span class=\"string\">'utf-8'</span>)</span><br><span class=\"line\"> <span class=\"keyword\">try</span>:</span><br><span class=\"line\"> smtpObj = smtplib.SMTP()</span><br><span class=\"line\"> smtpObj.connect(mail_host, <span class=\"number\">25</span>) <span class=\"comment\"># 25 为 SMTP 端口号</span></span><br><span class=\"line\"> smtpObj.login(mail_user, mail_pass)</span><br><span class=\"line\"> smtpObj.sendmail(sender, receivers, message.as_string())</span><br><span class=\"line\"> print(<span class=\"string\">\"邮件发送成功\"</span>)</span><br><span class=\"line\"> <span class=\"keyword\">except</span> smtplib.SMTPException:</span><br><span class=\"line\"> print(<span class=\"string\">\"send mail error!\"</span>)</span><br><span class=\"line\"></span><br><span class=\"line\">message = <span class=\"string\">'Pass the first stage'</span></span><br><span class=\"line\">loginurl = <span class=\"string\">'http://crj.gsgaw.gov.cn:7770/crj/crjmsjw/wssb/ajax/bzjdcx'</span></span><br><span class=\"line\"></span><br><span class=\"line\">headers = {</span><br><span class=\"line\"> <span class=\"string\">\"User-Agent\"</span>: <span class=\"string\">\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1 Safari/605.1.15\"</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Accept\"</span>: <span class=\"string\">\"application/json, text/javascript, */*; q=0.01\"</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Accept-Encoding\"</span>: <span class=\"string\">\"gzip, deflate\"</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Host\"</span>: <span class=\"string\">'nj.gsaic.gov.cn'</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Accept-Language\"</span>: <span class=\"string\">'zh-cn'</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Content-Type\"</span>: <span class=\"string\">'application/x-www-form-urlencoded; charset=UTF-8'</span>,</span><br><span class=\"line\"> <span class=\"string\">'Referer'</span>: <span class=\"string\">'http://crj.gsgaw.gov.cn:7770/crj/crjmsjw/wsyy/ajax/bzjdquery.html'</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Upgrade-Insecure-Requests\"</span>: <span class=\"string\">\"1\"</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Origin\"</span>: <span class=\"string\">'http://crj.gsgaw.gov.cn:7770'</span>,</span><br><span class=\"line\"> <span class=\"string\">\"DNT\"</span>: <span class=\"string\">'1'</span>,</span><br><span class=\"line\"> <span class=\"string\">\"Connection\"</span>: <span class=\"string\">'keep-alive'</span></span><br><span class=\"line\"></span><br><span class=\"line\">}</span><br><span class=\"line\"></span><br><span class=\"line\">payload = {</span><br><span class=\"line\"> <span class=\"string\">'sfzh'</span>: <span class=\"string\">'632824199809070519'</span>,</span><br><span class=\"line\"> <span class=\"string\">'rylb'</span>: <span class=\"string\">'R'</span></span><br><span class=\"line\">}</span><br><span class=\"line\">session = requests.Session()</span><br><span class=\"line\"></span><br><span class=\"line\"></span><br><span class=\"line\">message = <span class=\"string\">\"\"</span></span><br><span class=\"line\"><span class=\"keyword\">while</span> <span class=\"number\">1</span>:</span><br><span class=\"line\"> <span class=\"keyword\">try</span>:</span><br><span class=\"line\"> content = session.post(loginurl, headers=headers, data=payload)</span><br><span class=\"line\"> <span class=\"keyword\">except</span>:</span><br><span class=\"line\"> print(<span class=\"string\">\"login error!\"</span>)</span><br><span class=\"line\"></span><br><span class=\"line\"> tagert = json.loads(content.text)</span><br><span class=\"line\"></span><br><span class=\"line\"> res = tagert[<span class=\"string\">'data'</span>][<span class=\"number\">0</span>][<span class=\"string\">'fullbzjd'</span>]</span><br><span class=\"line\"> print(time.strftime(<span class=\"string\">\"%a %b %d %H:%M:%S %Y\"</span>, time.localtime()) + <span class=\"string\">\" \"</span> + res)</span><br><span class=\"line\"> <span class=\"keyword\">if</span> message != res:</span><br><span class=\"line\"> send_mail(<span class=\"string\">\"赴台证\"</span>, res)</span><br><span class=\"line\"> message = res</span><br><span class=\"line\"> time.sleep(<span class=\"number\">120</span>)</span><br></pre></td></tr></table></figure>"},{"title":"记一次微信小程序开发的经历","originContent":"","toc":true,"date":"2019-06-05T02:38:21.000Z","_content":"\n小程序","source":"_posts/记一次微信小程序开发的经历.md","raw":"---\ntitle: 记一次微信小程序开发的经历\ntags: []\ncategories:\n - 随笔\noriginContent: ''\ntoc: true\ndate: 2019-06-05 10:38:21\n---\n\n小程序","slug":"记一次微信小程序开发的经历","published":1,"updated":"2019-06-05T02:38:21.734Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vknd0034tzy4r6oebq10","content":"<p>小程序</p>\n","site":{"data":{}},"excerpt":"","more":"<p>小程序</p>\n"},{"title":"汇编语言第十二。。章:内外中断和int指令","date":"2018-01-04T16:33:03.000Z","_content":"\n# 汇编语言第十二。。章:内外中断和int指令\n> 不再过多说中断是什么了,就是可以随时控制CPU停止当前的指令干其他的事的意思,下面内中断程序的步骤: \n> 1. 将程序写入0:200开始的空间内,同时把字符什么的也要定义进去。 \n> 2. 设置中断向量表,前面是ip,后面是cs。注意高低位。 \n\n## 单步中断的操作\n1. 取得中断类型码\n2. 标志寄存器入栈\n3. 标志寄存器TF和IF置零,防止在中断程序中在中断。 \n4. CS内容入栈\n5. IP入栈\n6. 根据中断类型码从中断向量表中设置中断程序的CS和IP。\n\n## 中断处理程序的编写方法\n1. 保存用到的寄存器\n2. 处理中断\n3. 恢复寄存器\n4. iret\n\niret用来返回程序:操作为: \n\n\tpop ip\n\tpop cs\n\tpopf\n目的是回到执行中断处理程序之前的执行点继续执行程序。\n\n## 编写0号中断程序\n\n\tassume cs:code ss:satck ds:data\n\tcode segment\n\tstart:\tmov ax,cs\n\t\t\t\tmov ds,ax\n\t\t\t\tmov si,offset do0\t;ds:si指向do0中断程序部分\n\t\t\t\tmov ax,0\n\t\t\t\tmov es,ax\n\t\t\t\tmov di,200h\n\t\t\t\tmov cx offset do0end - do0\n\t\t\t\tcld\n\t\t\t\trep movsb\n\t\t\t\tmov ax,0\t\t\t;安装中断程序\n\t\t\t\tmov es,ax\n\t\t\t\tmov word ptr es:[0],200h\n\t\t\t\tmov word ptr es:[0+2],0\n\t\t\t\t\n\t\t\t\tmov ax,4c00h\n\t\t\t\tint 21h\n\t\t\t\t\n\tdo0:\t\tjmp short do0start\n\t\t\t\tdb \"overflow!\"\n\t\t\t\t\n\tdo0start:\n\t\t\t\tmov ax,cs\n\t\t\t\tmov ds,ax\n\t\t\t\tmov si,202h\t\t\t;ds:si指向字符串\n\t\t\t\tmov ax,0b800h\n\t\t\t\tmov es,ax\n\t\t\t\tmov di,12*160+36*2\t;es:di指向显存空间\n\t\t\t\tmov cx,9\n\t\t\ts:\tmov al,[si]\n\t\t\t\tmov es:[di],al\n\t\t\t\tinc si\n\t\t\t\tadd di,2\n\t\t\t\tloop s\n\t\t\t\t\n\t\t\t\tmov ax,4c00h\n\t\t\t\tint 21h\n\n\n## 中断的特殊情况\n设置栈的操作不会响应中断,因为中断会进行栈操作,需要设置正确的栈顶,所以设置sp的指令应当紧接着设置ss的指令\n\n## int指令\n格式:int n,n为中断类型码 \nint指令的最终功能和call类似,都是调用一段程序。 \n中断处理程序简称为中断例程 \n\n## 编写供应用程序调用的中断例程\n明天再写详细的\n\n## BIOS和DOS多提供的中断例程的安装过程\n1. CPU加电,初始化(CS) = 0FFFFH,(IP) = 0,从FFFF:0开始执行程序。此处有一条跳转指令,跳转后开始执行BIOS中的硬件系统检测和初始化程序 \n2. 初始化程序建立BIOS所支持的中断向量表,只需登记中断向量表,中断程序在ROM中,一直在内存中存在 \n3. 硬件检测和初始化完成之后,调用int 19h,进入操作系统引导程序。\n4. DOS启动,将所提供的中断例程装入内存,并建立中断向量表。\n\n\n## BIOS和DOS的中断例程的应用\n就是应用了,比如BIOS中的彩色显示int 10h和DOS中的输出字符串int 21h。明天再写\n\n## 汇编语言:完~","source":"_posts/汇编语言第十二。。章:内外中断和int指令.md","raw":"---\ntitle: 汇编语言第十二。。章:内外中断和int指令\ndate: 2018-01-05 00:33:03\ntags:\n\t- 汇编语言\n\t- 笔记\ncategories: 汇编语言\n---\n\n# 汇编语言第十二。。章:内外中断和int指令\n> 不再过多说中断是什么了,就是可以随时控制CPU停止当前的指令干其他的事的意思,下面内中断程序的步骤: \n> 1. 将程序写入0:200开始的空间内,同时把字符什么的也要定义进去。 \n> 2. 设置中断向量表,前面是ip,后面是cs。注意高低位。 \n\n## 单步中断的操作\n1. 取得中断类型码\n2. 标志寄存器入栈\n3. 标志寄存器TF和IF置零,防止在中断程序中在中断。 \n4. CS内容入栈\n5. IP入栈\n6. 根据中断类型码从中断向量表中设置中断程序的CS和IP。\n\n## 中断处理程序的编写方法\n1. 保存用到的寄存器\n2. 处理中断\n3. 恢复寄存器\n4. iret\n\niret用来返回程序:操作为: \n\n\tpop ip\n\tpop cs\n\tpopf\n目的是回到执行中断处理程序之前的执行点继续执行程序。\n\n## 编写0号中断程序\n\n\tassume cs:code ss:satck ds:data\n\tcode segment\n\tstart:\tmov ax,cs\n\t\t\t\tmov ds,ax\n\t\t\t\tmov si,offset do0\t;ds:si指向do0中断程序部分\n\t\t\t\tmov ax,0\n\t\t\t\tmov es,ax\n\t\t\t\tmov di,200h\n\t\t\t\tmov cx offset do0end - do0\n\t\t\t\tcld\n\t\t\t\trep movsb\n\t\t\t\tmov ax,0\t\t\t;安装中断程序\n\t\t\t\tmov es,ax\n\t\t\t\tmov word ptr es:[0],200h\n\t\t\t\tmov word ptr es:[0+2],0\n\t\t\t\t\n\t\t\t\tmov ax,4c00h\n\t\t\t\tint 21h\n\t\t\t\t\n\tdo0:\t\tjmp short do0start\n\t\t\t\tdb \"overflow!\"\n\t\t\t\t\n\tdo0start:\n\t\t\t\tmov ax,cs\n\t\t\t\tmov ds,ax\n\t\t\t\tmov si,202h\t\t\t;ds:si指向字符串\n\t\t\t\tmov ax,0b800h\n\t\t\t\tmov es,ax\n\t\t\t\tmov di,12*160+36*2\t;es:di指向显存空间\n\t\t\t\tmov cx,9\n\t\t\ts:\tmov al,[si]\n\t\t\t\tmov es:[di],al\n\t\t\t\tinc si\n\t\t\t\tadd di,2\n\t\t\t\tloop s\n\t\t\t\t\n\t\t\t\tmov ax,4c00h\n\t\t\t\tint 21h\n\n\n## 中断的特殊情况\n设置栈的操作不会响应中断,因为中断会进行栈操作,需要设置正确的栈顶,所以设置sp的指令应当紧接着设置ss的指令\n\n## int指令\n格式:int n,n为中断类型码 \nint指令的最终功能和call类似,都是调用一段程序。 \n中断处理程序简称为中断例程 \n\n## 编写供应用程序调用的中断例程\n明天再写详细的\n\n## BIOS和DOS多提供的中断例程的安装过程\n1. CPU加电,初始化(CS) = 0FFFFH,(IP) = 0,从FFFF:0开始执行程序。此处有一条跳转指令,跳转后开始执行BIOS中的硬件系统检测和初始化程序 \n2. 初始化程序建立BIOS所支持的中断向量表,只需登记中断向量表,中断程序在ROM中,一直在内存中存在 \n3. 硬件检测和初始化完成之后,调用int 19h,进入操作系统引导程序。\n4. DOS启动,将所提供的中断例程装入内存,并建立中断向量表。\n\n\n## BIOS和DOS的中断例程的应用\n就是应用了,比如BIOS中的彩色显示int 10h和DOS中的输出字符串int 21h。明天再写\n\n## 汇编语言:完~","slug":"汇编语言第十二。。章:内外中断和int指令","published":1,"updated":"2018-01-05T16:54:54.210Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkpz006ftzy4okk3y67p","content":"<h1 id=\"汇编语言第十二。。章:内外中断和int指令\"><a href=\"#汇编语言第十二。。章:内外中断和int指令\" class=\"headerlink\" title=\"汇编语言第十二。。章:内外中断和int指令\"></a>汇编语言第十二。。章:内外中断和int指令</h1><blockquote>\n<p>不再过多说中断是什么了,就是可以随时控制CPU停止当前的指令干其他的事的意思,下面内中断程序的步骤: </p>\n<ol>\n<li>将程序写入0:200开始的空间内,同时把字符什么的也要定义进去。 </li>\n<li>设置中断向量表,前面是ip,后面是cs。注意高低位。 </li>\n</ol>\n</blockquote>\n<h2 id=\"单步中断的操作\"><a href=\"#单步中断的操作\" class=\"headerlink\" title=\"单步中断的操作\"></a>单步中断的操作</h2><ol>\n<li>取得中断类型码</li>\n<li>标志寄存器入栈</li>\n<li>标志寄存器TF和IF置零,防止在中断程序中在中断。 </li>\n<li>CS内容入栈</li>\n<li>IP入栈</li>\n<li>根据中断类型码从中断向量表中设置中断程序的CS和IP。</li>\n</ol>\n<h2 id=\"中断处理程序的编写方法\"><a href=\"#中断处理程序的编写方法\" class=\"headerlink\" title=\"中断处理程序的编写方法\"></a>中断处理程序的编写方法</h2><ol>\n<li>保存用到的寄存器</li>\n<li>处理中断</li>\n<li>恢复寄存器</li>\n<li>iret</li>\n</ol>\n<p>iret用来返回程序:操作为: </p>\n<pre><code>pop ip\npop cs\npopf\n</code></pre><p>目的是回到执行中断处理程序之前的执行点继续执行程序。</p>\n<h2 id=\"编写0号中断程序\"><a href=\"#编写0号中断程序\" class=\"headerlink\" title=\"编写0号中断程序\"></a>编写0号中断程序</h2><pre><code>assume cs:code ss:satck ds:data\ncode segment\nstart: mov ax,cs\n mov ds,ax\n mov si,offset do0 ;ds:si指向do0中断程序部分\n mov ax,0\n mov es,ax\n mov di,200h\n mov cx offset do0end - do0\n cld\n rep movsb\n mov ax,0 ;安装中断程序\n mov es,ax\n mov word ptr es:[0],200h\n mov word ptr es:[0+2],0\n\n mov ax,4c00h\n int 21h\n\ndo0: jmp short do0start\n db "overflow!"\n\ndo0start:\n mov ax,cs\n mov ds,ax\n mov si,202h ;ds:si指向字符串\n mov ax,0b800h\n mov es,ax\n mov di,12*160+36*2 ;es:di指向显存空间\n mov cx,9\n s: mov al,[si]\n mov es:[di],al\n inc si\n add di,2\n loop s\n\n mov ax,4c00h\n int 21h\n</code></pre><h2 id=\"中断的特殊情况\"><a href=\"#中断的特殊情况\" class=\"headerlink\" title=\"中断的特殊情况\"></a>中断的特殊情况</h2><p>设置栈的操作不会响应中断,因为中断会进行栈操作,需要设置正确的栈顶,所以设置sp的指令应当紧接着设置ss的指令</p>\n<h2 id=\"int指令\"><a href=\"#int指令\" class=\"headerlink\" title=\"int指令\"></a>int指令</h2><p>格式:int n,n为中断类型码<br>int指令的最终功能和call类似,都是调用一段程序。<br>中断处理程序简称为中断例程 </p>\n<h2 id=\"编写供应用程序调用的中断例程\"><a href=\"#编写供应用程序调用的中断例程\" class=\"headerlink\" title=\"编写供应用程序调用的中断例程\"></a>编写供应用程序调用的中断例程</h2><p>明天再写详细的</p>\n<h2 id=\"BIOS和DOS多提供的中断例程的安装过程\"><a href=\"#BIOS和DOS多提供的中断例程的安装过程\" class=\"headerlink\" title=\"BIOS和DOS多提供的中断例程的安装过程\"></a>BIOS和DOS多提供的中断例程的安装过程</h2><ol>\n<li>CPU加电,初始化(CS) = 0FFFFH,(IP) = 0,从FFFF:0开始执行程序。此处有一条跳转指令,跳转后开始执行BIOS中的硬件系统检测和初始化程序 </li>\n<li>初始化程序建立BIOS所支持的中断向量表,只需登记中断向量表,中断程序在ROM中,一直在内存中存在 </li>\n<li>硬件检测和初始化完成之后,调用int 19h,进入操作系统引导程序。</li>\n<li>DOS启动,将所提供的中断例程装入内存,并建立中断向量表。</li>\n</ol>\n<h2 id=\"BIOS和DOS的中断例程的应用\"><a href=\"#BIOS和DOS的中断例程的应用\" class=\"headerlink\" title=\"BIOS和DOS的中断例程的应用\"></a>BIOS和DOS的中断例程的应用</h2><p>就是应用了,比如BIOS中的彩色显示int 10h和DOS中的输出字符串int 21h。明天再写</p>\n<h2 id=\"汇编语言:完~\"><a href=\"#汇编语言:完~\" class=\"headerlink\" title=\"汇编语言:完~\"></a>汇编语言:完~</h2>","site":{"data":{}},"excerpt":"","more":"<h1 id=\"汇编语言第十二。。章:内外中断和int指令\"><a href=\"#汇编语言第十二。。章:内外中断和int指令\" class=\"headerlink\" title=\"汇编语言第十二。。章:内外中断和int指令\"></a>汇编语言第十二。。章:内外中断和int指令</h1><blockquote>\n<p>不再过多说中断是什么了,就是可以随时控制CPU停止当前的指令干其他的事的意思,下面内中断程序的步骤: </p>\n<ol>\n<li>将程序写入0:200开始的空间内,同时把字符什么的也要定义进去。 </li>\n<li>设置中断向量表,前面是ip,后面是cs。注意高低位。 </li>\n</ol>\n</blockquote>\n<h2 id=\"单步中断的操作\"><a href=\"#单步中断的操作\" class=\"headerlink\" title=\"单步中断的操作\"></a>单步中断的操作</h2><ol>\n<li>取得中断类型码</li>\n<li>标志寄存器入栈</li>\n<li>标志寄存器TF和IF置零,防止在中断程序中在中断。 </li>\n<li>CS内容入栈</li>\n<li>IP入栈</li>\n<li>根据中断类型码从中断向量表中设置中断程序的CS和IP。</li>\n</ol>\n<h2 id=\"中断处理程序的编写方法\"><a href=\"#中断处理程序的编写方法\" class=\"headerlink\" title=\"中断处理程序的编写方法\"></a>中断处理程序的编写方法</h2><ol>\n<li>保存用到的寄存器</li>\n<li>处理中断</li>\n<li>恢复寄存器</li>\n<li>iret</li>\n</ol>\n<p>iret用来返回程序:操作为: </p>\n<pre><code>pop ip\npop cs\npopf\n</code></pre><p>目的是回到执行中断处理程序之前的执行点继续执行程序。</p>\n<h2 id=\"编写0号中断程序\"><a href=\"#编写0号中断程序\" class=\"headerlink\" title=\"编写0号中断程序\"></a>编写0号中断程序</h2><pre><code>assume cs:code ss:satck ds:data\ncode segment\nstart: mov ax,cs\n mov ds,ax\n mov si,offset do0 ;ds:si指向do0中断程序部分\n mov ax,0\n mov es,ax\n mov di,200h\n mov cx offset do0end - do0\n cld\n rep movsb\n mov ax,0 ;安装中断程序\n mov es,ax\n mov word ptr es:[0],200h\n mov word ptr es:[0+2],0\n\n mov ax,4c00h\n int 21h\n\ndo0: jmp short do0start\n db "overflow!"\n\ndo0start:\n mov ax,cs\n mov ds,ax\n mov si,202h ;ds:si指向字符串\n mov ax,0b800h\n mov es,ax\n mov di,12*160+36*2 ;es:di指向显存空间\n mov cx,9\n s: mov al,[si]\n mov es:[di],al\n inc si\n add di,2\n loop s\n\n mov ax,4c00h\n int 21h\n</code></pre><h2 id=\"中断的特殊情况\"><a href=\"#中断的特殊情况\" class=\"headerlink\" title=\"中断的特殊情况\"></a>中断的特殊情况</h2><p>设置栈的操作不会响应中断,因为中断会进行栈操作,需要设置正确的栈顶,所以设置sp的指令应当紧接着设置ss的指令</p>\n<h2 id=\"int指令\"><a href=\"#int指令\" class=\"headerlink\" title=\"int指令\"></a>int指令</h2><p>格式:int n,n为中断类型码<br>int指令的最终功能和call类似,都是调用一段程序。<br>中断处理程序简称为中断例程 </p>\n<h2 id=\"编写供应用程序调用的中断例程\"><a href=\"#编写供应用程序调用的中断例程\" class=\"headerlink\" title=\"编写供应用程序调用的中断例程\"></a>编写供应用程序调用的中断例程</h2><p>明天再写详细的</p>\n<h2 id=\"BIOS和DOS多提供的中断例程的安装过程\"><a href=\"#BIOS和DOS多提供的中断例程的安装过程\" class=\"headerlink\" title=\"BIOS和DOS多提供的中断例程的安装过程\"></a>BIOS和DOS多提供的中断例程的安装过程</h2><ol>\n<li>CPU加电,初始化(CS) = 0FFFFH,(IP) = 0,从FFFF:0开始执行程序。此处有一条跳转指令,跳转后开始执行BIOS中的硬件系统检测和初始化程序 </li>\n<li>初始化程序建立BIOS所支持的中断向量表,只需登记中断向量表,中断程序在ROM中,一直在内存中存在 </li>\n<li>硬件检测和初始化完成之后,调用int 19h,进入操作系统引导程序。</li>\n<li>DOS启动,将所提供的中断例程装入内存,并建立中断向量表。</li>\n</ol>\n<h2 id=\"BIOS和DOS的中断例程的应用\"><a href=\"#BIOS和DOS的中断例程的应用\" class=\"headerlink\" title=\"BIOS和DOS的中断例程的应用\"></a>BIOS和DOS的中断例程的应用</h2><p>就是应用了,比如BIOS中的彩色显示int 10h和DOS中的输出字符串int 21h。明天再写</p>\n<h2 id=\"汇编语言:完~\"><a href=\"#汇编语言:完~\" class=\"headerlink\" title=\"汇编语言:完~\"></a>汇编语言:完~</h2>"},{"title":"数字电路第六章:同步时序逻辑电路——上(状态编码之前)","date":"2018-01-05T16:55:39.000Z","_content":"# 数字电路第六章:同步时序逻辑电路——上(状态编码之前)\n> 讲同步时序逻辑电路的工作原理、分析方法和设计方法。 \n> 逻辑电路分为:组合逻辑电路和时序逻辑电路。 \n> 组合逻辑电路是指典礼在任何时刻所产生的输出仅取决于该时刻电路的输入。 \n> 时序逻辑电路按其工作方式不同分为:同步时序逻辑电路、异步时序逻辑电路。 \n> 本章介绍同步时序逻辑电路的分析与设计。 \n\n## 同步时序逻辑电路的模型和描述方法\n### 同步时序逻辑电路的结构模型\n同步时序逻辑电路是一种与时序有关的电路,一般说来,是由组合电路和存储电路两部分组成,并形成反馈电路。 \n![](a.png) \n**组合逻辑电路的输出** \n1. 向外输出 Z \n2. 内部输出 Q \n\n**组合逻辑电路的输入** \n1. 外部输入:整个时序电路的输入 X \n2. 内部输入:存储电路的内部输出 Y \n\n**函数的意义** \nZi称为输出函数 \nYj称为驱动方程 \nMealy型电路:Z的输出既和存储电路的输出有关有和当前状态的输入x有关。 \nMoore型电路:Z的输出只和存储电路的输出有关。 \n**采用时钟控制的触发器构成存储电路** \n存储时序电路中的二进制信息被定义为电路的状态,触发器的状态就称为时序电路的状态。 \n**向量函数** \n![](b.png)\n时钟信号不能间隔过短,要状态状态稳定后再一个信号再来。 \n### 同步时序逻辑电路的描述方法\n为了形象的表示时序逻辑电路的全过程性,把电路在一系列的时钟信号作用下状态转换的全过程找出来,则电路的逻辑功能就一目了然了。 \n描述时序电路状态的转换全部过程的方法: \n1. 状态方程 \n2. 状态转换表(状态转换真值表) \n3. 状态转换图(简称状态图) \n4. 时序图(波形图) \n\n#### 状态方程\n\n输出方程:表示输出与输入和现态的关系 \n驱动方程:表示现态向次态转换所需的条件 \n状态方程:表示在给定的输入下将使现态转向状态 \n#### 状态转换表\n由现态Q、次态Qn+1和输出Z组成。 \n例: \n![](c.png) \n![](d.png) \n![](e.png)\n\n#### 状态转换图\n在状态转换图中以圆圈表示电路的各个状态,以箭头表示状态转换的方向。 同时,还在箭头旁注明了状态转换前的输入变量取 值和输出值。通常将输入变量取值写在斜线以上,将输出值写在斜线以下。\n![](f.png) \n#### 时序图\n将状态转换表的内容画成时间波形图。在时钟脉冲序列作用下,电路状态、输出状态随时间变化的波形图叫做时序图。而且便于用实验观察的方法检查时序电路的逻辑功能。\n![](g.png)\n\n## 同步时序逻辑电路的分析方法\n根据给定的逻辑电路图,找出他的状态方程、输出方程、状态图和时序图。用这些方法来描述电路的工作全过程及输入输出关系。\n### 时序逻辑电路的分析步骤\n找出给定时序电路的逻辑功能即找出在输入信号和时钟信号作用下,电路的次态和输出。一般步骤如下: \n1. 根据给定的逻辑电路图,写出每个触发器的驱动方程(控制方程)。 \n2. 把得到的驱动方程带入相应的触发器的特性方程,得出每个触发器的状态方程,从而写出这些状态方程的方程组。并写出输出方程。 \n3. 建立状态转换真值表 \n4. 做出状态图和时序波形图。 \n5. 总结功能。 \n\n### 同步时序电路分析的例子\n![](h.png) \n![](i.png)\n![](j.png) \n![](k.png)\n1. 找每个触发器的输入端,写方程,=1的框框是环和。 \n2. 把写好的方程带入触发器的特征方程例,写出次态的状态方程,在找输出端写出输出方程。 \n3. 列表,横纵分别有触发器现态和输入值,结果是触发器次态和输出值。 \n4. 画圈圈,把触发器的变化过程用圈圈画出来,箭头写上输入值和输出值。 \n5. 总结。 \n\n**注意**,Moore型的因为次态和输入无关,所以只列输出的表的顺序即可,Mealy型的因为和输入有关所以要建和输入有关的表,注意没有排列到的状态要单独加上,类似于: \n![](l.png)\n整个例如Moore型的例题: \n![](m.png)\n![](n.png)\n\n## 同步时序逻辑电路的设计\n### 设计同步时序逻辑电路的过程\n1. 根据实际要求进行逻辑抽象,得出电路的原始状态转换图和转换表。 \n2. 状态化简,求最简状态化简表。 \n3. 状态编码。第一步. 确定触发器的数目n 第二步. 给每个电路状态分配一组二进制代码,称为状态编码。 \n4. 选定触发器类型,求出电路的状态方程。根据状态转换图(或状态转换表)和选定的状态编码、触发器的类型,就可写出电路的状态方程、驱动方程和输出方程。 \n5. 根据方程式画出逻辑电路图。 \n6. 检查自启动,解决办法:一、通过预置数。二、修改逻辑设计。 \n\n整体步骤如图所示: \n![](o.png)\n\n### 建立原始状态转换图和转换表\n![](p.png)\n\n### 完全确定原始状态表化简\n状态表化简的原则(若状态表中的任意两个状态Si和Sj,同时满足下列两个条件,则他们可以合并成一个状态): \n1. 在所有可能的现输入下,两个(或多个)状态相应的现输出分别相同。\n2. 在所有可能的现输入下,次态分别为下列情况之一: \n\ta. 两个次态完全相同 \n\tb. 两个次态为状态对循环的一个状态对 \n\tc. 两个次态为其现态本身或交错 \n\td. 两个次态的某一后序状态可以合并 \n \n上述的第一个条件是状态合并的必要条件,该条件不满足就无需再考虑第二个条件。 \n \n根据状态表化简的原则,利用下列判别方法造出状态表中全部的出状态并对进行分类合并。 \n1. 等效状态和等效类 \n**等效状态**—满足上述合并条件的两个状态如Si和Sj称为等效状态,或称等效状态对,记为{Si, Sj}。 \n**等效状态的传递性**——若状态Si和Sj等效,状态Sj和Sm等效,则状态Si必和Sm等效,称为等效状态的传递性,记为{Si,Sj}{Sj,Sm}→{Si,Sm} \n \n**等效类**——彼此等效状态的集合。\n**最大等效类**——若一个等效类不包含在任何其它等效类之中,则称它为最大等效类。这里说的最大,并不是指包含的状态最多,而是指他的**独立性**!。 \n\n显然,状态表的化简的根本任务在于从原始状态表中找出最大等效类,并用一个状态代替。例如: \n![](q.png) \n\n2. 用隐含表法化简 \n隐含表是一个斜边为阶梯型的直角三角形网络。及横向和纵向格数相同,格数为原始状态表的状态数减一。 \n然后顺序比较,往表格里填东西。依次比较,若两个状态不是等效对就画X,如果两个状态是等效对则画√,若不确定的则写出下一组状态对,如表: \n![](r.png)\n例如CF对完全相同则画✅,又例如AD输出Z都不一样则画叉。还有比如AB两个,输出一样,但是X=0时的次态不同,则无法确定则将CF写入,X=1时因为是两个交换对所以是满足的条件,不用将其写入。最后列出下表: \n![](s.png)\t\n根据等效关系的传递性,对等效状态对 {A,B}、{A,E}、{B,E}构成等效类{A,B,E}。 等效状态对{C,F}也是等效类。由于等效类 {A,B,E}和{C,F}互不包含在对方的等效类中, 所以,等效类{A,B,E}和{C,F}都是最大等效类。而状态G和D不和任何其它状态等效,因此,它们本身也是一个最大等效类,分别记作{G}和{D}。因此最大等效集合`{A,B,E},{C,F},{D},{G}` \n\n建立最简状态表。最大等效类集合必须覆盖原始状态表的全部状态。原始状态表中每一个状态只能属于一个最大等效类。这样,每个最大等效类可用一个状态代替。即:`a={ABE} b={CF} c={D} d={G}`由此可得最简状态表: \n![](t.png)\n\n\n### 不完全确定状态表的化简\n这种电路的 状态表包含着不确定的次态或输出,所以,是一种不完全确定电路。并不是任何输出序列都是有效的。不完全确定状态表的化简是基于相容状态的,再利用任意项可使状态表 化的更简。 \n**相容状态**——再不完全确定表中,假设S1和S2为初始状态,如果对于所有的有效输入序列从状态S1和S2除法他们相应的输出序列(除不确定的那些之外)是完全相同的,那么状态S1和S2是相容的,或者说S1和S2是相容对,记作(S1,S2) \n**相容状态的条件**——在所有可能输入条件下,两个状态对应的输出相同,或者其中一个(或两个)输出为任意值;并且它们的次态相同、交错、循环、相容,或者其中一个(或两个)为任意状态,那么这两个状态是相容的。 \n**相容类**——由彼此相容的状态构成的集合,处于同一相容类 中的所有状态之间都是两两相容的。 \n**非传递性**——状态等效具有传递性,而**状态相容不具有传递性**。 因此,若要求(S1, S2,S3)相容,则必须(S1,S2), (S2,S3),(S1,S3)都是相容对。也就是说,相容类中所有状态之间都分别是两两相容的。 \n**最大相容类**——若一个相容类不是任何其他相容类的子集,则该相容类称为最大相容类。 \n例题: \n![](u.png) \n表中由于部分状态的次态和输出无法确定,所以是不完全确定状态表。 \n1. 做隐含表并比较,如图 \n![](v.png) \n2.在相容状态对中找最大相容类 \n![](w.png) \n3. 确定原始状态表的最小闭合覆盖集 \n4. **选择一个**同时满足*覆盖、闭合和最小*三个条件的**相容类集合**,将每个相容类用一个新状态来代替,以得到一个新的状态表。 \n\n**覆盖**——指相容类集合中包含了原始状态表的全部状态。即原始状态表中任何一个状态至少包含在相容类集合中的一个相容类(包括最大相容类)中,而不能遗漏。 \n**闭合**——指一个相容类集合中,任一相容类的所有隐含条件都必须属于该集合中某一个相容类(包括最大相容类)。 \n**最小**——是指满足覆盖和闭合的相容类数目最少。不完全状态表的简化,就是寻找一个最小闭合覆盖 \n为了反应闭合和覆盖这两个性质,建立闭合覆盖表: \n![](x.png) \n在表的左边自上而下列出所选相容类,表的中间覆盖部分自左到右列出全部状态,表的右边闭合部分列出各相容类在输入各种取值组合下的次态组合。必须指出,这里所说的相容类包括最大相容类和它们的子类。 \n找到了覆盖闭合最小之后,就可以画出最简状态表: \n![](y.png)\n\n\n\n\n\n\n\n\n\n\n\n\n\n","source":"_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前).md","raw":"---\ntitle: 数字电路第六章:同步时序逻辑电路——上(状态编码之前)\ndate: 2018-01-06 00:55:39\ntags:\n\t- 笔记\n\t- 数字电路\ncategories: 数字电路\n---\n# 数字电路第六章:同步时序逻辑电路——上(状态编码之前)\n> 讲同步时序逻辑电路的工作原理、分析方法和设计方法。 \n> 逻辑电路分为:组合逻辑电路和时序逻辑电路。 \n> 组合逻辑电路是指典礼在任何时刻所产生的输出仅取决于该时刻电路的输入。 \n> 时序逻辑电路按其工作方式不同分为:同步时序逻辑电路、异步时序逻辑电路。 \n> 本章介绍同步时序逻辑电路的分析与设计。 \n\n## 同步时序逻辑电路的模型和描述方法\n### 同步时序逻辑电路的结构模型\n同步时序逻辑电路是一种与时序有关的电路,一般说来,是由组合电路和存储电路两部分组成,并形成反馈电路。 \n![](a.png) \n**组合逻辑电路的输出** \n1. 向外输出 Z \n2. 内部输出 Q \n\n**组合逻辑电路的输入** \n1. 外部输入:整个时序电路的输入 X \n2. 内部输入:存储电路的内部输出 Y \n\n**函数的意义** \nZi称为输出函数 \nYj称为驱动方程 \nMealy型电路:Z的输出既和存储电路的输出有关有和当前状态的输入x有关。 \nMoore型电路:Z的输出只和存储电路的输出有关。 \n**采用时钟控制的触发器构成存储电路** \n存储时序电路中的二进制信息被定义为电路的状态,触发器的状态就称为时序电路的状态。 \n**向量函数** \n![](b.png)\n时钟信号不能间隔过短,要状态状态稳定后再一个信号再来。 \n### 同步时序逻辑电路的描述方法\n为了形象的表示时序逻辑电路的全过程性,把电路在一系列的时钟信号作用下状态转换的全过程找出来,则电路的逻辑功能就一目了然了。 \n描述时序电路状态的转换全部过程的方法: \n1. 状态方程 \n2. 状态转换表(状态转换真值表) \n3. 状态转换图(简称状态图) \n4. 时序图(波形图) \n\n#### 状态方程\n\n输出方程:表示输出与输入和现态的关系 \n驱动方程:表示现态向次态转换所需的条件 \n状态方程:表示在给定的输入下将使现态转向状态 \n#### 状态转换表\n由现态Q、次态Qn+1和输出Z组成。 \n例: \n![](c.png) \n![](d.png) \n![](e.png)\n\n#### 状态转换图\n在状态转换图中以圆圈表示电路的各个状态,以箭头表示状态转换的方向。 同时,还在箭头旁注明了状态转换前的输入变量取 值和输出值。通常将输入变量取值写在斜线以上,将输出值写在斜线以下。\n![](f.png) \n#### 时序图\n将状态转换表的内容画成时间波形图。在时钟脉冲序列作用下,电路状态、输出状态随时间变化的波形图叫做时序图。而且便于用实验观察的方法检查时序电路的逻辑功能。\n![](g.png)\n\n## 同步时序逻辑电路的分析方法\n根据给定的逻辑电路图,找出他的状态方程、输出方程、状态图和时序图。用这些方法来描述电路的工作全过程及输入输出关系。\n### 时序逻辑电路的分析步骤\n找出给定时序电路的逻辑功能即找出在输入信号和时钟信号作用下,电路的次态和输出。一般步骤如下: \n1. 根据给定的逻辑电路图,写出每个触发器的驱动方程(控制方程)。 \n2. 把得到的驱动方程带入相应的触发器的特性方程,得出每个触发器的状态方程,从而写出这些状态方程的方程组。并写出输出方程。 \n3. 建立状态转换真值表 \n4. 做出状态图和时序波形图。 \n5. 总结功能。 \n\n### 同步时序电路分析的例子\n![](h.png) \n![](i.png)\n![](j.png) \n![](k.png)\n1. 找每个触发器的输入端,写方程,=1的框框是环和。 \n2. 把写好的方程带入触发器的特征方程例,写出次态的状态方程,在找输出端写出输出方程。 \n3. 列表,横纵分别有触发器现态和输入值,结果是触发器次态和输出值。 \n4. 画圈圈,把触发器的变化过程用圈圈画出来,箭头写上输入值和输出值。 \n5. 总结。 \n\n**注意**,Moore型的因为次态和输入无关,所以只列输出的表的顺序即可,Mealy型的因为和输入有关所以要建和输入有关的表,注意没有排列到的状态要单独加上,类似于: \n![](l.png)\n整个例如Moore型的例题: \n![](m.png)\n![](n.png)\n\n## 同步时序逻辑电路的设计\n### 设计同步时序逻辑电路的过程\n1. 根据实际要求进行逻辑抽象,得出电路的原始状态转换图和转换表。 \n2. 状态化简,求最简状态化简表。 \n3. 状态编码。第一步. 确定触发器的数目n 第二步. 给每个电路状态分配一组二进制代码,称为状态编码。 \n4. 选定触发器类型,求出电路的状态方程。根据状态转换图(或状态转换表)和选定的状态编码、触发器的类型,就可写出电路的状态方程、驱动方程和输出方程。 \n5. 根据方程式画出逻辑电路图。 \n6. 检查自启动,解决办法:一、通过预置数。二、修改逻辑设计。 \n\n整体步骤如图所示: \n![](o.png)\n\n### 建立原始状态转换图和转换表\n![](p.png)\n\n### 完全确定原始状态表化简\n状态表化简的原则(若状态表中的任意两个状态Si和Sj,同时满足下列两个条件,则他们可以合并成一个状态): \n1. 在所有可能的现输入下,两个(或多个)状态相应的现输出分别相同。\n2. 在所有可能的现输入下,次态分别为下列情况之一: \n\ta. 两个次态完全相同 \n\tb. 两个次态为状态对循环的一个状态对 \n\tc. 两个次态为其现态本身或交错 \n\td. 两个次态的某一后序状态可以合并 \n \n上述的第一个条件是状态合并的必要条件,该条件不满足就无需再考虑第二个条件。 \n \n根据状态表化简的原则,利用下列判别方法造出状态表中全部的出状态并对进行分类合并。 \n1. 等效状态和等效类 \n**等效状态**—满足上述合并条件的两个状态如Si和Sj称为等效状态,或称等效状态对,记为{Si, Sj}。 \n**等效状态的传递性**——若状态Si和Sj等效,状态Sj和Sm等效,则状态Si必和Sm等效,称为等效状态的传递性,记为{Si,Sj}{Sj,Sm}→{Si,Sm} \n \n**等效类**——彼此等效状态的集合。\n**最大等效类**——若一个等效类不包含在任何其它等效类之中,则称它为最大等效类。这里说的最大,并不是指包含的状态最多,而是指他的**独立性**!。 \n\n显然,状态表的化简的根本任务在于从原始状态表中找出最大等效类,并用一个状态代替。例如: \n![](q.png) \n\n2. 用隐含表法化简 \n隐含表是一个斜边为阶梯型的直角三角形网络。及横向和纵向格数相同,格数为原始状态表的状态数减一。 \n然后顺序比较,往表格里填东西。依次比较,若两个状态不是等效对就画X,如果两个状态是等效对则画√,若不确定的则写出下一组状态对,如表: \n![](r.png)\n例如CF对完全相同则画✅,又例如AD输出Z都不一样则画叉。还有比如AB两个,输出一样,但是X=0时的次态不同,则无法确定则将CF写入,X=1时因为是两个交换对所以是满足的条件,不用将其写入。最后列出下表: \n![](s.png)\t\n根据等效关系的传递性,对等效状态对 {A,B}、{A,E}、{B,E}构成等效类{A,B,E}。 等效状态对{C,F}也是等效类。由于等效类 {A,B,E}和{C,F}互不包含在对方的等效类中, 所以,等效类{A,B,E}和{C,F}都是最大等效类。而状态G和D不和任何其它状态等效,因此,它们本身也是一个最大等效类,分别记作{G}和{D}。因此最大等效集合`{A,B,E},{C,F},{D},{G}` \n\n建立最简状态表。最大等效类集合必须覆盖原始状态表的全部状态。原始状态表中每一个状态只能属于一个最大等效类。这样,每个最大等效类可用一个状态代替。即:`a={ABE} b={CF} c={D} d={G}`由此可得最简状态表: \n![](t.png)\n\n\n### 不完全确定状态表的化简\n这种电路的 状态表包含着不确定的次态或输出,所以,是一种不完全确定电路。并不是任何输出序列都是有效的。不完全确定状态表的化简是基于相容状态的,再利用任意项可使状态表 化的更简。 \n**相容状态**——再不完全确定表中,假设S1和S2为初始状态,如果对于所有的有效输入序列从状态S1和S2除法他们相应的输出序列(除不确定的那些之外)是完全相同的,那么状态S1和S2是相容的,或者说S1和S2是相容对,记作(S1,S2) \n**相容状态的条件**——在所有可能输入条件下,两个状态对应的输出相同,或者其中一个(或两个)输出为任意值;并且它们的次态相同、交错、循环、相容,或者其中一个(或两个)为任意状态,那么这两个状态是相容的。 \n**相容类**——由彼此相容的状态构成的集合,处于同一相容类 中的所有状态之间都是两两相容的。 \n**非传递性**——状态等效具有传递性,而**状态相容不具有传递性**。 因此,若要求(S1, S2,S3)相容,则必须(S1,S2), (S2,S3),(S1,S3)都是相容对。也就是说,相容类中所有状态之间都分别是两两相容的。 \n**最大相容类**——若一个相容类不是任何其他相容类的子集,则该相容类称为最大相容类。 \n例题: \n![](u.png) \n表中由于部分状态的次态和输出无法确定,所以是不完全确定状态表。 \n1. 做隐含表并比较,如图 \n![](v.png) \n2.在相容状态对中找最大相容类 \n![](w.png) \n3. 确定原始状态表的最小闭合覆盖集 \n4. **选择一个**同时满足*覆盖、闭合和最小*三个条件的**相容类集合**,将每个相容类用一个新状态来代替,以得到一个新的状态表。 \n\n**覆盖**——指相容类集合中包含了原始状态表的全部状态。即原始状态表中任何一个状态至少包含在相容类集合中的一个相容类(包括最大相容类)中,而不能遗漏。 \n**闭合**——指一个相容类集合中,任一相容类的所有隐含条件都必须属于该集合中某一个相容类(包括最大相容类)。 \n**最小**——是指满足覆盖和闭合的相容类数目最少。不完全状态表的简化,就是寻找一个最小闭合覆盖 \n为了反应闭合和覆盖这两个性质,建立闭合覆盖表: \n![](x.png) \n在表的左边自上而下列出所选相容类,表的中间覆盖部分自左到右列出全部状态,表的右边闭合部分列出各相容类在输入各种取值组合下的次态组合。必须指出,这里所说的相容类包括最大相容类和它们的子类。 \n找到了覆盖闭合最小之后,就可以画出最简状态表: \n![](y.png)\n\n\n\n\n\n\n\n\n\n\n\n\n\n","slug":"数字电路第六章:同步时序逻辑电路——上(状态编码之前)","published":1,"updated":"2018-01-06T08:23:13.442Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkq0006htzy4bnetx9c2","content":"<h1 id=\"数字电路第六章:同步时序逻辑电路——上(状态编码之前)\"><a href=\"#数字电路第六章:同步时序逻辑电路——上(状态编码之前)\" class=\"headerlink\" title=\"数字电路第六章:同步时序逻辑电路——上(状态编码之前)\"></a>数字电路第六章:同步时序逻辑电路——上(状态编码之前)</h1><blockquote>\n<p>讲同步时序逻辑电路的工作原理、分析方法和设计方法。<br>逻辑电路分为:组合逻辑电路和时序逻辑电路。<br>组合逻辑电路是指典礼在任何时刻所产生的输出仅取决于该时刻电路的输入。<br>时序逻辑电路按其工作方式不同分为:同步时序逻辑电路、异步时序逻辑电路。<br>本章介绍同步时序逻辑电路的分析与设计。 </p>\n</blockquote>\n<h2 id=\"同步时序逻辑电路的模型和描述方法\"><a href=\"#同步时序逻辑电路的模型和描述方法\" class=\"headerlink\" title=\"同步时序逻辑电路的模型和描述方法\"></a>同步时序逻辑电路的模型和描述方法</h2><h3 id=\"同步时序逻辑电路的结构模型\"><a href=\"#同步时序逻辑电路的结构模型\" class=\"headerlink\" title=\"同步时序逻辑电路的结构模型\"></a>同步时序逻辑电路的结构模型</h3><p>同步时序逻辑电路是一种与时序有关的电路,一般说来,是由组合电路和存储电路两部分组成,并形成反馈电路。<br><img src=\"a.png\" alt><br><strong>组合逻辑电路的输出</strong> </p>\n<ol>\n<li>向外输出 Z </li>\n<li>内部输出 Q </li>\n</ol>\n<p><strong>组合逻辑电路的输入</strong> </p>\n<ol>\n<li>外部输入:整个时序电路的输入 X </li>\n<li>内部输入:存储电路的内部输出 Y </li>\n</ol>\n<p><strong>函数的意义</strong><br>Zi称为输出函数<br>Yj称为驱动方程<br>Mealy型电路:Z的输出既和存储电路的输出有关有和当前状态的输入x有关。<br>Moore型电路:Z的输出只和存储电路的输出有关。<br><strong>采用时钟控制的触发器构成存储电路</strong><br>存储时序电路中的二进制信息被定义为电路的状态,触发器的状态就称为时序电路的状态。<br><strong>向量函数</strong><br><img src=\"b.png\" alt><br>时钟信号不能间隔过短,要状态状态稳定后再一个信号再来。 </p>\n<h3 id=\"同步时序逻辑电路的描述方法\"><a href=\"#同步时序逻辑电路的描述方法\" class=\"headerlink\" title=\"同步时序逻辑电路的描述方法\"></a>同步时序逻辑电路的描述方法</h3><p>为了形象的表示时序逻辑电路的全过程性,把电路在一系列的时钟信号作用下状态转换的全过程找出来,则电路的逻辑功能就一目了然了。<br>描述时序电路状态的转换全部过程的方法: </p>\n<ol>\n<li>状态方程 </li>\n<li>状态转换表(状态转换真值表) </li>\n<li>状态转换图(简称状态图) </li>\n<li>时序图(波形图) </li>\n</ol>\n<h4 id=\"状态方程\"><a href=\"#状态方程\" class=\"headerlink\" title=\"状态方程\"></a>状态方程</h4><p>输出方程:表示输出与输入和现态的关系<br>驱动方程:表示现态向次态转换所需的条件<br>状态方程:表示在给定的输入下将使现态转向状态 </p>\n<h4 id=\"状态转换表\"><a href=\"#状态转换表\" class=\"headerlink\" title=\"状态转换表\"></a>状态转换表</h4><p>由现态Q、次态Qn+1和输出Z组成。<br>例:<br><img src=\"c.png\" alt><br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"d.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure><br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"e.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n<h4 id=\"状态转换图\"><a href=\"#状态转换图\" class=\"headerlink\" title=\"状态转换图\"></a>状态转换图</h4><p>在状态转换图中以圆圈表示电路的各个状态,以箭头表示状态转换的方向。 同时,还在箭头旁注明了状态转换前的输入变量取 值和输出值。通常将输入变量取值写在斜线以上,将输出值写在斜线以下。<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"f.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> </p>\n<h4 id=\"时序图\"><a href=\"#时序图\" class=\"headerlink\" title=\"时序图\"></a>时序图</h4><p>将状态转换表的内容画成时间波形图。在时钟脉冲序列作用下,电路状态、输出状态随时间变化的波形图叫做时序图。而且便于用实验观察的方法检查时序电路的逻辑功能。<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"g.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n<h2 id=\"同步时序逻辑电路的分析方法\"><a href=\"#同步时序逻辑电路的分析方法\" class=\"headerlink\" title=\"同步时序逻辑电路的分析方法\"></a>同步时序逻辑电路的分析方法</h2><p>根据给定的逻辑电路图,找出他的状态方程、输出方程、状态图和时序图。用这些方法来描述电路的工作全过程及输入输出关系。</p>\n<h3 id=\"时序逻辑电路的分析步骤\"><a href=\"#时序逻辑电路的分析步骤\" class=\"headerlink\" title=\"时序逻辑电路的分析步骤\"></a>时序逻辑电路的分析步骤</h3><p>找出给定时序电路的逻辑功能即找出在输入信号和时钟信号作用下,电路的次态和输出。一般步骤如下: </p>\n<ol>\n<li>根据给定的逻辑电路图,写出每个触发器的驱动方程(控制方程)。 </li>\n<li>把得到的驱动方程带入相应的触发器的特性方程,得出每个触发器的状态方程,从而写出这些状态方程的方程组。并写出输出方程。 </li>\n<li>建立状态转换真值表 </li>\n<li>做出状态图和时序波形图。 </li>\n<li>总结功能。 </li>\n</ol>\n<h3 id=\"同步时序电路分析的例子\"><a href=\"#同步时序电路分析的例子\" class=\"headerlink\" title=\"同步时序电路分析的例子\"></a>同步时序电路分析的例子</h3><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"h.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> \n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"i.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"j.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> \n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"k.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<ol>\n<li>找每个触发器的输入端,写方程,=1的框框是环和。 </li>\n<li>把写好的方程带入触发器的特征方程例,写出次态的状态方程,在找输出端写出输出方程。 </li>\n<li>列表,横纵分别有触发器现态和输入值,结果是触发器次态和输出值。 </li>\n<li>画圈圈,把触发器的变化过程用圈圈画出来,箭头写上输入值和输出值。 </li>\n<li>总结。 </li>\n</ol>\n<p><strong>注意</strong>,Moore型的因为次态和输入无关,所以只列输出的表的顺序即可,Mealy型的因为和输入有关所以要建和输入有关的表,注意没有排列到的状态要单独加上,类似于:<br><img src=\"l.png\" alt><br>整个例如Moore型的例题:<br><img src=\"m.png\" alt><br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"n.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n<h2 id=\"同步时序逻辑电路的设计\"><a href=\"#同步时序逻辑电路的设计\" class=\"headerlink\" title=\"同步时序逻辑电路的设计\"></a>同步时序逻辑电路的设计</h2><h3 id=\"设计同步时序逻辑电路的过程\"><a href=\"#设计同步时序逻辑电路的过程\" class=\"headerlink\" title=\"设计同步时序逻辑电路的过程\"></a>设计同步时序逻辑电路的过程</h3><ol>\n<li>根据实际要求进行逻辑抽象,得出电路的原始状态转换图和转换表。 </li>\n<li>状态化简,求最简状态化简表。 </li>\n<li>状态编码。第一步. 确定触发器的数目n 第二步. 给每个电路状态分配一组二进制代码,称为状态编码。 </li>\n<li>选定触发器类型,求出电路的状态方程。根据状态转换图(或状态转换表)和选定的状态编码、触发器的类型,就可写出电路的状态方程、驱动方程和输出方程。 </li>\n<li>根据方程式画出逻辑电路图。 </li>\n<li>检查自启动,解决办法:一、通过预置数。二、修改逻辑设计。 </li>\n</ol>\n<p>整体步骤如图所示:<br><img src=\"o.png\" alt></p>\n<h3 id=\"建立原始状态转换图和转换表\"><a href=\"#建立原始状态转换图和转换表\" class=\"headerlink\" title=\"建立原始状态转换图和转换表\"></a>建立原始状态转换图和转换表</h3><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"p.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<h3 id=\"完全确定原始状态表化简\"><a href=\"#完全确定原始状态表化简\" class=\"headerlink\" title=\"完全确定原始状态表化简\"></a>完全确定原始状态表化简</h3><p>状态表化简的原则(若状态表中的任意两个状态Si和Sj,同时满足下列两个条件,则他们可以合并成一个状态): </p>\n<ol>\n<li>在所有可能的现输入下,两个(或多个)状态相应的现输出分别相同。</li>\n<li>在所有可能的现输入下,次态分别为下列情况之一:<br> a. 两个次态完全相同<br> b. 两个次态为状态对循环的一个状态对<br> c. 两个次态为其现态本身或交错<br> d. 两个次态的某一后序状态可以合并 </li>\n</ol>\n<p>上述的第一个条件是状态合并的必要条件,该条件不满足就无需再考虑第二个条件。 </p>\n<p>根据状态表化简的原则,利用下列判别方法造出状态表中全部的出状态并对进行分类合并。 </p>\n<ol>\n<li>等效状态和等效类<br><strong>等效状态</strong>—满足上述合并条件的两个状态如Si和Sj称为等效状态,或称等效状态对,记为{Si, Sj}。<br><strong>等效状态的传递性</strong>——若状态Si和Sj等效,状态Sj和Sm等效,则状态Si必和Sm等效,称为等效状态的传递性,记为{Si,Sj}{Sj,Sm}→{Si,Sm} </li>\n</ol>\n<p><strong>等效类</strong>——彼此等效状态的集合。<br><strong>最大等效类</strong>——若一个等效类不包含在任何其它等效类之中,则称它为最大等效类。这里说的最大,并不是指包含的状态最多,而是指他的<strong>独立性</strong>!。 </p>\n<p>显然,状态表的化简的根本任务在于从原始状态表中找出最大等效类,并用一个状态代替。例如:<br><img src=\"q.png\" alt> </p>\n<ol start=\"2\">\n<li>用隐含表法化简<br>隐含表是一个斜边为阶梯型的直角三角形网络。及横向和纵向格数相同,格数为原始状态表的状态数减一。<br>然后顺序比较,往表格里填东西。依次比较,若两个状态不是等效对就画X,如果两个状态是等效对则画√,若不确定的则写出下一组状态对,如表:<br><img src=\"r.png\" alt><br>例如CF对完全相同则画✅,又例如AD输出Z都不一样则画叉。还有比如AB两个,输出一样,但是X=0时的次态不同,则无法确定则将CF写入,X=1时因为是两个交换对所以是满足的条件,不用将其写入。最后列出下表:<br><img src=\"s.png\" alt><br>根据等效关系的传递性,对等效状态对 {A,B}、{A,E}、{B,E}构成等效类{A,B,E}。 等效状态对{C,F}也是等效类。由于等效类 {A,B,E}和{C,F}互不包含在对方的等效类中, 所以,等效类{A,B,E}和{C,F}都是最大等效类。而状态G和D不和任何其它状态等效,因此,它们本身也是一个最大等效类,分别记作{G}和{D}。因此最大等效集合<code>{A,B,E},{C,F},{D},{G}</code> </li>\n</ol>\n<p>建立最简状态表。最大等效类集合必须覆盖原始状态表的全部状态。原始状态表中每一个状态只能属于一个最大等效类。这样,每个最大等效类可用一个状态代替。即:<code>a={ABE} b={CF} c={D} d={G}</code>由此可得最简状态表:<br><img src=\"t.png\" alt></p>\n<h3 id=\"不完全确定状态表的化简\"><a href=\"#不完全确定状态表的化简\" class=\"headerlink\" title=\"不完全确定状态表的化简\"></a>不完全确定状态表的化简</h3><p>这种电路的 状态表包含着不确定的次态或输出,所以,是一种不完全确定电路。并不是任何输出序列都是有效的。不完全确定状态表的化简是基于相容状态的,再利用任意项可使状态表 化的更简。<br><strong>相容状态</strong>——再不完全确定表中,假设S1和S2为初始状态,如果对于所有的有效输入序列从状态S1和S2除法他们相应的输出序列(除不确定的那些之外)是完全相同的,那么状态S1和S2是相容的,或者说S1和S2是相容对,记作(S1,S2)<br><strong>相容状态的条件</strong>——在所有可能输入条件下,两个状态对应的输出相同,或者其中一个(或两个)输出为任意值;并且它们的次态相同、交错、循环、相容,或者其中一个(或两个)为任意状态,那么这两个状态是相容的。<br><strong>相容类</strong>——由彼此相容的状态构成的集合,处于同一相容类 中的所有状态之间都是两两相容的。<br><strong>非传递性</strong>——状态等效具有传递性,而<strong>状态相容不具有传递性</strong>。 因此,若要求(S1, S2,S3)相容,则必须(S1,S2), (S2,S3),(S1,S3)都是相容对。也就是说,相容类中所有状态之间都分别是两两相容的。<br><strong>最大相容类</strong>——若一个相容类不是任何其他相容类的子集,则该相容类称为最大相容类。<br>例题:<br><img src=\"u.png\" alt><br>表中由于部分状态的次态和输出无法确定,所以是不完全确定状态表。 </p>\n<ol>\n<li>做隐含表并比较,如图<br><img src=\"v.png\" alt><br>2.在相容状态对中找最大相容类<br><img src=\"w.png\" alt> </li>\n<li>确定原始状态表的最小闭合覆盖集 </li>\n<li><strong>选择一个</strong>同时满足<em>覆盖、闭合和最小</em>三个条件的<strong>相容类集合</strong>,将每个相容类用一个新状态来代替,以得到一个新的状态表。 </li>\n</ol>\n<p><strong>覆盖</strong>——指相容类集合中包含了原始状态表的全部状态。即原始状态表中任何一个状态至少包含在相容类集合中的一个相容类(包括最大相容类)中,而不能遗漏。<br><strong>闭合</strong>——指一个相容类集合中,任一相容类的所有隐含条件都必须属于该集合中某一个相容类(包括最大相容类)。<br><strong>最小</strong>——是指满足覆盖和闭合的相容类数目最少。不完全状态表的简化,就是寻找一个最小闭合覆盖<br>为了反应闭合和覆盖这两个性质,建立闭合覆盖表:<br><img src=\"x.png\" alt><br>在表的左边自上而下列出所选相容类,表的中间覆盖部分自左到右列出全部状态,表的右边闭合部分列出各相容类在输入各种取值组合下的次态组合。必须指出,这里所说的相容类包括最大相容类和它们的子类。<br>找到了覆盖闭合最小之后,就可以画出最简状态表:<br><img src=\"y.png\" alt></p>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"数字电路第六章:同步时序逻辑电路——上(状态编码之前)\"><a href=\"#数字电路第六章:同步时序逻辑电路——上(状态编码之前)\" class=\"headerlink\" title=\"数字电路第六章:同步时序逻辑电路——上(状态编码之前)\"></a>数字电路第六章:同步时序逻辑电路——上(状态编码之前)</h1><blockquote>\n<p>讲同步时序逻辑电路的工作原理、分析方法和设计方法。<br>逻辑电路分为:组合逻辑电路和时序逻辑电路。<br>组合逻辑电路是指典礼在任何时刻所产生的输出仅取决于该时刻电路的输入。<br>时序逻辑电路按其工作方式不同分为:同步时序逻辑电路、异步时序逻辑电路。<br>本章介绍同步时序逻辑电路的分析与设计。 </p>\n</blockquote>\n<h2 id=\"同步时序逻辑电路的模型和描述方法\"><a href=\"#同步时序逻辑电路的模型和描述方法\" class=\"headerlink\" title=\"同步时序逻辑电路的模型和描述方法\"></a>同步时序逻辑电路的模型和描述方法</h2><h3 id=\"同步时序逻辑电路的结构模型\"><a href=\"#同步时序逻辑电路的结构模型\" class=\"headerlink\" title=\"同步时序逻辑电路的结构模型\"></a>同步时序逻辑电路的结构模型</h3><p>同步时序逻辑电路是一种与时序有关的电路,一般说来,是由组合电路和存储电路两部分组成,并形成反馈电路。<br><img src=\"a.png\" alt><br><strong>组合逻辑电路的输出</strong> </p>\n<ol>\n<li>向外输出 Z </li>\n<li>内部输出 Q </li>\n</ol>\n<p><strong>组合逻辑电路的输入</strong> </p>\n<ol>\n<li>外部输入:整个时序电路的输入 X </li>\n<li>内部输入:存储电路的内部输出 Y </li>\n</ol>\n<p><strong>函数的意义</strong><br>Zi称为输出函数<br>Yj称为驱动方程<br>Mealy型电路:Z的输出既和存储电路的输出有关有和当前状态的输入x有关。<br>Moore型电路:Z的输出只和存储电路的输出有关。<br><strong>采用时钟控制的触发器构成存储电路</strong><br>存储时序电路中的二进制信息被定义为电路的状态,触发器的状态就称为时序电路的状态。<br><strong>向量函数</strong><br><img src=\"b.png\" alt><br>时钟信号不能间隔过短,要状态状态稳定后再一个信号再来。 </p>\n<h3 id=\"同步时序逻辑电路的描述方法\"><a href=\"#同步时序逻辑电路的描述方法\" class=\"headerlink\" title=\"同步时序逻辑电路的描述方法\"></a>同步时序逻辑电路的描述方法</h3><p>为了形象的表示时序逻辑电路的全过程性,把电路在一系列的时钟信号作用下状态转换的全过程找出来,则电路的逻辑功能就一目了然了。<br>描述时序电路状态的转换全部过程的方法: </p>\n<ol>\n<li>状态方程 </li>\n<li>状态转换表(状态转换真值表) </li>\n<li>状态转换图(简称状态图) </li>\n<li>时序图(波形图) </li>\n</ol>\n<h4 id=\"状态方程\"><a href=\"#状态方程\" class=\"headerlink\" title=\"状态方程\"></a>状态方程</h4><p>输出方程:表示输出与输入和现态的关系<br>驱动方程:表示现态向次态转换所需的条件<br>状态方程:表示在给定的输入下将使现态转向状态 </p>\n<h4 id=\"状态转换表\"><a href=\"#状态转换表\" class=\"headerlink\" title=\"状态转换表\"></a>状态转换表</h4><p>由现态Q、次态Qn+1和输出Z组成。<br>例:<br><img src=\"c.png\" alt><br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"d.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure><br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"e.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n<h4 id=\"状态转换图\"><a href=\"#状态转换图\" class=\"headerlink\" title=\"状态转换图\"></a>状态转换图</h4><p>在状态转换图中以圆圈表示电路的各个状态,以箭头表示状态转换的方向。 同时,还在箭头旁注明了状态转换前的输入变量取 值和输出值。通常将输入变量取值写在斜线以上,将输出值写在斜线以下。<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"f.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> </p>\n<h4 id=\"时序图\"><a href=\"#时序图\" class=\"headerlink\" title=\"时序图\"></a>时序图</h4><p>将状态转换表的内容画成时间波形图。在时钟脉冲序列作用下,电路状态、输出状态随时间变化的波形图叫做时序图。而且便于用实验观察的方法检查时序电路的逻辑功能。<br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"g.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n<h2 id=\"同步时序逻辑电路的分析方法\"><a href=\"#同步时序逻辑电路的分析方法\" class=\"headerlink\" title=\"同步时序逻辑电路的分析方法\"></a>同步时序逻辑电路的分析方法</h2><p>根据给定的逻辑电路图,找出他的状态方程、输出方程、状态图和时序图。用这些方法来描述电路的工作全过程及输入输出关系。</p>\n<h3 id=\"时序逻辑电路的分析步骤\"><a href=\"#时序逻辑电路的分析步骤\" class=\"headerlink\" title=\"时序逻辑电路的分析步骤\"></a>时序逻辑电路的分析步骤</h3><p>找出给定时序电路的逻辑功能即找出在输入信号和时钟信号作用下,电路的次态和输出。一般步骤如下: </p>\n<ol>\n<li>根据给定的逻辑电路图,写出每个触发器的驱动方程(控制方程)。 </li>\n<li>把得到的驱动方程带入相应的触发器的特性方程,得出每个触发器的状态方程,从而写出这些状态方程的方程组。并写出输出方程。 </li>\n<li>建立状态转换真值表 </li>\n<li>做出状态图和时序波形图。 </li>\n<li>总结功能。 </li>\n</ol>\n<h3 id=\"同步时序电路分析的例子\"><a href=\"#同步时序电路分析的例子\" class=\"headerlink\" title=\"同步时序电路分析的例子\"></a>同步时序电路分析的例子</h3><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"h.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> \n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"i.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"j.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> \n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"k.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<ol>\n<li>找每个触发器的输入端,写方程,=1的框框是环和。 </li>\n<li>把写好的方程带入触发器的特征方程例,写出次态的状态方程,在找输出端写出输出方程。 </li>\n<li>列表,横纵分别有触发器现态和输入值,结果是触发器次态和输出值。 </li>\n<li>画圈圈,把触发器的变化过程用圈圈画出来,箭头写上输入值和输出值。 </li>\n<li>总结。 </li>\n</ol>\n<p><strong>注意</strong>,Moore型的因为次态和输入无关,所以只列输出的表的顺序即可,Mealy型的因为和输入有关所以要建和输入有关的表,注意没有排列到的状态要单独加上,类似于:<br><img src=\"l.png\" alt><br>整个例如Moore型的例题:<br><img src=\"m.png\" alt><br><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"n.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure></p>\n<h2 id=\"同步时序逻辑电路的设计\"><a href=\"#同步时序逻辑电路的设计\" class=\"headerlink\" title=\"同步时序逻辑电路的设计\"></a>同步时序逻辑电路的设计</h2><h3 id=\"设计同步时序逻辑电路的过程\"><a href=\"#设计同步时序逻辑电路的过程\" class=\"headerlink\" title=\"设计同步时序逻辑电路的过程\"></a>设计同步时序逻辑电路的过程</h3><ol>\n<li>根据实际要求进行逻辑抽象,得出电路的原始状态转换图和转换表。 </li>\n<li>状态化简,求最简状态化简表。 </li>\n<li>状态编码。第一步. 确定触发器的数目n 第二步. 给每个电路状态分配一组二进制代码,称为状态编码。 </li>\n<li>选定触发器类型,求出电路的状态方程。根据状态转换图(或状态转换表)和选定的状态编码、触发器的类型,就可写出电路的状态方程、驱动方程和输出方程。 </li>\n<li>根据方程式画出逻辑电路图。 </li>\n<li>检查自启动,解决办法:一、通过预置数。二、修改逻辑设计。 </li>\n</ol>\n<p>整体步骤如图所示:<br><img src=\"o.png\" alt></p>\n<h3 id=\"建立原始状态转换图和转换表\"><a href=\"#建立原始状态转换图和转换表\" class=\"headerlink\" title=\"建立原始状态转换图和转换表\"></a>建立原始状态转换图和转换表</h3><figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"p.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<h3 id=\"完全确定原始状态表化简\"><a href=\"#完全确定原始状态表化简\" class=\"headerlink\" title=\"完全确定原始状态表化简\"></a>完全确定原始状态表化简</h3><p>状态表化简的原则(若状态表中的任意两个状态Si和Sj,同时满足下列两个条件,则他们可以合并成一个状态): </p>\n<ol>\n<li>在所有可能的现输入下,两个(或多个)状态相应的现输出分别相同。</li>\n<li>在所有可能的现输入下,次态分别为下列情况之一:<br> a. 两个次态完全相同<br> b. 两个次态为状态对循环的一个状态对<br> c. 两个次态为其现态本身或交错<br> d. 两个次态的某一后序状态可以合并 </li>\n</ol>\n<p>上述的第一个条件是状态合并的必要条件,该条件不满足就无需再考虑第二个条件。 </p>\n<p>根据状态表化简的原则,利用下列判别方法造出状态表中全部的出状态并对进行分类合并。 </p>\n<ol>\n<li>等效状态和等效类<br><strong>等效状态</strong>—满足上述合并条件的两个状态如Si和Sj称为等效状态,或称等效状态对,记为{Si, Sj}。<br><strong>等效状态的传递性</strong>——若状态Si和Sj等效,状态Sj和Sm等效,则状态Si必和Sm等效,称为等效状态的传递性,记为{Si,Sj}{Sj,Sm}→{Si,Sm} </li>\n</ol>\n<p><strong>等效类</strong>——彼此等效状态的集合。<br><strong>最大等效类</strong>——若一个等效类不包含在任何其它等效类之中,则称它为最大等效类。这里说的最大,并不是指包含的状态最多,而是指他的<strong>独立性</strong>!。 </p>\n<p>显然,状态表的化简的根本任务在于从原始状态表中找出最大等效类,并用一个状态代替。例如:<br><img src=\"q.png\" alt> </p>\n<ol start=\"2\">\n<li>用隐含表法化简<br>隐含表是一个斜边为阶梯型的直角三角形网络。及横向和纵向格数相同,格数为原始状态表的状态数减一。<br>然后顺序比较,往表格里填东西。依次比较,若两个状态不是等效对就画X,如果两个状态是等效对则画√,若不确定的则写出下一组状态对,如表:<br><img src=\"r.png\" alt><br>例如CF对完全相同则画✅,又例如AD输出Z都不一样则画叉。还有比如AB两个,输出一样,但是X=0时的次态不同,则无法确定则将CF写入,X=1时因为是两个交换对所以是满足的条件,不用将其写入。最后列出下表:<br><img src=\"s.png\" alt><br>根据等效关系的传递性,对等效状态对 {A,B}、{A,E}、{B,E}构成等效类{A,B,E}。 等效状态对{C,F}也是等效类。由于等效类 {A,B,E}和{C,F}互不包含在对方的等效类中, 所以,等效类{A,B,E}和{C,F}都是最大等效类。而状态G和D不和任何其它状态等效,因此,它们本身也是一个最大等效类,分别记作{G}和{D}。因此最大等效集合<code>{A,B,E},{C,F},{D},{G}</code> </li>\n</ol>\n<p>建立最简状态表。最大等效类集合必须覆盖原始状态表的全部状态。原始状态表中每一个状态只能属于一个最大等效类。这样,每个最大等效类可用一个状态代替。即:<code>a={ABE} b={CF} c={D} d={G}</code>由此可得最简状态表:<br><img src=\"t.png\" alt></p>\n<h3 id=\"不完全确定状态表的化简\"><a href=\"#不完全确定状态表的化简\" class=\"headerlink\" title=\"不完全确定状态表的化简\"></a>不完全确定状态表的化简</h3><p>这种电路的 状态表包含着不确定的次态或输出,所以,是一种不完全确定电路。并不是任何输出序列都是有效的。不完全确定状态表的化简是基于相容状态的,再利用任意项可使状态表 化的更简。<br><strong>相容状态</strong>——再不完全确定表中,假设S1和S2为初始状态,如果对于所有的有效输入序列从状态S1和S2除法他们相应的输出序列(除不确定的那些之外)是完全相同的,那么状态S1和S2是相容的,或者说S1和S2是相容对,记作(S1,S2)<br><strong>相容状态的条件</strong>——在所有可能输入条件下,两个状态对应的输出相同,或者其中一个(或两个)输出为任意值;并且它们的次态相同、交错、循环、相容,或者其中一个(或两个)为任意状态,那么这两个状态是相容的。<br><strong>相容类</strong>——由彼此相容的状态构成的集合,处于同一相容类 中的所有状态之间都是两两相容的。<br><strong>非传递性</strong>——状态等效具有传递性,而<strong>状态相容不具有传递性</strong>。 因此,若要求(S1, S2,S3)相容,则必须(S1,S2), (S2,S3),(S1,S3)都是相容对。也就是说,相容类中所有状态之间都分别是两两相容的。<br><strong>最大相容类</strong>——若一个相容类不是任何其他相容类的子集,则该相容类称为最大相容类。<br>例题:<br><img src=\"u.png\" alt><br>表中由于部分状态的次态和输出无法确定,所以是不完全确定状态表。 </p>\n<ol>\n<li>做隐含表并比较,如图<br><img src=\"v.png\" alt><br>2.在相容状态对中找最大相容类<br><img src=\"w.png\" alt> </li>\n<li>确定原始状态表的最小闭合覆盖集 </li>\n<li><strong>选择一个</strong>同时满足<em>覆盖、闭合和最小</em>三个条件的<strong>相容类集合</strong>,将每个相容类用一个新状态来代替,以得到一个新的状态表。 </li>\n</ol>\n<p><strong>覆盖</strong>——指相容类集合中包含了原始状态表的全部状态。即原始状态表中任何一个状态至少包含在相容类集合中的一个相容类(包括最大相容类)中,而不能遗漏。<br><strong>闭合</strong>——指一个相容类集合中,任一相容类的所有隐含条件都必须属于该集合中某一个相容类(包括最大相容类)。<br><strong>最小</strong>——是指满足覆盖和闭合的相容类数目最少。不完全状态表的简化,就是寻找一个最小闭合覆盖<br>为了反应闭合和覆盖这两个性质,建立闭合覆盖表:<br><img src=\"x.png\" alt><br>在表的左边自上而下列出所选相容类,表的中间覆盖部分自左到右列出全部状态,表的右边闭合部分列出各相容类在输入各种取值组合下的次态组合。必须指出,这里所说的相容类包括最大相容类和它们的子类。<br>找到了覆盖闭合最小之后,就可以画出最简状态表:<br><img src=\"y.png\" alt></p>\n"},{"title":"数据结构知识框架","date":"2018-01-11T01:16:54.000Z","_content":"# 数据结构知识框架\n## 第一章\n第一方面:基本概念 \n1、数据结构研究方面(研究内容) \n主要体现三个方面:\n\n* 数据的逻辑关系\n* 储存关系\n* 运算关系\n* 还讨论算法的效率问题,分类问题等。 \n\n \n2、数据结构的逻辑结构 \n**逻辑关系**:自然状态下数据元素之间的一种联系(关联方式或邻接关系,从逻辑上观察数据,与计算机无关)。 \n**逻辑结构**:对数据元素之间关系的描述B=(k,r)其中,k:数据元素的有穷集合(有限元素构成),r:k上关系的有穷集合,其中每个关系r都是从k到k的关系。 \n**逻辑结构的分类**:线性结构和非线性结构(树形结构、图形结构(网状结构))。 \n**关于集合类型**:元素之间除同属一个集合外别无其他类型 \n3、数据结构的**存储结构** \n**存储关系**:逻辑结构在计算机存储器中实现,它依赖于计算机。具体说数据在存储器中的关联方式,也成物理结构,物理关系等。 \n \n*\t顺序结构 \n*\t链接结构 \n*\t索引结构 \n*\t散列(hash)结构 \n\n \n4、数据结构评价标准 \n主要标准: \n\n*\t作为问题的参数的函数来计算**存储需要量** \n*\t作为问题的参数的函数来计算**时间效率** \n*\t还需要考虑其他因素 \n\n## 第二章:算法(只有一个层面)\n1、算法的评价标准 \n好算法要达到以下目标: \n\n* 正确性(满足具体问题的要求) \n* 易读性(交流与他人阅读,其次是机器执行) \n* 高效性(效率与存储量的需求,达到所需的时空性能) \n* 健壮性(适应环境变化,有非法输入时,能做出相应的处理或反映) \n\n\n2、算法的描述方法 \n\n* 计算机程序设计语言 \n* 自然语言 \n* PDL语言(伪码语言、可运行于“抽象计算机”,虚拟机) \n* 流程图 \n\n## 第三章:线性表(只有第三个要求) \n1、**线性表**:一个线性表是n≥0个数据元素a1,a2,……,an的有限序列,序列中除第一个最后一个以外,每个元素都是有且仅有一个直接前驱和直接后继。 \n2、**链表**:通过指针联系起来的结点的整体(集合)。 \n3、**静态链表**:以整形变量的值作为存储连接指针值(即地址)联系起来的结点的整体。(指针本质整形值) \n4、**表头结点**:增加一个附加结点,放置于链表的最前面,也称表头结点,且该节点不用存储数据元素。作用和目的(简化算法)。 \n5、**存储密度**:结点数据本身所占的存储量和整个结点结构所占的存储量之比。 \n存储密度 = (结点数据本身所占的存储量)/(结点结构所占的存储总量) \n\n\n\t基于链表的插入删除 \n\t\n\t\n## 第四章:栈和队列(只有第三层) \n1、**栈**:栈在计算机具体应用中,是一个特定的存储区,一端固定,一端浮动。 \n栈是一个下限为常数,上限可变化的(或者反之),也成为堆栈或堆阵。可变化一端为栈顶,不可变化一端为栈底 \n2、**栈与线性表的异同**:栈的插入、删除至能在一端进行,不能在任意点,栈是受限的线性表。 \n3、**队列**:队列是一个上限和下限只能增加和不能减少的向量(或反之),队首:取出元素的一端。队尾:加入元素的一端。 \n4、**队列与线性表的异同**:受限的线性表,删除和插入操作只能在特定位置。 \n5、**假溢出(待定)**:多栈共存时,有点栈已满,有的还没有满。存储区还没有满,但队列或栈却发生了溢出,我们把这种现象称为\"假溢出\"。 \n\n> 第三层次:循环队列的出入队。\n\n\t循环队列的出入队 (注意!队首指向队头元素的前一个地址,队尾指向队屁股最后一个元素)\n\t入队: \n\tPROC REDUI(VAR CQ: ARRAY[M..N]OF DATATYPE;FRONT,REAR,X:INTERG) \n\tBEGIN \n\t\tREAR<-REAR+1\n\t\tIF REAR=N+1\n\t\t\tTHEN REAR<-M\n\t\tIF REAR=FRONT\n\t\t\tTHEN PRINT\"CQ FULL\"\"\n\t\t\tELSE CQ[REAR]<-X\n\tEND\n\t出队:\n\tPROC CHUDUI(VAR CQ:ARRAY[M...N]OF DATATYPE;FRONT,REAR,X:INTEGER)\n\tBEGIN\n\t\tIF\tFRONT=REAR\n\t\t\tTHEN\tPRINT\"CQ EMPTY\"\n\t\t\tELSE\tIF\tFRONT = N\n\t\t\t\t\t\tTHEN FRONT = M\n\t\t\t\t\t\tELSE FRONT <- FRONT+1\n\t\t\t\t\tX <- CQ[FRONT]\n\tEND\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t \n\n\n## 第五章:串(只有第一层面) \n1、**串**:一个由零个或多个字符组成的有穷序列称为串,简记A=a1a2……an。 \n2、**串的模式匹配**:假设有两个串P和S: \nP=p1p2……pm S=s1s2……sn 其中(0<m<n)通常m<<n\n在S中找出一个与P相同的子串,即串的定位。 \n通常把S称为目标,把P称为模式,把从目标S中查找模式P的过程称为串的模式匹配。 \n\n## 第六章:数组和广义表(二) \n1、**数组**:一位数组是个向量,他的每个元素是该结构中不可分割的最小单位;n(n>1)维数组是个向量,他的每个元素是n-1维数组,且具有相同的下限和上限。 \n2、**稀疏数组**:在一个数组中和某一元素比较而言,不相同的元素很少时,我们称此数组为稀疏数组。 \n3、**稀疏矩阵**:是稀疏数组的典例。与稀疏矩阵的差别:元素分布是否有规律。 \n4、**广义表**:广义表是零个或多个原子(他是所要描述的某种数据类型的对象,是一个确定的概念)或子表所构成的有限序列,简称表。\n\n\n> 第二层次 \n> 稀疏矩阵的两个存储方法:三元组(顺序存储)、十字链表\n\n![](a.png) \n三元组的缺陷\n\n* 不利于矩阵元素的变化:非零到零的删除、零到非零的添加\n \n\t\n\t\n\n\n## 第七章:树形结构(二、三)\n1、**树**:是满足以下性质的有限个结点组成的非空集合 \n\n* T中有且只有一个称为根的结点。 \n* 除根节点以外,其余节点分为m(m>0)个不相交的集合T1,T2……Tm,其中每个Ti都是数,而却都称为T的子树。 \n\n\n2、**二叉树**:二叉树T是满足如下性质的结点的有限集合: \n \n* T是空集。 \n* 或者它包含一个根节点且其余结点分为两个不相交的集合,并分别被称为左子树和右子树,且左右子树都为二叉树。 \n\n3、**遍历**:对于给定数据结构,系统的访问该结构中的每个结点,且每个结点仅被访问一次的操作过程成为遍历。(会改字) \n4、**二叉树的遍历规则**: \n\n* 层次遍历:从上到下从左到右,布拉布拉布拉~\n* 深度策略:先根遍历、中根遍历、后根遍历。 \n\n \n5、**二叉排序树**:二叉排序树或空二叉树,或者是满足以下要求的二叉树。\n \n* 若是它的左子树非空,或者左子树上所有结点的值均小于等于根节点的值。 \n* 若它右子树非空,则右子树上所有结点的值均大于等于根节点的值。 \n* 且左右子树都为二叉排序树。 \n\n\n6、**线索**:将二叉树的空指针利用起来,用于表示某线性关系下前驱或后即的,这种指针称为线索。 \n7、**线索树**:带线索的二叉树简称为线索树。 \n\n8、**霍夫曼树(最优二叉树)**:按霍夫曼算法构造具有最小加权路径长度的二叉树。 \n9、**线索化**:给二叉树加线索的过程。 \n\n> 第二层次: \n> \n> * 树、森林、二叉树相互转换 \n> * 二叉树的前中后遍历的方法 \n> * 二叉树加线索 \n> * 霍夫曼树的构造和编码 \n> * 二叉排序树的构造 \n\n```PDL\n二叉树的先序遍历\nPROC XIANXUBIANLI (VAR T:BINARY TREE)\nBEGIN\n\tIF T!=NULL\n\t\tTHEN\t[PRINT\"T->DATA\"\n\t\t\t\tCALL XIANXUBIANLI(T->LSON)\n\t\t\t\tCALL XIANXUBIANLI(T->RSON)]\nEND\n```\n```PDL\n二叉树的中序遍历\nPROC XIANXUBIANLI (VAR T:BINARY TREE)\nBEGIN\n\tIF T!=NULL\n\t\tTHEN\t[CALL XIANXUBIANLI(T->LSON)\n\t\t\t\tPRINT\"T->DATA\"\n\t\t\t\tCALL XIANXUBIANLI(T->RSON)]\n\t\t\t\t\nEND\n```\n```PDL\n二叉树的后序遍历\nPROC XIANXUBIANLI (VAR T:BINARY TREE)\nBEGIN\n\tIF T!=NULL\n\t\tTHEN\t[CALL XIANXUBIANLI(T->LSON)\n\t\t\t\tCALL XIANXUBIANLI(T->RSON)\n\t\t\t\tPRINT\"T->DATA\"]\nEND\n```\n\n**树到二叉树的转换:** \n\n* 加线:加横线\n* 抹线:抹掉可以抹掉的所有右孩子之间的线 \n![](b.png)\n\n**二叉树转到树:** \n\n* 加线:1.是父节点的左孩子。2.把父节点和他的右孩子和右孩子的右孩子和。。。连起来。\n* 抹线:抹去所有节点和右孩子之间的线 \n![](c.png) \n \n**森林转化为二叉树**\n\n* 把每个树转化为二叉树\n* 二叉树的连接:依据森林次序,后一棵二叉树是前一棵二叉树根节点的右子树 \n![](d.png)\n\n**二叉树转换成森林**\n\n* 抹线:把节点的右子树都拿出来\n* 还原:把每个二叉树变成树 \n![](e.png)\n \n**线索化**\n\n* 左孩子指向直接前驱\n* 右孩子指向直接后驱\n* 标志位0表示指向孩子,1表示指向线索\n\n![](f.png)\n\n**构造二叉树**\n\n1. 节点是否为空,为空则插入\n2. 若小于,执行递归插入左孩子节点,到1.\n3. 若大于,执行递归插入右孩子节点,到1.\n\n![](g.png)\n\n**霍夫曼树(最优二叉树)** \n\n* 给定一组权值集合{w1, w2, …, wn}.\n* 将F={T1, T2, …, Tn}按根结点的值由小到大进行排序。\n* 取出T1和T2组成一棵二叉树T;再将T插入到F中,并使F依据根结点的值有序。\n* 反复执行③直到F={T}为止。\n\n![](h.png)\n\n**霍夫曼树的编码**\n\n* 给定字符集\n* 写出每个字符出现的次数组成的集合。\n* 对此集合进行霍夫曼排序\n* 左支为0右支为1写出每个字符的编码\n\n![](i.png)\n\n\n> 第三个层次:遍历方法,两个运用一个处理 \n\n交换左右子树\n\n\tPROC EXCHANGE(VAR T:BINARYTREE)\n\tBEGIN \n\t\tIF T!=NULL\n\t\t\t\tTHEN\t[SWOP(T->LSON,T->RSON)\n\t\t\t\t\t\tCALL EXCHANGE(T->LSON)\n\t\t\t\t\t\tCALL EXCHANGE(T->RSON)]\n\tEND\n\n求二叉树的高度\n\n```PDL\nPROC HIGHT(VAR T:BINARYTREE,H)\nBEGIN \n\tIF T=NULL\n\t\t\tTHEN\tH<-0\n\t\t\tELSE\t[CALL HIGHT(T->LSON,H1)\n\t\t\t\t\tCALL HIGHT(T->RSON,H2)\n\t\t\t\t\tH<-MAX(H1,H2)+1]\nEND\n```\t \n叶子结点的个数\n\n```PDL\nPROC COUNTLEAF(VAR T:BINARYTREE;COUNT:INTGER)\nBIGIN\n\tCASE\t\n\t\t\tT=NULL:\tCOUNT<-0\n\t\t\tT->LSON=NULL AND T->RSON=NULL: COUNT<-1\n\t\t\tELSE\t[CALL COUNTLEAF(T->LSON,C1)\n\t\t\t\t\tCALL COUNTLEAF(T->RSON,C2)\n\t\t\t\t\tCOUNT<-C1+C2]\n\tEND CASE\nEND\n```\n\n## 第八章:图结构(二)\n1、**图**:由n(n≥1)个结点v1,v2,……,vn构成的数据G称为图。若结点集V={v1、v2……vn}上定义的称为后继的关系E是非自反的,可表示为G=(V,E),其中V为顶点集,E为边集。 \n2、**图的遍历**:给出图G和其中的任意一个定点v0,从v0出发系统的访问G中所有的定点,且每个顶点(反)被访问一次,这一过程称为图的遍历。 \n3、**图的遍历规律**:广度优先遍历,深度优先遍历。 \n4、**最小生成树**:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边和权重。 \n5、**AOV网**:若有向图G中,顶点表示活动或任务,有向边表示活动或任务之间的优先关系,则此有向图称为顶点表示活动网络(AOV网)。 \n6、**AOE网**:若在带权的有有向图中的顶点表示事件,有向边表示活动,权表示活动持续的时间,则此有向图称为边表示活动的网络(AOE网)。 \n7、**拓扑排序**:对于有向图G=(V,E),V中的顶点的线性序列(Vi1,Vi2,……,Vin),称作一个拓扑序列,若此结点序列满足如下条件;在G中从顶点u到顶点v有一条路径,则在序列中u必在v之前。寻找拓扑序列的有效手段就是进行拓扑排序。 \n8、**关键路径**:任务计划作业图上的需要时间最长的路径(可有多条),它决定完成总任务的时间。 \n\n\n> 第二个层次\n> \n> * 图的邻接表和邻接矩阵的存储方法 \n> * 图的深度和广度遍历的方法 \n> * Prim和Kruskal算法 \n\n**邻接表和邻接矩阵的表示** \n有向图中邻接表的表示: \n![](j.png) \n网的邻接矩阵: \n![](k.png) \n**深度优先搜索** \n![](l.png) \n**广度优先搜索** \n![](m.png) \n\n**prim算法构造最小生成树** \n每一步都找已连通的树中权最小的边用来构造 \n![](n.png)\n\n**Kruskal算法构造最小生成树** \n按照权值递增的顺序逐个考虑E中的每条边: \n![](o.png)\n\n\n## 第九章:排序(二、三) \n1、**排序**:设含有n个记录的集合为R={r1,r2,……,rn},其对应的关键字集合为k={k1,k2,……,kn},给定关系α,按照关系α针对关键字集合k对R进行运算,是的R有如下序列:\n(rα1,rα2,……,rαn)\n我们将这个操作过程称为排序。 \n2、**排序分类**:分为外部排序和内部排序。 \n内部排序包括 \n\n* 插入排序 \n* 交换排序 \n* 选择排序 \n* 合并排序 \n* 枚举排序 \n* 分配排序 \n\n\n3、**排序稳定性**:在排序关系下,假设排序前ri在rj之前,排序之后领先关系不变,则称此排序过程方法是稳定的,否则是不稳定的。 \n4、**堆**:设L是长度n的表,其数据元素满足:\nL(i)≤L(2i)且L(i)≤L(2i+1), 1≤i≤[n/2] 或反之。\n则称L是一个堆。 \n\n> 第二个层次 \n> \n> *\t直接插入 \n> *\t快速排序 \n> *\t二路归并 \n> *\t基数 \n> *\t堆的构造 \n\n**直接插入** \n从一个零集合开始,将 r 按照排序关系插入到一个已经有序的文件适当位置。 \n![](p.png)\n\n**快速排序** \n基本方法:\n\n\tPROC QuickSort(VAR R:ARRAY[1..n] OF datatype;l,p:integer);\n\tBEGIN \n\t\t\tIF l≥p THEN exit ;\n\t i←l; j←p; x←R[i];\n REPEAT \n \tWHILE (x.key≤R[j].key)AND(i<j) DO j←j-1; \n \tIF i<j \n \t\tTHEN 【 R[i]←R[j]; i←i+1;\n \t WHILE (R[i].key<x.key)AND(i<j) DO i←i+1; \n \t IF i<j THEN【 R[j]←R[i]; j←j-1; 】\n \t 】\n UNTIL i=j; \n R[i]←x; i←i+1; j←j-1; \n IF l<j THEN CALL QuickSort(R, l , j); \n IF i<p THEN CALL QuickSort(R, i , p);\n\tEND; \n\t\n**二路插入** \n两个两个合并,然后四个四个合并,然后大的合并 \n**堆的构造** \n1.先插入,然后往上爬。 \n![](q.png) \n2.先排列,然后从第一半个节点开始往上爬。 \n![](y.png)\n**基数排序** \n看最低位,一次装进是个桶里,然后拿出来。 \n再装第二位,最后装第三位。 \n![](r.png)\n\n>第三个层次:二分插入排序\n\n与直接插入排序的区别:在插入第i个时搜索采用二分策略。\n\n```PDL\nPROC DUOSORT(VAR R:ARRAY[1..N])\nBIGIN\n\tFOR I<-2 TODO N DO[\n\t\tX<-R[I],L <- 1,H <- I\n\t\tWHILE L<=H DO[\n\t\t\tM<-(L+H)DIV2\n\t\t\tIF\tX<A[M]\n\t\t\t\tTHEN H<-(M-1)\n\t\t\t\tELSE L<-(L+1)\n\t\t]\n\t\tFOR J<-(I-1) TODO L DO R[J+1] <- R[J]\n\t\tR[L] <- X \n\t]\nEND\n\t\n```\n\n\n \n## 第十章:数据检索(二、三)\n1、**检索**:在给定数据结构中查找满足某种条件的数据元素(或节点,记录)的过程。 \n2、**检索分类**: \n\n* 基于关键字的检索; \n* 基于属性的检索; \n\n\n3、**平均检索长度**:衡量检索算法的主要标准是检索过程中对关键字(或属性)要执行的平均运算次数。 \n4、**AVI树**: \n\n* 一颗空二叉树是AVL树; \n* 若T是一颗非空二叉树,其访问任何结点的左右子树的相差高度不超过1,则T是AVL树。 \n\n\n5、**碰撞**:依据散列函数H计算出地址,若发现此地址已经被别的结点占用,即有两个不同的关键字映射到了同一地址空间的现象。 \n6、**散列表**:是一种存储方法也是一种常见的检索方法,是按关键字编址的一种技术。用散列法组织存储的表。 \n7、**同义词**:发生碰撞的两个关键字; \n8、**堆集现象**:在散列表中插入一个新结点y时,当然它不是先前已经插入的某个节点x的同义词,但可能会出现H(y),已经被x的同义词占用的情况,这是只能将y也链接在x的同义链中,也就是说出现了y与x的同义链结成一个的情况,把连个同义词子表结合在一起的现象称为堆集现象。 \n\n> 第二层次:AVL的构造 \n\n* 正常插入\n* 当不满足平衡二叉树时,调整\n* 调整要求中序顺序不变\n* RL或LR调整要把整个x都要挪上去\n\n举例: \n![](z.png)\n\n> 第三层次:二分检索 \n\n```PDL\nPROC DUOSEARCH(VAR R:ARRAY[1...MAX]OF DATATYPE;N:INTEGER;K:KTYPE)\nBEGIN\n\tL <- 1,H <- N\n\tWHILE L <= H DO[\n\t\tMIDDLE <- (L+H) DIV 2\n\t\tCASE\t\n\t\t\tK == R[MIDDLE]:WRITE\"SUEECE\",EXIT;\n\t\t\tK < R[MIDDLE]: H = MIDDLE-1\n\t\t\tK > R[MIDDLE]: L = MIDDLE+1\n\t\tENDCASE\n\t]\n\tWRITE\"UNSUCCSE\"\nEND \n```\n\n## 十二章,文件\n1、\t**文件**:为了进行存取控制、检索和修改而组织在一起的数据记录集合。 \n2、\t**文件逻辑组成分类**:(广义)两种: \n\n* 字符流文件:有序的字符流序列,文件基本单位为字节或字。 \n* 记录文件:数据记录的集合文件基本单位为记录。\n\n \n3、\t**文件物理组成分类**: \n从存储结构来看,文件的组织仅有三种:(说大的就行了) \n\n*\t顺序机构:按照数据到达的时间先后次序进行组织。按该方式组织的文件称顺序文件。 \n*\t计算寻址结构:按照散列方式组织文件。该方式组织的文件称散列文件。 \n*\t带索引的结构:组织数据时需要带一个索引表。称为索引文件,主要是利用树形结构组织索引。 \n\n \n4、\t**动态存储结构**:是指文件创建初始装入记录时所生成的索引结构,在系统运行过程中索引结构本身能够发生改变。 \n5、\t**静态存储结构**:指索引结构在文件创建,初始装入记录生成,一旦生成就固定下来,在系统运行过程中索引结构并不发生变化,只有当文件重组时菜允许改变索引结构。 \n6、\t**B+,B-树的本质**:平衡的多分树。 \n7、\t**B+,B-树的作用**:组织动态索引结构。 \n8、\t**ISAM文件的本质**:索引顺序存取。(静态索引结构) \n9、\t**VSAM文件的本质**:虚拟存储存取。(动态索引结构) \n10、\t**外排基本方法**:归并排序。 \n","source":"_posts/数据结构知识框架.md","raw":"---\ntitle: 数据结构知识框架\ndate: 2018-01-11 09:16:54\ntags: [数据结构,笔记]\ncategories: 笔记\n---\n# 数据结构知识框架\n## 第一章\n第一方面:基本概念 \n1、数据结构研究方面(研究内容) \n主要体现三个方面:\n\n* 数据的逻辑关系\n* 储存关系\n* 运算关系\n* 还讨论算法的效率问题,分类问题等。 \n\n \n2、数据结构的逻辑结构 \n**逻辑关系**:自然状态下数据元素之间的一种联系(关联方式或邻接关系,从逻辑上观察数据,与计算机无关)。 \n**逻辑结构**:对数据元素之间关系的描述B=(k,r)其中,k:数据元素的有穷集合(有限元素构成),r:k上关系的有穷集合,其中每个关系r都是从k到k的关系。 \n**逻辑结构的分类**:线性结构和非线性结构(树形结构、图形结构(网状结构))。 \n**关于集合类型**:元素之间除同属一个集合外别无其他类型 \n3、数据结构的**存储结构** \n**存储关系**:逻辑结构在计算机存储器中实现,它依赖于计算机。具体说数据在存储器中的关联方式,也成物理结构,物理关系等。 \n \n*\t顺序结构 \n*\t链接结构 \n*\t索引结构 \n*\t散列(hash)结构 \n\n \n4、数据结构评价标准 \n主要标准: \n\n*\t作为问题的参数的函数来计算**存储需要量** \n*\t作为问题的参数的函数来计算**时间效率** \n*\t还需要考虑其他因素 \n\n## 第二章:算法(只有一个层面)\n1、算法的评价标准 \n好算法要达到以下目标: \n\n* 正确性(满足具体问题的要求) \n* 易读性(交流与他人阅读,其次是机器执行) \n* 高效性(效率与存储量的需求,达到所需的时空性能) \n* 健壮性(适应环境变化,有非法输入时,能做出相应的处理或反映) \n\n\n2、算法的描述方法 \n\n* 计算机程序设计语言 \n* 自然语言 \n* PDL语言(伪码语言、可运行于“抽象计算机”,虚拟机) \n* 流程图 \n\n## 第三章:线性表(只有第三个要求) \n1、**线性表**:一个线性表是n≥0个数据元素a1,a2,……,an的有限序列,序列中除第一个最后一个以外,每个元素都是有且仅有一个直接前驱和直接后继。 \n2、**链表**:通过指针联系起来的结点的整体(集合)。 \n3、**静态链表**:以整形变量的值作为存储连接指针值(即地址)联系起来的结点的整体。(指针本质整形值) \n4、**表头结点**:增加一个附加结点,放置于链表的最前面,也称表头结点,且该节点不用存储数据元素。作用和目的(简化算法)。 \n5、**存储密度**:结点数据本身所占的存储量和整个结点结构所占的存储量之比。 \n存储密度 = (结点数据本身所占的存储量)/(结点结构所占的存储总量) \n\n\n\t基于链表的插入删除 \n\t\n\t\n## 第四章:栈和队列(只有第三层) \n1、**栈**:栈在计算机具体应用中,是一个特定的存储区,一端固定,一端浮动。 \n栈是一个下限为常数,上限可变化的(或者反之),也成为堆栈或堆阵。可变化一端为栈顶,不可变化一端为栈底 \n2、**栈与线性表的异同**:栈的插入、删除至能在一端进行,不能在任意点,栈是受限的线性表。 \n3、**队列**:队列是一个上限和下限只能增加和不能减少的向量(或反之),队首:取出元素的一端。队尾:加入元素的一端。 \n4、**队列与线性表的异同**:受限的线性表,删除和插入操作只能在特定位置。 \n5、**假溢出(待定)**:多栈共存时,有点栈已满,有的还没有满。存储区还没有满,但队列或栈却发生了溢出,我们把这种现象称为\"假溢出\"。 \n\n> 第三层次:循环队列的出入队。\n\n\t循环队列的出入队 (注意!队首指向队头元素的前一个地址,队尾指向队屁股最后一个元素)\n\t入队: \n\tPROC REDUI(VAR CQ: ARRAY[M..N]OF DATATYPE;FRONT,REAR,X:INTERG) \n\tBEGIN \n\t\tREAR<-REAR+1\n\t\tIF REAR=N+1\n\t\t\tTHEN REAR<-M\n\t\tIF REAR=FRONT\n\t\t\tTHEN PRINT\"CQ FULL\"\"\n\t\t\tELSE CQ[REAR]<-X\n\tEND\n\t出队:\n\tPROC CHUDUI(VAR CQ:ARRAY[M...N]OF DATATYPE;FRONT,REAR,X:INTEGER)\n\tBEGIN\n\t\tIF\tFRONT=REAR\n\t\t\tTHEN\tPRINT\"CQ EMPTY\"\n\t\t\tELSE\tIF\tFRONT = N\n\t\t\t\t\t\tTHEN FRONT = M\n\t\t\t\t\t\tELSE FRONT <- FRONT+1\n\t\t\t\t\tX <- CQ[FRONT]\n\tEND\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t \n\n\n## 第五章:串(只有第一层面) \n1、**串**:一个由零个或多个字符组成的有穷序列称为串,简记A=a1a2……an。 \n2、**串的模式匹配**:假设有两个串P和S: \nP=p1p2……pm S=s1s2……sn 其中(0<m<n)通常m<<n\n在S中找出一个与P相同的子串,即串的定位。 \n通常把S称为目标,把P称为模式,把从目标S中查找模式P的过程称为串的模式匹配。 \n\n## 第六章:数组和广义表(二) \n1、**数组**:一位数组是个向量,他的每个元素是该结构中不可分割的最小单位;n(n>1)维数组是个向量,他的每个元素是n-1维数组,且具有相同的下限和上限。 \n2、**稀疏数组**:在一个数组中和某一元素比较而言,不相同的元素很少时,我们称此数组为稀疏数组。 \n3、**稀疏矩阵**:是稀疏数组的典例。与稀疏矩阵的差别:元素分布是否有规律。 \n4、**广义表**:广义表是零个或多个原子(他是所要描述的某种数据类型的对象,是一个确定的概念)或子表所构成的有限序列,简称表。\n\n\n> 第二层次 \n> 稀疏矩阵的两个存储方法:三元组(顺序存储)、十字链表\n\n![](a.png) \n三元组的缺陷\n\n* 不利于矩阵元素的变化:非零到零的删除、零到非零的添加\n \n\t\n\t\n\n\n## 第七章:树形结构(二、三)\n1、**树**:是满足以下性质的有限个结点组成的非空集合 \n\n* T中有且只有一个称为根的结点。 \n* 除根节点以外,其余节点分为m(m>0)个不相交的集合T1,T2……Tm,其中每个Ti都是数,而却都称为T的子树。 \n\n\n2、**二叉树**:二叉树T是满足如下性质的结点的有限集合: \n \n* T是空集。 \n* 或者它包含一个根节点且其余结点分为两个不相交的集合,并分别被称为左子树和右子树,且左右子树都为二叉树。 \n\n3、**遍历**:对于给定数据结构,系统的访问该结构中的每个结点,且每个结点仅被访问一次的操作过程成为遍历。(会改字) \n4、**二叉树的遍历规则**: \n\n* 层次遍历:从上到下从左到右,布拉布拉布拉~\n* 深度策略:先根遍历、中根遍历、后根遍历。 \n\n \n5、**二叉排序树**:二叉排序树或空二叉树,或者是满足以下要求的二叉树。\n \n* 若是它的左子树非空,或者左子树上所有结点的值均小于等于根节点的值。 \n* 若它右子树非空,则右子树上所有结点的值均大于等于根节点的值。 \n* 且左右子树都为二叉排序树。 \n\n\n6、**线索**:将二叉树的空指针利用起来,用于表示某线性关系下前驱或后即的,这种指针称为线索。 \n7、**线索树**:带线索的二叉树简称为线索树。 \n\n8、**霍夫曼树(最优二叉树)**:按霍夫曼算法构造具有最小加权路径长度的二叉树。 \n9、**线索化**:给二叉树加线索的过程。 \n\n> 第二层次: \n> \n> * 树、森林、二叉树相互转换 \n> * 二叉树的前中后遍历的方法 \n> * 二叉树加线索 \n> * 霍夫曼树的构造和编码 \n> * 二叉排序树的构造 \n\n```PDL\n二叉树的先序遍历\nPROC XIANXUBIANLI (VAR T:BINARY TREE)\nBEGIN\n\tIF T!=NULL\n\t\tTHEN\t[PRINT\"T->DATA\"\n\t\t\t\tCALL XIANXUBIANLI(T->LSON)\n\t\t\t\tCALL XIANXUBIANLI(T->RSON)]\nEND\n```\n```PDL\n二叉树的中序遍历\nPROC XIANXUBIANLI (VAR T:BINARY TREE)\nBEGIN\n\tIF T!=NULL\n\t\tTHEN\t[CALL XIANXUBIANLI(T->LSON)\n\t\t\t\tPRINT\"T->DATA\"\n\t\t\t\tCALL XIANXUBIANLI(T->RSON)]\n\t\t\t\t\nEND\n```\n```PDL\n二叉树的后序遍历\nPROC XIANXUBIANLI (VAR T:BINARY TREE)\nBEGIN\n\tIF T!=NULL\n\t\tTHEN\t[CALL XIANXUBIANLI(T->LSON)\n\t\t\t\tCALL XIANXUBIANLI(T->RSON)\n\t\t\t\tPRINT\"T->DATA\"]\nEND\n```\n\n**树到二叉树的转换:** \n\n* 加线:加横线\n* 抹线:抹掉可以抹掉的所有右孩子之间的线 \n![](b.png)\n\n**二叉树转到树:** \n\n* 加线:1.是父节点的左孩子。2.把父节点和他的右孩子和右孩子的右孩子和。。。连起来。\n* 抹线:抹去所有节点和右孩子之间的线 \n![](c.png) \n \n**森林转化为二叉树**\n\n* 把每个树转化为二叉树\n* 二叉树的连接:依据森林次序,后一棵二叉树是前一棵二叉树根节点的右子树 \n![](d.png)\n\n**二叉树转换成森林**\n\n* 抹线:把节点的右子树都拿出来\n* 还原:把每个二叉树变成树 \n![](e.png)\n \n**线索化**\n\n* 左孩子指向直接前驱\n* 右孩子指向直接后驱\n* 标志位0表示指向孩子,1表示指向线索\n\n![](f.png)\n\n**构造二叉树**\n\n1. 节点是否为空,为空则插入\n2. 若小于,执行递归插入左孩子节点,到1.\n3. 若大于,执行递归插入右孩子节点,到1.\n\n![](g.png)\n\n**霍夫曼树(最优二叉树)** \n\n* 给定一组权值集合{w1, w2, …, wn}.\n* 将F={T1, T2, …, Tn}按根结点的值由小到大进行排序。\n* 取出T1和T2组成一棵二叉树T;再将T插入到F中,并使F依据根结点的值有序。\n* 反复执行③直到F={T}为止。\n\n![](h.png)\n\n**霍夫曼树的编码**\n\n* 给定字符集\n* 写出每个字符出现的次数组成的集合。\n* 对此集合进行霍夫曼排序\n* 左支为0右支为1写出每个字符的编码\n\n![](i.png)\n\n\n> 第三个层次:遍历方法,两个运用一个处理 \n\n交换左右子树\n\n\tPROC EXCHANGE(VAR T:BINARYTREE)\n\tBEGIN \n\t\tIF T!=NULL\n\t\t\t\tTHEN\t[SWOP(T->LSON,T->RSON)\n\t\t\t\t\t\tCALL EXCHANGE(T->LSON)\n\t\t\t\t\t\tCALL EXCHANGE(T->RSON)]\n\tEND\n\n求二叉树的高度\n\n```PDL\nPROC HIGHT(VAR T:BINARYTREE,H)\nBEGIN \n\tIF T=NULL\n\t\t\tTHEN\tH<-0\n\t\t\tELSE\t[CALL HIGHT(T->LSON,H1)\n\t\t\t\t\tCALL HIGHT(T->RSON,H2)\n\t\t\t\t\tH<-MAX(H1,H2)+1]\nEND\n```\t \n叶子结点的个数\n\n```PDL\nPROC COUNTLEAF(VAR T:BINARYTREE;COUNT:INTGER)\nBIGIN\n\tCASE\t\n\t\t\tT=NULL:\tCOUNT<-0\n\t\t\tT->LSON=NULL AND T->RSON=NULL: COUNT<-1\n\t\t\tELSE\t[CALL COUNTLEAF(T->LSON,C1)\n\t\t\t\t\tCALL COUNTLEAF(T->RSON,C2)\n\t\t\t\t\tCOUNT<-C1+C2]\n\tEND CASE\nEND\n```\n\n## 第八章:图结构(二)\n1、**图**:由n(n≥1)个结点v1,v2,……,vn构成的数据G称为图。若结点集V={v1、v2……vn}上定义的称为后继的关系E是非自反的,可表示为G=(V,E),其中V为顶点集,E为边集。 \n2、**图的遍历**:给出图G和其中的任意一个定点v0,从v0出发系统的访问G中所有的定点,且每个顶点(反)被访问一次,这一过程称为图的遍历。 \n3、**图的遍历规律**:广度优先遍历,深度优先遍历。 \n4、**最小生成树**:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边和权重。 \n5、**AOV网**:若有向图G中,顶点表示活动或任务,有向边表示活动或任务之间的优先关系,则此有向图称为顶点表示活动网络(AOV网)。 \n6、**AOE网**:若在带权的有有向图中的顶点表示事件,有向边表示活动,权表示活动持续的时间,则此有向图称为边表示活动的网络(AOE网)。 \n7、**拓扑排序**:对于有向图G=(V,E),V中的顶点的线性序列(Vi1,Vi2,……,Vin),称作一个拓扑序列,若此结点序列满足如下条件;在G中从顶点u到顶点v有一条路径,则在序列中u必在v之前。寻找拓扑序列的有效手段就是进行拓扑排序。 \n8、**关键路径**:任务计划作业图上的需要时间最长的路径(可有多条),它决定完成总任务的时间。 \n\n\n> 第二个层次\n> \n> * 图的邻接表和邻接矩阵的存储方法 \n> * 图的深度和广度遍历的方法 \n> * Prim和Kruskal算法 \n\n**邻接表和邻接矩阵的表示** \n有向图中邻接表的表示: \n![](j.png) \n网的邻接矩阵: \n![](k.png) \n**深度优先搜索** \n![](l.png) \n**广度优先搜索** \n![](m.png) \n\n**prim算法构造最小生成树** \n每一步都找已连通的树中权最小的边用来构造 \n![](n.png)\n\n**Kruskal算法构造最小生成树** \n按照权值递增的顺序逐个考虑E中的每条边: \n![](o.png)\n\n\n## 第九章:排序(二、三) \n1、**排序**:设含有n个记录的集合为R={r1,r2,……,rn},其对应的关键字集合为k={k1,k2,……,kn},给定关系α,按照关系α针对关键字集合k对R进行运算,是的R有如下序列:\n(rα1,rα2,……,rαn)\n我们将这个操作过程称为排序。 \n2、**排序分类**:分为外部排序和内部排序。 \n内部排序包括 \n\n* 插入排序 \n* 交换排序 \n* 选择排序 \n* 合并排序 \n* 枚举排序 \n* 分配排序 \n\n\n3、**排序稳定性**:在排序关系下,假设排序前ri在rj之前,排序之后领先关系不变,则称此排序过程方法是稳定的,否则是不稳定的。 \n4、**堆**:设L是长度n的表,其数据元素满足:\nL(i)≤L(2i)且L(i)≤L(2i+1), 1≤i≤[n/2] 或反之。\n则称L是一个堆。 \n\n> 第二个层次 \n> \n> *\t直接插入 \n> *\t快速排序 \n> *\t二路归并 \n> *\t基数 \n> *\t堆的构造 \n\n**直接插入** \n从一个零集合开始,将 r 按照排序关系插入到一个已经有序的文件适当位置。 \n![](p.png)\n\n**快速排序** \n基本方法:\n\n\tPROC QuickSort(VAR R:ARRAY[1..n] OF datatype;l,p:integer);\n\tBEGIN \n\t\t\tIF l≥p THEN exit ;\n\t i←l; j←p; x←R[i];\n REPEAT \n \tWHILE (x.key≤R[j].key)AND(i<j) DO j←j-1; \n \tIF i<j \n \t\tTHEN 【 R[i]←R[j]; i←i+1;\n \t WHILE (R[i].key<x.key)AND(i<j) DO i←i+1; \n \t IF i<j THEN【 R[j]←R[i]; j←j-1; 】\n \t 】\n UNTIL i=j; \n R[i]←x; i←i+1; j←j-1; \n IF l<j THEN CALL QuickSort(R, l , j); \n IF i<p THEN CALL QuickSort(R, i , p);\n\tEND; \n\t\n**二路插入** \n两个两个合并,然后四个四个合并,然后大的合并 \n**堆的构造** \n1.先插入,然后往上爬。 \n![](q.png) \n2.先排列,然后从第一半个节点开始往上爬。 \n![](y.png)\n**基数排序** \n看最低位,一次装进是个桶里,然后拿出来。 \n再装第二位,最后装第三位。 \n![](r.png)\n\n>第三个层次:二分插入排序\n\n与直接插入排序的区别:在插入第i个时搜索采用二分策略。\n\n```PDL\nPROC DUOSORT(VAR R:ARRAY[1..N])\nBIGIN\n\tFOR I<-2 TODO N DO[\n\t\tX<-R[I],L <- 1,H <- I\n\t\tWHILE L<=H DO[\n\t\t\tM<-(L+H)DIV2\n\t\t\tIF\tX<A[M]\n\t\t\t\tTHEN H<-(M-1)\n\t\t\t\tELSE L<-(L+1)\n\t\t]\n\t\tFOR J<-(I-1) TODO L DO R[J+1] <- R[J]\n\t\tR[L] <- X \n\t]\nEND\n\t\n```\n\n\n \n## 第十章:数据检索(二、三)\n1、**检索**:在给定数据结构中查找满足某种条件的数据元素(或节点,记录)的过程。 \n2、**检索分类**: \n\n* 基于关键字的检索; \n* 基于属性的检索; \n\n\n3、**平均检索长度**:衡量检索算法的主要标准是检索过程中对关键字(或属性)要执行的平均运算次数。 \n4、**AVI树**: \n\n* 一颗空二叉树是AVL树; \n* 若T是一颗非空二叉树,其访问任何结点的左右子树的相差高度不超过1,则T是AVL树。 \n\n\n5、**碰撞**:依据散列函数H计算出地址,若发现此地址已经被别的结点占用,即有两个不同的关键字映射到了同一地址空间的现象。 \n6、**散列表**:是一种存储方法也是一种常见的检索方法,是按关键字编址的一种技术。用散列法组织存储的表。 \n7、**同义词**:发生碰撞的两个关键字; \n8、**堆集现象**:在散列表中插入一个新结点y时,当然它不是先前已经插入的某个节点x的同义词,但可能会出现H(y),已经被x的同义词占用的情况,这是只能将y也链接在x的同义链中,也就是说出现了y与x的同义链结成一个的情况,把连个同义词子表结合在一起的现象称为堆集现象。 \n\n> 第二层次:AVL的构造 \n\n* 正常插入\n* 当不满足平衡二叉树时,调整\n* 调整要求中序顺序不变\n* RL或LR调整要把整个x都要挪上去\n\n举例: \n![](z.png)\n\n> 第三层次:二分检索 \n\n```PDL\nPROC DUOSEARCH(VAR R:ARRAY[1...MAX]OF DATATYPE;N:INTEGER;K:KTYPE)\nBEGIN\n\tL <- 1,H <- N\n\tWHILE L <= H DO[\n\t\tMIDDLE <- (L+H) DIV 2\n\t\tCASE\t\n\t\t\tK == R[MIDDLE]:WRITE\"SUEECE\",EXIT;\n\t\t\tK < R[MIDDLE]: H = MIDDLE-1\n\t\t\tK > R[MIDDLE]: L = MIDDLE+1\n\t\tENDCASE\n\t]\n\tWRITE\"UNSUCCSE\"\nEND \n```\n\n## 十二章,文件\n1、\t**文件**:为了进行存取控制、检索和修改而组织在一起的数据记录集合。 \n2、\t**文件逻辑组成分类**:(广义)两种: \n\n* 字符流文件:有序的字符流序列,文件基本单位为字节或字。 \n* 记录文件:数据记录的集合文件基本单位为记录。\n\n \n3、\t**文件物理组成分类**: \n从存储结构来看,文件的组织仅有三种:(说大的就行了) \n\n*\t顺序机构:按照数据到达的时间先后次序进行组织。按该方式组织的文件称顺序文件。 \n*\t计算寻址结构:按照散列方式组织文件。该方式组织的文件称散列文件。 \n*\t带索引的结构:组织数据时需要带一个索引表。称为索引文件,主要是利用树形结构组织索引。 \n\n \n4、\t**动态存储结构**:是指文件创建初始装入记录时所生成的索引结构,在系统运行过程中索引结构本身能够发生改变。 \n5、\t**静态存储结构**:指索引结构在文件创建,初始装入记录生成,一旦生成就固定下来,在系统运行过程中索引结构并不发生变化,只有当文件重组时菜允许改变索引结构。 \n6、\t**B+,B-树的本质**:平衡的多分树。 \n7、\t**B+,B-树的作用**:组织动态索引结构。 \n8、\t**ISAM文件的本质**:索引顺序存取。(静态索引结构) \n9、\t**VSAM文件的本质**:虚拟存储存取。(动态索引结构) \n10、\t**外排基本方法**:归并排序。 \n","slug":"数据结构知识框架","published":1,"updated":"2018-01-11T16:03:53.277Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck191vkrz006ptzy4bletujt2","content":"<h1 id=\"数据结构知识框架\"><a href=\"#数据结构知识框架\" class=\"headerlink\" title=\"数据结构知识框架\"></a>数据结构知识框架</h1><h2 id=\"第一章\"><a href=\"#第一章\" class=\"headerlink\" title=\"第一章\"></a>第一章</h2><p>第一方面:基本概念<br>1、数据结构研究方面(研究内容)<br>主要体现三个方面:</p>\n<ul>\n<li>数据的逻辑关系</li>\n<li>储存关系</li>\n<li>运算关系</li>\n<li>还讨论算法的效率问题,分类问题等。 </li>\n</ul>\n<p>2、数据结构的逻辑结构<br><strong>逻辑关系</strong>:自然状态下数据元素之间的一种联系(关联方式或邻接关系,从逻辑上观察数据,与计算机无关)。<br><strong>逻辑结构</strong>:对数据元素之间关系的描述B=(k,r)其中,k:数据元素的有穷集合(有限元素构成),r:k上关系的有穷集合,其中每个关系r都是从k到k的关系。<br><strong>逻辑结构的分类</strong>:线性结构和非线性结构(树形结构、图形结构(网状结构))。<br><strong>关于集合类型</strong>:元素之间除同属一个集合外别无其他类型<br>3、数据结构的<strong>存储结构</strong><br><strong>存储关系</strong>:逻辑结构在计算机存储器中实现,它依赖于计算机。具体说数据在存储器中的关联方式,也成物理结构,物理关系等。 </p>\n<ul>\n<li>顺序结构 </li>\n<li>链接结构 </li>\n<li>索引结构 </li>\n<li>散列(hash)结构 </li>\n</ul>\n<p>4、数据结构评价标准<br>主要标准: </p>\n<ul>\n<li>作为问题的参数的函数来计算<strong>存储需要量</strong> </li>\n<li>作为问题的参数的函数来计算<strong>时间效率</strong> </li>\n<li>还需要考虑其他因素 </li>\n</ul>\n<h2 id=\"第二章:算法(只有一个层面)\"><a href=\"#第二章:算法(只有一个层面)\" class=\"headerlink\" title=\"第二章:算法(只有一个层面)\"></a>第二章:算法(只有一个层面)</h2><p>1、算法的评价标准<br>好算法要达到以下目标: </p>\n<ul>\n<li>正确性(满足具体问题的要求) </li>\n<li>易读性(交流与他人阅读,其次是机器执行) </li>\n<li>高效性(效率与存储量的需求,达到所需的时空性能) </li>\n<li>健壮性(适应环境变化,有非法输入时,能做出相应的处理或反映) </li>\n</ul>\n<p>2、算法的描述方法 </p>\n<ul>\n<li>计算机程序设计语言 </li>\n<li>自然语言 </li>\n<li>PDL语言(伪码语言、可运行于“抽象计算机”,虚拟机) </li>\n<li>流程图 </li>\n</ul>\n<h2 id=\"第三章:线性表(只有第三个要求)\"><a href=\"#第三章:线性表(只有第三个要求)\" class=\"headerlink\" title=\"第三章:线性表(只有第三个要求)\"></a>第三章:线性表(只有第三个要求)</h2><p>1、<strong>线性表</strong>:一个线性表是n≥0个数据元素a1,a2,……,an的有限序列,序列中除第一个最后一个以外,每个元素都是有且仅有一个直接前驱和直接后继。<br>2、<strong>链表</strong>:通过指针联系起来的结点的整体(集合)。<br>3、<strong>静态链表</strong>:以整形变量的值作为存储连接指针值(即地址)联系起来的结点的整体。(指针本质整形值)<br>4、<strong>表头结点</strong>:增加一个附加结点,放置于链表的最前面,也称表头结点,且该节点不用存储数据元素。作用和目的(简化算法)。<br>5、<strong>存储密度</strong>:结点数据本身所占的存储量和整个结点结构所占的存储量之比。<br>存储密度 = (结点数据本身所占的存储量)/(结点结构所占的存储总量) </p>\n<pre><code>基于链表的插入删除 \n</code></pre><h2 id=\"第四章:栈和队列(只有第三层)\"><a href=\"#第四章:栈和队列(只有第三层)\" class=\"headerlink\" title=\"第四章:栈和队列(只有第三层)\"></a>第四章:栈和队列(只有第三层)</h2><p>1、<strong>栈</strong>:栈在计算机具体应用中,是一个特定的存储区,一端固定,一端浮动。<br>栈是一个下限为常数,上限可变化的(或者反之),也成为堆栈或堆阵。可变化一端为栈顶,不可变化一端为栈底<br>2、<strong>栈与线性表的异同</strong>:栈的插入、删除至能在一端进行,不能在任意点,栈是受限的线性表。<br>3、<strong>队列</strong>:队列是一个上限和下限只能增加和不能减少的向量(或反之),队首:取出元素的一端。队尾:加入元素的一端。<br>4、<strong>队列与线性表的异同</strong>:受限的线性表,删除和插入操作只能在特定位置。<br>5、<strong>假溢出(待定)</strong>:多栈共存时,有点栈已满,有的还没有满。存储区还没有满,但队列或栈却发生了溢出,我们把这种现象称为”假溢出”。 </p>\n<blockquote>\n<p>第三层次:循环队列的出入队。</p>\n</blockquote>\n<pre><code>循环队列的出入队 (注意!队首指向队头元素的前一个地址,队尾指向队屁股最后一个元素)\n入队: \nPROC REDUI(VAR CQ: ARRAY[M..N]OF DATATYPE;FRONT,REAR,X:INTERG) \nBEGIN \n REAR<-REAR+1\n IF REAR=N+1\n THEN REAR<-M\n IF REAR=FRONT\n THEN PRINT"CQ FULL""\n ELSE CQ[REAR]<-X\nEND\n出队:\nPROC CHUDUI(VAR CQ:ARRAY[M...N]OF DATATYPE;FRONT,REAR,X:INTEGER)\nBEGIN\n IF FRONT=REAR\n THEN PRINT"CQ EMPTY"\n ELSE IF FRONT = N\n THEN FRONT = M\n ELSE FRONT <- FRONT+1\n X <- CQ[FRONT]\nEND\n</code></pre><h2 id=\"第五章:串(只有第一层面)\"><a href=\"#第五章:串(只有第一层面)\" class=\"headerlink\" title=\"第五章:串(只有第一层面)\"></a>第五章:串(只有第一层面)</h2><p>1、<strong>串</strong>:一个由零个或多个字符组成的有穷序列称为串,简记A=a1a2……an。<br>2、<strong>串的模式匹配</strong>:假设有两个串P和S:<br>P=p1p2……pm S=s1s2……sn 其中(0<m<n)通常m<<n<br>在S中找出一个与P相同的子串,即串的定位。<br>通常把S称为目标,把P称为模式,把从目标S中查找模式P的过程称为串的模式匹配。 </p>\n<h2 id=\"第六章:数组和广义表(二)\"><a href=\"#第六章:数组和广义表(二)\" class=\"headerlink\" title=\"第六章:数组和广义表(二)\"></a>第六章:数组和广义表(二)</h2><p>1、<strong>数组</strong>:一位数组是个向量,他的每个元素是该结构中不可分割的最小单位;n(n>1)维数组是个向量,他的每个元素是n-1维数组,且具有相同的下限和上限。<br>2、<strong>稀疏数组</strong>:在一个数组中和某一元素比较而言,不相同的元素很少时,我们称此数组为稀疏数组。<br>3、<strong>稀疏矩阵</strong>:是稀疏数组的典例。与稀疏矩阵的差别:元素分布是否有规律。<br>4、<strong>广义表</strong>:广义表是零个或多个原子(他是所要描述的某种数据类型的对象,是一个确定的概念)或子表所构成的有限序列,简称表。</p>\n<blockquote>\n<p>第二层次<br>稀疏矩阵的两个存储方法:三元组(顺序存储)、十字链表</p>\n</blockquote>\n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"a.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> \n<p>三元组的缺陷</p>\n<ul>\n<li>不利于矩阵元素的变化:非零到零的删除、零到非零的添加</li>\n</ul>\n<h2 id=\"第七章:树形结构(二、三)\"><a href=\"#第七章:树形结构(二、三)\" class=\"headerlink\" title=\"第七章:树形结构(二、三)\"></a>第七章:树形结构(二、三)</h2><p>1、<strong>树</strong>:是满足以下性质的有限个结点组成的非空集合 </p>\n<ul>\n<li>T中有且只有一个称为根的结点。 </li>\n<li>除根节点以外,其余节点分为m(m>0)个不相交的集合T1,T2……Tm,其中每个Ti都是数,而却都称为T的子树。 </li>\n</ul>\n<p>2、<strong>二叉树</strong>:二叉树T是满足如下性质的结点的有限集合: </p>\n<ul>\n<li>T是空集。 </li>\n<li>或者它包含一个根节点且其余结点分为两个不相交的集合,并分别被称为左子树和右子树,且左右子树都为二叉树。 </li>\n</ul>\n<p>3、<strong>遍历</strong>:对于给定数据结构,系统的访问该结构中的每个结点,且每个结点仅被访问一次的操作过程成为遍历。(会改字)<br>4、<strong>二叉树的遍历规则</strong>: </p>\n<ul>\n<li>层次遍历:从上到下从左到右,布拉布拉布拉~</li>\n<li>深度策略:先根遍历、中根遍历、后根遍历。 </li>\n</ul>\n<p>5、<strong>二叉排序树</strong>:二叉排序树或空二叉树,或者是满足以下要求的二叉树。</p>\n<ul>\n<li>若是它的左子树非空,或者左子树上所有结点的值均小于等于根节点的值。 </li>\n<li>若它右子树非空,则右子树上所有结点的值均大于等于根节点的值。 </li>\n<li>且左右子树都为二叉排序树。 </li>\n</ul>\n<p>6、<strong>线索</strong>:将二叉树的空指针利用起来,用于表示某线性关系下前驱或后即的,这种指针称为线索。<br>7、<strong>线索树</strong>:带线索的二叉树简称为线索树。 </p>\n<p>8、<strong>霍夫曼树(最优二叉树)</strong>:按霍夫曼算法构造具有最小加权路径长度的二叉树。<br>9、<strong>线索化</strong>:给二叉树加线索的过程。 </p>\n<blockquote>\n<p>第二层次: </p>\n<ul>\n<li>树、森林、二叉树相互转换 </li>\n<li>二叉树的前中后遍历的方法 </li>\n<li>二叉树加线索 </li>\n<li>霍夫曼树的构造和编码 </li>\n<li>二叉排序树的构造 </li>\n</ul>\n</blockquote>\n<figure class=\"highlight plain\"><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><span class=\"line\">二叉树的先序遍历</span><br><span class=\"line\">PROC XIANXUBIANLI (VAR T:BINARY TREE)</span><br><span class=\"line\">BEGIN</span><br><span class=\"line\">\tIF T!=NULL</span><br><span class=\"line\">\t\tTHEN\t[PRINT"T->DATA"</span><br><span class=\"line\">\t\t\t\tCALL XIANXUBIANLI(T->LSON)</span><br><span class=\"line\">\t\t\t\tCALL XIANXUBIANLI(T->RSON)]</span><br><span class=\"line\">END</span><br></pre></td></tr></table></figure>\n<figure class=\"highlight plain\"><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></pre></td><td class=\"code\"><pre><span class=\"line\">二叉树的中序遍历</span><br><span class=\"line\">PROC XIANXUBIANLI (VAR T:BINARY TREE)</span><br><span class=\"line\">BEGIN</span><br><span class=\"line\">\tIF T!=NULL</span><br><span class=\"line\">\t\tTHEN\t[CALL XIANXUBIANLI(T->LSON)</span><br><span class=\"line\">\t\t\t\tPRINT"T->DATA"</span><br><span class=\"line\">\t\t\t\tCALL XIANXUBIANLI(T->RSON)]</span><br><span class=\"line\">\t\t\t\t</span><br><span class=\"line\">END</span><br></pre></td></tr></table></figure>\n<figure class=\"highlight plain\"><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><span class=\"line\">二叉树的后序遍历</span><br><span class=\"line\">PROC XIANXUBIANLI (VAR T:BINARY TREE)</span><br><span class=\"line\">BEGIN</span><br><span class=\"line\">\tIF T!=NULL</span><br><span class=\"line\">\t\tTHEN\t[CALL XIANXUBIANLI(T->LSON)</span><br><span class=\"line\">\t\t\t\tCALL XIANXUBIANLI(T->RSON)</span><br><span class=\"line\">\t\t\t\tPRINT"T->DATA"]</span><br><span class=\"line\">END</span><br></pre></td></tr></table></figure>\n<p><strong>树到二叉树的转换:</strong> </p>\n<ul>\n<li>加线:加横线</li>\n<li>抹线:抹掉可以抹掉的所有右孩子之间的线<br><img src=\"b.png\" alt></li>\n</ul>\n<p><strong>二叉树转到树:</strong> </p>\n<ul>\n<li>加线:1.是父节点的左孩子。2.把父节点和他的右孩子和右孩子的右孩子和。。。连起来。</li>\n<li>抹线:抹去所有节点和右孩子之间的线<br><img src=\"c.png\" alt> </li>\n</ul>\n<p><strong>森林转化为二叉树</strong></p>\n<ul>\n<li>把每个树转化为二叉树</li>\n<li>二叉树的连接:依据森林次序,后一棵二叉树是前一棵二叉树根节点的右子树<br><img src=\"d.png\" alt></li>\n</ul>\n<p><strong>二叉树转换成森林</strong></p>\n<ul>\n<li>抹线:把节点的右子树都拿出来</li>\n<li>还原:把每个二叉树变成树<br><img src=\"e.png\" alt></li>\n</ul>\n<p><strong>线索化</strong></p>\n<ul>\n<li>左孩子指向直接前驱</li>\n<li>右孩子指向直接后驱</li>\n<li>标志位0表示指向孩子,1表示指向线索</li>\n</ul>\n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"f.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<p><strong>构造二叉树</strong></p>\n<ol>\n<li>节点是否为空,为空则插入</li>\n<li>若小于,执行递归插入左孩子节点,到1.</li>\n<li>若大于,执行递归插入右孩子节点,到1.</li>\n</ol>\n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"g.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<p><strong>霍夫曼树(最优二叉树)</strong> </p>\n<ul>\n<li>给定一组权值集合{w1, w2, …, wn}.</li>\n<li>将F={T1, T2, …, Tn}按根结点的值由小到大进行排序。</li>\n<li>取出T1和T2组成一棵二叉树T;再将T插入到F中,并使F依据根结点的值有序。</li>\n<li>反复执行③直到F={T}为止。</li>\n</ul>\n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"h.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<p><strong>霍夫曼树的编码</strong></p>\n<ul>\n<li>给定字符集</li>\n<li>写出每个字符出现的次数组成的集合。</li>\n<li>对此集合进行霍夫曼排序</li>\n<li>左支为0右支为1写出每个字符的编码</li>\n</ul>\n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"i.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<blockquote>\n<p>第三个层次:遍历方法,两个运用一个处理 </p>\n</blockquote>\n<p>交换左右子树</p>\n<pre><code>PROC EXCHANGE(VAR T:BINARYTREE)\nBEGIN \n IF T!=NULL\n THEN [SWOP(T->LSON,T->RSON)\n CALL EXCHANGE(T->LSON)\n CALL EXCHANGE(T->RSON)]\nEND\n</code></pre><p>求二叉树的高度</p>\n<figure class=\"highlight plain\"><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></pre></td><td class=\"code\"><pre><span class=\"line\">PROC HIGHT(VAR T:BINARYTREE,H)</span><br><span class=\"line\">BEGIN </span><br><span class=\"line\">\tIF T=NULL</span><br><span class=\"line\">\t\t\tTHEN\tH<-0</span><br><span class=\"line\">\t\t\tELSE\t[CALL HIGHT(T->LSON,H1)</span><br><span class=\"line\">\t\t\t\t\tCALL HIGHT(T->RSON,H2)</span><br><span class=\"line\">\t\t\t\t\tH<-MAX(H1,H2)+1]</span><br><span class=\"line\">END</span><br><span class=\"line\">```\t </span><br><span class=\"line\">叶子结点的个数</span><br><span class=\"line\"></span><br><span class=\"line\">```PDL</span><br><span class=\"line\">PROC COUNTLEAF(VAR T:BINARYTREE;COUNT:INTGER)</span><br><span class=\"line\">BIGIN</span><br><span class=\"line\">\tCASE\t</span><br><span class=\"line\">\t\t\tT=NULL:\tCOUNT<-0</span><br><span class=\"line\">\t\t\tT->LSON=NULL AND T->RSON=NULL: COUNT<-1</span><br><span class=\"line\">\t\t\tELSE\t[CALL COUNTLEAF(T->LSON,C1)</span><br><span class=\"line\">\t\t\t\t\tCALL COUNTLEAF(T->RSON,C2)</span><br><span class=\"line\">\t\t\t\t\tCOUNT<-C1+C2]</span><br><span class=\"line\">\tEND CASE</span><br><span class=\"line\">END</span><br></pre></td></tr></table></figure>\n<h2 id=\"第八章:图结构(二)\"><a href=\"#第八章:图结构(二)\" class=\"headerlink\" title=\"第八章:图结构(二)\"></a>第八章:图结构(二)</h2><p>1、<strong>图</strong>:由n(n≥1)个结点v1,v2,……,vn构成的数据G称为图。若结点集V={v1、v2……vn}上定义的称为后继的关系E是非自反的,可表示为G=(V,E),其中V为顶点集,E为边集。<br>2、<strong>图的遍历</strong>:给出图G和其中的任意一个定点v0,从v0出发系统的访问G中所有的定点,且每个顶点(反)被访问一次,这一过程称为图的遍历。<br>3、<strong>图的遍历规律</strong>:广度优先遍历,深度优先遍历。<br>4、<strong>最小生成树</strong>:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边和权重。<br>5、<strong>AOV网</strong>:若有向图G中,顶点表示活动或任务,有向边表示活动或任务之间的优先关系,则此有向图称为顶点表示活动网络(AOV网)。<br>6、<strong>AOE网</strong>:若在带权的有有向图中的顶点表示事件,有向边表示活动,权表示活动持续的时间,则此有向图称为边表示活动的网络(AOE网)。<br>7、<strong>拓扑排序</strong>:对于有向图G=(V,E),V中的顶点的线性序列(Vi1,Vi2,……,Vin),称作一个拓扑序列,若此结点序列满足如下条件;在G中从顶点u到顶点v有一条路径,则在序列中u必在v之前。寻找拓扑序列的有效手段就是进行拓扑排序。<br>8、<strong>关键路径</strong>:任务计划作业图上的需要时间最长的路径(可有多条),它决定完成总任务的时间。 </p>\n<blockquote>\n<p>第二个层次</p>\n<ul>\n<li>图的邻接表和邻接矩阵的存储方法 </li>\n<li>图的深度和广度遍历的方法 </li>\n<li>Prim和Kruskal算法 </li>\n</ul>\n</blockquote>\n<p><strong>邻接表和邻接矩阵的表示</strong><br>有向图中邻接表的表示:<br><img src=\"j.png\" alt><br>网的邻接矩阵:<br><img src=\"k.png\" alt><br><strong>深度优先搜索</strong><br><img src=\"l.png\" alt><br><strong>广度优先搜索</strong><br><img src=\"m.png\" alt> </p>\n<p><strong>prim算法构造最小生成树</strong><br>每一步都找已连通的树中权最小的边用来构造<br><img src=\"n.png\" alt></p>\n<p><strong>Kruskal算法构造最小生成树</strong><br>按照权值递增的顺序逐个考虑E中的每条边:<br><img src=\"o.png\" alt></p>\n<h2 id=\"第九章:排序(二、三)\"><a href=\"#第九章:排序(二、三)\" class=\"headerlink\" title=\"第九章:排序(二、三)\"></a>第九章:排序(二、三)</h2><p>1、<strong>排序</strong>:设含有n个记录的集合为R={r1,r2,……,rn},其对应的关键字集合为k={k1,k2,……,kn},给定关系α,按照关系α针对关键字集合k对R进行运算,是的R有如下序列:<br>(rα1,rα2,……,rαn)<br>我们将这个操作过程称为排序。<br>2、<strong>排序分类</strong>:分为外部排序和内部排序。<br>内部排序包括 </p>\n<ul>\n<li>插入排序 </li>\n<li>交换排序 </li>\n<li>选择排序 </li>\n<li>合并排序 </li>\n<li>枚举排序 </li>\n<li>分配排序 </li>\n</ul>\n<p>3、<strong>排序稳定性</strong>:在排序关系下,假设排序前ri在rj之前,排序之后领先关系不变,则称此排序过程方法是稳定的,否则是不稳定的。<br>4、<strong>堆</strong>:设L是长度n的表,其数据元素满足:<br>L(i)≤L(2i)且L(i)≤L(2i+1), 1≤i≤[n/2] 或反之。<br>则称L是一个堆。 </p>\n<blockquote>\n<p>第二个层次 </p>\n<ul>\n<li>直接插入 </li>\n<li>快速排序 </li>\n<li>二路归并 </li>\n<li>基数 </li>\n<li>堆的构造 </li>\n</ul>\n</blockquote>\n<p><strong>直接插入</strong><br>从一个零集合开始,将 r 按照排序关系插入到一个已经有序的文件适当位置。<br><img src=\"p.png\" alt></p>\n<p><strong>快速排序</strong><br>基本方法:</p>\n<pre><code>PROC QuickSort(VAR R:ARRAY[1..n] OF datatype;l,p:integer);\nBEGIN \n IF l≥p THEN exit ;\n i←l; j←p; x←R[i];\n REPEAT \n WHILE (x.key≤R[j].key)AND(i<j) DO j←j-1; \n IF i<j \n THEN 【 R[i]←R[j]; i←i+1;\n WHILE (R[i].key<x.key)AND(i<j) DO i←i+1; \n IF i<j THEN【 R[j]←R[i]; j←j-1; 】\n 】\n UNTIL i=j; \n R[i]←x; i←i+1; j←j-1; \n IF l<j THEN CALL QuickSort(R, l , j); \n IF i<p THEN CALL QuickSort(R, i , p);\nEND; \n</code></pre><p><strong>二路插入</strong><br>两个两个合并,然后四个四个合并,然后大的合并<br><strong>堆的构造</strong><br>1.先插入,然后往上爬。<br><img src=\"q.png\" alt><br>2.先排列,然后从第一半个节点开始往上爬。<br><img src=\"y.png\" alt><br><strong>基数排序</strong><br>看最低位,一次装进是个桶里,然后拿出来。<br>再装第二位,最后装第三位。<br><img src=\"r.png\" alt></p>\n<blockquote>\n<p>第三个层次:二分插入排序</p>\n</blockquote>\n<p>与直接插入排序的区别:在插入第i个时搜索采用二分策略。</p>\n<figure class=\"highlight plain\"><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><span class=\"line\">PROC DUOSORT(VAR R:ARRAY[1..N])</span><br><span class=\"line\">BIGIN</span><br><span class=\"line\">\tFOR I<-2 TODO N DO[</span><br><span class=\"line\">\t\tX<-R[I],L <- 1,H <- I</span><br><span class=\"line\">\t\tWHILE L<=H DO[</span><br><span class=\"line\">\t\t\tM<-(L+H)DIV2</span><br><span class=\"line\">\t\t\tIF\tX<A[M]</span><br><span class=\"line\">\t\t\t\tTHEN H<-(M-1)</span><br><span class=\"line\">\t\t\t\tELSE L<-(L+1)</span><br><span class=\"line\">\t\t]</span><br><span class=\"line\">\t\tFOR J<-(I-1) TODO L DO R[J+1] <- R[J]</span><br><span class=\"line\">\t\tR[L] <- X </span><br><span class=\"line\">\t]</span><br><span class=\"line\">END</span><br></pre></td></tr></table></figure>\n<h2 id=\"第十章:数据检索(二、三)\"><a href=\"#第十章:数据检索(二、三)\" class=\"headerlink\" title=\"第十章:数据检索(二、三)\"></a>第十章:数据检索(二、三)</h2><p>1、<strong>检索</strong>:在给定数据结构中查找满足某种条件的数据元素(或节点,记录)的过程。<br>2、<strong>检索分类</strong>: </p>\n<ul>\n<li>基于关键字的检索; </li>\n<li>基于属性的检索; </li>\n</ul>\n<p>3、<strong>平均检索长度</strong>:衡量检索算法的主要标准是检索过程中对关键字(或属性)要执行的平均运算次数。<br>4、<strong>AVI树</strong>: </p>\n<ul>\n<li>一颗空二叉树是AVL树; </li>\n<li>若T是一颗非空二叉树,其访问任何结点的左右子树的相差高度不超过1,则T是AVL树。 </li>\n</ul>\n<p>5、<strong>碰撞</strong>:依据散列函数H计算出地址,若发现此地址已经被别的结点占用,即有两个不同的关键字映射到了同一地址空间的现象。<br>6、<strong>散列表</strong>:是一种存储方法也是一种常见的检索方法,是按关键字编址的一种技术。用散列法组织存储的表。<br>7、<strong>同义词</strong>:发生碰撞的两个关键字;<br>8、<strong>堆集现象</strong>:在散列表中插入一个新结点y时,当然它不是先前已经插入的某个节点x的同义词,但可能会出现H(y),已经被x的同义词占用的情况,这是只能将y也链接在x的同义链中,也就是说出现了y与x的同义链结成一个的情况,把连个同义词子表结合在一起的现象称为堆集现象。 </p>\n<blockquote>\n<p>第二层次:AVL的构造 </p>\n</blockquote>\n<ul>\n<li>正常插入</li>\n<li>当不满足平衡二叉树时,调整</li>\n<li>调整要求中序顺序不变</li>\n<li>RL或LR调整要把整个x都要挪上去</li>\n</ul>\n<p>举例:<br><img src=\"z.png\" alt></p>\n<blockquote>\n<p>第三层次:二分检索 </p>\n</blockquote>\n<figure class=\"highlight plain\"><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><span class=\"line\">PROC DUOSEARCH(VAR R:ARRAY[1...MAX]OF DATATYPE;N:INTEGER;K:KTYPE)</span><br><span class=\"line\">BEGIN</span><br><span class=\"line\">\tL <- 1,H <- N</span><br><span class=\"line\">\tWHILE L <= H DO[</span><br><span class=\"line\">\t\tMIDDLE <- (L+H) DIV 2</span><br><span class=\"line\">\t\tCASE\t</span><br><span class=\"line\">\t\t\tK == R[MIDDLE]:WRITE"SUEECE",EXIT;</span><br><span class=\"line\">\t\t\tK < R[MIDDLE]: H = MIDDLE-1</span><br><span class=\"line\">\t\t\tK > R[MIDDLE]: L = MIDDLE+1</span><br><span class=\"line\">\t\tENDCASE</span><br><span class=\"line\">\t]</span><br><span class=\"line\">\tWRITE"UNSUCCSE"</span><br><span class=\"line\">END</span><br></pre></td></tr></table></figure>\n<h2 id=\"十二章,文件\"><a href=\"#十二章,文件\" class=\"headerlink\" title=\"十二章,文件\"></a>十二章,文件</h2><p>1、 <strong>文件</strong>:为了进行存取控制、检索和修改而组织在一起的数据记录集合。<br>2、 <strong>文件逻辑组成分类</strong>:(广义)两种: </p>\n<ul>\n<li>字符流文件:有序的字符流序列,文件基本单位为字节或字。 </li>\n<li>记录文件:数据记录的集合文件基本单位为记录。</li>\n</ul>\n<p>3、 <strong>文件物理组成分类</strong>:<br>从存储结构来看,文件的组织仅有三种:(说大的就行了) </p>\n<ul>\n<li>顺序机构:按照数据到达的时间先后次序进行组织。按该方式组织的文件称顺序文件。 </li>\n<li>计算寻址结构:按照散列方式组织文件。该方式组织的文件称散列文件。 </li>\n<li>带索引的结构:组织数据时需要带一个索引表。称为索引文件,主要是利用树形结构组织索引。 </li>\n</ul>\n<p>4、 <strong>动态存储结构</strong>:是指文件创建初始装入记录时所生成的索引结构,在系统运行过程中索引结构本身能够发生改变。<br>5、 <strong>静态存储结构</strong>:指索引结构在文件创建,初始装入记录生成,一旦生成就固定下来,在系统运行过程中索引结构并不发生变化,只有当文件重组时菜允许改变索引结构。<br>6、 <strong>B+,B-树的本质</strong>:平衡的多分树。<br>7、 <strong>B+,B-树的作用</strong>:组织动态索引结构。<br>8、 <strong>ISAM文件的本质</strong>:索引顺序存取。(静态索引结构)<br>9、 <strong>VSAM文件的本质</strong>:虚拟存储存取。(动态索引结构)<br>10、 <strong>外排基本方法</strong>:归并排序。 </p>\n","site":{"data":{}},"excerpt":"","more":"<h1 id=\"数据结构知识框架\"><a href=\"#数据结构知识框架\" class=\"headerlink\" title=\"数据结构知识框架\"></a>数据结构知识框架</h1><h2 id=\"第一章\"><a href=\"#第一章\" class=\"headerlink\" title=\"第一章\"></a>第一章</h2><p>第一方面:基本概念<br>1、数据结构研究方面(研究内容)<br>主要体现三个方面:</p>\n<ul>\n<li>数据的逻辑关系</li>\n<li>储存关系</li>\n<li>运算关系</li>\n<li>还讨论算法的效率问题,分类问题等。 </li>\n</ul>\n<p>2、数据结构的逻辑结构<br><strong>逻辑关系</strong>:自然状态下数据元素之间的一种联系(关联方式或邻接关系,从逻辑上观察数据,与计算机无关)。<br><strong>逻辑结构</strong>:对数据元素之间关系的描述B=(k,r)其中,k:数据元素的有穷集合(有限元素构成),r:k上关系的有穷集合,其中每个关系r都是从k到k的关系。<br><strong>逻辑结构的分类</strong>:线性结构和非线性结构(树形结构、图形结构(网状结构))。<br><strong>关于集合类型</strong>:元素之间除同属一个集合外别无其他类型<br>3、数据结构的<strong>存储结构</strong><br><strong>存储关系</strong>:逻辑结构在计算机存储器中实现,它依赖于计算机。具体说数据在存储器中的关联方式,也成物理结构,物理关系等。 </p>\n<ul>\n<li>顺序结构 </li>\n<li>链接结构 </li>\n<li>索引结构 </li>\n<li>散列(hash)结构 </li>\n</ul>\n<p>4、数据结构评价标准<br>主要标准: </p>\n<ul>\n<li>作为问题的参数的函数来计算<strong>存储需要量</strong> </li>\n<li>作为问题的参数的函数来计算<strong>时间效率</strong> </li>\n<li>还需要考虑其他因素 </li>\n</ul>\n<h2 id=\"第二章:算法(只有一个层面)\"><a href=\"#第二章:算法(只有一个层面)\" class=\"headerlink\" title=\"第二章:算法(只有一个层面)\"></a>第二章:算法(只有一个层面)</h2><p>1、算法的评价标准<br>好算法要达到以下目标: </p>\n<ul>\n<li>正确性(满足具体问题的要求) </li>\n<li>易读性(交流与他人阅读,其次是机器执行) </li>\n<li>高效性(效率与存储量的需求,达到所需的时空性能) </li>\n<li>健壮性(适应环境变化,有非法输入时,能做出相应的处理或反映) </li>\n</ul>\n<p>2、算法的描述方法 </p>\n<ul>\n<li>计算机程序设计语言 </li>\n<li>自然语言 </li>\n<li>PDL语言(伪码语言、可运行于“抽象计算机”,虚拟机) </li>\n<li>流程图 </li>\n</ul>\n<h2 id=\"第三章:线性表(只有第三个要求)\"><a href=\"#第三章:线性表(只有第三个要求)\" class=\"headerlink\" title=\"第三章:线性表(只有第三个要求)\"></a>第三章:线性表(只有第三个要求)</h2><p>1、<strong>线性表</strong>:一个线性表是n≥0个数据元素a1,a2,……,an的有限序列,序列中除第一个最后一个以外,每个元素都是有且仅有一个直接前驱和直接后继。<br>2、<strong>链表</strong>:通过指针联系起来的结点的整体(集合)。<br>3、<strong>静态链表</strong>:以整形变量的值作为存储连接指针值(即地址)联系起来的结点的整体。(指针本质整形值)<br>4、<strong>表头结点</strong>:增加一个附加结点,放置于链表的最前面,也称表头结点,且该节点不用存储数据元素。作用和目的(简化算法)。<br>5、<strong>存储密度</strong>:结点数据本身所占的存储量和整个结点结构所占的存储量之比。<br>存储密度 = (结点数据本身所占的存储量)/(结点结构所占的存储总量) </p>\n<pre><code>基于链表的插入删除 \n</code></pre><h2 id=\"第四章:栈和队列(只有第三层)\"><a href=\"#第四章:栈和队列(只有第三层)\" class=\"headerlink\" title=\"第四章:栈和队列(只有第三层)\"></a>第四章:栈和队列(只有第三层)</h2><p>1、<strong>栈</strong>:栈在计算机具体应用中,是一个特定的存储区,一端固定,一端浮动。<br>栈是一个下限为常数,上限可变化的(或者反之),也成为堆栈或堆阵。可变化一端为栈顶,不可变化一端为栈底<br>2、<strong>栈与线性表的异同</strong>:栈的插入、删除至能在一端进行,不能在任意点,栈是受限的线性表。<br>3、<strong>队列</strong>:队列是一个上限和下限只能增加和不能减少的向量(或反之),队首:取出元素的一端。队尾:加入元素的一端。<br>4、<strong>队列与线性表的异同</strong>:受限的线性表,删除和插入操作只能在特定位置。<br>5、<strong>假溢出(待定)</strong>:多栈共存时,有点栈已满,有的还没有满。存储区还没有满,但队列或栈却发生了溢出,我们把这种现象称为”假溢出”。 </p>\n<blockquote>\n<p>第三层次:循环队列的出入队。</p>\n</blockquote>\n<pre><code>循环队列的出入队 (注意!队首指向队头元素的前一个地址,队尾指向队屁股最后一个元素)\n入队: \nPROC REDUI(VAR CQ: ARRAY[M..N]OF DATATYPE;FRONT,REAR,X:INTERG) \nBEGIN \n REAR<-REAR+1\n IF REAR=N+1\n THEN REAR<-M\n IF REAR=FRONT\n THEN PRINT"CQ FULL""\n ELSE CQ[REAR]<-X\nEND\n出队:\nPROC CHUDUI(VAR CQ:ARRAY[M...N]OF DATATYPE;FRONT,REAR,X:INTEGER)\nBEGIN\n IF FRONT=REAR\n THEN PRINT"CQ EMPTY"\n ELSE IF FRONT = N\n THEN FRONT = M\n ELSE FRONT <- FRONT+1\n X <- CQ[FRONT]\nEND\n</code></pre><h2 id=\"第五章:串(只有第一层面)\"><a href=\"#第五章:串(只有第一层面)\" class=\"headerlink\" title=\"第五章:串(只有第一层面)\"></a>第五章:串(只有第一层面)</h2><p>1、<strong>串</strong>:一个由零个或多个字符组成的有穷序列称为串,简记A=a1a2……an。<br>2、<strong>串的模式匹配</strong>:假设有两个串P和S:<br>P=p1p2……pm S=s1s2……sn 其中(0<m<n)通常m<<n<br>在S中找出一个与P相同的子串,即串的定位。<br>通常把S称为目标,把P称为模式,把从目标S中查找模式P的过程称为串的模式匹配。 </p>\n<h2 id=\"第六章:数组和广义表(二)\"><a href=\"#第六章:数组和广义表(二)\" class=\"headerlink\" title=\"第六章:数组和广义表(二)\"></a>第六章:数组和广义表(二)</h2><p>1、<strong>数组</strong>:一位数组是个向量,他的每个元素是该结构中不可分割的最小单位;n(n>1)维数组是个向量,他的每个元素是n-1维数组,且具有相同的下限和上限。<br>2、<strong>稀疏数组</strong>:在一个数组中和某一元素比较而言,不相同的元素很少时,我们称此数组为稀疏数组。<br>3、<strong>稀疏矩阵</strong>:是稀疏数组的典例。与稀疏矩阵的差别:元素分布是否有规律。<br>4、<strong>广义表</strong>:广义表是零个或多个原子(他是所要描述的某种数据类型的对象,是一个确定的概念)或子表所构成的有限序列,简称表。</p>\n<blockquote>\n<p>第二层次<br>稀疏矩阵的两个存储方法:三元组(顺序存储)、十字链表</p>\n</blockquote>\n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"a.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure> \n<p>三元组的缺陷</p>\n<ul>\n<li>不利于矩阵元素的变化:非零到零的删除、零到非零的添加</li>\n</ul>\n<h2 id=\"第七章:树形结构(二、三)\"><a href=\"#第七章:树形结构(二、三)\" class=\"headerlink\" title=\"第七章:树形结构(二、三)\"></a>第七章:树形结构(二、三)</h2><p>1、<strong>树</strong>:是满足以下性质的有限个结点组成的非空集合 </p>\n<ul>\n<li>T中有且只有一个称为根的结点。 </li>\n<li>除根节点以外,其余节点分为m(m>0)个不相交的集合T1,T2……Tm,其中每个Ti都是数,而却都称为T的子树。 </li>\n</ul>\n<p>2、<strong>二叉树</strong>:二叉树T是满足如下性质的结点的有限集合: </p>\n<ul>\n<li>T是空集。 </li>\n<li>或者它包含一个根节点且其余结点分为两个不相交的集合,并分别被称为左子树和右子树,且左右子树都为二叉树。 </li>\n</ul>\n<p>3、<strong>遍历</strong>:对于给定数据结构,系统的访问该结构中的每个结点,且每个结点仅被访问一次的操作过程成为遍历。(会改字)<br>4、<strong>二叉树的遍历规则</strong>: </p>\n<ul>\n<li>层次遍历:从上到下从左到右,布拉布拉布拉~</li>\n<li>深度策略:先根遍历、中根遍历、后根遍历。 </li>\n</ul>\n<p>5、<strong>二叉排序树</strong>:二叉排序树或空二叉树,或者是满足以下要求的二叉树。</p>\n<ul>\n<li>若是它的左子树非空,或者左子树上所有结点的值均小于等于根节点的值。 </li>\n<li>若它右子树非空,则右子树上所有结点的值均大于等于根节点的值。 </li>\n<li>且左右子树都为二叉排序树。 </li>\n</ul>\n<p>6、<strong>线索</strong>:将二叉树的空指针利用起来,用于表示某线性关系下前驱或后即的,这种指针称为线索。<br>7、<strong>线索树</strong>:带线索的二叉树简称为线索树。 </p>\n<p>8、<strong>霍夫曼树(最优二叉树)</strong>:按霍夫曼算法构造具有最小加权路径长度的二叉树。<br>9、<strong>线索化</strong>:给二叉树加线索的过程。 </p>\n<blockquote>\n<p>第二层次: </p>\n<ul>\n<li>树、森林、二叉树相互转换 </li>\n<li>二叉树的前中后遍历的方法 </li>\n<li>二叉树加线索 </li>\n<li>霍夫曼树的构造和编码 </li>\n<li>二叉排序树的构造 </li>\n</ul>\n</blockquote>\n<figure class=\"highlight plain\"><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><span class=\"line\">二叉树的先序遍历</span><br><span class=\"line\">PROC XIANXUBIANLI (VAR T:BINARY TREE)</span><br><span class=\"line\">BEGIN</span><br><span class=\"line\">\tIF T!=NULL</span><br><span class=\"line\">\t\tTHEN\t[PRINT"T->DATA"</span><br><span class=\"line\">\t\t\t\tCALL XIANXUBIANLI(T->LSON)</span><br><span class=\"line\">\t\t\t\tCALL XIANXUBIANLI(T->RSON)]</span><br><span class=\"line\">END</span><br></pre></td></tr></table></figure>\n<figure class=\"highlight plain\"><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></pre></td><td class=\"code\"><pre><span class=\"line\">二叉树的中序遍历</span><br><span class=\"line\">PROC XIANXUBIANLI (VAR T:BINARY TREE)</span><br><span class=\"line\">BEGIN</span><br><span class=\"line\">\tIF T!=NULL</span><br><span class=\"line\">\t\tTHEN\t[CALL XIANXUBIANLI(T->LSON)</span><br><span class=\"line\">\t\t\t\tPRINT"T->DATA"</span><br><span class=\"line\">\t\t\t\tCALL XIANXUBIANLI(T->RSON)]</span><br><span class=\"line\">\t\t\t\t</span><br><span class=\"line\">END</span><br></pre></td></tr></table></figure>\n<figure class=\"highlight plain\"><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><span class=\"line\">二叉树的后序遍历</span><br><span class=\"line\">PROC XIANXUBIANLI (VAR T:BINARY TREE)</span><br><span class=\"line\">BEGIN</span><br><span class=\"line\">\tIF T!=NULL</span><br><span class=\"line\">\t\tTHEN\t[CALL XIANXUBIANLI(T->LSON)</span><br><span class=\"line\">\t\t\t\tCALL XIANXUBIANLI(T->RSON)</span><br><span class=\"line\">\t\t\t\tPRINT"T->DATA"]</span><br><span class=\"line\">END</span><br></pre></td></tr></table></figure>\n<p><strong>树到二叉树的转换:</strong> </p>\n<ul>\n<li>加线:加横线</li>\n<li>抹线:抹掉可以抹掉的所有右孩子之间的线<br><img src=\"b.png\" alt></li>\n</ul>\n<p><strong>二叉树转到树:</strong> </p>\n<ul>\n<li>加线:1.是父节点的左孩子。2.把父节点和他的右孩子和右孩子的右孩子和。。。连起来。</li>\n<li>抹线:抹去所有节点和右孩子之间的线<br><img src=\"c.png\" alt> </li>\n</ul>\n<p><strong>森林转化为二叉树</strong></p>\n<ul>\n<li>把每个树转化为二叉树</li>\n<li>二叉树的连接:依据森林次序,后一棵二叉树是前一棵二叉树根节点的右子树<br><img src=\"d.png\" alt></li>\n</ul>\n<p><strong>二叉树转换成森林</strong></p>\n<ul>\n<li>抹线:把节点的右子树都拿出来</li>\n<li>还原:把每个二叉树变成树<br><img src=\"e.png\" alt></li>\n</ul>\n<p><strong>线索化</strong></p>\n<ul>\n<li>左孩子指向直接前驱</li>\n<li>右孩子指向直接后驱</li>\n<li>标志位0表示指向孩子,1表示指向线索</li>\n</ul>\n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"f.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<p><strong>构造二叉树</strong></p>\n<ol>\n<li>节点是否为空,为空则插入</li>\n<li>若小于,执行递归插入左孩子节点,到1.</li>\n<li>若大于,执行递归插入右孩子节点,到1.</li>\n</ol>\n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"g.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<p><strong>霍夫曼树(最优二叉树)</strong> </p>\n<ul>\n<li>给定一组权值集合{w1, w2, …, wn}.</li>\n<li>将F={T1, T2, …, Tn}按根结点的值由小到大进行排序。</li>\n<li>取出T1和T2组成一棵二叉树T;再将T插入到F中,并使F依据根结点的值有序。</li>\n<li>反复执行③直到F={T}为止。</li>\n</ul>\n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"h.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<p><strong>霍夫曼树的编码</strong></p>\n<ul>\n<li>给定字符集</li>\n<li>写出每个字符出现的次数组成的集合。</li>\n<li>对此集合进行霍夫曼排序</li>\n<li>左支为0右支为1写出每个字符的编码</li>\n</ul>\n<figure class=\"image-bubble\">\n <div class=\"img-lightbox\">\n <div class=\"overlay\"></div>\n <img src=\"i.png\" alt title>\n </div>\n <div class=\"image-caption\"></div>\n </figure>\n<blockquote>\n<p>第三个层次:遍历方法,两个运用一个处理 </p>\n</blockquote>\n<p>交换左右子树</p>\n<pre><code>PROC EXCHANGE(VAR T:BINARYTREE)\nBEGIN \n IF T!=NULL\n THEN [SWOP(T->LSON,T->RSON)\n CALL EXCHANGE(T->LSON)\n CALL EXCHANGE(T->RSON)]\nEND\n</code></pre><p>求二叉树的高度</p>\n<figure class=\"highlight plain\"><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></pre></td><td class=\"code\"><pre><span class=\"line\">PROC HIGHT(VAR T:BINARYTREE,H)</span><br><span class=\"line\">BEGIN </span><br><span class=\"line\">\tIF T=NULL</span><br><span class=\"line\">\t\t\tTHEN\tH<-0</span><br><span class=\"line\">\t\t\tELSE\t[CALL HIGHT(T->LSON,H1)</span><br><span class=\"line\">\t\t\t\t\tCALL HIGHT(T->RSON,H2)</span><br><span class=\"line\">\t\t\t\t\tH<-MAX(H1,H2)+1]</span><br><span class=\"line\">END</span><br><span class=\"line\">```\t </span><br><span class=\"line\">叶子结点的个数</span><br><span class=\"line\"></span><br><span class=\"line\">```PDL</span><br><span class=\"line\">PROC COUNTLEAF(VAR T:BINARYTREE;COUNT:INTGER)</span><br><span class=\"line\">BIGIN</span><br><span class=\"line\">\tCASE\t</span><br><span class=\"line\">\t\t\tT=NULL:\tCOUNT<-0</span><br><span class=\"line\">\t\t\tT->LSON=NULL AND T->RSON=NULL: COUNT<-1</span><br><span class=\"line\">\t\t\tELSE\t[CALL COUNTLEAF(T->LSON,C1)</span><br><span class=\"line\">\t\t\t\t\tCALL COUNTLEAF(T->RSON,C2)</span><br><span class=\"line\">\t\t\t\t\tCOUNT<-C1+C2]</span><br><span class=\"line\">\tEND CASE</span><br><span class=\"line\">END</span><br></pre></td></tr></table></figure>\n<h2 id=\"第八章:图结构(二)\"><a href=\"#第八章:图结构(二)\" class=\"headerlink\" title=\"第八章:图结构(二)\"></a>第八章:图结构(二)</h2><p>1、<strong>图</strong>:由n(n≥1)个结点v1,v2,……,vn构成的数据G称为图。若结点集V={v1、v2……vn}上定义的称为后继的关系E是非自反的,可表示为G=(V,E),其中V为顶点集,E为边集。<br>2、<strong>图的遍历</strong>:给出图G和其中的任意一个定点v0,从v0出发系统的访问G中所有的定点,且每个顶点(反)被访问一次,这一过程称为图的遍历。<br>3、<strong>图的遍历规律</strong>:广度优先遍历,深度优先遍历。<br>4、<strong>最小生成树</strong>:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边和权重。<br>5、<strong>AOV网</strong>:若有向图G中,顶点表示活动或任务,有向边表示活动或任务之间的优先关系,则此有向图称为顶点表示活动网络(AOV网)。<br>6、<strong>AOE网</strong>:若在带权的有有向图中的顶点表示事件,有向边表示活动,权表示活动持续的时间,则此有向图称为边表示活动的网络(AOE网)。<br>7、<strong>拓扑排序</strong>:对于有向图G=(V,E),V中的顶点的线性序列(Vi1,Vi2,……,Vin),称作一个拓扑序列,若此结点序列满足如下条件;在G中从顶点u到顶点v有一条路径,则在序列中u必在v之前。寻找拓扑序列的有效手段就是进行拓扑排序。<br>8、<strong>关键路径</strong>:任务计划作业图上的需要时间最长的路径(可有多条),它决定完成总任务的时间。 </p>\n<blockquote>\n<p>第二个层次</p>\n<ul>\n<li>图的邻接表和邻接矩阵的存储方法 </li>\n<li>图的深度和广度遍历的方法 </li>\n<li>Prim和Kruskal算法 </li>\n</ul>\n</blockquote>\n<p><strong>邻接表和邻接矩阵的表示</strong><br>有向图中邻接表的表示:<br><img src=\"j.png\" alt><br>网的邻接矩阵:<br><img src=\"k.png\" alt><br><strong>深度优先搜索</strong><br><img src=\"l.png\" alt><br><strong>广度优先搜索</strong><br><img src=\"m.png\" alt> </p>\n<p><strong>prim算法构造最小生成树</strong><br>每一步都找已连通的树中权最小的边用来构造<br><img src=\"n.png\" alt></p>\n<p><strong>Kruskal算法构造最小生成树</strong><br>按照权值递增的顺序逐个考虑E中的每条边:<br><img src=\"o.png\" alt></p>\n<h2 id=\"第九章:排序(二、三)\"><a href=\"#第九章:排序(二、三)\" class=\"headerlink\" title=\"第九章:排序(二、三)\"></a>第九章:排序(二、三)</h2><p>1、<strong>排序</strong>:设含有n个记录的集合为R={r1,r2,……,rn},其对应的关键字集合为k={k1,k2,……,kn},给定关系α,按照关系α针对关键字集合k对R进行运算,是的R有如下序列:<br>(rα1,rα2,……,rαn)<br>我们将这个操作过程称为排序。<br>2、<strong>排序分类</strong>:分为外部排序和内部排序。<br>内部排序包括 </p>\n<ul>\n<li>插入排序 </li>\n<li>交换排序 </li>\n<li>选择排序 </li>\n<li>合并排序 </li>\n<li>枚举排序 </li>\n<li>分配排序 </li>\n</ul>\n<p>3、<strong>排序稳定性</strong>:在排序关系下,假设排序前ri在rj之前,排序之后领先关系不变,则称此排序过程方法是稳定的,否则是不稳定的。<br>4、<strong>堆</strong>:设L是长度n的表,其数据元素满足:<br>L(i)≤L(2i)且L(i)≤L(2i+1), 1≤i≤[n/2] 或反之。<br>则称L是一个堆。 </p>\n<blockquote>\n<p>第二个层次 </p>\n<ul>\n<li>直接插入 </li>\n<li>快速排序 </li>\n<li>二路归并 </li>\n<li>基数 </li>\n<li>堆的构造 </li>\n</ul>\n</blockquote>\n<p><strong>直接插入</strong><br>从一个零集合开始,将 r 按照排序关系插入到一个已经有序的文件适当位置。<br><img src=\"p.png\" alt></p>\n<p><strong>快速排序</strong><br>基本方法:</p>\n<pre><code>PROC QuickSort(VAR R:ARRAY[1..n] OF datatype;l,p:integer);\nBEGIN \n IF l≥p THEN exit ;\n i←l; j←p; x←R[i];\n REPEAT \n WHILE (x.key≤R[j].key)AND(i<j) DO j←j-1; \n IF i<j \n THEN 【 R[i]←R[j]; i←i+1;\n WHILE (R[i].key<x.key)AND(i<j) DO i←i+1; \n IF i<j THEN【 R[j]←R[i]; j←j-1; 】\n 】\n UNTIL i=j; \n R[i]←x; i←i+1; j←j-1; \n IF l<j THEN CALL QuickSort(R, l , j); \n IF i<p THEN CALL QuickSort(R, i , p);\nEND; \n</code></pre><p><strong>二路插入</strong><br>两个两个合并,然后四个四个合并,然后大的合并<br><strong>堆的构造</strong><br>1.先插入,然后往上爬。<br><img src=\"q.png\" alt><br>2.先排列,然后从第一半个节点开始往上爬。<br><img src=\"y.png\" alt><br><strong>基数排序</strong><br>看最低位,一次装进是个桶里,然后拿出来。<br>再装第二位,最后装第三位。<br><img src=\"r.png\" alt></p>\n<blockquote>\n<p>第三个层次:二分插入排序</p>\n</blockquote>\n<p>与直接插入排序的区别:在插入第i个时搜索采用二分策略。</p>\n<figure class=\"highlight plain\"><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><span class=\"line\">PROC DUOSORT(VAR R:ARRAY[1..N])</span><br><span class=\"line\">BIGIN</span><br><span class=\"line\">\tFOR I<-2 TODO N DO[</span><br><span class=\"line\">\t\tX<-R[I],L <- 1,H <- I</span><br><span class=\"line\">\t\tWHILE L<=H DO[</span><br><span class=\"line\">\t\t\tM<-(L+H)DIV2</span><br><span class=\"line\">\t\t\tIF\tX<A[M]</span><br><span class=\"line\">\t\t\t\tTHEN H<-(M-1)</span><br><span class=\"line\">\t\t\t\tELSE L<-(L+1)</span><br><span class=\"line\">\t\t]</span><br><span class=\"line\">\t\tFOR J<-(I-1) TODO L DO R[J+1] <- R[J]</span><br><span class=\"line\">\t\tR[L] <- X </span><br><span class=\"line\">\t]</span><br><span class=\"line\">END</span><br></pre></td></tr></table></figure>\n<h2 id=\"第十章:数据检索(二、三)\"><a href=\"#第十章:数据检索(二、三)\" class=\"headerlink\" title=\"第十章:数据检索(二、三)\"></a>第十章:数据检索(二、三)</h2><p>1、<strong>检索</strong>:在给定数据结构中查找满足某种条件的数据元素(或节点,记录)的过程。<br>2、<strong>检索分类</strong>: </p>\n<ul>\n<li>基于关键字的检索; </li>\n<li>基于属性的检索; </li>\n</ul>\n<p>3、<strong>平均检索长度</strong>:衡量检索算法的主要标准是检索过程中对关键字(或属性)要执行的平均运算次数。<br>4、<strong>AVI树</strong>: </p>\n<ul>\n<li>一颗空二叉树是AVL树; </li>\n<li>若T是一颗非空二叉树,其访问任何结点的左右子树的相差高度不超过1,则T是AVL树。 </li>\n</ul>\n<p>5、<strong>碰撞</strong>:依据散列函数H计算出地址,若发现此地址已经被别的结点占用,即有两个不同的关键字映射到了同一地址空间的现象。<br>6、<strong>散列表</strong>:是一种存储方法也是一种常见的检索方法,是按关键字编址的一种技术。用散列法组织存储的表。<br>7、<strong>同义词</strong>:发生碰撞的两个关键字;<br>8、<strong>堆集现象</strong>:在散列表中插入一个新结点y时,当然它不是先前已经插入的某个节点x的同义词,但可能会出现H(y),已经被x的同义词占用的情况,这是只能将y也链接在x的同义链中,也就是说出现了y与x的同义链结成一个的情况,把连个同义词子表结合在一起的现象称为堆集现象。 </p>\n<blockquote>\n<p>第二层次:AVL的构造 </p>\n</blockquote>\n<ul>\n<li>正常插入</li>\n<li>当不满足平衡二叉树时,调整</li>\n<li>调整要求中序顺序不变</li>\n<li>RL或LR调整要把整个x都要挪上去</li>\n</ul>\n<p>举例:<br><img src=\"z.png\" alt></p>\n<blockquote>\n<p>第三层次:二分检索 </p>\n</blockquote>\n<figure class=\"highlight plain\"><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><span class=\"line\">PROC DUOSEARCH(VAR R:ARRAY[1...MAX]OF DATATYPE;N:INTEGER;K:KTYPE)</span><br><span class=\"line\">BEGIN</span><br><span class=\"line\">\tL <- 1,H <- N</span><br><span class=\"line\">\tWHILE L <= H DO[</span><br><span class=\"line\">\t\tMIDDLE <- (L+H) DIV 2</span><br><span class=\"line\">\t\tCASE\t</span><br><span class=\"line\">\t\t\tK == R[MIDDLE]:WRITE"SUEECE",EXIT;</span><br><span class=\"line\">\t\t\tK < R[MIDDLE]: H = MIDDLE-1</span><br><span class=\"line\">\t\t\tK > R[MIDDLE]: L = MIDDLE+1</span><br><span class=\"line\">\t\tENDCASE</span><br><span class=\"line\">\t]</span><br><span class=\"line\">\tWRITE"UNSUCCSE"</span><br><span class=\"line\">END</span><br></pre></td></tr></table></figure>\n<h2 id=\"十二章,文件\"><a href=\"#十二章,文件\" class=\"headerlink\" title=\"十二章,文件\"></a>十二章,文件</h2><p>1、 <strong>文件</strong>:为了进行存取控制、检索和修改而组织在一起的数据记录集合。<br>2、 <strong>文件逻辑组成分类</strong>:(广义)两种: </p>\n<ul>\n<li>字符流文件:有序的字符流序列,文件基本单位为字节或字。 </li>\n<li>记录文件:数据记录的集合文件基本单位为记录。</li>\n</ul>\n<p>3、 <strong>文件物理组成分类</strong>:<br>从存储结构来看,文件的组织仅有三种:(说大的就行了) </p>\n<ul>\n<li>顺序机构:按照数据到达的时间先后次序进行组织。按该方式组织的文件称顺序文件。 </li>\n<li>计算寻址结构:按照散列方式组织文件。该方式组织的文件称散列文件。 </li>\n<li>带索引的结构:组织数据时需要带一个索引表。称为索引文件,主要是利用树形结构组织索引。 </li>\n</ul>\n<p>4、 <strong>动态存储结构</strong>:是指文件创建初始装入记录时所生成的索引结构,在系统运行过程中索引结构本身能够发生改变。<br>5、 <strong>静态存储结构</strong>:指索引结构在文件创建,初始装入记录生成,一旦生成就固定下来,在系统运行过程中索引结构并不发生变化,只有当文件重组时菜允许改变索引结构。<br>6、 <strong>B+,B-树的本质</strong>:平衡的多分树。<br>7、 <strong>B+,B-树的作用</strong>:组织动态索引结构。<br>8、 <strong>ISAM文件的本质</strong>:索引顺序存取。(静态索引结构)<br>9、 <strong>VSAM文件的本质</strong>:虚拟存储存取。(动态索引结构)<br>10、 <strong>外排基本方法</strong>:归并排序。 </p>\n"}],"PostAsset":[{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/b.png","slug":"b.png","post":"ck191vkmj001dtzy4ev08pup4","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/g.png","slug":"g.png","post":"ck191vkmj001dtzy4ev08pup4","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/c.png","slug":"c.png","post":"ck191vkmn001ktzy4cux07h7h","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/s.png","slug":"s.png","post":"ck191vkmn001ktzy4cux07h7h","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/b.png","slug":"b.png","post":"ck191vkq0006htzy4bnetx9c2","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/d.png","slug":"d.png","post":"ck191vkmj001dtzy4ev08pup4","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/h.png","slug":"h.png","post":"ck191vkmj001dtzy4ev08pup4","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/l.png","slug":"l.png","post":"ck191vkmj001dtzy4ev08pup4","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/t.png","slug":"t.png","post":"ck191vkmn001ktzy4cux07h7h","modified":1,"renderable":0},{"_id":"source/_posts/数字电路:基础知识/a.png","slug":"a.png","post":"ck191vkmo001ntzy4s4rfrcp2","modified":1,"renderable":0},{"_id":"source/_posts/汇编语言:基础知识(第五章以前)/b.png","slug":"b.png","post":"ck191vkn6002qtzy4klt3wr8v","modified":1,"renderable":0},{"_id":"source/_posts/成都的流水账/UNADJUSTEDNONRAW_thumb_4.jpg","slug":"UNADJUSTEDNONRAW_thumb_4.jpg","post":"ck191vkme0010tzy4xbdi5cab","modified":1,"renderable":0},{"_id":"source/_posts/数字电路电路板汇总/a.png","slug":"a.png","post":"ck191vkmg0017tzy459ln4cl5","modified":1,"renderable":0},{"_id":"source/_posts/数字电路电路板汇总/f.png","slug":"f.png","post":"ck191vkmg0017tzy459ln4cl5","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/a.png","slug":"a.png","post":"ck191vkmn001ktzy4cux07h7h","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/b.png","slug":"b.png","post":"ck191vkmn001ktzy4cux07h7h","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/d.png","slug":"d.png","post":"ck191vkmn001ktzy4cux07h7h","modified":1,"renderable":0},{"_id":"source/_posts/数字电路:基础知识/c.png","slug":"c.png","post":"ck191vkmo001ntzy4s4rfrcp2","modified":1,"renderable":0},{"_id":"source/_posts/数据结构知识框架/o.png","slug":"o.png","post":"ck191vkrz006ptzy4bletujt2","modified":1,"renderable":0},{"_id":"source/_posts/汇编语言:基础知识(第五章以前)/a.png","slug":"a.png","post":"ck191vkn6002qtzy4klt3wr8v","modified":1,"renderable":0},{"_id":"source/_posts/台湾科技大学自动查询审核结果的脚本/a.png","slug":"a.png","post":"ck191vkmc000wtzy4mbt3g091","modified":1,"renderable":0},{"_id":"source/_posts/Linux的用户及用户组/a.jpg","post":"ck191vklx0006tzy43xk4nbww","slug":"a.jpg","modified":1,"renderable":1},{"_id":"source/_posts/Linux的用户及用户组/b.jpg","post":"ck191vklx0006tzy43xk4nbww","slug":"b.jpg","modified":1,"renderable":1},{"_id":"source/_posts/甘肃政务服务网证件办理自动查询/a.png","slug":"a.png","post":"ck191vknc0031tzy48tfwure5","modified":1,"renderable":0},{"_id":"source/_posts/甘肃政务服务网证件办理自动查询/b.png","post":"ck191vknc0031tzy48tfwure5","slug":"b.png","modified":1,"renderable":1},{"_id":"source/_posts/数字电路:基础知识/b.png","post":"ck191vkmo001ntzy4s4rfrcp2","slug":"b.png","modified":1,"renderable":1},{"_id":"source/_posts/数字电路:基础知识/d.png","slug":"d.png","post":"ck191vkmo001ntzy4s4rfrcp2","modified":1,"renderable":0},{"_id":"source/_posts/数字电路电路板汇总/b.png","post":"ck191vkmg0017tzy459ln4cl5","slug":"b.png","modified":1,"renderable":1},{"_id":"source/_posts/数字电路电路板汇总/c.png","slug":"c.png","post":"ck191vkmg0017tzy459ln4cl5","modified":1,"renderable":0},{"_id":"source/_posts/数字电路电路板汇总/d.png","slug":"d.png","post":"ck191vkmg0017tzy459ln4cl5","modified":1,"renderable":0},{"_id":"source/_posts/数字电路电路板汇总/e.png","slug":"e.png","post":"ck191vkmg0017tzy459ln4cl5","modified":1,"renderable":0},{"_id":"source/_posts/数字电路电路板汇总/g.png","post":"ck191vkmg0017tzy459ln4cl5","slug":"g.png","modified":1,"renderable":1},{"_id":"source/_posts/数字电路电路板汇总/h.png","slug":"h.png","post":"ck191vkmg0017tzy459ln4cl5","modified":1,"renderable":0},{"_id":"source/_posts/数字电路电路板汇总/i.png","slug":"i.png","post":"ck191vkmg0017tzy459ln4cl5","modified":1,"renderable":0},{"_id":"source/_posts/数字电路电路板汇总/j.png","slug":"j.png","post":"ck191vkmg0017tzy459ln4cl5","modified":1,"renderable":0},{"_id":"source/_posts/数字电路电路板汇总/k.png","slug":"k.png","post":"ck191vkmg0017tzy459ln4cl5","modified":1,"renderable":0},{"_id":"source/_posts/数字电路电路板汇总/l.png","slug":"l.png","post":"ck191vkmg0017tzy459ln4cl5","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/a.png","slug":"a.png","post":"ck191vkmj001dtzy4ev08pup4","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/c.png","post":"ck191vkmj001dtzy4ev08pup4","slug":"c.png","modified":1,"renderable":1},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/e.png","post":"ck191vkmj001dtzy4ev08pup4","slug":"e.png","modified":1,"renderable":1},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/f.png","slug":"f.png","post":"ck191vkmj001dtzy4ev08pup4","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/i.png","post":"ck191vkmj001dtzy4ev08pup4","slug":"i.png","modified":1,"renderable":1},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/j.png","post":"ck191vkmj001dtzy4ev08pup4","slug":"j.png","modified":1,"renderable":1},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/k.png","post":"ck191vkmj001dtzy4ev08pup4","slug":"k.png","modified":1,"renderable":1},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/m.png","slug":"m.png","post":"ck191vkmj001dtzy4ev08pup4","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/n.png","slug":"n.png","post":"ck191vkmj001dtzy4ev08pup4","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第五章:集成双稳态触发器/o.png","slug":"o.png","post":"ck191vkmj001dtzy4ev08pup4","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/e.png","slug":"e.png","post":"ck191vkmn001ktzy4cux07h7h","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/f.png","slug":"f.png","post":"ck191vkmn001ktzy4cux07h7h","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/g.png","post":"ck191vkmn001ktzy4cux07h7h","slug":"g.png","modified":1,"renderable":1},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/h.png","slug":"h.png","post":"ck191vkmn001ktzy4cux07h7h","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/i.png","slug":"i.png","post":"ck191vkmn001ktzy4cux07h7h","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/j.png","slug":"j.png","post":"ck191vkmn001ktzy4cux07h7h","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/k.png","slug":"k.png","post":"ck191vkmn001ktzy4cux07h7h","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/l.png","slug":"l.png","post":"ck191vkmn001ktzy4cux07h7h","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/m.png","slug":"m.png","post":"ck191vkmn001ktzy4cux07h7h","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/n.png","slug":"n.png","post":"ck191vkmn001ktzy4cux07h7h","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/o.png","slug":"o.png","post":"ck191vkmn001ktzy4cux07h7h","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/p.png","post":"ck191vkmn001ktzy4cux07h7h","slug":"p.png","modified":1,"renderable":1},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/q.png","slug":"q.png","post":"ck191vkmn001ktzy4cux07h7h","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/r.png","post":"ck191vkmn001ktzy4cux07h7h","slug":"r.png","modified":1,"renderable":1},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/u.png","post":"ck191vkmn001ktzy4cux07h7h","slug":"u.png","modified":1,"renderable":1},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/v.png","slug":"v.png","post":"ck191vkmn001ktzy4cux07h7h","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——下/w.png","post":"ck191vkmn001ktzy4cux07h7h","slug":"w.png","modified":1,"renderable":1},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/y.png","slug":"y.png","post":"ck191vkq0006htzy4bnetx9c2","modified":1,"renderable":0},{"_id":"source/_posts/数据结构知识框架/a.png","slug":"a.png","post":"ck191vkrz006ptzy4bletujt2","modified":1,"renderable":0},{"_id":"source/_posts/数据结构知识框架/k.png","slug":"k.png","post":"ck191vkrz006ptzy4bletujt2","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/a.png","post":"ck191vkq0006htzy4bnetx9c2","slug":"a.png","modified":1,"renderable":1},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/c.png","slug":"c.png","post":"ck191vkq0006htzy4bnetx9c2","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/d.png","slug":"d.png","post":"ck191vkq0006htzy4bnetx9c2","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/e.png","slug":"e.png","post":"ck191vkq0006htzy4bnetx9c2","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/f.png","post":"ck191vkq0006htzy4bnetx9c2","slug":"f.png","modified":1,"renderable":1},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/g.png","post":"ck191vkq0006htzy4bnetx9c2","slug":"g.png","modified":1,"renderable":1},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/h.png","slug":"h.png","post":"ck191vkq0006htzy4bnetx9c2","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/i.png","slug":"i.png","post":"ck191vkq0006htzy4bnetx9c2","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/j.png","slug":"j.png","post":"ck191vkq0006htzy4bnetx9c2","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/k.png","slug":"k.png","post":"ck191vkq0006htzy4bnetx9c2","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/l.png","post":"ck191vkq0006htzy4bnetx9c2","slug":"l.png","modified":1,"renderable":1},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/m.png","slug":"m.png","post":"ck191vkq0006htzy4bnetx9c2","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/n.png","slug":"n.png","post":"ck191vkq0006htzy4bnetx9c2","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/o.png","post":"ck191vkq0006htzy4bnetx9c2","slug":"o.png","modified":1,"renderable":1},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/p.png","slug":"p.png","post":"ck191vkq0006htzy4bnetx9c2","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/q.png","slug":"q.png","post":"ck191vkq0006htzy4bnetx9c2","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/r.png","post":"ck191vkq0006htzy4bnetx9c2","slug":"r.png","modified":1,"renderable":1},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/s.png","post":"ck191vkq0006htzy4bnetx9c2","slug":"s.png","modified":1,"renderable":1},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/t.png","post":"ck191vkq0006htzy4bnetx9c2","slug":"t.png","modified":1,"renderable":1},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/u.png","slug":"u.png","post":"ck191vkq0006htzy4bnetx9c2","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/v.png","post":"ck191vkq0006htzy4bnetx9c2","slug":"v.png","modified":1,"renderable":1},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/w.png","slug":"w.png","post":"ck191vkq0006htzy4bnetx9c2","modified":1,"renderable":0},{"_id":"source/_posts/数字电路第六章:同步时序逻辑电路——上(状态编码之前)/x.png","post":"ck191vkq0006htzy4bnetx9c2","slug":"x.png","modified":1,"renderable":1},{"_id":"source/_posts/数据结构知识框架/d.png","slug":"d.png","post":"ck191vkrz006ptzy4bletujt2","modified":1,"renderable":0},{"_id":"source/_posts/数据结构知识框架/i.png","slug":"i.png","post":"ck191vkrz006ptzy4bletujt2","modified":1,"renderable":0},{"_id":"source/_posts/数据结构知识框架/j.png","slug":"j.png","post":"ck191vkrz006ptzy4bletujt2","modified":1,"renderable":0},{"_id":"source/_posts/数据结构知识框架/b.png","post":"ck191vkrz006ptzy4bletujt2","slug":"b.png","modified":1,"renderable":1},{"_id":"source/_posts/数据结构知识框架/c.png","post":"ck191vkrz006ptzy4bletujt2","slug":"c.png","modified":1,"renderable":1},{"_id":"source/_posts/数据结构知识框架/e.png","slug":"e.png","post":"ck191vkrz006ptzy4bletujt2","modified":1,"renderable":0},{"_id":"source/_posts/数据结构知识框架/f.png","slug":"f.png","post":"ck191vkrz006ptzy4bletujt2","modified":1,"renderable":0},{"_id":"source/_posts/数据结构知识框架/g.png","slug":"g.png","post":"ck191vkrz006ptzy4bletujt2","modified":1,"renderable":0},{"_id":"source/_posts/数据结构知识框架/h.png","post":"ck191vkrz006ptzy4bletujt2","slug":"h.png","modified":1,"renderable":1},{"_id":"source/_posts/数据结构知识框架/l.png","post":"ck191vkrz006ptzy4bletujt2","slug":"l.png","modified":1,"renderable":1},{"_id":"source/_posts/数据结构知识框架/m.png","post":"ck191vkrz006ptzy4bletujt2","slug":"m.png","modified":1,"renderable":1},{"_id":"source/_posts/数据结构知识框架/n.png","post":"ck191vkrz006ptzy4bletujt2","slug":"n.png","modified":1,"renderable":1},{"_id":"source/_posts/数据结构知识框架/p.png","post":"ck191vkrz006ptzy4bletujt2","slug":"p.png","modified":1,"renderable":1},{"_id":"source/_posts/数据结构知识框架/q.png","slug":"q.png","post":"ck191vkrz006ptzy4bletujt2","modified":1,"renderable":0},{"_id":"source/_posts/数据结构知识框架/r.png","slug":"r.png","post":"ck191vkrz006ptzy4bletujt2","modified":1,"renderable":0},{"_id":"source/_posts/数据结构知识框架/y.png","post":"ck191vkrz006ptzy4bletujt2","slug":"y.png","modified":1,"renderable":1},{"_id":"source/_posts/数据结构知识框架/z.png","post":"ck191vkrz006ptzy4bletujt2","slug":"z.png","modified":1,"renderable":1}],"PostCategory":[{"post_id":"ck191vklx0006tzy43xk4nbww","category_id":"ck191vklu0003tzy459v7t2li","_id":"ck191vkm2000ctzy4e0buxdeu"},{"post_id":"ck191vkln0000tzy497w0w0fj","category_id":"ck191vklu0003tzy459v7t2li","_id":"ck191vkm4000gtzy43nijpkbv"},{"post_id":"ck191vkm0000atzy4huueqo10","category_id":"ck191vklu0003tzy459v7t2li","_id":"ck191vkm6000jtzy4bp2kbdo0"},{"post_id":"ck191vkls0002tzy46ismsa0h","category_id":"ck191vklz0008tzy4j0gfmo47","_id":"ck191vkm7000otzy461o45g7x"},{"post_id":"ck191vklw0005tzy4fz913se0","category_id":"ck191vkm2000dtzy4anvh1ije","_id":"ck191vkm9000qtzy49o3b38st"},{"post_id":"ck191vkm3000ftzy4h8xcg6yw","category_id":"ck191vkm6000mtzy46r2zfnvq","_id":"ck191vkmd000xtzy44hlycbc3"},{"post_id":"ck191vkm5000itzy4eevp37c1","category_id":"ck191vkma000ttzy4e2att10d","_id":"ck191vkmg0015tzy4jv88inwo"},{"post_id":"ck191vkmc000wtzy4mbt3g091","category_id":"ck191vkm6000mtzy46r2zfnvq","_id":"ck191vkmh0018tzy4e3pmkmgt"},{"post_id":"ck191vkm8000ptzy4z8w66t6e","category_id":"ck191vkma000ttzy4e2att10d","_id":"ck191vkmi001atzy46a0zzwi7"},{"post_id":"ck191vkm9000stzy4rjizxrwt","category_id":"ck191vkmg0014tzy4i928krsj","_id":"ck191vkmm001gtzy4949513mt"},{"post_id":"ck191vkmh0019tzy48fcnnlim","category_id":"ck191vklz0008tzy4j0gfmo47","_id":"ck191vkmo001ltzy402jw0r2y"},{"post_id":"ck191vkmb000utzy4ho9o0zvb","category_id":"ck191vkmi001ctzy454xcjdke","_id":"ck191vkmp001ptzy4k2kfl0at"},{"post_id":"ck191vkmf0012tzy4u7j5a0g7","category_id":"ck191vkmm001jtzy430lw5oje","_id":"ck191vkmv001xtzy408yh7qu2"},{"post_id":"ck191vkms001utzy478xhuca7","category_id":"ck191vkmq001stzy49pjugjiz","_id":"ck191vkmy0024tzy4jf4i1ayq"},{"post_id":"ck191vkmg0017tzy459ln4cl5","category_id":"ck191vkmq001stzy49pjugjiz","_id":"ck191vkmz0029tzy4rzxpt60r"},{"post_id":"ck191vkmj001dtzy4ev08pup4","category_id":"ck191vkmq001stzy49pjugjiz","_id":"ck191vkn1002dtzy4byhli7ux"},{"post_id":"ck191vkmk001ftzy40t8dv5iu","category_id":"ck191vkmq001stzy49pjugjiz","_id":"ck191vkn3002itzy4msxzrnyd"},{"post_id":"ck191vkmn001ktzy4cux07h7h","category_id":"ck191vkmq001stzy49pjugjiz","_id":"ck191vkn6002otzy4862mvodz"},{"post_id":"ck191vkmo001ntzy4s4rfrcp2","category_id":"ck191vkmq001stzy49pjugjiz","_id":"ck191vkn8002ttzy4rad7hwfx"},{"post_id":"ck191vkmp001rtzy4gi24kh8f","category_id":"ck191vkn6002ntzy4lbagqn0e","_id":"ck191vknb002ztzy49abm51lq"},{"post_id":"ck191vkn9002vtzy41aea084r","category_id":"ck191vkma000ttzy4e2att10d","_id":"ck191vkne0035tzy4ddirbnfb"},{"post_id":"ck191vkmu001wtzy4tk0f7rcx","category_id":"ck191vkn8002utzy4pkt4ba74","_id":"ck191vknl0036tzy40gkcgo98"},{"post_id":"ck191vknc0031tzy48tfwure5","category_id":"ck191vkm6000mtzy46r2zfnvq","_id":"ck191vknt0039tzy4histgfa6"},{"post_id":"ck191vkmw0021tzy4o00xr7uf","category_id":"ck191vknb0030tzy49ceroou8","_id":"ck191vknz003ctzy4awafvuqi"},{"post_id":"ck191vkmx0023tzy41nhhsz7i","category_id":"ck191vknb0030tzy49ceroou8","_id":"ck191vkod003gtzy4c3tt296x"},{"post_id":"ck191vkmz0028tzy47trp3ycv","category_id":"ck191vknb0030tzy49ceroou8","_id":"ck191vkop003ktzy4aup3frha"},{"post_id":"ck191vkn0002btzy49v4i83vk","category_id":"ck191vknb0030tzy49ceroou8","_id":"ck191vkov003otzy4dbme29f5"},{"post_id":"ck191vkn2002ftzy48zai980u","category_id":"ck191vknb0030tzy49ceroou8","_id":"ck191vkov003rtzy4r74l9j1i"},{"post_id":"ck191vkn2002gtzy48eta1sqm","category_id":"ck191vknb0030tzy49ceroou8","_id":"ck191vkow003utzy4wf2f4r4t"},{"post_id":"ck191vkn4002ktzy459wq1mh8","category_id":"ck191vknb0030tzy49ceroou8","_id":"ck191vkox003ytzy4ioto5zxc"},{"post_id":"ck191vkn5002mtzy4felf32wg","category_id":"ck191vknb0030tzy49ceroou8","_id":"ck191vkoz0042tzy4uhvs9tq7"},{"post_id":"ck191vkn6002qtzy4klt3wr8v","category_id":"ck191vknb0030tzy49ceroou8","_id":"ck191vkoz0045tzy40j866sxy"},{"post_id":"ck191vkn8002stzy4pubuk2uf","category_id":"ck191vkoy0041tzy4kltnrefa","_id":"ck191vkp00049tzy4gdpc2trl"},{"post_id":"ck191vkna002xtzy4np6wc5ef","category_id":"ck191vkp00047tzy43hix9bfo","_id":"ck191vkp2004ftzy455v1cjww"},{"post_id":"ck191vknd0034tzy4r6oebq10","category_id":"ck191vkp00047tzy43hix9bfo","_id":"ck191vkp2004htzy4a8fln5te"},{"post_id":"ck191vkpz006ftzy4okk3y67p","category_id":"ck191vknb0030tzy49ceroou8","_id":"ck191vkq2006ltzy4qclrwrgr"},{"post_id":"ck191vkq0006htzy4bnetx9c2","category_id":"ck191vkmq001stzy49pjugjiz","_id":"ck191vkq2006ntzy4ldqrmcmt"},{"post_id":"ck191vkrz006ptzy4bletujt2","category_id":"ck191vkn8002utzy4pkt4ba74","_id":"ck191vks2006rtzy429olkuo5"}],"PostTag":[{"post_id":"ck191vkln0000tzy497w0w0fj","tag_id":"ck191vklw0004tzy4k1e55s5r","_id":"ck191vkm4000htzy4wgrxl1x2"},{"post_id":"ck191vkln0000tzy497w0w0fj","tag_id":"ck191vklz0009tzy4ymm8bipw","_id":"ck191vkm6000ktzy4mtsls3dd"},{"post_id":"ck191vkls0002tzy46ismsa0h","tag_id":"ck191vkm2000etzy4t2qxvddt","_id":"ck191vkme000ztzy44c5t2jem"},{"post_id":"ck191vkls0002tzy46ismsa0h","tag_id":"ck191vkm6000ltzy4i1p2plbp","_id":"ck191vkmf0011tzy4zvi5kdnu"},{"post_id":"ck191vkls0002tzy46ismsa0h","tag_id":"ck191vklz0009tzy4ymm8bipw","_id":"ck191vkmg0016tzy48vdmrgvu"},{"post_id":"ck191vkmh0019tzy48fcnnlim","tag_id":"ck191vkm2000etzy4t2qxvddt","_id":"ck191vkmk001etzy4pjletg3n"},{"post_id":"ck191vkmh0019tzy48fcnnlim","tag_id":"ck191vklz0009tzy4ymm8bipw","_id":"ck191vkmm001itzy4nwun3cz5"},{"post_id":"ck191vklw0005tzy4fz913se0","tag_id":"ck191vkmc000vtzy4dg8981tt","_id":"ck191vkmo001mtzy4pesf0puc"},{"post_id":"ck191vklw0005tzy4fz913se0","tag_id":"ck191vkmf0013tzy4dxtkoso2","_id":"ck191vkmp001otzy4iygynp15"},{"post_id":"ck191vklw0005tzy4fz913se0","tag_id":"ck191vkmi001btzy43c7upu9f","_id":"ck191vkms001ttzy45u0i1fqo"},{"post_id":"ck191vklx0006tzy43xk4nbww","tag_id":"ck191vklw0004tzy4k1e55s5r","_id":"ck191vkmu001vtzy4qs3x0hu2"},{"post_id":"ck191vklx0006tzy43xk4nbww","tag_id":"ck191vkmm001htzy412lf3t9h","_id":"ck191vkmw0020tzy4pr8evuew"},{"post_id":"ck191vkm0000atzy4huueqo10","tag_id":"ck191vklw0004tzy4k1e55s5r","_id":"ck191vkmx0022tzy4z0yw9e5u"},{"post_id":"ck191vkm0000atzy4huueqo10","tag_id":"ck191vkmp001qtzy4cmrk3x9q","_id":"ck191vkmz0027tzy4nwnuy7hg"},{"post_id":"ck191vkm1000btzy4uo6f000a","tag_id":"ck191vkmv001ytzy4miuf0184","_id":"ck191vkn0002atzy4nsdfcaqd"},{"post_id":"ck191vkm7000ntzy4fz3njm9g","tag_id":"ck191vkmy0026tzy42t1ao4og","_id":"ck191vkn5002ltzy4j7sfk4ez"},{"post_id":"ck191vkm7000ntzy4fz3njm9g","tag_id":"ck191vkn1002etzy4qj187v6k","_id":"ck191vkn6002ptzy45846gnbq"},{"post_id":"ck191vkm9000stzy4rjizxrwt","tag_id":"ck191vkn4002jtzy43jw6efmz","_id":"ck191vkna002ytzy496ek4glf"},{"post_id":"ck191vkm9000stzy4rjizxrwt","tag_id":"ck191vkn7002rtzy4d7qygo0k","_id":"ck191vknc0032tzy4ccw1cr8n"},{"post_id":"ck191vkmb000utzy4ho9o0zvb","tag_id":"ck191vkn9002wtzy4ziwi29qu","_id":"ck191vknt003atzy4335qmgpr"},{"post_id":"ck191vkmb000utzy4ho9o0zvb","tag_id":"ck191vkn7002rtzy4d7qygo0k","_id":"ck191vko0003dtzy4n8b5s5sh"},{"post_id":"ck191vkmc000wtzy4mbt3g091","tag_id":"ck191vkns0038tzy4wen6dmqs","_id":"ck191vkoo003itzy4ilmwhehm"},{"post_id":"ck191vkmc000wtzy4mbt3g091","tag_id":"ck191vko4003etzy4j0esyjj5","_id":"ck191vkou003ltzy4p4wk5691"},{"post_id":"ck191vkmf0012tzy4u7j5a0g7","tag_id":"ck191vkoi003htzy4vnifsfe9","_id":"ck191vkox003vtzy4p7r60bef"},{"post_id":"ck191vkmf0012tzy4u7j5a0g7","tag_id":"ck191vkou003mtzy4iubax1cl","_id":"ck191vkox003wtzy4iybo8kxz"},{"post_id":"ck191vkmf0012tzy4u7j5a0g7","tag_id":"ck191vkov003ptzy400n613br","_id":"ck191vkoy0040tzy45t0nua14"},{"post_id":"ck191vkmg0017tzy459ln4cl5","tag_id":"ck191vkow003stzy4llc7yw22","_id":"ck191vkoz0044tzy4t6onowo2"},{"post_id":"ck191vkmg0017tzy459ln4cl5","tag_id":"ck191vkox003ztzy4y7u4629r","_id":"ck191vkp00046tzy42ru6mvii"},{"post_id":"ck191vkmj001dtzy4ev08pup4","tag_id":"ck191vkow003stzy4llc7yw22","_id":"ck191vkp1004ctzy4y6l2q0hr"},{"post_id":"ck191vkmj001dtzy4ev08pup4","tag_id":"ck191vkox003ztzy4y7u4629r","_id":"ck191vkp1004dtzy46ftaoiw0"},{"post_id":"ck191vkmk001ftzy40t8dv5iu","tag_id":"ck191vkow003stzy4llc7yw22","_id":"ck191vkp3004itzy46jwr9eah"},{"post_id":"ck191vkmk001ftzy40t8dv5iu","tag_id":"ck191vkox003ztzy4y7u4629r","_id":"ck191vkp3004jtzy4lie2p7rv"},{"post_id":"ck191vkmn001ktzy4cux07h7h","tag_id":"ck191vkow003stzy4llc7yw22","_id":"ck191vkp3004mtzy41cs7rpsr"},{"post_id":"ck191vkmn001ktzy4cux07h7h","tag_id":"ck191vkox003ztzy4y7u4629r","_id":"ck191vkp3004ntzy4tnojmd2r"},{"post_id":"ck191vkmo001ntzy4s4rfrcp2","tag_id":"ck191vkow003stzy4llc7yw22","_id":"ck191vkp4004qtzy4hxvfs9rn"},{"post_id":"ck191vkmo001ntzy4s4rfrcp2","tag_id":"ck191vkox003ztzy4y7u4629r","_id":"ck191vkp4004rtzy45ll1zuxp"},{"post_id":"ck191vkmp001rtzy4gi24kh8f","tag_id":"ck191vkp4004ptzy46k2a8vq6","_id":"ck191vkp4004utzy4w3fljpwo"},{"post_id":"ck191vkmp001rtzy4gi24kh8f","tag_id":"ck191vkp4004stzy4qm0l5bvn","_id":"ck191vkp4004vtzy42ty2b5n0"},{"post_id":"ck191vkms001utzy478xhuca7","tag_id":"ck191vkox003ztzy4y7u4629r","_id":"ck191vkp5004ytzy4fqggoe3p"},{"post_id":"ck191vkms001utzy478xhuca7","tag_id":"ck191vkow003stzy4llc7yw22","_id":"ck191vkp5004ztzy44rs1arnn"},{"post_id":"ck191vkmw0021tzy4o00xr7uf","tag_id":"ck191vkp5004xtzy4yh1aa53g","_id":"ck191vkp60052tzy4l2mfjfrk"},{"post_id":"ck191vkmw0021tzy4o00xr7uf","tag_id":"ck191vkox003ztzy4y7u4629r","_id":"ck191vkp60053tzy4d3794jm0"},{"post_id":"ck191vkmx0023tzy41nhhsz7i","tag_id":"ck191vkp5004xtzy4yh1aa53g","_id":"ck191vkp70056tzy4j0ln5xot"},{"post_id":"ck191vkmx0023tzy41nhhsz7i","tag_id":"ck191vkox003ztzy4y7u4629r","_id":"ck191vkp70057tzy4ys0786mu"},{"post_id":"ck191vkmz0028tzy47trp3ycv","tag_id":"ck191vkp5004xtzy4yh1aa53g","_id":"ck191vkp9005atzy481bivjf7"},{"post_id":"ck191vkmz0028tzy47trp3ycv","tag_id":"ck191vkox003ztzy4y7u4629r","_id":"ck191vkp9005btzy41ezpm1gs"},{"post_id":"ck191vkn0002btzy49v4i83vk","tag_id":"ck191vkp5004xtzy4yh1aa53g","_id":"ck191vkp9005etzy49j662ipc"},{"post_id":"ck191vkn0002btzy49v4i83vk","tag_id":"ck191vkox003ztzy4y7u4629r","_id":"ck191vkp9005ftzy4i8becwan"},{"post_id":"ck191vkn2002ftzy48zai980u","tag_id":"ck191vkp5004xtzy4yh1aa53g","_id":"ck191vkpa005itzy477e1q4ja"},{"post_id":"ck191vkn2002ftzy48zai980u","tag_id":"ck191vkox003ztzy4y7u4629r","_id":"ck191vkpa005jtzy4mmav0gc6"},{"post_id":"ck191vkn2002gtzy48eta1sqm","tag_id":"ck191vkp5004xtzy4yh1aa53g","_id":"ck191vkpb005mtzy4ntk60ue8"},{"post_id":"ck191vkn2002gtzy48eta1sqm","tag_id":"ck191vkox003ztzy4y7u4629r","_id":"ck191vkpb005ntzy4u4dmmk9p"},{"post_id":"ck191vkn4002ktzy459wq1mh8","tag_id":"ck191vkp5004xtzy4yh1aa53g","_id":"ck191vkpc005qtzy4uw8iv5ks"},{"post_id":"ck191vkn4002ktzy459wq1mh8","tag_id":"ck191vkox003ztzy4y7u4629r","_id":"ck191vkpc005rtzy473wwpmg5"},{"post_id":"ck191vkn5002mtzy4felf32wg","tag_id":"ck191vkp5004xtzy4yh1aa53g","_id":"ck191vkpe005utzy4de7wpuv1"},{"post_id":"ck191vkn5002mtzy4felf32wg","tag_id":"ck191vkox003ztzy4y7u4629r","_id":"ck191vkpe005vtzy4gl8hq5wt"},{"post_id":"ck191vkn6002qtzy4klt3wr8v","tag_id":"ck191vkp5004xtzy4yh1aa53g","_id":"ck191vkpf005ytzy4sufaoag1"},{"post_id":"ck191vkn6002qtzy4klt3wr8v","tag_id":"ck191vkox003ztzy4y7u4629r","_id":"ck191vkpf005ztzy4vcktf735"},{"post_id":"ck191vkn8002stzy4pubuk2uf","tag_id":"ck191vkpe005xtzy4wgntqwde","_id":"ck191vkpf0062tzy4rk08h0v1"},{"post_id":"ck191vkn8002stzy4pubuk2uf","tag_id":"ck191vkox003ztzy4y7u4629r","_id":"ck191vkpf0063tzy454uvcxgd"},{"post_id":"ck191vkn9002vtzy41aea084r","tag_id":"ck191vkpf0061tzy406618t31","_id":"ck191vkpg0065tzy4shork0ld"},{"post_id":"ck191vkn9002vtzy41aea084r","tag_id":"ck191vklz0009tzy4ymm8bipw","_id":"ck191vkpg0066tzy4ru9v2qlu"},{"post_id":"ck191vkn9002vtzy41aea084r","tag_id":"ck191vkmv001ytzy4miuf0184","_id":"ck191vkpg0068tzy4f9dqqjiw"},{"post_id":"ck191vkna002xtzy4np6wc5ef","tag_id":"ck191vkou003mtzy4iubax1cl","_id":"ck191vkpg0069tzy4idjjcx6t"},{"post_id":"ck191vknc0031tzy48tfwure5","tag_id":"ck191vkns0038tzy4wen6dmqs","_id":"ck191vkph006ctzy40tzojzpn"},{"post_id":"ck191vknc0031tzy48tfwure5","tag_id":"ck191vkpg006atzy4uvf8br83","_id":"ck191vkph006dtzy4at5x4z7b"},{"post_id":"ck191vknc0031tzy48tfwure5","tag_id":"ck191vkph006btzy47iqwme9f","_id":"ck191vkph006etzy42u3sqyg6"},{"post_id":"ck191vkpz006ftzy4okk3y67p","tag_id":"ck191vkp5004xtzy4yh1aa53g","_id":"ck191vkq1006jtzy45b4xk76f"},{"post_id":"ck191vkpz006ftzy4okk3y67p","tag_id":"ck191vkox003ztzy4y7u4629r","_id":"ck191vkq2006ktzy4w3usk4jf"},{"post_id":"ck191vkq0006htzy4bnetx9c2","tag_id":"ck191vkox003ztzy4y7u4629r","_id":"ck191vkq2006mtzy4umai24ol"},{"post_id":"ck191vkq0006htzy4bnetx9c2","tag_id":"ck191vkow003stzy4llc7yw22","_id":"ck191vkq3006otzy4md7s4mls"},{"post_id":"ck191vkrz006ptzy4bletujt2","tag_id":"ck191vks1006qtzy4a282tkv0","_id":"ck191vks2006stzy4iyzntlpn"},{"post_id":"ck191vkrz006ptzy4bletujt2","tag_id":"ck191vkox003ztzy4y7u4629r","_id":"ck191vks2006ttzy4dk84ksqg"}],"Tag":[{"name":"Linux","_id":"ck191vklw0004tzy4k1e55s5r"},{"name":"入门","_id":"ck191vklz0009tzy4ymm8bipw"},{"name":"Android","_id":"ck191vkm2000etzy4t2qxvddt"},{"name":"Fragment","_id":"ck191vkm6000ltzy4i1p2plbp"},{"name":"烧录","_id":"ck191vkmc000vtzy4dg8981tt"},{"name":"SD卡","_id":"ck191vkmf0013tzy4dxtkoso2"},{"name":"Mac","_id":"ck191vkmi001btzy43c7upu9f"},{"name":"用户","_id":"ck191vkmm001htzy412lf3t9h"},{"name":"FTP","_id":"ck191vkmp001qtzy4cmrk3x9q"},{"name":"hexo","_id":"ck191vkmv001ytzy4miuf0184"},{"name":"swift","_id":"ck191vkmy0026tzy42t1ao4og"},{"name":"Guide","_id":"ck191vkn1002etzy4qj187v6k"},{"name":"zsh","_id":"ck191vkn4002jtzy43jw6efmz"},{"name":"linux","_id":"ck191vkn7002rtzy4d7qygo0k"},{"name":"vim","_id":"ck191vkn9002wtzy4ziwi29qu"},{"name":"脚本","_id":"ck191vkns0038tzy4wen6dmqs"},{"name":"台科","_id":"ck191vko4003etzy4j0esyjj5"},{"name":"游记","_id":"ck191vkoi003htzy4vnifsfe9"},{"name":"随笔","_id":"ck191vkou003mtzy4iubax1cl"},{"name":"成都","_id":"ck191vkov003ptzy400n613br"},{"name":"数字电路","_id":"ck191vkow003stzy4llc7yw22"},{"name":"笔记","_id":"ck191vkox003ztzy4y7u4629r"},{"name":"树莓派","_id":"ck191vkp4004ptzy46k2a8vq6"},{"name":"Unix","_id":"ck191vkp4004stzy4qm0l5bvn"},{"name":"汇编语言","_id":"ck191vkp5004xtzy4yh1aa53g"},{"name":"线性代数","_id":"ck191vkpe005xtzy4wgntqwde"},{"name":"新手","_id":"ck191vkpf0061tzy406618t31"},{"name":"办证进度","_id":"ck191vkpg006atzy4uvf8br83"},{"name":"甘肃政务服务网","_id":"ck191vkph006btzy47iqwme9f"},{"name":"数据结构","_id":"ck191vks1006qtzy4a282tkv0"}]}}