zoukankan      html  css  js  c++  java
  • 汇编语言

    一、配置Linux

    这部分已经轻车熟路了,只不过因为要下载32bit的ubuntu,所以费了点周折,最后总算在华为镜像站找到了资源,给花企点个赞(

    关于软件的版本,要求用man查询Vim/Git/GCC/AS/OBJDUMP/GDB的版本。然而发现这些软件的查询版本命令全都是xxx --version...例如:

    vim --version

    二、用汇编写个魔改helloworld

    以上是代码,保存到hear.S

    然后用以下命令做成程序

    as -o heart.o heart.S
    gcc -o heart.o heart

    话说我一直搞不明白,怎么一下是-o heart.o heart,一下是heart -o heart.o,这顺序真没个准头……

    最终结果如下

    三、工具实践

    1.objdump反汇编

    用以下命令将刚才做好的heart.o反汇编(其实也可以反汇编heart本身?)

    objdump -D heart.o>dog

    然后在msg部分有以下信息

    说实话,看不懂……但是如果说要看学号部分在哪,那应该就是20行到27行了吧……

    2.gcc的使用

    流程是hello.c -> hello.i -> hello.s -> hello.o -> hello

    代码如下,有点难记……太乱了

    gcc -E hello.c -o hello.i
    gcc -S hello.i
    gcc -c hello.s
    gcc -o hello hello.o

    如果一步到位,.c到可执行程序,就很简单了

    gcc hello.c -o hello

    3.vimrc的配置

    这个需要先cd ~,然后自己创建.vimrc。里面可以写对vim的配置信息

    cd ~
    vi .vimrc
    
    #编辑.vimrc
    set nu #打开行号显示
    
    #wq保存关闭

    四、数据范围的问题

    如果int分别赋值为40000*40000,50000*50000,会发生什么呢?

    40000^2的结果是正确的,但50000^2的结果是错误的。

    原因在于,40000是0000 0000 0000 0000 1001 1100 0100 0000

    平方之后,是0101 1111 0101 1110 0001 0000 0000 0000,可以看到是没有触及到符号位,也没有溢出的。

    50000则是1100 0011 0101 0000

    平方的结果是1001 0101 0000 0010 1111 1001 0000 0000,触及到了符号位,但没有溢出。

    如果截去符号位,对应的结果是352,516,352,与1,794,967,296相加后刚好是2,147,483,648。这就是计算机补码保存的结果。

    为了解决这个问题,当然是要使用unsigned int,去除符号位。但是为了避免长远的问题,用unsigned long long或许更好一些。

    五、矩阵执行时间比较

    这是一个很有意思的问题:现在有两个矩阵,大小都是2048x2048。现在要把矩阵src的内容复制到dst,那么就有两种方法:

    • for i 里面嵌套for j
    • for j 里面嵌套for i

    两种方法都在两层for中dst[i][j] = src[i][j]

    按理说应该没差, 然而实测结果如下:

    这是怎么回事呢?我暂时没法回答。舍友说是缓存读写的问题,这就不懂了……

  • 相关阅读:
    Hadoop(二)—— HDFS
    Hive(一)—— 启动与基本使用
    Flume(一) —— 启动与基本使用
    Kafka(四) —— KafkaProducer源码阅读
    Flink(一) —— 启动与基本使用
    Kafka(三) —— 集群监控
    Hadoop(一)—— 启动与基本使用
    Spark(二)—— 标签计算、用户画像应用
    二. python数组和列表
    一. python数据结构与算法
  • 原文地址:https://www.cnblogs.com/KakagouLT/p/9297454.html
Copyright © 2011-2022 走看看