本文是《汇编语言》一书的学习笔记,对应书中的4-6章。

汇编程序的执行

要想将源代码变为可执行的程序需经过编译、连接两个步骤,WIN7操作系统下需要MASM程序来进行编译连接工作。将MASM和Debug安装在E:\Software\assembly目录下并新建code文件夹,创建汇编源程序1.asm,使用masm命令编译,link命令连接。

 ;演示的小程序

 assume cs:code
code segment mov ax,
mov bx,
add ax,bx
sub bx, mov ax,4c00h
int 21h code ends end

执行link命令后assembly目录下生成1.exe和1.obj两个文件,1.obj为编译过程中的目标文件,1.exe即可执行的二进制文件。1.obj中存储着远程需的描述信息,程序的大小、占用多少空间,当然还有翻译成机器码的源程序代码。

生成1.exe可执行文件后,用debug命令跟踪调试程序。

r命令查看寄存器信息,u命令查看内存中的程序代码。使用Debug加载程序后,ds存储程序开始的段地址,cs指向第一行代码。在ds和cs之间有一段大小为256字节的空间,称为程序段前缀,所以ds-cs=10H。

[bx]

[bx]表示将bx中的值(bx)作为偏移地址来表示一个内存单元,段地址在ds中,也可以显示的指定段地址即ds:[bx]。

loop

loop是循环指令,循环执行从标号开始的内容,下面是计算2^5的代码。

 ;演示2^5的小程序

 assume cs:code

 code segment

     mov ax,
mov cx,
s: add ax,
loop s mov ax,4c00h
int 21h code ends end

cx中存储的是循环次数,s是标号,执行到loop s会先将cx-1判断cx是否=0,若不等于0则执行s处代码。

最新文章

  1. 【BZOJ1001】狼抓兔子
  2. poj1655 树的重心 树形dp
  3. 线段树(多棵) HDOJ 4288 Coder
  4. PHP的三种输出方式
  5. .net使用FluentValidation进行服务端验证。
  6. yum命令指南-yum使用方法
  7. Diablo3
  8. 【gradle】之maven主库找不到Could not find org.restlet.jee:org.restlet:2.1.1
  9. 给Qt应用程序添加图标文件ico setWindowIcon
  10. 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条
  11. 【Netty】(5)源码 Bootstrap
  12. dotnet core使用开源组件FastHttpApi进行web应用开发
  13. Kafka 详解(二)------集群搭建
  14. 零基础python入门(1)
  15. linux 命令 — sed
  16. js添加锚点
  17. Ado.Net实体数据模型EF,如何在代码中添加数据库连接密码
  18. 【Linux高级驱动】平台设备驱动机制的编程流程与编译进内核
  19. 缓存 Memached
  20. 启动mongodb出现的问题

热门文章

  1. rabbitmq 消息持久化
  2. 10.11 noip模拟试题
  3. RecyclerView实例-实现可下拉刷新上拉加载更多并可切换线性流和瀑布流模式(1)
  4. java 反射调用支付SDK
  5. ios地图小例子和手势的使用 供大家参考一下呦
  6. idea 配置node Run
  7. java_设计模式_模板方法模式_Template Method Pattern(2016-08-11)
  8. PS2251-07 海力士(金士顿U盘量产,成功!)
  9. 『重构--改善既有代码的设计』读书笔记----Remove Middle Man
  10. LI 导航