- 1、本文档共40页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
32位汇编语言08
32位汇编语言程序设计 第8章 DOS环境的程序设计 第8章 DOS环境的程序设计 8.1 DOS编程 8.2 串操作指令 8.3 输入输出程序设计 8.4 中断控制编程 8.1 DOS编程 DOS环境是一个简单的16位操作系统平台 设计运行于8086和8088处理器 也可运行于IA-32处理器的实地址工作方式 DOS的特点 DOS是单用户单任务操作系统 DOS系统只有一个特权级别 程序可以访问任意资源 Windows操作系统模拟有一个MS-DOS环境 基于Windows保护方式的一个8086仿真环境 DOS编程的注意事项 16位DOS环境默认采用16位操作数尺寸 主要使用16位或8位寄存器、操作数和寻址方式 堆栈以16位为单位压入PUSH和弹出POP数据 IA-32处理器的实地址工作方式 还允许使用32位寄存器、操作数和寻址方式 大多数新增的32位通用指令 8.1.1 实地址存储模型 主存空间1MB(=220 B):00000H~FFFFFH 程序设计时分段管理,但有两个限制: 每个段最大为64KB 段只能开始于低4位地址全为0的物理地址处 逻辑地址=段地址∶偏移地址 16位段寄存器保存20位段起始地址的高16位 偏移地址也用16位数据表示 物理地址=段地址×16+偏移地址 16位存储器寻址方式 16位有效地址=基址寄存器+变址寄存器+位移量 基址寄存器:BX、BP 变址寄存器:SI、DI 位移量:8或16位有符号值 多种主存寻址方式 直接寻址 MOV AX,WVAR 寄存器间接寻址 MOV AX,[BX] 寄存器相对寻址 MOV AX,[BP+4] 基址变址寻址 MOV AX,[BX+SI] 相对基址变址寻址 MOV AX,[BX+DI-2] 8.1.2 DOS应用程序框架 ;eg0800.asm in DOS include io16.inc ;包含32位输入输出文件 .data ;定义数据段 …… ;数据定义(数据待填) .code ;定义代码段 start: ;程序执行起始位置 mov ax,@data mov ds,ax …… ;主程序(指令待填) exit 0 ;程序正常执行结束 …… ;子程序(指令待填) end start ;汇编结束 〔例8-1〕DOS应用程序 include io16.inc ;包含16位输入输出文件 .data ;数据段 msg byte Hello, Assembly!,13,10,0 ;定义要显示的字符串 .code ;代码段 start: ;程序起始位置 mov ax,@data mov ds,ax mov eax,offset msg ;指定字符串的偏移地址 call dispmsg ;调用I/O子程序显示信息 exit 0 ;程序正常执行结束 end start ;汇编结束 DOS应用程序的开发过程 8.1.3 DOS功能调用 DOS操作系统的系统函数(功能)以中断服务程序形式提供,采用软件中断进行功能调用,使用寄存器传递参数 基本输入输出系统ROM-BIOS、操作系统DOS和Linux都采用中断调用方式提供系统功能 DOS系统调用一般有如下4个步骤: (1)在AH寄存器中设置系统功能调用号 (2)在指定寄存器中设置入口参数 (3)用中断调用指令(INT N)执行功能调用 (4)根据出口参数分析功能调用执行情况 DOS基本功能调用(INT 21H) 〔例8-2〕DOS功能调用程序 .model small .686 .stack .data ;数据段 msg byte Hello, Assembly!,13,10,$ ;显示的字符串 .code ;代码段 start: mov ax,@data mov ds,ax mov ah,9 mov dx,offset msg ;指定字符串的偏移地址 int 21h ;DOS功能调用显示信息 mov ax,4c00h ;执行结束 int 21h end start ;汇编结束 字符显示 字符输入 readmsg proc push ebx push ecx mov ebx,eax mov ecx,eax rdm1: mov ah,1 int 21h cmp al,0dh jz rdm2 mov [ebx],al inc ebx jmp rdm1 8.2 串操作类指令 数据串(数组):以字节、字和双字为单位的多个数据存放在连续的主存区域中 源操作数:允许段超越:DS:[ESI] 目的操作数:不允许段超越:ES:[EDI] 每执行一次串操作:ESI和EDI自动±1/2/4 以字节为单位(用B结尾)操作:地址指针±1 以字为单位(用W结尾)操作:地址指针±
文档评论(0)