Masm使用及程序结构

1、使用编辑器建立源程序文件test1.asm:
edit test1.asm

内容如下:

Data segmentX1 db 1ahY1 db 2bhX2 dw 1234hY2 dw 0abcdh
Data ends
Stack segment para stackDb 10 dup(0)
Stack ends
Code segmentAssume cs:code,ds:data,ss:stack
Start:  mov ax,dataMov ds,axMov ax,x2Mov bx,y2Push ax            将ax压入堆栈,栈顶指针SP自动减2Mov dh,y1Mov ah,4chInt  21h
Code ends
End start

译这个源程序文件:masm test1.asm

有错则返回编辑修改,编译通过后连接:Link test1.obj

成功后用debug调入内存:debug test1.exe

画出内存中这3个段,标出段起始地址及段内存储的内容;
标出几个变量对应的偏移量(IP为指令指针寄存器,用来存放代码段中的偏移地址。在程序运行过程中,它始终指向下一条指令的首地址.)
标出栈底的位置
单步运行程序,观察ds的变化;观察相关寄存器;观察SP

Push ax 将ax压入堆栈,栈顶指针SP自动减2

结果可由图示:

数据区可由图示:

DS、SS是独立的段,DS存放数据,SS是栈数据结构。

此例中,若有如下操作:

mov ax,x1
mov bl,x2    将会怎样?说明什么?只有AX和BX寄存器里的内容发生变化,其他各寄存器不变。说明该操作只对数据段产生影响,不影响代码段和堆栈段。

2、编程完成字运算:W=X+Y-Z

源程序:

Data segmentX  dw  2Y  dw  3Z  dw  1W  dw  ?
Data ends
Stack segment  para stackDw 10 dup(0)
Stack ends
Code  segment
Assume cs:code,ds:data,ss:stack
Start:  mov ax,datamov ds,axmov ax,xadd ax,ysub ax,zmov w,axmov ah,4chint  21h
Code  ends
End  start

序编译通过。

可从数据段的起始地址d076A:0000查看内存,图示结果可见正确。

3、建立源程序test2.asm

Data segmentX1 db 1X2 db 2X3 db 3,4,5,6X4 dw 0ahX5 dw 0bh,0ch,12abh
Data ends
Stack segment para stackDb 10 dup(0)
Stack ends
Code segmentAssume cs:code,ds:data,ss:stack
Start:  mov ax,dataMov ds,axMov al,x3Mov bx,x5
Code ends
End start

译连接后用debug调入内存

画出数据段在内存中的存放情况,各个变量的位置(偏移量)

数据段段基址为076a

4、建立test3.asm

Data segmentX1 db ‘ABCDE’X2 db 41h,42h,43h,44h,45h
Data ends
Stack segment para stackDb 10 dup(0)
Stack ends
Code segmentAssume cs:code,ds:data,ss:stack
Start:  mov ax,dataMov ds,axMov al,x1Mov bl,x2
Code ends
End start

译连接后用debug调入内存

画出数据段在内存中的存放情况,各个变量的位置(偏移量)

数据段段基址为076a

所以A,B,C,D,E对应的ASCII码分别是41,42,43,44,45

5、建立test4.asm

Data segmentX1 db   6  dup(2)X2 dw   4  dup(1)
Data ends
Stack segment para stackDb 10 dup(0)
Stack ends
Code segmentAssume cs:code,ds:data,ss:stack
Start:  mov ax,dataMov ds,axMov al,x1Mov bl,x2
Code ends
End start

译连接后用debug调入内存

运行的截图我就不放了…

画出数据段在内存中的存放情况,各个变量的位置(偏移量)

数据段段基址为076a


6、建立test5.asm

Data segmentOrg 0004h
NUM  DB  75HARRAY  DW  20H  DUP(0)ADR1  DW  NUMADR2  DD  NUMADR3  DW  ARRAY[2]
Data ends
Stack segment para stackDb 10 dup(0)
Stack ends
Code segmentAssume cs:code,ds:data,ss:stack
Start:  mov ax,dataMov ds,axMov ax,adr1Mov bx,adr3
Code ends
End start

译连接后用debug调入内存

画出数据段在内存中的存放情况,各个变量的位置(偏移量)、内容

数据段段基址为076a,Org 0004h表示NUM的偏移量为0004h

NUM的偏移量为0004,内容为75H;
ARRAY偏移量为0005,内容为20H个字,占64个字节;
ADR1(字)的内容为NUM的偏移量,为0004;
ADR2(双字)的内容为NUM的偏移量,为076A0004;
ADR3(字)的内容为ARRAY的偏移量加2,为0007。

汇编——Masm使用及程序结构相关推荐

  1. 【汇编语言】多模块程序结构

    多模块程序结构 文章目录 多模块程序结构 一.多模块方法 (1)源文件包含 (2)模块连接 (3)子程序库和库文件包含 1.子程序库 2.库文件包含 二.宏汇编 (1)宏汇编的定义 (2)宏定义.宏调 ...

  2. 80X86汇编_绘制五角星程序

    80X86汇编_绘制五角星程序 DATAS SEGMENT mode  dw 0 COLOR DW 12 BKCOLOR DW 15 POINT dw 160,200,480,200,480,200, ...

  3. 汇编语言(四) - 程序结构

    简介 掌握汇编语言程序设计方法 顺序程序结构 分支程序结构 循环程序结构 重点 控制转移指令 转移指令的寻址方式 编制汇编语言程序的步骤 分析问题,确定算法 找出合理的算法及适当的数据结构 根据算法画 ...

  4. 汇编实验 使用汇编编写音乐播放程序,编写3个以上乐曲,在播放之前可以选择播放的曲目

    内容: 使用汇编编写音乐播放程序,编写3个以上乐曲,在播放之前可以选择播放的曲目 思路: 子程序说明: .8086: stacks segmentstack db 256h dup(0) stacks ...

  5. 2021年大数据Flink(三十一):​​​​​​​Table与SQL案例准备 依赖和​​​​​​​程序结构

    目录 案例准备 依赖 ​​​​​​​程序结构 ​​​​​​​案例准备 依赖 https://ci.apache.org/projects/flink/flink-docs-release-1.12/d ...

  6. [转]使用设计模式改善程序结构(二)

    使用设计模式改善程序结构(二) 在本系列的 第一篇文章中,描述了如何通过设计模式来指导我们的程序重构过程,并且着重介绍了设计模式意图.动机的重要性.在本文中我们将继续上篇文章进行讨论,这次主要着重于设 ...

  7. 简述python程序结构_Python程序结构

    Python中有三种程序结构:顺序结构.选择结构.循环结构 顺序结构:python是一门解释型语言,它的执行过程一般是解释一行,执行一行. 选择结构:python中只有一种选择结构:if-else选择 ...

  8. C#程序结构 基本语法

    在学习 C# 编程语言的基本构建块之前,先来看一下最简单的 C# 程序结构,以便将其作为即后续章节的学习参考. 创建Hello World程序 这个简单的 C# 程序由以下部分组成: 命名空间声明 一 ...

  9. c++程序目录结构_C程序结构

    C程序结构 进入我们的编程入门程序Hello world实例: C 程序主要包括以下部分: 预处理器指令 函数 变量 语句 & 表达式 注释 输出hello world程序: #include ...

  10. 《Arduino开发实战指南:LabVIEW卷》——3.5 LabVIEW的程序结构

    本节书摘来自华章计算机<Arduino开发实战指南:LabVIEW卷>一书中的第3章,第3.5节,作者:余崇梓著, 更多章节内容可以访问云栖社区"华章计算机"公众号查看 ...

最新文章

  1. R语言optim函数进行函数优化实战(和lm函数进行对比)
  2. piczoom兼容性问题_浏览器不兼容原因及解决办法
  3. 国产期刊崛起!上海大学、郑州大学主办期刊IF超15,2021版SCI期刊影响因子出炉...
  4. 用JSP实现上传文件的两种方法
  5. python练习集100题_8道关于python的练习题
  6. 工业级以太网交换机与普通商用交换机相比,在性能上有哪些优势?
  7. 开发一个大数据网站做的铺垫
  8. 动手学深度学习(PyTorch实现)(七)--LeNet模型
  9. qt翻译--QDragMoveEvent拖放类
  10. SAP License:SAP顾问是如何炼成的——我所理解的SAP顾问
  11. 机器视角:长文揭秘图像处理和卷积神经网络架构
  12. Pytorch forward()的简单理解与用法
  13. Spring-xsd文件-配置文件
  14. Deepo:几乎包含所有主流深度学习框架的Docker镜像
  15. protobuf静态库隐藏符号的坑
  16. 机器人学: 建模 规划与控制(英文原版)_伦敦大学国王学院机器人学理学硕士研究生offer一枚...
  17. BRAC模型 权限表设计
  18. ARGOX CP-2140MPPLB18X60药柜
  19. 公路建设路缘石有路缘石滑模机来帮忙
  20. 《联想本有更好的路走》《杨元庆会不会掉队》《少帅杨元庆》

热门文章

  1. visual studio C++冒号:与双冒号::的使用说明
  2. 大厂面试预备篇——《两万字MySql基础总结》❤️建议收藏
  3. 什么是HDMI网线延长器?浅析HDMI1.3网线延长器原理和应用
  4. 基于R语言的Kaggle案例分析学习笔记(七)
  5. 基金暴跌年轻人为什么躲不过被割?
  6. 红蓝军模拟对抗三维电子沙盘开发教程第十课 wpf建立3D GIS数字地球
  7. 全国书画艺术之乡-----通渭
  8. 第三方配件查验苹果MFi认证
  9. Flash打造拟真生态水族鱼缸
  10. 玩物得志:效率为王!如何构建大数据平台?