《汇编语言》-第6章-包含多个段的程序_第1页
《汇编语言》-第6章-包含多个段的程序_第2页
《汇编语言》-第6章-包含多个段的程序_第3页
《汇编语言》-第6章-包含多个段的程序_第4页
《汇编语言》-第6章-包含多个段的程序_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章包含多个段的程序掌握在程序中同时使用数据段、堆栈段和代码段。理解内存中不同段的分配原理。1补全下面程序将内存0:300H—0:31FH处的数据复制到0:200H处。XX00300HXX00301HXX00302HXX00303HXX00304HXX00305HXX00306H.........XX0031EHXX0031FH00200H00201H00202H00203H00204H00205H00206H...0021EH0021FHAssume cs:codeCode segment movax,

movds,ax movax,0020h moves,ax movbx,0 movcx,

S: moval,[bx] moves:[bx],al incbx loops movax,4c00h int21hCode endsend0030h0020h2补全下面程序将“movax,4c00h”之前的指令复制到内存0:200H处。XXXXXXXXXXXXXX......XXXX00200H00201H00202H00203H00204H00205H00206H...0021EH0021FHAssume cs:codeCode segment movax,

movds,ax movax,0020h moves,ax movbx,0 movcx,

S: moval,[bx] moves:[bx],al incbx loops movax,4c00h int21hCode endsendCS23PSPCS:0DS:0DS:FF3一、在代码段中使用数据(将数据定义在代码段中)例:计算以下8个数据的和,结果保存在AX中:0123H,0456H,0789H,0ABCH,0DEFH,0FEDH,0CBAH,0987H。思路1:MOVAX,0ADDAX,0123HADDAX,0456HADDAX,0789H . . .ADDAX,0CBAHADDAX,0987H思路2:MOVAX,XXXXHMOVDS,AXMOVBX,0MOVCX,nMOVAX,0S:ADDAX,[BX]ADDBX,2LOOPS23XXXX0156048907..094将数据定义在代码段中ASSUME CS:CODECODE SEGMENT DW 0123H,0456H,0789H, 0ABCH,0DEFH, 0FEDH,0CBAH,0987H MOV BX,0 MOV AX,0 MOV CX,8S: ADD AX,CS:[BX] ADD BX,2 LOOP S MOV AX,4C00H INT 21HCODE ENDSEND 定义数据伪指令:DW—字型数据DB—字节型数据DD—双字数据格式:DW(DB)数据1,数据2,数据3,……23015604..BA0C8709BB0000B80000..CS:0CS:0F5ASSUME CS:CODECODE SEGMENT DW0123H,0456H,0789H,0ABCH, 0DEFH,0FEDH,0CBAH,0987HSTART: MOV BX,0 MOV AX,0 MOV CX,0S: ADD AX,CS:[BX] ADD BX,2 LOOP S MOV AX,4C00H INT 21HCODE ENDSEND START

END 标号标号—为程序中第一条要执行的指令的标号。在编译中向编译器提供程序的入口地址和结束地址。6二、在代码段中使用栈利用堆栈,编程将程序中定义的数据逆序存放。Assume cs:codeCode segmentDw0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hCode endsend23015604..数据BA0C8709..CS:0CS:0FDw 0,0,0,0,0,0,0,00000……0000CS:10CS:1F栈段Start: movax,cs movss,ax movsp,

movbx,0 movcx,8S: pushcs:[bx] addbx,2 loops movbx,0 movcx,8S0: popcs:[bx] addbx,2 loops0 movax,4c00h int21h Code endsEnd start20h7检测点6.1

补全程序,使下面程序实现依次用内存0:0—0:F单元中的内容改写程序中的数据。Assume cs:codeCode segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hStart: movax,0 movds,ax movbx,0 movcx,8S: movax,[bx]

addbx,2 loops mov ax,4c00h int 21hCode endsEnd startMovcs:[bx],ax8检测点6.2

补全程序,使下面程序实现依次用内存0:0—0:F单元中的内容改写程序中的数据,数据的传送用栈来进行,栈空间设置在程序内。dw

0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hdw 0,0,0,0,0Start: movax,

movss,ax movsp,

movax,0 movds,ax mov bx,0 mov cx,8S: push [bx]

add bx,2 loop s mov ax,4c00h int 21hcs26(1Ah)popcs:[bx]9三、将数据、代码、栈放入不同的段1、定义多个段的方法:同定义代码段一样,我们可以分别定义数据和栈段。ASSUME CS:CODE,DS:DATA,SS:STACKSTACK SEGMENT |STACK ENDSDATA SEGMENT |DATA ENDSCODE SEGMENT |CODE ENDS |2、对段地址的引用:每个段的名称对应着该段的段地址。103、“代码段”、“数据段”、“栈段”完全是我们的安排:数据、堆栈、代码在加载到内存时是在地址连续的一段内存空间上。我们在源程序中为每个段起上名字只是为了便于阅读程序,并可以借用该名字(标号)所在的段地址。我们在源程序中用伪指令ASSUMECS:CODE,DS:DATA,SS:STACK进行段分配后,CPU并不能自动将段寄存器指向该段。程序刚加载到内存时,CS可根据END标号来指向程序入口地址,而DS和ES的值为PSP的段地址;SS为DS+10H。所以在源程序中我们要通过指令初始化DS,ES和SS的值。11汇编语言源程序的结构

一般来说,一个完整的汇编源程序应由三个程序段组成,即代码段、数据段和堆栈段,每个段都以SEGMENT开始,以ENDS结束,代码段包含程序要执行的指令;堆栈段用来在内存中建立一个堆栈区;数据段用来在内存中建立一个适当容量的工作区,以存放程序中所需的数据。注意:一个源程序中,代码段是必须的,而数据段和堆栈段可以没有或有其中一个。段定义时一般最后定义代码段。ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTACK SEGMENT DB 500 DUP(0)STACK ENDSDATA SEGMENTDATA ENDSCODE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论