带你走进汇编的世界

本文所做的实验是用汇编实现字符串逆向排序的功能。

其实就相当于C语言中的reverse( ) 函数。

简要叙述:

将字符串 ‘‘abcdefghij" 放到指定的内存位置,同时分配一段内存作为栈

然后将字符串入栈再出栈,以此实现字符串逆向排序功能

一下就是代码:

编译:

连接:

调试:

初始化阶段:

观察右边内存中的数据,

入栈结束:

字符串“abcdefghij” 已经存进内存中

出栈结束:

字符串逆向排序完成。

实现原理:

首先在内存中定义数据段和栈;

将字符串内容放到内存中数据段和栈中;

由于栈的特性是后进先出,所以注意出栈时数据的排位

遇到的问题:

虽然功能是成功了,但是写代码的过程中发现了些问题,实在是搞不懂。

在debug中可以编译 mov [0],ax   这句代码

但是用masm编译工具编译时就报错。报错原因是不能直接给标量赋值。

只能将代码改为

mov bx,0

mov [bx],ax

用寄存器中间过渡就行。为什么在debug中编译就能通过呢?

过了几天看到书本后面的内容,现在终于搞懂了,哈。

原来debug和编译器masm对某些指令有着不同的处理。

看下面的例子

分别用debug和masm编译一下代码:

mov ax,2000

mov ds,ax

mov al,[0]

mov bl,[1]

mov cl,[2]

mov dl,[3]

masm对指令的解释:

debug对指令的解释:

从它们的机器码可以看出它们对形如 " mov ax,[0] “ 这类指令在解释上的不同。

可以看出debug将它解释为 "[idata]" 是一个内存单元,”idata“ 是内存单元的编译地址;

而编译器将 "[idata]"  解释为 "idata" 。

你敢不敢扫我!!!

原文出处:http://www.cnblogs.com/zhuojun

时间: 2024-10-13 11:42:45

带你走进汇编的世界的相关文章

【密码学】一万字带您走进密码学的世界(下)

引文 密码学是研究编制密码和破译密码的技术科学.研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学:应用于破译密码以获取通信情报的,称为破译学,总称密码学. 在<一万字带您走进密码学的世界(上)>的文章中我们探讨了对称密码体系,哈希函数等技术,本文继续探讨密码学剩余的部分,本文的主要内容包括,非对称密码体系,签名算法等,因为本部分是区块链技术的基石,所以我会讲的更加详细一点,虽然我已经尽最大努力使思想简化,但是其中的数学理论对于很多人还是很晦涩,建议读者开始之前先读下数论的有关

详解C++引用——带你走进引用的世界

 一.介绍引用 首先说引用是什么,大家可以记住,引用就是一个别名,比如小王有个外号叫小狗,他的妈妈喊小狗回家吃饭,那就是在喊小王回家吃饭. 接下来我们用两行代码来声明一个引用(就拿小王和小狗来说吧): int xiaoW; int &xiaoG=xiaoW; 上面就是一个引用,说明几点要注意的地方: 1.&不是取地址符,而是引用运算符: 2.xiaoG是xiaoW的别名,所以这两个变量的值和地址都是一样的: 3.引用只能初始化,而不能先声明再赋值,因为引用就相当于一个常量: 4.在声明

【密码学】一万字带您走进密码学的世界(上)

引文 密码学是研究编制密码和破译密码的技术科学.研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学:应用于破译密码以获取通信情报的,称为破译学,总称密码学. 为了使读者对密码学有一个整体的认识,本文简述了常见的密码学的概念,其中本文包括对称密码,哈希函数.<一万字带您走进密码学的世界(下)>包括非对称密码,数字签名,数字认证等,需要指出的是文中并没有深入探讨加密算法原理,关于此部分内容,后续的文章会详细阐述.本文的主要内容如下图所示: 对称密码 在对称密码体系中,相同的密码用来

带你走进rsync的世界

导读 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地硬盘中的不同目录.rsync共有3种使用方法,在配置rsync也是有6个步骤的.下面我们就从rsync的介绍,rsync的使用和rsync的配置带你走进rsync的世界 一.rsync简介 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地

小丁带你走进git的世界三-撤销修改(转)

一.撤销指令 git checkout还原工作区的功能 git reset  还原暂存区的功能 git clean  还没有被添加进暂存区的文件也就是git还没有跟踪的文件可以使用这个命令清除他们 git revert 撤销本次提交. 二.指令讲解 Git checkout 首先我们对文件的一个修改,对master.txt进行了修改 修改结果我们利用上面的知识来进行查看. 新增加了Test这么一段话,如果我们想要将工作区的内容添加到暂存区会使用git  add这个命令,如果我们想要还原工作区内容

一个"收纳箱"带你走进数据库的世界

一个"收纳箱"带你走进数据库的世界 一.前言 1.1时势造英雄--数据时代,未来已来 ? 如今,我们已然"从IT时代迈入DT时代",马云也说过:未来的资源不是石油,不是天然气,而是"数据".这是因为,在信息技术迭代如此之快的时代,会产生各种各样的大量数据.信息,那么伴随而来的问题就是:我们应该如何实现安全.有效地存储.检索以及管理数据? ? 数据时代,对数据的有效存储.高效访问.方便共享和安全控制已经成为目前亟待解决的问题. 1.2问题引出--如

深入理解计算机系统(3.1)---走进汇编的世界

本文转载地址:http://www.cnblogs.com/zuoxiaolong/p/computer13.html 为何要学习汇编语言 对于大部分猿友来说,平时写的都是一些高级程序设计语言,是计算机领域的诸多大神,经过几层的封装才让我们享有了这样的待遇.这样一来,我们在平时的开发过程中,可以省去很多底层的麻烦.试想一下,倘若在你写一个方法的时候,你还需要去操心哪些变量需要放在寄存器,哪些变量放在主存,放在寄存器的话又该放在哪一个里面,放在主存的话又该放在那个内存区域等等这一类底层的问题,以及

走进汇编的世界

先来说一下问什么要学点汇编?首先来说一下尽管汇编不是我们熟悉的编程语言,但是终归还是语言,起码我们不用再和0,1打交道了!对于大部分,也包括我自己了,平常接触的都是高级语言,比如C#,C,C++,这些语言都是经过了各位大牛们多年的努力,经过多层的封装,才能让我们享受这样的待遇.这样一来,我们在平时的开发过程中,可以省去很多底层的麻烦,试想一下,如果你在写一个方法的时候,你还需要操心哪些变量放在了寄存器,哪些变量放在了主存,放在寄存器的话又该放在哪一个里面,放在主存的话又该放在那个内存区域等等这一

带你走进spring的世界

spring有两大特性,其一为ioc,其二为aop 1.ioc的理解 ioc为依赖注入,他的好处就是把创建对象的权利交给spring去管理,这样的好处是 将应用程序中的对象解耦,传统的方式程序中的对象与对象引用的对象相互依赖,这样就使得依赖性增高,增加耦合性. di为控制反转,以前创建对象的权利由应用程序,现在交给spring来管理 从应用层到ioc这就为控制反转. ioc提供了两种容器: 1)bean工厂(BeanFactory),采用工厂模式,负责创建和分发bean对象,bean工厂还参与到