zoukankan      html  css  js  c++  java
  • 汇编语言编辑、汇编、连接、运行的全过程

     为了理解汇编语言的编辑、汇编、连接、运行的全过程,我们不使用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.   
    4. mov ax, 2  
    5. add ax, ax  
    6. add ax, ax  
    7.   
    8. mov ax, 4c00H  
    9. int 21H  
    10.   
    11. xxx ends  
    12. 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  

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

  • 相关阅读:
    git 的学习使用记录
    Servlet发送邮件遇到的问题SMTPSendFailedException 554
    如何高效地写CSS--等以后有空多加总结一下
    前端技术科技树梳理
    React了解
    读取Excel文件
    Eclipse不能自动编译 java文件
    破天荒地敲下第一篇
    SRM DIV2 569 TheDeviceDiv2
    SRM DIV2 570 RobotHerbDiv2
  • 原文地址:https://www.cnblogs.com/feng-zhiyu/p/7815731.html
Copyright © 2011-2022 走看看