`

第六章 包含多个段的程序

阅读更多
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
0
0
分享到:
评论

相关推荐

    JAVA程序设计实验代码(第六章)

    在本实验中,我们将深入探讨Java程序设计的第六章,这一章通常涵盖了更高级的主题,可能包括类、对象、继承、多态性等核心概念。这些主题是Java面向对象编程的基础,也是理解Java强大功能的关键。 首先,让我们讨论...

    Java程序设计基础篇(第8版)第六章编程题答案

    Java程序设计基础篇是学习Java编程的入门教材,其第六章通常涵盖了面向对象编程的核心概念。在这个章节中,学生会接触到类、对象、继承、封装和多态等关键概念。编程题是理解和掌握这些概念的重要实践环节。由于本书...

    IBM-PC汇编语言程序设计(第二版)第六章答案

    《IBM-PC汇编语言程序设计(第二版)第六章答案》主要涵盖了IBM个人计算机上汇编语言编程的关键概念和技巧。汇编语言是计算机科学的基础之一,它是一种低级编程语言,允许程序员直接控制硬件操作,对于理解计算机...

    Java程序设计与数据结构第六章习题答案

    在Java程序设计与数据结构的学习过程中,第六章通常会涵盖数据结构的重要概念和应用,以及如何用Java语言来实现它们。这一章的内容可能包括数组、链表、栈、队列、树、图等基础数据结构,也可能涉及排序和查找算法。...

    标准c程序设计第六版第一章习题

    《标准C程序设计第六版》第一章的课后习题涵盖了C语言的基础概念和基本操作,是初学者理解和掌握C语言的重要途径。以下是对这些习题的解析和知识点概述: 1. **基本数据类型与变量**(如1002.c) - C语言中的基本...

    JAVA语言程序设计-第六章 面向对象的程序设计概念

    **标题解析:**"JAVA语言程序设计-第六章 面向对象的程序设计概念" 在Java编程中,面向对象的程序设计(Object-Oriented Programming,简称OOP)是核心概念之一。这一章通常会深入讲解OOP的四大基本特征:封装、...

    Accp6.0 S1 JAVA 理解程序逻辑 第6章

    总的来说,"Accp6.0 S1 JAVA 理解程序逻辑 第6章"是一个全面的Java学习资源,它包含了初学者所需的所有基本元素,旨在帮助他们建立坚实的编程基础,逐步掌握程序设计的逻辑思维。对于想要进入IT行业的初学者来说,这...

    C++程序设计课件:第6章 程序结构.ppt

    C++程序设计课件:第6章 程序结构 本章主要内容包括程序结构、存储类型、作用域、可见性、生命期、头文件、多文件结构、编译预处理等。 1. 存储类型 在 C++ 中,变量有 4 种存储类型:自动类型(auto)、寄存器...

    c语言程序设计现代方法第6章习题

    第六章是程序设计的一个关键部分,通常涵盖更高级的概念和技术,包括函数、指针、结构体以及内存管理等核心主题。下面,我们将深入探讨这些知识点,并结合习题来提升你的理解。 1. **函数**: 函数在C语言中是代码...

    VC++面向对象与可视化程序设计(第三版)黄维通 第六章

    第六章的内容在“VC++面向对象与可视化程序设计(第三版)黄维通”中主要聚焦于面向对象编程(OOP)的概念以及如何利用Microsoft Visual C++(VC++)进行可视化程序设计。黄维通老师的这本书是许多学习者深入理解C++...

    C语言程序设计第六章函数.ppt

    C语言程序设计第六章函数 C语言程序设计第六章函数是C语言程序设计中的一部分,主要讲解了函数的概念、特点、分类和使用方式。 函数是一段程序,它完成特定的任务,使用它时可用简单的方法为其提供必要的数据,...

    清华钱能C++程序设计教程第八章第六题代码

    【标题】"清华钱能C++程序设计教程第八章第六题代码"涉及到的是C++编程语言的学习,特别是针对清华大学钱能教授编著的C++程序设计教程中的一个课后习题解答。C++是一种中级语言,它结合了高级语言的易读性和低级语言...

    Java语言程序设计基础篇第六版英文课后习题答案

    但是,我可以根据标题和描述中提到的“Java语言程序设计基础篇第六版英文课后习题答案”,介绍一些Java语言程序设计的基础知识点,这些知识点可能出现在该书的课后习题中。 Java是一种广泛使用的面向对象的编程语言...

    第六章-子程序设计PPT.ppt

    第六章的PPT主要讲解了子程序设计的基本方法,包括子程序的设计、调用、返回以及参数传递。 子程序,也被称为函数或过程,是一段完成特定任务的代码,可以被主程序多次调用。使用子程序的好处在于它们能提供重复性...

    谭浩强版C程序设计(第三版) 第五章到第十三章答案

    第六章“循环结构”讲解了for、while和do-while循环,这些都是编程中反复执行某段代码的常用手段。理解和熟练运用这些循环结构是编写高效算法的基础。本章的习题有助于提升读者对循环的理解和运用能力。 第七章...

    java语言程序设计基础篇第六版二三章答案

    Java语言程序设计基础篇第六版的第二章和第三章主要涵盖了Java编程的基础概念和技术,是初学者进入Java世界的关键步骤。下面将详细讲解这两个章节的知识点。 第二章:Java编程环境与基本语法 1. **Java开发工具**...

    Java语言程序设计(郑莉)第三章课后习题答案.pdf

    本资源是 Java 语言程序设计(郑莉)第三章课后习题答案的详细解析,涵盖了多个编程题目,涉及到 Java 语言的基础知识、算法和程序设计。下面是每个题目的详细解释和知识点总结: 1. 设 N 为自然数:n!=1*2*3*….*...

    Java程序设计与数据结构第九章习题答案

    在Java程序设计与数据结构的学习过程中,第九章通常会涵盖数据结构的重要概念和应用,包括数组、链表、栈、队列、树等基础数据结构,以及如何利用这些数据结构来解决问题。本资源提供了第九章的习题答案,旨在帮助...

Global site tag (gtag.js) - Google Analytics