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.助记:使用谐音或者顺口溜或者概括进行记忆。

相关推荐
sinat_255487812 小时前
读者、作家 Java集合学习笔记
java·笔记·学习
Edward111111113 小时前
3.18异常学习
学习
正经人_x4 小时前
学习日记34:UNETR
学习
科技林总4 小时前
【系统分析师】12.3 软件架构描述与表示
学习
wincheshe4 小时前
AI Agent 开发学习 --- 框架开发实践(三)
人工智能·学习
计算机安禾5 小时前
【C语言程序设计】第37篇:链表数据结构(一):单向链表的实现
c语言·开发语言·数据结构·c++·算法·链表·蓝桥杯
2501_918126916 小时前
学习所有6502写游戏存档的语句
汇编·嵌入式硬件·学习·游戏·个人开发
星雨流星天的笔记本6 小时前
2.用洗洁精洗过的三口烧瓶的处理方法
学习
云边散步6 小时前
godot2D游戏教程系列二(18)
笔记·学习·游戏
風清掦7 小时前
【江科大STM32学习笔记-09】USART串口协议 - 9.1 STM32 USART串口外设
笔记·stm32·单片机·嵌入式硬件·学习