其实,每次当我写一篇开发日记,并且这篇开发日记并没有关键词,或者我并没有和你扯东扯西的情况下...

这意味着我这天偷懒了= =

 ;AddTwo.asm --两个32位整数相加.386.model flat,stdcall.stack 4096ExitProcess PROTO, dwExitCode:DWORD.codemain PROCmov eax,5add eax,6INVOKE ExitProcess,0main ENDPEND main

还是从这么一个程序开始吧~

第三行:.386伪指令,表示这是一个32位程序,能访问32位寄存器和地址。

第四行:选择了程序的内存模式(flat),并确定了子程序的调用规范(称为stdcall)。其原因为32位windows服务要求使用stdcall规范。

第五行:运行时堆栈保留了4096字节的储存空间,每个程序都必须有。

第六行:声明了ExitProcess函数的原型,它是一个标准的Windows服务。原型包含了函数名,PROTO关键字,一个逗号,以及一个输入参数列表。ExitProcess的输入参数名称为dwExitCode。可以将其看作为给Windows操作系统的返回值,返回值为零,则表示程序执行成功;而任何其他的整数值都表示了一个错误代码。因此程序员可以将自己的汇编程序看做是被操作系统调用的子程序或过程。当程序准备结束时,他就调用ExitProcess,并向操作系统返回一个正式以表示该程序运行良好。

那么为什么要这么执行操作呢?

为什么操作系统想要知道程序是否成功完成?

答:与按序执行一些程序相比,系统管理员常常会创建脚本文件。在脚本文件中的每一个点上,系统管理员都需要知道刚执行的程序是否失败,这样就可以在必要时推出该脚本。脚本通常如下例所示,其中ErrorLevel1表示前一步的过程返回码大于或等于1;

call program_1
if ErrorLevel 1 goto FailedLabel
call program_2
if ErrorLevel 1 goto FailedLabel
:SuccessLabel
Echo Great, everything worked!

回到AddTwo程序清单。

第15行:用end伪指令来标记汇编的最后一行,同时他也标记了程序的入口(main)。标号main在第10行进行了声明,它标记了程序开始执行的地址。

开发日记-20190513 关键词 汇编语言(六)相关推荐

  1. 开发日记-20190914 关键词 汇编语言王爽版 第六章

    第六章 包含多个段的程序 前面的程序中,只有一个代码段.现在有一个问题是,如果程序需要用其他空间来存放数据,使用哪里呢?在第五章中,我们说0:200~0:2FF是相对安全的,可这段空间的容量只有256 ...

  2. 开发日记-20190515 关键词 汇编语言(八) MVVM

    PART 杂谈 现在是晚上8点14分,刚刚下班,最近刚刚一个项目完成了,其实很多时候,我真的感觉我们的项目缺乏挑战性,所以现在很多时候我仅仅是把自己当成一个成长中的代码美容师比较贴切一些. 最近其实真 ...

  3. 开发日记-20190501 关键词 汇编语言(启动) 基于x86处理器

    我不太喜欢我的大学生活,因为最后并没有按照我的想法继续发展下去,不过,事情都已经过去了,再去懊恼不是仅仅给自己徒增烦恼和给未来形成阻碍吗? 我仍记得大学有一门噩梦般的课程,为什么称之为噩梦,因为那时候 ...

  4. 开发日记-20190915 关键词 汇编语言王爽版 第十一章

    第十一章 标志寄存器 CPU内部的寄存器中,有一种特殊的寄存器(对于不同的处理器,个数和结构都可能不同)具有以下三种作用. (1)用来存储相关的指令的某些执行结果 (2)用来为CPU执行相关的指令提供 ...

  5. 开发日记-20190915 关键词 汇编语言王爽版 第十章

    第十章 CALL和RET指令 call 和ret指令都是转移指令,他们都修改IP,或同时修改CS和IP.他们经常被共同用来实现子程序的设计. 10.1 ret和retf ret指令用栈中的数据,修改I ...

  6. 开发日记-20190915 关键词 汇编语言王爽版 第九章

    第九章 转移指令的原理 可以修改IP或同事修改CS和IP和指令统称为转移指令.概括地讲,转移指令就是可以控制CPU执行内存中某处代码的指令. 8086CPU的转移行为有以下几类: 只修改IP时,称为段 ...

  7. 开发日记-20190914 关键词 汇编语言王爽版 第四章

    第四章 第一个程序 4.1 一个源程序从写出到执行的过程 第一步:编写汇编源程序 使用文本编辑器,用汇编语言编写汇编源程序 这一步工作的结果是产生一个储存源程序的文本文件. 第二步:对源程序进行编译程 ...

  8. 开发日记-20190913 关键词 汇编语言王爽版 第一章

    Preface 最近手机坏了,感觉心里挺不是滋味的,在各种方面,特别是钱!直到今天,我才知道钱真的是一种很重要的东西,以及苹果公司到底有多恶心. 真的很奇怪,为什么世界上就没有任何一家公司能和苹果公司 ...

  9. 开发日记-20190514 关键词 汇编语言(七)

    常常有这种冲动,想花钱= =,但是总感觉充游戏这类的毒品性消费又太过于无趣了,因为我还是很喜欢物质的那种存在感,所以还是喜欢买书.最近发现一个很令人无语的事实,就是貌似我读书的速度大概是我买书的速度的 ...

最新文章

  1. GitHub上中国顶尖大学的课程资源共享计划
  2. stm32之端口复用和重映射
  3. Linux一键安装web环境全攻略(阿里云服务器)
  4. 学过物理的人才能看懂的笑话,你能看明白几个?
  5. HTC S710D(电信版)G11解锁,成功ROOT
  6. 插件 KSImageNamed 用图片时自动显示图片缩略图
  7. Eclipse中不使用内嵌Maven
  8. spring+springmvc+hibernate 整合
  9. 【论文写作】毕业论文写作套路之正文(2)
  10. shell 命令 netstat 查看端口占用
  11. 穿越熊市?用 Python 自制指数估值图
  12. 《小强升职记》读书笔记
  13. 八、Identity Card
  14. 冰河浅析 - 揭开***的神秘面纱(下)
  15. 十行js代码实现windows上录屏功能
  16. 草根创业,这三大坑千万别踩
  17. 英特尔核显自定义分辨率_如何在新版英特尔核芯显卡控制面板中自定义显示器分辨率...
  18. Python下载微信公众号文章和图片保存至本地
  19. 力扣解题思路:位运算系列
  20. 老雷PHP教程,老雷socket編程之PHP利用socket擴展實現聊天服務

热门文章

  1. js实现横向跑马灯效果
  2. JAVA之JVM分代垃圾回收策略(一)
  3. mysql分库主键_分库主键设计-Mysql
  4. html 导航右侧弹出层,CSS导航栏及弹窗示例代码
  5. 地址突然就不对了_【装维大课堂】光猫的无线WiFi功能突然无法使用
  6. 服务器可以划分成虚拟主机,云服务器是虚拟主机吗
  7. 计算机视觉实习岗面试准备(一.基础知识)
  8. 一文读懂Faster R-CNN目标检测
  9. mysql拷贝恢复.frm_通过.frm .ibd文件恢复MySQL数据
  10. ppct各代表什么_开关背面L、L1、L2各代表什么?火线,零线,地线怎样接?