汇编语言编辑、汇编、连接、运行的全过程

2013-06-02 19:24 4991人阅读 评论(0) 收藏 举报

 分类:

汇编语言(1) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

为了理解汇编语言的编辑、汇编、连接、运行的全过程,我们不使用IDE,而是分步骤来进行:

需要工具:

1. 文本编辑器(如果有Notepad++或者UltraEdit就更好了)

2.  汇编器(如MASM.exe)

3.  连接器(对应的link.exe)

为了省略盘符转换,我在电脑的F盘中建立了myASM这个文件夹,并把Windows系统的cmd.exe复制到了该文件夹中,另外,把下载好的MASM.exe和LINK.exe都复制到该文件夹中,在myASM下建立一个文本文件1.txt, 改其名为1.asm, 在1.asm中输入如下程序并保存

[plain] view plain copy

  1. assume cs : xxx
  2. xxx segment
  3. mov ax, 2
  4. add ax, ax
  5. add ax, ax
  6. mov ax, 4c00H
  7. int 21H
  8. xxx ends
  9. end

点击cmd.exe, 然后输入masm, 按enter, 进入了masm的界面,然后按下图输入(有时需要按enter键):

在myASM文件夹下生成了1.obj文件盒1.exe文件(注意:由于该程序只有代码段,没有栈段,故有no stack segment这个提示)。

双击1.exe文件后,黑色的框框一闪而过,这是很正常的。用cmd.exe来运行1.exe, 也没有发现什么结果,因为该程序并没有输出操作,所以自然也就没有输出结果了。那要怎么样看结果呢?用debug嘛!步骤如下:

有两点值得注意:

1. u命令表示将内存中的机器指令转为汇编指令(至于g命令的作用,前面已经说过了)

2. 要输入debug 1.exe. 如果输入debug 1, 则会出错

3. 在没有学会输出操作之前,以上方法是查看结果的好方法

下面,我们来对上述程序进行解释:

1.

[cpp] view plain copy

  1. xxx segment
  2. ...
  3. xxx ends

segment和ends(不是end)是一对伪指令,用来定义一个“段”,具体是什么“段”由伪指令assume来指定。比如assume cs : xxx 指定的是代码段(code segment)

2. end伪指令是一个汇编语言结束的标记,碰到end, 则停止汇编

3.

[plain] view plain copy

  1. mov ax, 4c00H
  2. int 21H

这两条语句的功能是程序返回

4.

[plain] view plain copy

  1. mov ax, 2
  2. add ax, ax
  3. add ax, ax

这三条语句是“段”的主体(代码段的主体)

时间: 2024-10-26 06:53:38

汇编语言编辑、汇编、连接、运行的全过程的相关文章

Xamarin iOS开发中的编辑、连接、运行

Xamarin iOS开发中的编辑.连接.运行 创建好工程后,就可以单击Xamarin Studio上方的运行按钮,如图1.37所示,对HelloWorld项目进行编辑.连接以及运行了.运行效果如图1.38所示本文选自Xamarin iOS开发实战大学霸出品. 图1.38  运行效果 由于在此HelloWorld的功能中没有做任何的事情,所以,运行结果是不会产生任何效果的. 注意:如果是第一次运行Xamarin Studio的程序,可能会出现如下的错误: Error: A valid Xcode

Java千百问_02基本使用(015)_java如何通过汇编方式运行

点击进入_更多_Java千百问-基本使用 1.java如何通过汇编方式运行 java本身不能通过汇编方式运行.但是,我们可以通过某些插件,在运行中将java代码解释为汇编指令,让我们能够通过分析执行的汇编指令来查找一些问题,也可以帮助我们分析和理解JVM是如何解释和编译的(当然java本身的编译和运行和汇编无关). PrintAssembly是JVM的一个运行参数,它允许我们获取在控制台打印java代码翻译成的汇编指令.使用PrintAssembly需要一些插件的支持,这些并不是JVM直接提供的

cocos2dx的runAction: 反复运行,多个动作连接运行,多个动作同一时候运行的实现

cocos2dx的 runAction,假设某个动作重复运行用cc.RepeatForever:create, 多个动作连接运行用cc.Sequence:create,多个动作同一时候运行用cc.Spawn:create. 反复运行某个动作cc.RepeatForever:create local action = cc.FadeOut:create(3)--淡出 local action = cc.FadeIn:create(3) -- 渐入 local action = cc.RotateB

Apache多虚拟主机多版本PHP(5.3+5.6+N)共存运行配置全过程

摘要: 为需要实现在同一台Linux服务器上面,同时运行多个不同版本的PHP程序,本文我们将使用FastCGI方式加载,并把过程详细记录下来方便大家参考. 常规的PHP配置方式有很多种,例如CGI.fast-cgi.apache module handle.cli.isapi这些. CGI (通用网关接口 / Common Gateway Interface) Fast CGI (常驻型CGI / Long-Live CGI) CLI (命令行运行 / Command Line Interfac

Linux编辑网络连接

Linux编辑网络连接   实验目标: 通过本实验掌握新建网络连接.修改hosts文件.修改主机名的方法. 实验步骤: 1.新建一个名为review的网络连接,并配置ip地址,启用新连接 2.修改hosts文件,将刚才配置的ip地址和“myhost”名称对应 3.  将系统主机名设置为centos 参考命令:   1.查看现有连接 2.新建连接 3.配置地址并启动新连接 一个网卡的两个连接配置,只能一个启用,其他作为备选. 如果需要一个网卡配置多个ip,需要修改网卡配置文件实现 4.给ip地址一

window 下命令行编译连接运行

编程的流程 一个编程的基本流程包括编辑.编译和链接三大步骤. 1.什么叫编辑 编辑edit代码即编写代码,是编程的第一步.你可以任意一个编辑器进行代码的编写,也可以使用windows自带的"记事本"来编写代码,也可以使用Notepad++,或者visual studio提供的编辑器. 2.什么叫编译 注:编译链接前,系统应该安装有相应的编译器,并设置好环境变量 编译(compile)是将用某种编程语言(如 C++语言)写成的源代码,转换成目标文件. 目标文件包含着机器代码(可直接被计算

Windows server2008 搭建ASP接口訪问连接oracle数据库全过程记录

真的是太不easy了,曾经的时候在window server 2003上面搭建了一套asp+oracle的接口系统.就费了好大的劲儿,事实上那会迷迷瞪瞪的也不知道怎么的就弄好了,也懒得管了.OK,从昨天到今天打算把接口从測试环境部署到公网环境上去的时候就出现了各种各样的问题.这次一定得记录一下. 先来说一下这套接口系统的总体方案: 之所用选用asp是由于属于轻量级的接口系统,仅仅须要改动好了以后复制粘贴上去接口就马上生效.而不须要像java系的接口程序要用tomcat打包.上传.部署这种.那这个

VS建立的Winform程序中连接Oracle数据库能正常运行在Web中却不能正常连接运行可能原因(本文来自博客园深蓝居)

我们平时使用的都是32位的机器进行开发,装的都是32位的软件,但是我们的服务器一般都是64位的,所以有时也需要在64位的环境下装一个VS调试程序.最近遇到的一个问题就是一个同事换了一个电脑,用的是X64的Windows 2008作为操作系统,要进行Oracle的数据库连接,所以也装了64位的Oracle客户端.如果是控制应用项目或者WinForm项目可以正常连接Oracle,但是Web项目在程序中打开Oracle连接时,系统抛出了异常: 尝试加载 Oracle 客户端库时引发 BadImageF

利用xcode怎么编辑html并且运行html

1.xcode创建一个空的文件如图所示 2.点击下一步取名字为---.html 点击确定使用这种格式保存 3.保存过之后就是一个html的文件,单击/双击这个文件,如图所示 4.删除所有之后就可以开始编写html了<!DOCTYPE html>... 5.编写完之后保存,xcode中加载这样的代码运行即可在模拟器上看到对应的html网页了 1 UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.frame]; 2 we