ARTS打卡第二周之链表环的检测、gdb中disassemble的使用、底层学习建议、学习分享

Algorithm

题目:链表中环的检测

自己的分析见博客《检测链表中是否存在环》

Review

disassemble command是我读的一篇英语文章,这篇文章主要是介绍gdb反汇编命令的使用和参数。自己为了能够演示这篇文章里边的内容,特意自己使用汇编语言编写代码,然后写了一篇博客

我这里使用下边的汇编代码进行演示:

asm 复制代码
# 文件名称:twoNumberPlus.s
.type twoNumberPlus, @function
.section .data
      intFormatShow:
          .ascii "%d\n\0"
 .global main
 .section .text
    main:
         pushq %rbp
         movq %rsp,%rbp
         movq $2,%rdi
         movq $3,%rsi
         call twoNumberPlus

         movq %rax,%rsi
         movq $intFormatShow,%rdi
         movq $0,%rax
         call printf

         movq $60,%rax
         movq $0,%rdi
         movq %rbp,%rsp
         popq %rbp
         syscall
    twoNumberPlus:
         pushq %rbp
         movq %rsp,%rbp
         addq %rdi,%rsi
         movq %rsi,%rax
         movq %rbp,%rsp
         popq %rbp
         ret

gcc -g twoNumberPlus.s -static -o twoNumberPlus带有调试信息地进行编译。
gdb -q twoNumberPlus使用安静模式开始调试。

list可以看一下第1行到第10行代码。

break 10可以在第10行代码处设置上断点,run可以让gdb开始运行程序,disassemble可以查看当前运行的函数。

disassemble twoNumberPlus可以看一下twoNumberPlus函数的汇编代码。

disassemble 0x0000000000401095可以看一下0x0000000000401095地址所在的函数汇编代码。

disassemble 0x000000000040108e,0x0000000000401095只显示0x000000000040108e0x0000000000401095之间的汇编代码,注意不包括0x0000000000401095

disassemble twoNumberPlus,+4反汇编函数twoNumberPlus和它加4地址之间的代码,不包括twoNumberPlus+4的代码。

disassemble 0x000000000040108e,+9,反汇编0x000000000040108e0x000000000040108e+9的地址之间代码,不包括0x000000000040108e+9的代码。

disassemble /m twoNumberPlus twoNumberPlus函数反汇编出来,也把对应的行数显示出来。

disassemble /r twoNumberPlus把机器码也反汇编出来。

Technique/Tip

我最近在学习汇编语言,感觉自己的技术基础有些差,希望程序员朋友还是要把底层知识好好学习一下,争取都能掌握,让我们的技术生命周期更长一些。另外还需把自己的涉及面提升一下,我的意思就是大家的技术既要深,也要博,当然还是要把握两者的平衡点,毕竟一个人的精力有限。这里推荐给大家几本汇编书籍。
intel汇编风格(64位)

Beginning x64 Assembly Programming From Novice to AVX Professional(中文版《x64汇编语言:从新手到AVX专家》)

Low-Level Programming C, Assembly

AT&T汇编风格(64位)

Learn to Program with Assembly Foundational Learning for New Programmers

Share

分享自己对《认知天性》的一些总结。

学习的本质是打造心智模型,将知识条件反射式使用,就是在遇到问题时,能够毫不费力地迅速对问题做出反应。

学习的三步骤:编码、巩固和检索

编码:将材料记到大脑里面,形成短期记忆

巩固:将短期记忆变成长期记忆

检索:将知识从记忆中提取到意识中解决实际问题

学习的提升需要通过合意困难来完成,合意困难有三个要素:

1.有相应的已知做基础

2.能够触发巩固和检索

3.对学习有正面促进作用

学习的八种方法:

1.从记忆中检索新学习的内容,是学习的最好方法。

2.间隔地安排检索练习,需要注意检索知识的时间间隔,在《认知天性》里边只说,根据不同的材料选择不同的间隔时间。根据《考试脑科学》中的说法,在学习之后的一个月内,一定要复习一次,否则可能就是重新学习了。

3.穿插学习各种问题类型

4.细化:为新材料寻找不同层次的意义,比如将刚学习的内容跟已经学习到的知识进行关联。

5.生成:在看到解决方法之前需要自己努力回答问题或者解决难题。

6.反思:将检索和细化进行结合,回顾一下以前学习的知识,看一下自己什么地方做得好,什么地方做得不好。

7.校准: 使用客观评价工具来清除你已经掌握的知识错觉,调整你的认识来更好地反映现实。

8.助记:使用谐音或者顺口溜或者概括进行记忆。

相关推荐
一只特立独行的程序猿15 分钟前
关于GCC内联汇编(也可以叫内嵌汇编)的简单学习
汇编·学习·gcc
虾球xz21 分钟前
游戏引擎学习第10天
学习·游戏引擎
Chef_Chen23 分钟前
从0开始学习机器学习--Day25--SVM作业
学习·机器学习·支持向量机
乐悠小码24 分钟前
数据结构------队列(Java语言描述)
java·开发语言·数据结构·链表·队列
L_cl31 分钟前
Python学习从0到1 day28 Python 高阶技巧 ⑧ 递归
学习
vortex51 小时前
Vim 编辑器学习笔记
学习·编辑器·vim
源于花海1 小时前
论文学习(四) | 基于数据驱动的锂离子电池健康状态估计和剩余使用寿命预测
论文阅读·人工智能·学习·论文笔记
心怀梦想的咸鱼1 小时前
Ue5 umg学习(一)
学习·ue5
楚疏笃1 小时前
鸿蒙学习生态应用开发能力全景图-开发者支持平台(5)
学习·华为·harmonyos
4v1d1 小时前
边缘计算的学习
人工智能·学习·边缘计算