2014年3月4日 星期二 23时11分30秒
第六章 包含多个段的程序
0:200~ 0:2FF 是相对安全的。但这段空间只有256个字节。
程序取得空间的两种方法:一是在加载程序的时候为程序分配,二是程序在执行过程中向系统申请
6.1 在代码中使用数据
assume cs:code
code segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
start: mov bx,0
mov ax,0
mov cx,8
s: add ax,cs:[bx]
add bx,2
loop s
mov ax,4c00h
int 21h
code ends
end start
dw 的含义是定义字型数据。
伪指令end的作用不仅可以通知编译器程序结束处,还可以通知编译器程序的入口在什么地方。即mov bx,0 是程序的第一条指令。
6.2 在代码段中使用栈
assume cs:code
code segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
start:
mov ax,cs
mov ss,ax
mov sp,30h
mov bx,0
mov cx,8
s:push cs:[bx]
add bx,2
loop s
mov bx,0
mov cx,8
s0:pop cs:[bx]
add bx,2
loop s0
mov ax,4c00h
int 21h
code ends
end start
6.3 将数据,代码,栈放入不同的段
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,0,0,0,0,0,0,0,0
stack ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,20h ;设置栈顶ss:sp指向stack:20
mov ax:data
mov ds:ax ;ds指向data段
mov cx,8
mov bx,0 ;ds:bx指向data段中的第一个单元
s:push ds:[bx]
add bx,2
loop s ;将data段中的0-15个单元中的8个字型数据依次入栈
mov bx,0
mov cx,8
s0:pop [bx]
add bx,2
loop s0 ;以上依次出栈8个字型数据到data段的0-15个单元中
mov ax,4c00h
int 21h
code ends
end start
(1)定义多个段的方法
(2)对段地址的引用
地址分为段地址和偏移地址。在程序中,段名就相当于一个标号,它代表了段地址。所以指令"mov ax:data"的含义就是将
名称为"data"的段地址送入ax。偏移地址就要看它在段中的位置了。例如程序"data"段中的数据"0abch"的地址就是"data:6"。
要将它送入bx,则要用如下的代码:
mov ax,data
mov ds,ax
mov bx,ds:[6]
不能用如下的命令:
mov ds,data
mov bx,ds:[6]
因为8086CPU不允许将一个数值直接送入段寄存器中。
程序中对段名的引用,如指令"mov ds,data"中的"data"将被编译器处理为一个表示短地址的数值。
(3)"代码段","数据段","栈段"完全是我们的安排
实验5 编写,调试具有多个段的程序
assume cs:code, ds:data,ss:stack
code segment
start:mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
data segment
dw 0123h,0456h
data ends
stack segment
dw 0,0
stack ends
end start
这样写,即使去掉start也能正确执行,因为程序默认的入口是程序的第一条指令。
--------------
;(5)将a段和b段中的数据依次相加,结果存入c段中。
assume cs:code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
c segment
db 8,7,6,5,4,3,2,1
c ends
code segment
start:mov cx,8
mov bx,0
mov ax,a
mov ds,ax
s:
mov al,ds:[bx]
add al,ds:[bx+16]
mov ds:[bx+32],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
----------------------
相加前的数据:
相加后的数据:
DW 定义一个字
DB 定义一个字节
DD 定义一个双字
前面的D表示定义,后面的字母W 、B 、D依次表示字(一般为16位)、字节(为8位)、双字(一般为32位),它们起的作用,一般是在程序中作变量使用。
(6)
;(6)程序如下,编写code段中的代码,用push指令将a段中的前8个字型数据,逆序存储到b段中
assume cs:code
a segment
dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code segment
start:
mov ax,a
mov ds,ax
mov ax,b
mov ss,ax
mov sp,16
mov cx,8
mov bx,0
s:push ds:[bx]
add bx,2
loop s
mov ax,4c00h
int 21h
code ends
end start
执行前的数据:
执行后的数据:
2014-4-7 20:45 记 @sanlihe.xichengqu.beijing
分享到:
相关推荐
在本实验中,我们将深入探讨Java程序设计的第六章,这一章通常涵盖了更高级的主题,可能包括类、对象、继承、多态性等核心概念。这些主题是Java面向对象编程的基础,也是理解Java强大功能的关键。 首先,让我们讨论...
Java程序设计基础篇是学习Java编程的入门教材,其第六章通常涵盖了面向对象编程的核心概念。在这个章节中,学生会接触到类、对象、继承、封装和多态等关键概念。编程题是理解和掌握这些概念的重要实践环节。由于本书...
在Java程序设计与数据结构的学习过程中,第六章通常会涵盖数据结构的重要概念和应用,以及如何用Java语言来实现它们。这一章的内容可能包括数组、链表、栈、队列、树、图等基础数据结构,也可能涉及排序和查找算法。...
《IBM-PC汇编语言程序设计(第二版)第六章答案》主要涵盖了IBM个人计算机上汇编语言编程的关键概念和技巧。汇编语言是计算机科学的基础之一,它是一种低级编程语言,允许程序员直接控制硬件操作,对于理解计算机...
《标准C程序设计第六版》第一章的课后习题涵盖了C语言的基础概念和基本操作,是初学者理解和掌握C语言的重要途径。以下是对这些习题的解析和知识点概述: 1. **基本数据类型与变量**(如1002.c) - C语言中的基本...
**标题解析:**"JAVA语言程序设计-第六章 面向对象的程序设计概念" 在Java编程中,面向对象的程序设计(Object-Oriented Programming,简称OOP)是核心概念之一。这一章通常会深入讲解OOP的四大基本特征:封装、...
总的来说,"Accp6.0 S1 JAVA 理解程序逻辑 第6章"是一个全面的Java学习资源,它包含了初学者所需的所有基本元素,旨在帮助他们建立坚实的编程基础,逐步掌握程序设计的逻辑思维。对于想要进入IT行业的初学者来说,这...
C++程序设计课件:第6章 程序结构 本章主要内容包括程序结构、存储类型、作用域、可见性、生命期、头文件、多文件结构、编译预处理等。 1. 存储类型 在 C++ 中,变量有 4 种存储类型:自动类型(auto)、寄存器...
第六章是程序设计的一个关键部分,通常涵盖更高级的概念和技术,包括函数、指针、结构体以及内存管理等核心主题。下面,我们将深入探讨这些知识点,并结合习题来提升你的理解。 1. **函数**: 函数在C语言中是代码...
在《Python编程实践》一书中,第6章针对Python的多个核心知识点设计了丰富的练习题,并提供了详尽的解答,旨在帮助读者深入理解并巩固Python语言的特性。 首先,第6章通过介绍Python的基本语法和数据类型,为读者...
第六章的内容在“VC++面向对象与可视化程序设计(第三版)黄维通”中主要聚焦于面向对象编程(OOP)的概念以及如何利用Microsoft Visual C++(VC++)进行可视化程序设计。黄维通老师的这本书是许多学习者深入理解C++...
C语言程序设计第六章函数 C语言程序设计第六章函数是C语言程序设计中的一部分,主要讲解了函数的概念、特点、分类和使用方式。 函数是一段程序,它完成特定的任务,使用它时可用简单的方法为其提供必要的数据,...
但是,我可以根据标题和描述中提到的“Java语言程序设计基础篇第六版英文课后习题答案”,介绍一些Java语言程序设计的基础知识点,这些知识点可能出现在该书的课后习题中。 Java是一种广泛使用的面向对象的编程语言...
第六章的PPT主要讲解了子程序设计的基本方法,包括子程序的设计、调用、返回以及参数传递。 子程序,也被称为函数或过程,是一段完成特定任务的代码,可以被主程序多次调用。使用子程序的好处在于它们能提供重复性...
第六章“循环结构”讲解了for、while和do-while循环,这些都是编程中反复执行某段代码的常用手段。理解和熟练运用这些循环结构是编写高效算法的基础。本章的习题有助于提升读者对循环的理解和运用能力。 第七章...
Java语言程序设计基础篇第六版的第二章和第三章主要涵盖了Java编程的基础概念和技术,是初学者进入Java世界的关键步骤。下面将详细讲解这两个章节的知识点。 第二章:Java编程环境与基本语法 1. **Java开发工具**...
本资源是 Java 语言程序设计(郑莉)第三章课后习题答案的详细解析,涵盖了多个编程题目,涉及到 Java 语言的基础知识、算法和程序设计。下面是每个题目的详细解释和知识点总结: 1. 设 N 为自然数:n!=1*2*3*….*...
在Java程序设计与数据结构的学习过程中,第九章通常会涵盖数据结构的重要概念和应用,包括数组、链表、栈、队列、树等基础数据结构,以及如何利用这些数据结构来解决问题。本资源提供了第九章的习题答案,旨在帮助...