11 汇编语言程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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等
常量 存储器操作数
常量包括常数、字符串常量,符号常量,