zoukankan      html  css  js  c++  java
  • Not Hello World

    通常对于一门语言的学习,一般都是以“Hello,World!”开始的。但对于汇编语言的学习,输出这句话并不容易,首先得了解寄存器等硬件知识。

    汇编语言要得以运行,首先要讲源文件编译链接成可执行文件,才能运行。这里需要编译器和连接器(资源我分享到了百度云:链接:https://pan.baidu.com/s/1dE4mb3F,密码:ywfp)。因为我用的是32位Win7,因此我可以不用DosBox。

    一、第一个源文件

    代码如下

    assume cs:codeseg
    codeseg segment
    	mov ax,2
    	add ax,ax
    	add ax,ax
    	
    	mov ax,4c00H
    	int 21H
    codeseg ends
    end

    从这个汇编语言程序是用来计算23的。

    首先看到assume(伪)指令,英文意思是“假设”之意,后面紧跟cs:codeseg,这里其实是定义了一个代码段名,对于一个程序必须得有一个段而且是代码段,对于数据段和栈段可以不必有,若缺少代码段,数据段和栈又怎能构成一个程序呢。codeseg称为标号,指代一个地址,这个段的名称最终会被编译链接称为一个地址。对于codeseg segment……codeseg ends这一对伪指令定义了一个段,segment表示段开始,ends表示段结束。end伪指令意味着程序的真正结束,每个程序必须有,否则将无法知道程序什么时候结束。

    段内部分是真正的汇编指令,最后面两句mov ax,4c00H和int 21H是程序返回,这是固定的。DOS系统是一个单任务操作系统,对于两个程序P1,P2(假设P1正在执行),如果要执行P2,必须由P1将P2加载到内存,将CPU授权给P2,P2才可执行,此时P1将挂起。当P2结束后,应将CPU还给P1,让P1继续执行,若只有一条指令,则交给系统,int指令不是c或其他语言中的整形类型,而是中断指令。因此这两句必不可少。

    二、程序编辑、编译、连接&运行

    (1)编辑

    对于编辑器有很多,什么notepad,notepad++,UltraEdit什么的都可以,喜欢用哪个就用哪个。保存为“文件名.asm”的形式。

    (2)编译

    新建立一个文件夹,我的在F:masm中,将masm6.15中的debug.exe,masm.exe,link.exe和ml.exe拷贝进去就行。在DosBox下masm6.15自己的不知道为什么不能用,只能用masm5,。当然将源程序也放进去。

    编译:使用masm 文件名.asm


    编译成功,将会生成一个obj文件,用ue打开之后是一些16进制数,不懂。


    (3)连接

    连接:使用link 文件名.obj即可,连接后将生成exe文件。


    编译时Run File什么的直接回车略过就行,因为这个文件没用什么库啥的,暂且不用管。


    连接的作用主要是:

    • 当源程序较大时,将源程序分为多个文件来编译,编译完成后再将其一一连接,便于源程序管理。
    • 需要用到其他的库文件时
    • 对于生成的obj文件还不能直接执行,需连接程序将其处理为可直接运行的文件
    以上两步也可用ml.exe直接进行编译连接。

    (4)运行

    直接输入exe文件名运行就可以了,但通常是一闪而过,因为机器足够快。




  • 相关阅读:
    AUDIT审计的一些使用
    HOW TO PERFORM BLOCK MEDIA RECOVERY (BMR) WHEN BACKUPS ARE NOT TAKEN BY RMAN. (Doc ID 342972.1)
    使用BBED理解和修改Oracle数据块
    Using Class of Secure Transport (COST) to Restrict Instance Registration in Oracle RAC [ID 1340831.1]
    调试利器GDB概念
    第4章 思科IOS
    第3章 ip地址和子网划分
    第2章 TCPIP
    2020年阅读过的黑客资源推荐篇
    第1章 计算机网络
  • 原文地址:https://www.cnblogs.com/pipinet/p/6257372.html
Copyright © 2011-2022 走看看