1.将 bl 和 cl 中的数字相加并输出结果 DATA SEGMENT STR1 DB 0AH,0DH ,'THE RESULT IS : $' ;0AH,0DH 为换行 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: PRINT MACRO STR ; MACRO 为宏 MOV AX,DATA MOV DS,AX MOV DX,OFFSET STR MOV AH,09H ; 打印STR INT 21H ENDM ADDBLCL MACRO R1,R2 ; MOV AL,R1 ADD AL,R2 DAA ; 压缩型BCD码加法调整指令 ,默认调整 al PUSH AX MOV CL,4 SHR AL,CL ; 逻辑右移指令 CALL PRINT_DL ;子程序调用 POP AX 继续阅读 >>


刘生玺 18/05/31 17:37:57
一、最基本的方式 首先负责人先创建一个仓库,然后在setting里的Collaborators中添加你的队友们。 输入队友们的github用户名,然后匹配到他们,点击添加,然后等待他们接受邀请。这样他们就有进入你的仓库的权限了,在本地将仓库克隆一下,就可以一起愉快的写代码了。 但是,这样比较麻烦,万一队友不小心把仓库东西都给你删了,岂不是很无奈。 二、使用fork 为了让彼此互不影响,可以让队友们将仓库fork成自己的仓库,然后分别进行开发。 1. 队友们点击仓库右上角的fork 2. 然后队友们将fork到的仓库克隆到他们的本地。 3. 给fork配置远程库 查看远程状态 git remote -v 确定一个将被同步给fork仓库的上游仓库 git remote add upstream 上游仓库地址 再次查看状态确认是否配置成功。 4. 同步远程仓库 从上游仓库fetch分支拉取数据,并提交给本地master,会存储在ups 继续阅读 >>


李猛 18/05/30 23:12:18
以下示例来自Ubuntu17.10 (1)安装tesseract sudo apt-get install tesseract-ocr (2)如果想用 Tesseract 对图像进行识别,还需要对应的语言文件。所谓的语言文件是 Tesseract 识别某种语言的文字图像时需要的一些资源,这些东西也可以通过包管理器获取。 sudo apt-get install tesseract-ocr-eng tesseract-ocr-chi-sim 这里就下了:eng是英语,chi_sim是中文 (3)安装tesseract-ocr编译必须的包。autoconf 可以帮助你写出款平台编译的程序,而automake则主要是帮你更好的完成跨 平台编译这件事情。编译需要用到各种编译器命令,因为不想手动的执行这些命名出现了 Makefile,又因为不想手动的编写Makefile出现了automake这类的工具,它让你可以 只提供源文件的名称便替你生成 Makefile,这也着实省下不少的麻烦。 继续阅读 >>


吕子健 18/05/27 17:07:14
借由这个问题,今天我们就把 32 位 CPU、64 位 CPU、32 位操作系统、64 位操作系统之间的区别与联系彻底搞清楚。对于这个问题,博主也是一知半解了好长时间啊~ 基本概念 32位的CPU与64位CPU 以下内容摘自维基百科: 64 位 CPU 是指 CPU 内部的通用寄存器的宽度为 64 比特,支持整数的 64 比特宽度的算术与逻辑运算。那么 32 位 CPU 同理。 一个 CPU,联系外部的数据总线与地址总线,可能有不同的宽度;术语“64位”也常用于描述这些总线的大小。不过这一术语也可能指电脑指令集的指令长度,或其它的数据项。去掉进一步的条件,“64位”电脑架构一般具有 64 位宽的整数型寄存器,它可支持 64 位“区块”的整数型数据。 64 位架构无疑可应用在需要处理大量数据的应用程序,如数字视频、科学运算、和早期的大型数据库。 那么 32 位 CPU 与 64 位 CPU 到底有什么区别? 数据处理能力增强:64 位 CPU 通用寄存器的 继续阅读 >>


董恒毅 18/05/25 23:20:56
题目链接 链表中环的入口结点(牛客网) 题目分析 类似于追及问题: 如何判断有环的存在? 在追及问题中,我们可以用两个速度不同的物体从同一地点出发,如果相遇则证明存在环(可用反证法证明,若不存在环,则速度不同的物体从同一地点出发则一定不会相遇),因此可以类比过来,定义两个指针fast、slow,令两指针以不同速度向后指,则相遇时证明有环存在,若fast指向NULL,则不存在环。 怎么找到环的入口结点? 首先说方法:在问题一中两指针相遇后,让一个指针从头结点开始,另一个从相遇结点开始,并以相同速度向后指,再次相遇时就是环的入口结点。 证明: 1)假设存在环,fast以速度2运行,slow以速度1运行,在slow走到入口t时,如图(m1为在slow首次到t时fast的位置,a为h到t的距离,b为t到m1的距离,n为环的周长): 由图知fast走的距离为a+b+xn,slow走的距离为a,又v(fast) = 2*v(slow),所以x(fast) = 2*x(slow),即2a = 继续阅读 >>


王良 18/05/24 23:03:05
先占坑,总结到目前为止的所学和观点,留待日后学到新的知识或者有新的认知了再回来更新 (先吐槽,网上搜定时器和时间轮,那些博客的代码居然基本上都是Linux高性能上的,虽然我也是…感叹一下看来这本书很厉害,是不是目前讲这方面的书很少,只有它啊…) 定时器 定时器就是一个数据结构,他最主要的成员是回调函数和超时时间,等到超时时间到期,自动执行这个函数。 定时器的实现 单线程实现 单线程实现类似于在一个循环线程里用epoll和usleep等待接口实现超时回调 多线程实现 /* 日后再说 */ 时间轮 本质就是一个定时器容器,可以更具效率的管理定时器,下面贴的代码也是出自《Linux高性能》,以数组实现了一个时间轮,只有一个”轮子“ (1)定时器的简单实现 //升序定时器链表 #ifndef LST_TIMER_H #define LST_TIMER_H #include <netinet/in.h> #include <stdio.h> #inclu 继续阅读 >>


吕子健 18/05/24 22:38:52
零:使用STL自带的函数(less与greater) vector<int> v{45,2,5,8454,34,68421,5,84,1,5}; sort(v.begin() ,v.end(),less<int>());//从小到大 sort(v.begin() ,v.end(),greater<int>());///从大到小 一:普通比较函数 假设有一个vector<<\string>>,你的任务是统计长度小于5的string的个数,如果使用count_if 函数的话,代码就是这样: bool LengthIsLessThanFive(const string& str) { return str.length() < 5; } int res=count_if(vec.begin(), vec.end(), LengthIsLessThanFive); 继续阅读 >>


刘生玺 18/05/24 18:05:04
什么是存储过程 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数来执行它。存储过程是数据库中的一个重要对象。(百度百科) 简单来说,存储过程就是为以后的使用而保存的一条或多条MySQL语句的集合。 存储过程优缺点 优点: 简化复杂操作和对变动的管理 提高性能 保证数据的安全性 缺点: 用户可能没有创建存储过程的权限 维护、移植比较麻烦 使用存储过程 1. 创建、执行与删除 一张成绩表 mysql> select * from grade; +-------+-------+-------+ | name | grade | score | +-------+-------+-------+ | li | 90 | 5 | | niu | 60 | 2 | 继续阅读 >>


李猛 18/05/23 23:23:36
前言 空窗期(这个词是不是很专业)的几天,没什么事做。手边从图书馆借的Ceph的书快到期了,赶紧拿出来看看。 好哒 Ceph 启动! 。。。。。。。。 enmmmmm 明天继续部署 不过在部署的过程中学到了很多ssh的小技巧,改变了这两年很low的操作。赶紧M一下 正文 ssh登录远程主机 这个几乎是很常用的操作了。 $ ssh root@192.168.30.2 但是每次要输入这么长一大串很麻烦,于是我就用了一个很low的办法实现 修改.bashrc alias sshbmw='ssh root@xxx.xx.xx.xx' 之前做分布式爬虫时,要管理3+3台腾讯/阿里云,于是在bashrc里面alias了一堆。。。 现在才知道,可以通过修改ssh的config文件 $ vim ~/.ssh/config (针对不同用户,config不同,需要新建,and设置权限,具体权限我也不太清楚给个744是ok的) 添加 Host agent HostName 19 继续阅读 >>


康艺杰 18/05/23 11:13:24
#include<iostream> using namespace std; template<class T> class linearList{ public: virtual ~linearList(){}; virtual bool empty() const = 0; //判断线性表是否为空 virtual int size() const = 0; //返回线性表的元素个数 virtual T & get(int theindex) const = 0;//返回索引为theindex的元素值 virtual int indexof(const T& theelement) const = 0;//返回元素theelement第一次出现的索引 virtual void erase(int theindex) = 0;//删除索引为theindex 的元素值 virtual void insert 继续阅读 >>


胡佳露 18/05/21 17:40:21