1.DOS编程
DOS介绍
DOS环境是一个简单的16位操作系统平台
▶设计运行于8086和8088处理器
▶也可运行于IA-32处理器的实地址工作方式
32位Windows操作系统模拟有一个MS-DOS环境
▶基于Windows保护方式的一个8086仿真环境
DOS特点
DOS是单用户单任务操作系统
DOS系统只有一个特权级别
应用程序可以访问任意资源
▶使用IO指令直接对外设端口操作
▶修改任何主存数据
▶.......
DOS编程的注意事项
16位DOS环境默认采用16位操作数尺寸
▶主要使用16位或8位寄存器、操作数和寻址方式
▶堆栈以16位为单位压入PUSH和弹出POP数据
IA-32处理器的实地址工作方式
▶还允许使用32位寄存器、操作数和寻址方式
▶可以使用大多数新增的32位通用指令
实地址存储模型
主存空间1MB( =2^20 B) : 00000H一FFFFFH
程序设计时分段管理,但有两个限制:
▶每个段最大为64KB
▶段只能开始于低4位地址全为0的物理地址处
逻辑地址和物理地址
逻辑地址=段地址∶偏移地址
▶16位段寄存器保存20位段起始地址的高16位
▶偏移地址也用16位数据表示
物理地址=段地址×16+偏移地址
16位存储器寻址方式
基址寄存器+变址寄存器+位移量
多种主存寻址方式
mov ax,wvar ;直接寻址
mov ax,[bx] ;寄存器间接寻址
mov ax,[bp+4] ;寄存器相对寻址
mov ax,[bx+si] ;基址变址寻址
mov ax,[bx+di-2] ;相对基址变址寻址
2.DOS应用程序
16位DOS环境的源程序框架
include io16.inc ;包含16位输入输出文件
.data ;定义数据段
... ;数据定义(数据待填)
.code ;定义代码段
start: mov ax,@data ;程序执行起始位置
mov ds,ax
... ;主程序(指令待填)
exit 0 ;程序正常执行终止
... ;子程序(指令待填)
end start ;汇编结束
io16.inc
DOS应用程序的包含文件
▶提供基本声明等语句
▶用于封装源程序文件的细节内容
需要配合16位IO库文件IO16.LIB
▶共同保存于当前目录
设置数据段寄存器
DOS分段管理程序
汇编和连接程序设置了CS:IP和SS:SP
DS和ES需要用户程序设置
mov ax,@data
mov ds,ax
DOS应用程序的快速开发过程
3.DOS系统调用
DOS系统调用步骤
(1)在AH寄存器中设置系统功能调用号
(2)在指定寄存器中设置入口参数
(3)用中断调用指令(INT N)执行功能调用
(4)根据出口参数分析功能调用执行情况
DOS基本功能调用(INT 21H)
退出DOS
mov ax,4c00h
int 21h
调用DOS 4CH号功能,实现执行结束退出
指令调用
DOS功能使用“INT N”指令调用
中断调用方法还应用于
▶基本输入输出系统ROM-BIOS
▶Linux系统功能
mov ah,子功能号
int 21h
4.输入输出编程
输入指令(IN)
数据从I/0接口(外设)输入到处理器
IN ALIAX/EAX,i8/DX
例如: in al,21h
in al,dx
输出指令(OUT)
数据从处理器输出到I/0接口(外设)
OUT i8/DX,ALIAX/EAX
例如: out 21h,al
out dx,al
I/O直接寻址
I/0指令中直接提供I/0地址
▶IA-32处理器只能直接提供8位I/0地址
▶只能寻址最低256个I/0地址(00~FFH)>用i8表示I/0地址
▶表达形式与立即数一样
IN ALIAX/EAX,i8/DX
OUT i8/DX,AL/AX/EAX
I/O间接寻址
I/0指令中通过寄存器间接提供I/0地址
▶IA-32处理器用DX寄存器保存访问的I/0地址
▶可寻址全部I/0地址(0000~一FFFFH)
直接书写成DX,表示I/0地址
▶不需要用中括号
IN ALIAX/EAX,i8/DX
OUT i8/DX,ALIAX/EAX
CMOS RAM
CMOS RAM是使用CMOS技术的存储器芯片
▶PC机用以保存配置信息以及实时时钟断点后由
▶后备电池供电,避免信息丢失>具有64个字节存储容量
▶通过两个I/O地址访问