[汇编语言]-第六章 包含多个段的程序 将数据,代码,栈放入不同的段
2014-02-12 14:52
453 查看
assume cs:code,ds:data,ss:stack data segment dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H data ends stack segment dw 0,0,0,0,0,0,0,0 stack ends code segment start: mov ax,stack mov ss,ax mov sp,16 ;将设置栈顶ss:sp指向stack:16 mov ax,data mov ds,ax ;ds指向data mov bx,0 ;ds:bx指向data段中第一个单元 mov cx,8 s: push [bx] add bx,2 loop s ;将以上代码段0-16单元中的8个字符型数据依次入栈 mov bx,0 mov cx,8 s0: pop [bx] add bx,2 loop s0 ;以上依次出栈8个字符型数据到代码段0-16单元中 mov ax,4c00H int 21h code ends end start ;指名程序的入口在start处
1- 程序中有多个段,如何访问段中数据? 通过地址,段地址:偏移地址
在程序中段名就相当于一个段号,它代表了段地址.
mov ax,data //将名称为data的段地址送入ax
2- Debug运行程序后 cx = 0050 表示整个code段为 50Byte
段地址+1 表示偏移地址+16
0B60-0B61中间有0-F个字节
想要存储50Byte的字节程序,需要50/16=3表示段地址+3
code起始段地址为0B60则存储完代码后的段地址为0B62,如在接data段,则data段的段地址起始为0B63
3-如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为((N+15)/16)*16
N分为被16整除和不被16整除。
当N被16整除时: 占有的空间为(N/16)*16
当N不被16整除时: 占有的空间为(N/16+1)*16,N/16得出的是可以整除的部分,还有一个余数,余数肯定小于16,加上一个16。
两种情况总结成一个通用的公式:((N+15)/16)*16
相关文章推荐
- 微软、百度、联想等名企面试笔试题60题(C++)
- Qt: 中文-常量中有换行符
- C++之多态与虚函数
- 项目中不能双击打开xml文件
- java定时任务,每天定时执行任务
- C语言函数返回值不能直接写数组
- [Leetcode] Valid Palindrome (Java)
- php amqp消息队列教程1-代码实现实例
- gabor函数学习
- VB.net 学习资源
- php amqp消息队列教程1-了解amqp协议
- C++ fstream文件读写操作
- php array_map详解
- struts2实现等待页面
- ThinkPHP支持的URL模式有四种
- myeclipse优化[文章是转的出处没找到不好意思]
- Unix(cubian of cubieboard2)自启动与FTP服务架设
- ASP.NET MVC统一异常处理
- 要想让控件的长宽比随着窗口大小变化而自动调整,下面两个属性必须好好领会掌握。
- java中double类型不以科学计数法表示