汇编——Masm使用及程序结构
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)源文件包含 (2)模块连接 (3)子程序库和库文件包含 1.子程序库 2.库文件包含 二.宏汇编 (1)宏汇编的定义 (2)宏定义.宏调 ...
- 80X86汇编_绘制五角星程序
80X86汇编_绘制五角星程序 DATAS SEGMENT mode dw 0 COLOR DW 12 BKCOLOR DW 15 POINT dw 160,200,480,200,480,200, ...
- 汇编语言(四) - 程序结构
简介 掌握汇编语言程序设计方法 顺序程序结构 分支程序结构 循环程序结构 重点 控制转移指令 转移指令的寻址方式 编制汇编语言程序的步骤 分析问题,确定算法 找出合理的算法及适当的数据结构 根据算法画 ...
- 汇编实验 使用汇编编写音乐播放程序,编写3个以上乐曲,在播放之前可以选择播放的曲目
内容: 使用汇编编写音乐播放程序,编写3个以上乐曲,在播放之前可以选择播放的曲目 思路: 子程序说明: .8086: stacks segmentstack db 256h dup(0) stacks ...
- 2021年大数据Flink(三十一):Table与SQL案例准备 依赖和程序结构
目录 案例准备 依赖 程序结构 案例准备 依赖 https://ci.apache.org/projects/flink/flink-docs-release-1.12/d ...
- [转]使用设计模式改善程序结构(二)
使用设计模式改善程序结构(二) 在本系列的 第一篇文章中,描述了如何通过设计模式来指导我们的程序重构过程,并且着重介绍了设计模式意图.动机的重要性.在本文中我们将继续上篇文章进行讨论,这次主要着重于设 ...
- 简述python程序结构_Python程序结构
Python中有三种程序结构:顺序结构.选择结构.循环结构 顺序结构:python是一门解释型语言,它的执行过程一般是解释一行,执行一行. 选择结构:python中只有一种选择结构:if-else选择 ...
- C#程序结构 基本语法
在学习 C# 编程语言的基本构建块之前,先来看一下最简单的 C# 程序结构,以便将其作为即后续章节的学习参考. 创建Hello World程序 这个简单的 C# 程序由以下部分组成: 命名空间声明 一 ...
- c++程序目录结构_C程序结构
C程序结构 进入我们的编程入门程序Hello world实例: C 程序主要包括以下部分: 预处理器指令 函数 变量 语句 & 表达式 注释 输出hello world程序: #include ...
- 《Arduino开发实战指南:LabVIEW卷》——3.5 LabVIEW的程序结构
本节书摘来自华章计算机<Arduino开发实战指南:LabVIEW卷>一书中的第3章,第3.5节,作者:余崇梓著, 更多章节内容可以访问云栖社区"华章计算机"公众号查看 ...
最新文章
- R语言optim函数进行函数优化实战(和lm函数进行对比)
- piczoom兼容性问题_浏览器不兼容原因及解决办法
- 国产期刊崛起!上海大学、郑州大学主办期刊IF超15,2021版SCI期刊影响因子出炉...
- 用JSP实现上传文件的两种方法
- python练习集100题_8道关于python的练习题
- 工业级以太网交换机与普通商用交换机相比,在性能上有哪些优势?
- 开发一个大数据网站做的铺垫
- 动手学深度学习(PyTorch实现)(七)--LeNet模型
- qt翻译--QDragMoveEvent拖放类
- SAP License:SAP顾问是如何炼成的——我所理解的SAP顾问
- 机器视角:长文揭秘图像处理和卷积神经网络架构
- Pytorch forward()的简单理解与用法
- Spring-xsd文件-配置文件
- Deepo:几乎包含所有主流深度学习框架的Docker镜像
- protobuf静态库隐藏符号的坑
- 机器人学: 建模 规划与控制(英文原版)_伦敦大学国王学院机器人学理学硕士研究生offer一枚...
- BRAC模型 权限表设计
- ARGOX CP-2140MPPLB18X60药柜
- 公路建设路缘石有路缘石滑模机来帮忙
- 《联想本有更好的路走》《杨元庆会不会掉队》《少帅杨元庆》