zoukankan      html  css  js  c++  java
  • 第一个程序02 零基础入门学习汇编语言21

    第四章:第一个程序02

     

    让编程改变世界

    Change the world by program


     

    源程序

     

    标号

    一个标号指代了一个地址。 codesg:放在segment的前面,作为一个段的名称,这个段的名称最终将被编译、连接程序处理为一个段的段地址。  

    程序的结构

    任务:编程运算 2^3。   程序结构如下:

    段与段寄存器关联

    定义一个段

    实现处理任务

    程序结束

      汇编程序 [codesyntax lang="asm"]
    assume cs:abc
    
    abc segment
        mov ax,2
        add ax,ax
        add ax,ax
    abc ends
    
    end
    [/codesyntax]  

    程序返回

    我们的程序最先以汇编指令的形式存在源程序中,经编译、连接后转变为机器码,存储在可执行文件中,那么,它怎样得到运行呢?   DOS中的程序运行 DOS是一个单任务操作系统。一个程序P2在可执行文件中,则必须有一个正在运行的程序P1,将P2从可执行文件中加载入内存后,将CPU的控制权交给P2,P2才能得以运行。 P2开始运行后,P1暂停运行。而当P2运行完毕后,应该将CPU的控制权交还给使它得以运行的程序P1,此后,P1继续运行。 现在,我们知道,一个程序结束后,将CPU的控制权交还给使它得以运行的程序,我们称这个过程为:程序返回。   最后如何返回呢? 应该在程序的末尾添加返回的程序段。

    mov ax,4c00H

    int 21H

    这两条指令所实现的功能就是程序返回。  

    几个和结束相关的内容

    [caption id="attachment_308" align="aligncenter" width="300"] 几个和结束相关的内容[/caption]    

    语法错误和逻辑错误

      语法错误是指程序在编译时被编译器发现的错误,容易发现。 例如: [codesyntax lang="asm"]
    aume cs:abc
    
    abc segment
        mov ax,2
        add ax,ax
        add ax,ax
    
    end
    [/codesyntax]   逻辑错误是程序在编译时不能表现出来的、在运行时发生的错误,不容易发现。 例如: [codesyntax lang="asm"]
    assume cs:abc
    
    abc segment
       mov ax,2
       add ax,ax
       add ax,ax
       mov ax,4c00H
       int 21H
    abc ends
    
    end
    [/codesyntax]  

    上机实践

    一般来说,有两类错误使我们得不到所期望的目标文件:

    1. 我们程序中有“Severe Errors”;

    2. 找不到所给出的源程序文件。

     

    1.exe的执行

    我们的程序没有像显示器输出任何信息。程序只是做了一些将数据送入寄存器和加法的操作,而这些事情,我们不可能从显示屏上看出来。 程序执行完成后,返回,屏幕上再次出现操作系统的提示符。

    关于编译和链接

      编译连和接的作用是什么呢?   连接的作用有以下几个: 当源程序很大时,可以将它分为多个源程序文件来编译,每个源程序编译成为目标文件后,再用连接程序将它们连接到一起,生成一个可执行文件; 程序中调用了某个库文件中的子程序,需要将这个库文件和该程序生成的目标文件连接到一起,生成一个可执行文件; 一个源程序编译后,得到了存有机器码的目标文件,目标文件中的有些内容还不能直接用来生成可执行文件,连接程序将这此内容处理为最终的可执行信息。 所以,在只有一个源程序文件,而又不需要调用某个库中的子程序的情况下,也必须用连接程序对目标文件进行处理,生成可执行文件。   注意,对于连接的过程,可执行文件是我们要得到的最终结果。 这里再次强调一下,我们学习汇编的主要目的,就是通过用汇编语言进行编程而深入地理解计算机底层的基本工作机理,达到可以随心所欲地控制计算机的目的。 我们用汇编语言编程,就要用到编辑器(Edit)、编译器(masm)、连接器(link)、调试工具(debug)等所有工具,而这些工具都是在操作系统之上运行的程序,所以我们的学习过程必须在操作系统的环境中进行。 [buy] 获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://kuai.xunlei.com/d/LXCUOJSNHYHY']视频下载[/Downlink]
  • 相关阅读:
    时间类型:datetime,timestamp,date,time,year
    字符串类型:char,varchar,text,enum,set
    RHEL7安装ZABBIX 3.2
    Go-06-数据类型、常量、运算符
    GO-05-数据类型
    GO-04-变量
    GO-03-基础
    GO-02-helloworld
    Ambassador-09-prefix正则表达式
    Ambassador-08-跨域
  • 原文地址:https://www.cnblogs.com/LoveFishC/p/3845997.html
Copyright © 2011-2022 走看看