ARM-LDR

作为加载指令  立即偏移: 使用立即偏移量,前置索引立即偏移量,或后置索引立即偏移量加载  语法: LDR{type}{cond} Rt, [Rn {, #offset}] ; 立即偏移 LDR{type}{cond} Rt, [Rn, #offset]! ; 前置索引 LDR{type}{cond} Rt, [Rn], #offset ; 后置索引 LDRD{cond} Rt, Rt2, [Rn {, #offset}] ; immediate offset, doubleword LDRD{cond} Rt, Rt2, [Rn, #offset]! ; pre-indexed, doubleword LDRD{cond} Rt, Rt2, [Rn], #offset ; post-indexed, doubleword PC相对: 加载寄存器,地址是相对PC的一个偏移 语法: LDR{type}{cond}{.W} Rt, label LDRD{cond} Rt, Rt2, label ; Doubleword label是PC相对的表达式 寄存器偏移: 使用寄存器偏移,前置索引寄存器偏移,后置索引寄存器偏移加载 语法: LDR{type}{cond} Rt, [Rn, ±Rm {, shift}] ; register offset LDR{type}{cond} Rt, [Rn, ±Rm {, shift}]! ; pre-indexed ; ARM only LDR{type}{cond} Rt, [Rn], ±Rm {, shift} ; post-indexed ; ARM only LDRD{cond} Rt, Rt2, [Rn, ±Rm] ; register offset, doubleword ; ARM only LDRD{cond} Rt, Rt2, [Rn, ±Rm]! ; pre-indexed, doubleword ; ARM only LDRD{cond} Rt, Rt2, [Rn], ±Rm ; post-indexed, doubleword ; ARM only 寄存器相对: 加载寄存器,地址是相对一个基寄存器的偏移 语法: LDR{type}{cond}{.W} Rt, label LDRD{cond} Rt, Rt2, label ; Doubleword 2.作为伪指令 使用一个32位立即数或地址加载寄存器  语法: LDR{cond}{.W} Rt, =expr LDR{cond}{.W} Rt, =label_expr 使用LCR伪指令时,如果expr的值能被一个有效MOV或MVN指令加载,那么汇编器将使用这条指令; 如果有效MOV或MVN指令无法使用,或者label_expr语法使用了,那么汇编器将把值存放在一个文字池,并且生成一个PC相对的LDR指令从文字池里面读取值。

ARM-B,BL,BX,BLX

B branch,分支,跳转  语法:  B{cond}{.W} label 满足条件跳转到label BL branch with link,带链接的跳转 语法: BL{cond}{.W} label 满足条件跳转到label,并且复制下条指令地址到LR(R14,链接寄存器) BX branch and exchange intruction set,跳转并交换指令集 语法: BX{cond} Rm 满足条件跳转到Rm地址,并且交换指令集,可以根据Rm的bit[0]推导出目标指令集: 如果bit[0]是0,那么处理器跳转到或停留在ARM状态; 如果bit[0]是1,处理器跳转到或停留在Thumb状态; BLX branch with link and exchange instruction set ,带链接的跳转并且交换指令集 语法: BLX{cond}{.W} label BLX{cond} Rm bx和bl指令的组合指令

programming english words

systematic:系统的 diagnose:诊断 voltage:电压 combinational:组合的,组合电路 circuit:环形,电路 sequential:[sɪˈkwenʃl],连续的 ancestor : 祖先,祖宗,原型 hierarchy 等级制度,层级体系,统治集团 hierarchical 分层层次分层的 infrastructure 基础设施,基础建设 materialize 实现,发生,成为现实 reify  具体化,物化,使具体化 terminology 术语,专门用于 retrieve 取回,索回,检索数据 reification 具体化,物化 semantic 语义的 alliance 结盟,同盟,联盟 instantiate 示例,实例化 underlying 下层的,根本的 appropriate 合适的 auditable 可审查的 derive 得到,取得,使产生 expert 专家行家能手,熟练的,内行的 suppose 认为,推断,推想,假定,假设 applicable 适用,合适 eligible 有资格的,合适的,中意的 merely 仅仅,只不过 encapsulate 简述,概括,压缩 propagate 传播,宣传,繁殖 sophisticated 见多识广的,先进的,水平高的 … Read more

关键名词备忘

数字量和模拟量 数字量:在时间和数量上都是离散、不连续的(存在一个最小的数量单位Δ) 模拟量:数字量以外的物理量 通常在英文当中可数物理量都是连续的,不可数的都是离散的

docker 搭建nginx+php环境

操作系统 centos-release-7-7.1908.0.el7.centos.x86_64 安装PHP docker pull php:fpm-7.4 安装Nginx docker pull nginx:1.17 查看镜像 docker images [root@VM_1_201_centos ~]# docker images REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE redis               latest              96812ab2b931        14 hours ago        104MB mysql               5.7                 f965319e89de        3 days ago          448MB redis               5.0                 a4d3716dbb72        7 days ago          98.3MB php                 7.4-fpm             9f53a362fb2f        7 days ago          405MB nginx               1.17                602e111c06b6        7 days ago          127MB rabbitmq            3.7.15              b3639fca0afd        10 months ago       149MB mongo               3.2                 fb885d89ea5c        17 months ago       300MB kibana              6.4.0               a7e4cd1a7b45        20 months ago       667MB elasticsearch       6.4.0               1ac676545731        20 months ago       791MB [root@VM_1_201_centos ~]# 创建并启动php容器  docker run -p 9000:9000 –name php7 -v /mydata/nginx/html:/www -d php:7.4-fpm 创建启动nginx容器 docker run -p 80:80 –name nginx  -v /mydata/nginx/html:/usr/share/nginx/html   -v /mydata/nginx/logs:/var/log/nginx   -d nginx:1.17 复制nginx容器内的默认配置文件到宿主主机 docker container cp nginx:/etc/nginx /mydata/nginx/ 修改文件夹名称 cd /mydata/nginx/ mv nginx conf 停止并删除nginx容器,重新创建并启动nginx容器,关联php和挂载nginx配置文件数据卷 docker stop nginx docker rm nginx docker run -p 80:80 –name nginx  -v /mydata/nginx/html:/usr/share/nginx/html  -v /mydata/nginx/logs:/var/log/nginx   -v /mydata/nginx/conf/conf.d:/etc/nginx/conf.d   –link php7:php   -d nginx:1.17 查看php容器的ip docker inspect –format '{{.NetworkSettings.IPAddress}}' php7 配置nginx vhost文件 cd /mydata/nginx/conf/conf.d/ vim adamfly.conf server {     listen       80;     server_name   www.adamfly.xyz;     #charset koi8-r;     #access_log  /var/log/nginx/host.access.log  main;     root   /usr/share/nginx/html/www.adamfly.xyz;     location / {         index  index.php index.html index.htm;     } … Read more

docker 常用命令备忘

创建mysql容器,设置端口映射,目录映射 docker run -id  -p 3306:3306  –name=mysql  -v $PWD/conf:/etc/mysql/conf.d  -v $PWD/logs:/logs  -v $PWD/data:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=111111  mysql:5.7 创建tomcat容器,设置端口映射,目录映射 mkdir tomcat cd tomcat docker run -id  -p 8080:8080  -v $PWD:/user/local/tomcat/webapps  tomcat 创建nginx容器 mkdir nginx cd nginx  touch nginx.conf #nginx.conf内容 mkdir conf mkdir logs mkdir html docker run -it –name=nginx  -p 80:80  -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf  -v $PWD/logs:/var/log/nginx  -v $PWD/html:/usr/share/nginx/html  nginx 创建redis容器 docker run -id –name=redis -p 6379:6379 redis:latest ./redis-cli.exe -h xxxxx -p 6379 #带密码 docker run -id –name redis -p 6379:6379 redis:latest –requirepass "adam1111"

Android获取当前前台包名/进程的方法

获取当前前台进程的方法有很多,不过有的方法在高版本安卓可能不好使,通常5.0之前的设备可以用ActivityManager的getRunningTasks方法,5.0使用ActivityManager的getRunningAppprocesses方法,5.1及之后版本可以用UsageStatsManager的queryEvents方法 封装成一个方法如下: public static String getTopAppPackageName(Context context) {     String packageName = "";     ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);     try {         if(Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP){             List<ActivityManager.RunningTaskInfo> rti = activityManager.getRunningTasks(1);             packageName = rti.get(0).topActivity.getPackageName();         } else if(Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP) {             List<ActivityManager.RunningAppProcessInfo> processes = activityManager.getRunningAppProcesses();             if (processes.size() == 0) {                 return packageName;             }             for (ActivityManager.RunningAppProcessInfo process : processes) {                 if (process.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {                     return process.processName;                 }             }         } else if(Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP){             final long end = System.currentTimeMillis();             final UsageStatsManager usageStatsManager = (UsageStatsManager) context.getSystemService( Context.USAGE_STATS_SERVICE);             if (null == usageStatsManager) {                 return packageName;             }             final UsageEvents events = usageStatsManager.queryEvents((end – 60 * 1000), end);             if (null == events) {                 return packageName;             }             UsageEvents.Event usageEvent = new UsageEvents.Event();             UsageEvents.Event lastMoveToFGEvent = null;             while (events.hasNextEvent()) {                 events.getNextEvent(usageEvent);                 if (usageEvent.getEventType() == UsageEvents.Event.MOVE_TO_FOREGROUND) {                     lastMoveToFGEvent = usageEvent;                 }             }             if (lastMoveToFGEvent != null) {                 packageName = lastMoveToFGEvent.getPackageName();             }         }     }catch (Exception ignored){     }     return packageName; } 其中5.1以上的api需要申请权限: android.permission.PACKAGE_USAGE_STATS private boolean isNoSwitch() {     if (Build.VERSION.SDK_INT < 21) {         return true;     }     List<UsageStats> queryUsageStats = ((UsageStatsManager) getApplicationContext().             getSystemService(Context.USAGE_STATS_SERVICE))             .queryUsageStats(4, 0, System.currentTimeMillis());     return queryUsageStats != null && !queryUsageStats.isEmpty(); … Read more

ARM-ADD

ADD是不带进位的加法指令。 语法: ADD{S}{cond} {Rd}, Rn, Operand2 ADD{cond} {Rd}, Rn, #imm12 ; Thumb, 32-bit encoding only S 可选后缀,如果有,那么条件标示根据操作结果更新 cond 可选条件, Rd 目标寄存器 Rn 存储第一个操作数的寄存器 Operand2 第二个操作数 imm12  0-4095之间的数字 ADD指令吧Rn的值或Operand2或imm12的值相加。 在默写情况下,汇编器可以将一条指令替换为另一条。 Thumb指令中使用PC和SP 通常,我们不能把PC(R15)当Rd,或其他操作数。 例外的是: 可以在32位Thumb ADD指令中,用PC当Rn,0-4095的数当Operand2,并且没有S后缀,这些指令被用来生成PC-relative地址。。在这种情况下,PC值的位[1]读为0,因此计算的基址始终是字对齐的 也可以在16位Thumb ADD{cond} Rd,Rd,Rm 指令中任意寄存器使用PC,but以下16位Thumb指令在ARMv6T2以上弃用了: ADD{cond} PC, SP, PC. ADD{cond} SP, SP, PC. 通常不能用SP(R13)做Rd,或任意操作数,以下除外: 可以在ADD指令中用SP做Rn ADD{cond} SP, SP, SP 可以使用,但是在ARMV6T2过期了 ADD{S}{cond} SP, SP, Rm{,shift} and SUB{S}{cond} SP, SP, Rm{,shift} are permitted if shift is omitted or LSL #1, LSL #2, or LSL … Read more

ARM-ADC

带进位的加法指令(add with carry) 语法: ADC{S}{cond} {Rd}, Rn, Operand2 S 可选后缀,如果定义了S后缀,那么操作标识将根据操作结果更新 Rd 目标寄存器 Rn 保存第一个操作数的寄存器 Operand2 第二个操作数 使用: Rn,Operand2和操作标示相加,即,Rd=Rn+Operand2+carry

ARM-DCB

DCB指令分配一个或多个字节内存,并定义运营时内存内容。 = 是DCB的代名词 语法: {label} DCB expr{,expr}… example: 与C string不同,ARM string是非终止的,如下命令定义非终止c string C_string   DCB  "C_string",0