zoukankan      html  css  js  c++  java
  • x86汇编语言实践(1)

    0 写在前面

      为了更深入的了解程序的实现原理,近期我学习了IBM-PC相关原理,并手工编写了一些x86汇编程序

      在2017年的计算机组成原理中,曾对MIPS体系结构及其汇编语言有过一定的了解,考虑到x86体系结构在目前的广泛应用,我通过两个月左右的时间对x86的相关内容进行了学习。

      在《x86汇编语言实践》系列中(包括本篇、x86汇编语言实践(2)x86汇编语言实践(3)x86汇编语言实践(4)以及x86汇编语言复习笔记),我通过几个具体案例对x86汇编语言进行实践操作,并记录了自己再编写汇编代码中遇到的困难和心得体会,与各位学习x86汇编的朋友共同分享。

      我将我编写的一些汇编代码放到了github上,感兴趣的朋友可以点击屏幕左上角的小猫咪进入我的github,或请点击这里下载源代码。

    1 debug练习

      (1)使用MASM.EXE EXP41.ASM进行汇编。

      (2)使用LINK.EXE EXP41.ASM进行连接。

      (3)使用DEBUG.EXE EXP41.ASM进行调试。

      (4)使用-e 78a:0指令对数据区的内容进行修改。不要修改第一个字0010H,从第二个字开始修改。每修改一个字节按下一次空格,当全部修改完成后,按下回车。

      (5)使用-d 78a:0指令查看一下数据区当前的内容,情况如下图所示,班级学号水印修改成功。 

      (6)使用-t 500指令,让程序单步执行500次,以保证程序完成排序过程。或直接使用-g指令使程序执行到结束完成为止。

      (7)使用-d 78a:0指令,查看排序后的数据区的情况,如下图所示,升序排序成功。

        

      (8)改写源汇编程序为降序排序程序,存为EXP42.ASM重复上述(1)-(7)步,可以得到如下图所示的结果,降序排序成功。

      (9)此处应该使用debug指令-a cs:17 来对17处的指令进行修改,重新使用-g或重复上述步骤即可得到降序序列。

        

      【总结】

      练习了debug的基本操作。

    2 打印内存变量十进制ASCII码

      打印内存中两个字x,y,分别为BCD编码表示的我的学号,其中x为1606H,y为1160H。转化为10进制后为56384448。通过在DOS命令中直接运行程序EXP3.EXE的方式,可以得到上述结果以ASCII码的形式打印结果如下:

        

    3 32位乘法

      向汇编程序中编写好待计算的两个32位二进制数:

        

      这两个数分别为16061160H和16FFABCDH。

      编写好程序后运行可得以下结果。

      二进制输出结果:

        

      内存结果查看:

        

      与计算工具计算结果进行比对:

        

      经计算,发现程序运行结果正确。

      将程序中的子程序调用改成显示十进制的调用CALL P2,

      输出十进制输出结果显示如下:

        

      使用python计算结果:

        

      经计算,发现输出结果正确。

  • 相关阅读:
    js基础知识(pomelo阅读)
    nohup启动命令(转)
    JS基础知识(数组)
    JS基础知识(作用域/垃圾管理)
    JS基础知识(基本类型 引用类型)
    html5实现饼图和线图-我们到底能走多远系列(34)
    RK3288 device descriptor read/64, error -32
    RK3288 双屏异显,两屏默认方向不一致
    Android 查看Android版本的方法
    adb error: device offline
  • 原文地址:https://www.cnblogs.com/chrischen98/p/10713058.html
Copyright © 2011-2022 走看看