下载此文档

汇编语言程序设计.ppt


文档分类:IT计算机 | 页数:约64页 举报非法文档有奖
1/64
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/64 下载此文档
文档列表 文档介绍
汇编语言程序设计1第四章汇编语言程序设计(2)?汇编语言源程序的另一种结构?汇编语言中的操作数?Dos 功能调用?汇编语言程序设计举例堆栈段数据段代码段?一个基本的汇编语言程序框架如下:返回stackSEGMENT PARA ‘stack‘;定义作为堆栈段的逻辑段,段名为stack DB 100 DUP(‘?’) ;定义堆栈长度top LABLE word ;定义栈底位置stack ENDS data SEGMENT ;定义作为数据段的逻辑段,段名为data<数据、变量在此定义>data ENDScode SEGMENT ;定义作为代码段的逻辑段,段名为code ASSUME CS:code, DS:data, ES:data,SS:stackstart: MOV AX, data ;程序执行起始点MOV DS, AX MOV ES, AX;将各个段寄存器指向用户定义的各个逻辑段;MOV AX,stack;MOV SS, AX ;MOV SP, OFFSET TOP<此处加入你自己的程序段>MOV AL, 4CH ;系统功能调用,程序结束返回操作系统OS INT 21Hcode ENDS END start;汇编结束,程序起始点为start汇编语言程序设计3关于源程序结构的几点说明?在代码段中,assume语句只给出了各个段寄存器和各个自定义段的关系,并没有给各个段寄存器真正赋值。?段寄存器的赋值还要由程序本身来完成,如我们用到mov ax,data mov ds,ax mov es,ax给ds和es赋值。第一条指令,将段基址送给目的操作数,这是mov 指令的一个特殊情况?为什么只给ds,es赋值,而不给cs,ss赋值?因为在dos环境下运行程序时,dos 的装入程序已经对cs:ip和ss:sp作了正确的初始化,而ds,es初始化为程序段前缀psp的起点,而非用户所需要的地址,所以我们要对它俩重新赋值汇编语言程序设计4?在上面的结构中,程序结束后返回DOS操作系统用的是: mov ah,4ch int 21H?当用户程序结束时,返回dos操作系统还有一种常用的方法:,且类型设置为far。 ds xor ax,ax push ax在子程序结束时用ret指令。这样也可以返回dos操作系统。这实际上是用了int 20h中断指令。虽然我们从程序表面上没有看到这条指令,但是这条指令一定存在于用户程序的目标代码之前的程序段前缀区(program segment prefix)中。汇编语言程序设计5?原因是:每当一个用户程序的可执行文件(.exe)被DOS加载至内存中去时,它首先要为该程序建立一个一个文件头,又叫程序段前缀(PSP),占100H(256)个字节,然后把可执行的程序代码加载至PSP的后续地址上。即CS指向地点。而DS和ES初始化在PSP的起始地址。内存分配如右图。PSP给出了用户可执行文件的若干控制信息,其中前两个字节是一条中断指令INT 20H,即程序结束返回DOS指令。当用户程序结束运行时,可以通过把程序执行地址返回PSP执行这条指令而终止自己的进程。这是一种传统方法…系统占用程序段前缀PSP(共256个字节)用户数据段用户堆栈段用户代码…系统和rom占用0HDS,ESsscs用户空间用户程序装入内存后的内存分配情况;在屏幕上输出字符串:hello,everyone!的另一种编程Stack segmentDb 100 dup (?)Stack segmentdata segmentString db ‘hello,everyone!’,0dh,0ah,’$’Data segmentCode segmentProc1 proc far assume cs:code, ds:data, es:data, ss:stackStart:push ds sub ax,ax push ax mov ax,data mov ds,ax mov ah,09h mov dx,offset stri

汇编语言程序设计 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数64
  • 收藏数0 收藏
  • 顶次数0
  • 上传人xxj16588
  • 文件大小0 KB
  • 时间2016-01-10