使用MASM07

让编程改变世界

Change the world by program


标号、变量和数据结构

当程序中要跳转到另一位置时,需要有一个标识来指示位置,这就是标号。 通过在目的地址的前面放上一个标号,可以在指令中使用标号来代替直接使用地址。   关于变量的使用是任何编程语言都要遇到的工作,Win32汇编也不例外,在MASM中使用变量也有需要注意的几个问题,错误地使用变量定义或用错误的方法初始化变量会带来难以定位的错误。 变量是计算机内存中已命名的存储位置,在C语言中有很多种类的变量,如整数型、浮点型和字符型等,不同的变量有不同的用途和尺寸。   比如说虽然长整数和单精度浮点数都是32位长,但它们的用途不同。 变量的值在程序运行中是经常改变的,所以它必须定义在可写的段内,如.data和.data,或者在堆栈内。 按照定义的位置不同,MASM中的变量也分为全局变量和局部变量两种。

在MASM中标号和变量的命名规范是相同的,它们是:

– 1)可以用字母、数字、下划级及符号@、$和。

– 2)第一个符号不能是数字。

– 3)长度不能超过240个字符。

– 4)不能使用指令名等关键字。

– 5)在作用域内必须是唯一的。

这些规则是大部分编程语言约定俗成的!

标号的定义

当在程序中使用一条跳转指令的时候,可以用标号来表示跳转的目的地,编译器在编译的时候会把它替换成地址。 标号既可以定义在目的指令同一行的头部,也可以在目的指令前一行单独用一行定义,标号定义的格式是:

– 格式一 标号名: 目的指令

– 格式二 标号名:: 目的指令

我们比较常用的方法是使用格式一(一个冒号那个),注意这时候标号的作用域是当前的子程序,在不同子程序中可以存在同样名字的标号。 这也就意味着这种格式不能从一个子程序通过标号跳转到另一个子程序中。   那如果实在痒,想跳,怎么办? 格式二就应运而生了!没错,当我们需要从一个子程序中用指令跳到另一个子程序中的标号位置时候,我们用格式二,但代码并不和谐!

@@

OK,大家一定想到了很多类似的肥猪流火星文***符号,很高兴我们学Win32汇编居然赶上了时代的主流阿,尼玛啊,有木有啊! 在DOS时代,为标号起名是个麻烦的事情,因为汇编指令用到跳转指令特别多,任何比较和测试等都要涉及跳转,所以在程序中会有很多标号, 在整个程序范围内起个不重名的标号要费一番功夫,结果常常用addr1和addr2之类的标号一直延续下去……   事实上很多标号会使用一到两次,而且不一定非要起个有意义的名称,如汇编程序中下列代码结构很多: [codesyntax lang="asm"]

    mov cx,1234hcmp flag,1je loc1mov cx,1000h
loc1:loop loc1

[/codesyntax]   在别的地方事实上就不会用到loc1了,尼玛啊,编程要讲究低碳,低碳啊,有木有?! 对于这种不环保的做法,我们用@@来取而代之!程序改下如下: [codesyntax lang="asm"]

    mov cx,1234hcmp flag,1je @Fmov cx,1000h
@@:loop @B  // B 这里是Before的意思

[/codesyntax]   是不是既方便,又美观?! 当用@@做标号时,@F表示本条指令后的第一个@@标号,@B表示本条指令前的第一个@@标号。 注意,当程序中可以有多个@@标号,@B和@F只寻找匹配最近的一个。   不要在间隔太远的代码中使用@@标号,因为在以后的修改中@@和@B,@F中间可能会被无意中插入一个新的@@。 这样一来,@B或@F就会引用到错误的地方去,距离最好限制在编辑器能够显示的同一屏幕的范围内。 [buy] 获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://urlxf.qq.com/?fi6RRn2']视频下载[/Downlink]

转载于:https://www.cnblogs.com/LoveFishC/archive/2011/10/11/3847134.html

使用MASM07 - Win32汇编语言015相关推荐

  1. Win32汇编语言021 - 053

    Win32汇编语言021 - 053 让编程改变世界 Change the world by program 视频下载地址: [buy] 获得所有教学视频.课件.源代码等资源打包 [/buy] [Do ...

  2. Win32汇编语言基础(1)

    汇编语言(assembly language)是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地 ...

  3. 使用MASM04 - Win32汇编语言012

    使用MASM04 让编程改变世界 Change the world by program 调用API函数 习惯工作于DOS汇编的程序员同志都有一个愿望:如果说,能够以功能名称作为子程序名直接调用,他们 ...

  4. win32汇编语言学习笔记(三)

    汇编语言学习笔记(三) CH3.Windows汇编基础 .386 .model flat,stdcall option casemap:none 定义程序使用的指令集.工作模式 相应的还有:.8086 ...

  5. 使用MASM03 - Win32汇编语言011

    使用MASM03 让编程改变世界 Change the world by program 代码段 .code段是代码段,所有的指令都必须写在代码段中,在可执行文件中,代码段是放在_TEXT节区(区块) ...

  6. Win32基础知识5 - Win32汇编语言006

    Win32基础知识5 让编程改变世界 Change the world by program Windows的内存安排 这节课我们需要理解三个概念: 每个应用程序都有自己的4 GB的寻址空间,就算这个 ...

  7. 使用MASM02 - Win32汇编语言010

    使用MASM02 让编程改变世界 Change the world by program 模式定义 3)option语句 如例子中,我们定义了 option casemap:none 的意义是告诉编译 ...

  8. 汇编语言-015(PROC伪指令定义参数方式、EXTERNDEF、INCLUDE 、EXTERN 、INVOKE、PROC、PROTO 、MOVSB 、MOVSD 、CMPSD )

    1:使用PROC伪指令定义参数方式不通过寄存器传参,计算数组之和 .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DW ...

  9. 选择“Win32汇编”的三大理由?

    选择Win32汇编的理由是什么呢? 在DOS时代,学习汇编就是学习系统底层编程的代名词,仅要成为一名入门级的汇编程序员,就需要学习从CPU结构.CPU工作方式.各种硬件的编程方法到DOS工作方式等范围 ...

最新文章

  1. 安卓首页图片轮播效果(淘宝、京东首页广告效果)
  2. 深度学习中tensorflow框架的学习
  3. kill -HUP 什么意思?
  4. AI看脸、测肤,左可美妆新零售,右能智慧医美
  5. python 爬虫 包_python爬虫学习之路-抓包分析
  6. ASP.NET五大核心对象解析
  7. 数据库-临时表和复制表
  8. Android 面试常问七道题
  9. Python编写微信打飞机小游戏(一)
  10. Login.jsp登录页面代码(css+bootstrap)
  11. 16种常用统计分析软件介绍
  12. ifix组态软件研究控制按钮权限
  13. easyRobot工业机器人系统
  14. 颜色代码表(#号开头)
  15. 云队友丨如何长久、持续且稳定的做一件事?
  16. 一图抵千言《ARouter简明扼要原理分析》
  17. 数字图像处理:空间相关与卷积操作
  18. 追求最优选择的后果,往往是事与愿违,往往是善良的愿望,把人类带入了人间地狱
  19. stm32【 1.3寸LCD屏幕(2)】
  20. Hbuilder app开发之app启动图片

热门文章

  1. 一步步重构容器实现Spring框架——彻底封装,实现简单灵活的Spring框架(十一)...
  2. apache配置多https域名对应单个证书和多个不同的https域名对应多个不同的证书
  3. jQuery页面滚动右侧浮动导航切换
  4. Java线程栈的获取和分析
  5. PLSQL_PLSQL读和写XML文件方式(案例)
  6. [article]回忆录的开始
  7. Centos系统添加系统用户操作记录审计
  8. Spring Boot 使用 Log4j2
  9. KinedEditor特性
  10. 使用HAProxy、PHP、Redis和MySQL支撑每周10亿请求的架构细节【转】