11 汇编语言程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


原因是:每当一个用户程序的可执行文 件(.exe)被DOS加载至内存中去时, 它首先要为该程序建立一个一个文件头, 又叫程序段前缀(PSP),占100H(256) 个字节,然后把可执行的程序代码加载 至PSP的后续地址上。即CS指向地点。 而DS和ES初始化在PSP的起始地址。内 存分配如右图。PSP给出了用户可执行 文件的若干控制信息,其中前两个字节 是一条中断指令INT 20H,即程序结束 返回DOS指令。当用户程序结束运行时, 可以通过把程序执行地址返回PSP执行 这条指令而终止自己的进程。这是一种 传统方法
0H DS,ES
系统占用
程序段前缀PSP (共256个字节)
用户数据段
ss 用户堆栈段 用户代码
用 户 空 间
cs
… …
系统和rom占用
用户程序装入内存 后的内存分配情况
;在屏幕上输出字符串:hello,everyone!的另一种编程 Stack segment Db 100 dup (?) Stack segment data segment String db ‘hello,everyone!’,0dh,0ah,’$’ Data segment Code segment Proc1 proc far assume cs:code, ds:data, es:data, ss:stack Start:push ds sub ax,ax push ax mov ax,data mov ds,ax mov ah,09h mov dx,offset string;或lea dx,string int 21h ret proc1 endp Code ends
end start
DOS功能调用 重点注意:
1、 DOS功能调用的概念;
2、 DOS功能调用中字符I/O功能的使用方法。
一、
DOS功能调用的概念
1、软件中断:
格式: INT n n为中断类型号,每个类型号对应一个四字节 的向量。8086有多达256个不同的中断类型号向量, 这些向量被存放在物理地址为00000H—003FFH的存 储单元中。 软件中断分为三类:
DOS中断(9个 20H—27H&2FH) 软件中断 ROM BIOS中断(10--1FH)
自由中断(40H~FFH)
2、DOS中断
DOS中断 (共9个) DOS专用中断(3个 22H、23H、24H) DOS可调用中断(6个,分别为: 20H、21H、25H、26H、27H、2FH)
3、DOS可调用中断


在上面的结构中,程序结束后返回DOS操作系统用的是: mov ah,4ch int 21H 当用户程序结束时,返回dos操作系统还有一种常用的方法: 1.首先把用户程序设置成一个过程,且类型设置为far。 2.在用户程序程序开始处 push ds xor ax,ax push ax 在子程序结束时用ret指令。这样也可以返回dos操作系统。 这实际上是用了int 20h中断指令。虽然我们从程序表面上没有看 到这条指令,但是这条指令一定存在于用户程序的目标代码之前 的程序段前缀区(program segment prefix)中。
代码段
<此处加入你自己的程序段>
;系统功能调用,程序结束返回操作系统OS
code
;汇编结束,程序起始点为start
关于源程序结构的几点说明


在代码段中,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的起点,而非用户所需要的地址,所以我们 要对它俩重新赋值
第四章 汇编语言程序设计(2)

汇编语言源程序的另一种结构 汇编语言中的操作数 Dos 功能调用 汇编语言程序设计举例

一个基本的汇编语言程序框架如下:返回
LABLE ENDS word ;定义栈底位置
堆栈段
stack SEGMENT PARA ‘stack‘ ;定义作为堆栈段的逻辑段,段名为stack DB 100 DUP(‘?’) ;定义堆栈长度 stack data data code
程序结束 字符I/O AH02H,字符显示;DL=输出字符
按功能分 为11类
磁盘操作 文件操作
AH09H,字符串显示; DS:DX=缓冲区首址
ห้องสมุดไป่ตู้网络共享

(3)INT 21H 的使用
a、02H功能号的使用(显示字符‘B’) MOV AH,02H MOV DL,’B’ INT 21H
汇编语言中的操作数
磁盘读写中断(25H、26H) DOS可调 用中断
程序退出中断(20H、27H)
假脱机打印文件中断(2FH)
DOS功能调用中断(21H)
3、DOS功能调用中断(INT 21H)
00000H
INT 21H
(1)INT 21H 的中断向量
00084H

00087H

003FFH
256个中 断向量
(2)INT 21H 的子功能(共计84个子功能)
top
SEGMENT ENDS
<数据、变量在此定义>
;定义作为数据段的逻辑段,段名为data
数据段
SEGMENT ;定义作为代码段的逻辑段,段名为code ASSUME CS:code, DS:data, ES:data, SS:stack start: MOV AX, data ;程序执行起始点 MOV DS, AX MOV ES, AX;将各个段寄存器指向用户定义的各个逻辑段 ;MOV AX,stack ;MOV SS, AX ;MOV SP, OFFSET TOP MOV AL, 4CH INT 21H ENDS END start

寄存器操作数,如ax,bx,bp,cx,dl等
常量 存储器操作数



常量包括常数、字符串常量,符号常量,
相关文档
最新文档