0 写在前面

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

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

  在《x86汇编语言实践》系列中(包括本篇、x86汇编语言实践(2)以及x86汇编语言实践(3)),我通过几个具体案例对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计算结果:

    

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

x86汇编语言实践(1)的更多相关文章

  1. x86汇编语言实践(3)

    0 写在前面 为了更深入的了解程序的实现原理,近期我学习了IBM-PC相关原理,并手工编写了一些x86汇编程序. 在2017年的计算机组成原理中,曾对MIPS体系结构及其汇编语言有过一定的了解,考虑到 ...

  2. x86汇编语言实践(2)

    0 写在前面 为了更深入的了解程序的实现原理,近期我学习了IBM-PC相关原理,并手工编写了一些x86汇编程序. 在2017年的计算机组成原理中,曾对MIPS体系结构及其汇编语言有过一定的了解,考虑到 ...

  3. 进入保护模式(三)——《x86汇编语言:从实模式到保护模式》读书笔记17

    (十)保护模式下的栈 ;以下用简单的示例来帮助阐述32位保护模式下的堆栈操作 mov cx,00000000000_11_000B ;加载堆栈段选择子 mov ss,cx mov esp,0x7c00 ...

  4. VS2013的x86汇编语言开发环境配置

    转载:https://blog.csdn.net/infoworld/article/details/45085415 转载:https://blog.csdn.net/u014792304/arti ...

  5. 存储器的保护(三)——《x86汇编语言:从实模式到保护模式》读书笔记20

    存储器的保护(三) 修改本章代码清单,使之可以检测1MB以上的内存空间(从地址0x0010_0000开始,不考虑高速缓存的影响).要求:对内存的读写按双字的长度进行,并在检测的同时显示已检测的内存数量 ...

  6. 存储器的保护(一)——《x86汇编语言:从实模式到保护模式》读书笔记18

    本文是原书第12章的学习笔记. 说句题外话,这篇博文是补写的,因为让我误删了,可恶的是CSDN的回收站里找不到! 好吧,那就再写一遍,我有坚强的意志.司马迁曰:“文王拘而演<周易>:仲尼厄 ...

  7. 16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16

    一.Intel 32 位处理器的工作模式 如上图所示,Intel 32 位处理器有3种工作模式. (1)实模式:工作方式相当于一个8086 (2)保护模式:提供支持多任务环境的工作方式,建立保护机制 ...

  8. 进入保护模式(二)——《x86汇编语言:从实模式到保护模式》读书笔记14

    首先来段题外话:之前我发现我贴出的代码都没有行号,给讲解带来不便.所以从现在起,我要给代码加上行号.我写博客用的这个插入代码的插件,确实不支持自动插入行号.我真的没有找到什么好方法,无奈之下,只能按照 ...

  9. linux平台学x86汇编语言学习集合帖

    linux平台学x86汇编语言学习集合帖 linux平台学x86汇编(一):https://blog.csdn.net/shallnet/article/details/45543237 linux平 ...

随机推荐

  1. idea部署Maven入门(一)——环境变量的配置和下载

        介绍:       1  Maven是用来管理jar包的一种工具,       2  Maven主要是构建java项目和java web项目        3 maven项目管理所依赖的jar ...

  2. window64位电脑如何通过VMware Workstation12.5.6安装苹果操作系统 macOS High Sierra 10.13

    1.下载 VMware-workstation-full-12.5.6.exe,macOS High Sierra 10.13.iso 2.安装 VMware-workstation时不要选择C盘,因 ...

  3. python正则表达式模块re

    正则表达式的特殊元素 匹配符号 描述 '.'(点dot) 在默认模式下,它匹配除换行符之外的任何字符.如果指定了DOTALL标志,则匹配包括换行符在内的任何字符 '^'(Caret) 匹配以字符串开头 ...

  4. html+css 制作简易导航栏

    二话不说直接上代码(萌新:实在也没什么好说的) <!DOCTYPE html> <html lang="en" xmlns="http://www.w3 ...

  5. HBase 是列式存储数据库吗

    在介绍 HBase 是不是列式存储数据库之前,我们先来了解一下什么是行式数据库和列式数据库. 行式数据库和列式数据库 在维基百科里面,对行式数据库和列式数据库的定义为:列式数据库是以列相关存储架构进行 ...

  6. HTML&CSS

    行内元素 <a>.<span>.<br>.<i>.<em>.<strong>.<label>.<q>.& ...

  7. vue 应用生产环境的 webpack 打包配置优化

    转:https://blog.csdn.net/robin_star_/article/details/83856363 前言:很好的打包优化的帖子,还没来的急去实测验证 1. 去掉 console ...

  8. Koa 框架介绍

    Node.js 是一个异步的世界,官方 API 支持的都是 callback 形式的异步编程模型,这 会带来许多问题,例如:callback 嵌套问题 ,异步函数中可能同步调用 callback 返回 ...

  9. 20 python 初学(logging模块)

    学习网站:https://www.cnblogs.com/yuanchenqi/articles/5732581.html logging 模块: # _author: lily # _date: 2 ...

  10. Redis原理

    RESP协议 支持tcp协议.基本数据类型,比如数组,字符串等,也可支持其他的通信场景. 模拟redis接收传输过来的set数据 //ServerSocket监听6379端口模拟redis publi ...