1 / 31

第 7 章

第 7 章. 高级汇编语言技术及其他. 第 7 章. 宏定义、宏调用和宏展开 BIOS 中断和 DOS 中断 初级文件管理 高级文件管理. 宏定义 宏定义有两种格式 : 1 、简单宏定义 宏名 MACRO …… ;宏体 …… ;宏体 ENDM [ 例 7-1] 简单宏定义示例 CRLF MACRO MOV AH, 02H MOV DL, 0DH ;回车

misu
Download Presentation

第 7 章

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第7章 高级汇编语言技术及其他

  2. 第7章 • 宏定义、宏调用和宏展开 • BIOS中断和DOS中断 • 初级文件管理 • 高级文件管理

  3. 宏定义 宏定义有两种格式: 1、简单宏定义 宏名 MACRO …… ;宏体 …… ;宏体 ENDM [例7-1]简单宏定义示例 CRLF MACRO MOV AH, 02H MOV DL, 0DH ;回车 INT 21H MOV DL, 0AH ;换行 MOV AH, 02H INT 21H ENDM

  4. 2、带形参的宏定义 宏名 MACRO <形参表> …… ;宏体 …… ;宏体 ENDM [例7-2]带形参的宏定义示例 MULTIPLY MACRO OPR1, OPR2, RESULT PUSH DX PUSH AX MOV AX, OPR1 IMUL OPR2 MOV RELUST, AX MOV RESULT+2, DX POP AX POP DX ENDM

  5. 宏调用 宏调用有两种格式: 1、对简单的宏定义的调用:宏名 2、带形参的宏定义的调用:宏名<实参表> [例7-3]宏调用示例 INIT MACRO CS_NAME, DS_NAME, SS_NAME, ES_NAME ASSUME CS:CS_NAME, DS:DS_NAME ASSUME SS:SS_NAME, ES:ES_NAME PUSH DS MOV AX, 0 PUSH AX MOV AX, DS_NAME ;填入数据段段基址 MOV DS, AX MOV AX, ES:ES_NAME ;填入附加段段基址 MOV ES, AX ENDM ...... MAIN PROC FAR INIT C_SEG, D_SEG, S_SEG, E_SEG;宏调用 ......

  6. 宏扩展(宏展开) 宏扩展——汇编程序对汇编源程序汇编时将宏体 插入到宏调用处 [例7-4]宏扩展示例 ...... MAIN PROC FAR INIT C_SEG, D_SEG, S_SEG, E_SEG + PUSH DS + MOV AX, 0 + PUSH AX + MOV AX, D_SEG ;实参替换形参 + MOV DS, AX + MOV AX, ES:E_SEG + MOV ES, AX 说明: 汇编程序在所展开的指令前加‘+’号以示区别

  7. 宏指令与子程序的区别 子程序 宏指令 程序执行期间 在汇编期间展开 由主程序调用 它只占有自身 与调用次数有关,每调用一次 大小的空间 就把宏定义体展开一次 执行时需增加时间 直接执行宏体 上的额外开销

  8. 宏定义的进一步讨论: 1、宏定义可以无变元 2、变元可以是操作码 [例7-5] 宏定义: FOO MACRO P1, P2, P3 MOV AX, P1 P2 P3 ENDM 宏调用: FOO WORD_VAR, INC, AX 宏展开: + MOV AX, WORD_VAR + INC AX

  9. 3、变元可以是操作码的一部分,必须用&作为分隔符3、变元可以是操作码的一部分,必须用&作为分隔符 [例7-6] 宏定义: LEAP MACRO COND, LAB J&COND LAB ENDM 宏调用: LEAP Z, THERE 宏展开: + JZ THERE

  10. 4、变元是ASCII串 [例7-7] 宏定义: MSGGEN MACRO LAB, NUM, XYZ LAB&NUM DB ‘HELLO MR.&XYZ’ ENDM 宏调用: MSGGEN MSG, 1, TAYLOR 宏展开: + MSG1 DB ‘HELLO MR.TAYLOR’

  11. 5、宏定义体内允许使用标号 此时,须使用LOCAL伪操作 [例7-8] 宏定义: ABSOL MACRO OPER LOCAL NEXT CMP OPER, 0 JGE NEXT NEG OPER NEXT: ENDM 宏调用: ABSOL VAR …… ABSOL BX 宏展开: + CMP VAR, 0 + JGE ??0000 + NEG VAR + ??0000: …… + CMP BX, 0 + JGE ??0001 + NEG BX + ??0001:

  12. 6、宏定义中可以使用宏调用,(必须先定义后调用)6、宏定义中可以使用宏调用,(必须先定义后调用) [例7-9] 宏定义: DIF MACRO X, Y MOV AX, X SUB AX, Y ENDM DIFSQR MACRO OPR1, OPR2, RESULT PUSH DX PUSH AX DIF OPR1, OPR2 IMUL AX MOV RESULT, AX POP AX POP DX ENDM

  13. 宏调用: DIFSQR VAR1, VAR2, VAR3 宏展开: + PUSH DX + PUSH AX + MOV AX, VAR1 + SUB AX, VAR2 + IMUL AX + MOV VAR3, AX + POP AX + POP DX

  14. BIOS中断和DOS中断 BIOS中断分为四类: 中断种类 中断类型号 所含功能 内中断 00~07H 被零除中断、单步中断 不可屏蔽中断、断点中断 溢出中断、屏幕拷贝 外中断 08~0FH 处理计时器、键盘 通信口、软盘、硬盘 设备驱动 10H~17H 显示器、内存检查 通信I/O 特殊中断 18H~1FH ROMBASIC、DOS自举 日期调用、键盘中断 计时器控制

  15. BIOS中断调用 程序中可直接用INT n 指令调用 经常用到的BIOS中断为10H、13H、14H、16H、17H 指令格式 包含功能 INT 10H 提供显示方式设置、光标大小与位置设置 屏幕滚动、写字符、写像素点等 INT 13H 对磁盘的操作功能 (包括写、读、格式化等) INT 14H 负责对RS232异步通信口的输入输出 INT 16H 键盘操作(从键盘读字符、读键盘状态 和读特殊键标志等 INT 17H 打印机操作(读打印机状态、打印字符 初始化打印机等

  16. [例7-10] BIOS中断调用示例 欲打印字符'S',相应的系统调用如下: MOV AH,1 ;初始化打印机子功能号 MOV DX,0 ;打印机号 INT 17H ;初始化打印机 MOV AH, 0 ;打印机子功能号 MOV DX, 0 ;打印机号 MOV AL, 'S' ;欲打印的字符 INT 17H ;打印S

  17. DOS中断 DOS中断类型号为20~27H 涉及系统中断返回、系统功能调用、绝对磁盘读写等。 其中,应用最多的是INT 21H,有100个子功能 按其子功能可分为五组: 1、字符输入输出 2、文件管理 分为初级文件管理和高级文件管理 3、内存管理 分配/释放内存空间、修改已分配的空间等 4、作业管理 装入程序、进程管理等 5、其他资源管理 取日期/时间、设置中断向量等

  18. 初级文件管理 初级文件管理与FCB(文件控制快)有关 FCB的结构共36字节长,分10个信息域:(以下单位为字节) 0: 指定驱动器 1--8: 文件名 9--11: 扩展名 12--13: 当前块号,以文件开始为相对值,每块128个记录, 打开文件时为0 14--15: 记录长度,以字节为单位 16--19: 文件大小,以字节为单位 20--21: 文件建立或最后修改日期 22--31: 由DOS填入 32 : 当前块内的相对记录号(0--127) 33--36: 以文件的开始为基准的相对记录编号

  19. 初级文件管理(1) AH 功能 调用参数 返回参数 16H 在当前目录 (DS:DX)=FCB首址 AL=00,文件创建成功 下创建文件 AL=FF,文件创建失败 0FH 打开文件 (DS:DX)=FCB首址 AL=00,文件打开成功 AL=FF,文件打开失败 14H 顺序读 (DS:DX)=FCB首址 AL=00,读成功 一个记录 AL=01,文件结束,无记录 AL=02,盘空间不够 AL=03,文件结束, 记录不完整 15H 顺序写 (DS:DX)=FCB首址 AL=00,写成功 一个记录 AL=01,盘满 AL=0FF,失败

  20. 初级文件管理(2) AH 功能 调用参数 返回参数 10H 关闭文件 (DS:DX)=FCB首址 AL=00,正常关闭 AL=FF,失败 13H 删除文件 (DS:DX)=FCB首址 AL=00,正常删除 AL=FF,失败 17H 更改文件名 (DS:DX)=FCB首址 AL=00,成功 DX+17=新文件名首址 AL=FF,失败 1AH 设置DTA (DS:DX)= DAT 首址 无 注:DTA是磁盘数据传输区。

  21. 高级文件管理 高级文件管理以文件代号为线索,简单易行,是文件 管理的主导方法。 几个基本概念: 1、路径名和ASCIZ串 在处理文件时,首先要提供一个ASCIZ串的地址 ASCIZ串包括文件的路径名和一个全0的字节 例如,下面是两个ASCIZ串: PATHNAME1 DB ‘A:\TEST.PAS’, 0 PATHNAME2 DB ‘C:\WINDOWS\CLOUDS.BMP’, 0 可把串的地址送DX: LEA DX, PATHNAME1

  22. 2、文件代号和错误返回码 存取文件要借助于文件代号,文件代号是由打开文件 功能和建立文件功能传送到AX的一个16位数。 对于标准设备,已由DOS预定义好它们的文件代号: 0=标准输入设备 1=标准输出设备 2=标准错误输出设备 3=标准辅助设备 4=标准打印设备 其他文件代号一律从6开始。 在文件操作中,若存在错误,通过错误返回码返回, 以查找出错原因。

  23. 3、文件属性 文件属性是一个说明文件特性的字节。其各位含义 如下图所示:

  24. 高级文件管理(1) 功能号 功能 调用参数 返回参数 3CH 建文件 (DS:DX)=ASCIZ串首址 若CF=0,成功 CX=文件属性 (AX)=文件代号 否则失败 (AX)=错误码 3DH 打开文件 (DS:DX)=ASCIZ串首址 若CF=0,成功 (AL)=0 读(AX)=文件代号 =1 写 否则失败 =2 读/写 (AX)=错误码 3EH 关闭文件 (BX)=文件代号 若CF=0,操作成功 否则失败 3FH 读文件 (DS:DX)=缓冲区首址 若CF=0,读成功 (BX)=文件代号 (AX)=实际读 (CX)=读入字节数 的字节数 否则(AX)=错误码

  25. 高级文件管理(2) 功能号 功能 调用参数 返回参数 40H 写文件 (DS:DX)=ASCIZ串首址 若CF=0,成功 BX=文件代号 (AX)=实际 CX=写入的字节数 写入的字节数 否则失败 (AX)=错误码 41H 删除文件 (DS:DX)=ASCIZ串首址 若CF=0,成功 否则失败 42H 移动文件 (CX:DX)=偏移量 若CF=0,成功 指针 (AL)=移动方式码 否则失败 (BX)=文件代号 43H 取/置文 (DS:DX)=ASCIZ串首址 若CF=0,成功 件属性 (AL)=0,取文件属性 (CX)=新属性 (AL)=1,置文件属性 否则失败

  26. [例7-11]建立文件示例 调用参数: (AH)=3CH (DS:DX)=ASCIZ串的首地址 (CX)=文件属性 MOV AH, 3CH ;子功能号 MOV CX, 00 ;文件属性 LEA DX, PATHNAME1 ;ASCIZ 串地址 INT 21H JC ERROR ;CF=1, 转 MOV HANDLE1, AX ;保存文件代号

  27. [例7-12]写磁盘文件示例 调用参数: (AH)=40H (DS:DX)=缓冲区的首地址 (BX)=文件代号 (CX)=写入的字节数 HANDLE DW ? ;文件代号 OUTREC DB 256 DUP (?) ;缓冲区 MOV AH, 40H ;子功能号 MOV BX, HANDLE ;BX<--文件代号 MOV CX, 256 ;CX<--写盘字节数 LEA DX, OUTREC ;DX缓冲区首址 INT 21H JC ERROR2 ;CF=1, 转 CMP AX, 256 ;若成功AX中为实际写入字节数 JNE ERROR3 ;字节数不等,则错误

  28. [例7-13]打开文件示例 调用参数: (AH)=3DH (DS:DX)=ASCIZ串的首地址 (AL)=存取代码: 0----为读打开 1----为写打开 2----为读和写打开文件 MOV AH, 3DH ;子功能号 MOV AL, 00 ;只读属性 LEA DX, PATHNAME1 INT 21H JC ERROR4 ; CF=1, 转 MOV HANDLE, AX ;保存文件代号

  29. [例7-14]读取文件示例 调用参数: (AH)=3FH (DS:DX)=输入数据缓冲区的地址 (BX)=文件代号 (CX)=要读取的字节数 HANDLE DW ? ;文件代号 INPREC DB 512 DUP(?) ;数据缓冲区 MOV AH, 3FH ;子功能号 MOV BX, HANDLE ;BX<--文件代号 MOV CX, 512 ;CX<--读取的字节数 LEA DX, INPREC ;DX<--缓冲区地址 INT 21H JC ERROR5 ;CF=1, 转 CMP AX, 0 ;实际读入字节数在AX JE ENDFILE

  30. [例7-15]关闭文件示例 调用参数: (AH)=3EH (BX)=文件代号 一个文件在文件操作完成后,必须关闭文件 MOV AH, 3EH MOV BX, HANDLE INT 21H

More Related