版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 第第5 5章章 汇编语言的基本语法汇编语言的基本语法 第第5 5章章 汇编语言的基本语法汇编语言的基本语法主要内容 汇编语言程序的结构 汇编语言语句类型和组成 汇编语言程序设计5.1 5.1 汇编语言的特点汇编语言的特点1、机器指令:计算机能识别的代码,机器指令是由二计算机能识别的代码,机器指令是由二进制数组成的。进制数组成的。 例如例如: : PUSH AXPUSH AX 机器指令为机器指令为: :01010000010100002、汇编语言:汇编语言是一种符号语言,用助记符表汇编语言是一种符号语言,用助记符表示操作码,用符号或符号地址表示操作数或操作数地示操作码,用符号或符号地址表示操作
2、数或操作数地址,它与机器指令是一一对应的。址,它与机器指令是一一对应的。3 、高级语言:面向过程面向过程( (如如C, FORTRAN)C, FORTRAN)或对象或对象( (如如C+, Java)C+, Java)的语言,不依赖于机器,因而有很好的通的语言,不依赖于机器,因而有很好的通用性和可移植性用性和可移植性 汇编语言与高级语言的比较特 征汇编语言高级语言目标程序运行时间短长程序运行时占用的存储空间小大直接访问硬件的能力强弱程序可读性和可维护性差强程序开发的复杂程序高低程序的可移植性差强对硬件环境和软件的兼容性差强采用汇编语言进行程序设计的优点:可充分利用机器的硬件功能和结构特点,加快程
3、可充分利用机器的硬件功能和结构特点,加快程序的执行速度,减少目标程序所占用的存储空间。序的执行速度,减少目标程序所占用的存储空间。常用来编写常用来编写实时控制程序、实时通信程序,实时控制程序、实时通信程序,有时有时也用来编制某些系统软件程序。也用来编制某些系统软件程序。 文件名文件名.ASM .ASM 文件名文件名.OBJ .OBJ 文件名文件名.EXE.EXE汇编语言汇编语言源程序源程序 汇编汇编目标目标程序程序连接连接执行执行/调试调试程序程序编辑程序编辑程序EDIT.EXE汇编程序汇编程序MASM.EXE连接程序连接程序LINK.EXE汇编语言程序的开发过程汇编语言程序的开发过程ML 文
4、件名文件名.ASM DATA SEGMENT ;数据段 NUM DW 0011101000000111B NOTES DB The result is : , $DATA ENDSSTACK SEGMENT STACK STA DB 50 DUP(?) TOP EQU LENGTH STASTACK ENDSCODE SEGMENT ;代码段 ASSUME CS:CODE,DS:DATA BEGIN: MOV AX, DATA MOV DS,AX MOV DX,OFFSET NOTES ;显示提示信息 MOV AH,9H INT 21H MOV BX,NUM ;将数装入BX MOV CH,4
5、;CH作循环计数器ROTATE : DISPLAY: MOV CL, 4 ;CL中放移位位数 MOV DL, AL ;显示16进制数 ROL BX,CL MOV AH,2 MOV AL,BL INT 21H AND AL,0FH ;AL中为一位16进制数 DEC CH ADD AL,30H ;转换为ASCII码值 JNZ ROTATE CMP AL,9 ;是09的数码? MOV AX,4C00H;返回DOS JL DISPLAY INT 21H ADD AL,07H ;在AF之间 CODE ENDS ;代码段结束 END BEGIN ;模块结束2 2、结构、结构DATADATA SEGMENT
6、 SEGMENT DATADATA ENDS ENDSSTACKSTACK SEGMENT STACK SEGMENT STACK STACKSTACK ENDS ENDSCODECODE SEGMENT SEGMENT CODECODE ENDS ENDSENDSENDS源程序由若干条语句组成源程序由若干条语句组成程序由最多程序由最多4 4个段组成,个段组成,数据段、堆栈段、代码段、数据段、堆栈段、代码段、附加段附加段每个段有一名字,并以符每个段有一名字,并以符合合SEGMENTSEGMENT表示段的开始,表示段的开始,以以ENDEND作为段的结束符号作为段的结束符号5.2 5.2 汇编语言
7、程序结构和基本语法汇编语言程序结构和基本语法汇编语言的基本语法:词法和句法一、词法 字符集、标识符、保留字、数的表示、运算符和表达式字符集、标识符、保留字、数的表示、运算符和表达式1 1、字符集、字符集英文字符:英文字符:A - ZA - Z,a - za - z; 数字字符:数字字符:0 - 90 - 9算术运算符号:算术运算符号:+ - + - * * / /关系运算符号:关系运算符号:分隔符:,分隔符:, :;(:;( ) TAB TAB控制符:控制符:CRCR、LFLF、FFFF其他字符:如其他字符:如& _ & _ ? . $ ! %. $ ! %2、标识符 常用作变
8、量名、常量名、记录名、和段名常用作变量名、常量名、记录名、和段名 由由1-311-31个字符组成,打头的字符必须是个字符组成,打头的字符必须是字母、?、字母、?、或或- - 从第二个字符开始,组成标识符的字符可以是字母、从第二个字符开始,组成标识符的字符可以是字母、数字、?、数字、?、或或- -,不能使用其他符号,不能使用其他符号3、保留字 指令助记符、伪指令、寄存器名、表达式运算符及属指令助记符、伪指令、寄存器名、表达式运算符及属性操作符,不能当做标识符使用性操作符,不能当做标识符使用4、数的表示 所有常数必须是整数 默认十进制;默认十进制; 表示非十进制数,要加后缀表示非十进制数,要加后缀
9、B B、H H或或Q Q; 十六进制以字母开头必须在前面加数字十六进制以字母开头必须在前面加数字0 0,如十六进制,如十六进制数数AFAF应表示为应表示为0AFH0AFH;5、表达式和运算符表达式由运算符和操作数组成,可分为数值表达式和地表达式由运算符和操作数组成,可分为数值表达式和地址表达式。址表达式。 运算符可分为算术运算符、逻辑运算符、关系运算符、运算符可分为算术运算符、逻辑运算符、关系运算符、分析运算符、综合运算符、分离运算符等分析运算符、综合运算符、分离运算符等 操作数可以是常数、变量名、或标号操作数可以是常数、变量名、或标号算术运算符算术运算符 + - * / MOD SHL SH
10、R对操作数进行算术运算,运算对象和结果都必须为整数对操作数进行算术运算,运算对象和结果都必须为整数MOV AL, 00011010B SHL 2 SHL为移位运算符SHL AL,1 SHL为移位指令助记符逻辑运算符逻辑运算符 NOT、 AND、 OR 、 XOR对操作数按位进行逻辑运算对操作数按位进行逻辑运算MOV AL, NOT 10100101B 逻辑运算符NOT AL 逻辑运算指令关系运算符关系运算符 对操作数按位进行关系运算,条件满足结果全为对操作数按位进行关系运算,条件满足结果全为1,否则全为,否则全为0MOV AX, 5 EQ 101B 等效于 MOV AX, 0FFFFHMOV
11、BH, 10H GT 16 MOV BH,00HMOV BL, 0FFH EQ 255 MOV BL, 0FFHMUL AL 64H GE 100 MUL AL,0FFH分析运算符分析运算符 SEG 返回变量或标号所在段的段基址返回变量或标号所在段的段基址 MOV AX,SEG VAR1 OFFSET 返回变量或标号的段内偏移基址返回变量或标号的段内偏移基址 MOV SI,OFFSET VAR1 LENGTH 加在变量之前,返回变量所包含的单元数加在变量之前,返回变量所包含的单元数 MOV BL,LENGTH VAR1 TYPE 返回变量或标号的类型属性返回变量或标号的类型属性 MOV AX,
12、 TYPE VAR1 SIZE 返回变量所占的总字节数,等于返回变量所占的总字节数,等于LENGTHLENGTH和和TYPETYPE两个运两个运算符返回值的乘积算符返回值的乘积 MOV CH, SIZE VAR1 CHLENGTH,求为符号名分配的,求为符号名分配的项数项数。 格式:格式: LENGTH 符号名符号名 这里为符号名定义的数据项这里为符号名定义的数据项必须是用必须是用 重复格式重复格式DUP( )定义的。而对于其他情况则回送定义的。而对于其他情况则回送1。 例例 :K2 DW 10 DUP (?)(?) 则则 LENGTH K2 = 10 TYPE K2 = 2 SIZE K2
13、= 20 例:例:AARR DW 2,4,6 则则 LENGTH AARR = 1, TYPE AARR = 2 SIZE AARR = 2可以看出:可以看出: SIZE = ( LENGTH ) * ( TYPE 符号名符号名)综合运算符综合运算符PTR 规定内存单元的类型属性规定内存单元的类型属性 格式:类型类型 PTR PTR 符号名符号名 MOV BYTE PTR 1000H,0 MOV WORD PTR 1000H,0THIS 改变存储区的类型属性改变存储区的类型属性 格式:符号名符号名 EQU THIS EQU THIS 类型类型VARB EQU THIS BYTEVARW DW
14、20H DUP(0)分离运算符分离运算符 HIGH、LOWMOV AL,HIGH 1234H AL=12MOV AL,LOW 1234H AL=34其他运算符其他运算符 SHORT 短转移说明运算符短转移说明运算符 ( ) 运算符运算符 改变运算优先级改变运算优先级 运算符运算符 表示间接寻址表示间接寻址 :段跨越前缀段跨越前缀 表示后跟的操作数由指定段寄存器提表示后跟的操作数由指定段寄存器提供段基址供段基址1 1、语句、语句指令语句 标号: 前缀 指令助记符指令助记符 操作数 ;注释 标号:表示指令的存储器地址,供转移指令、调用指令和循环指令作标号:表示指令的存储器地址,供转移指令、调用指令
15、和循环指令作为操作数使用;为操作数使用; MOV CX,2 ;设置CX计数值 L:DEC CX ;计数值减1 JZ L ;若计数值不为零则跳转到L执行 前缀:与其他指令配合使用,段跨越前缀、重复前缀、总线封锁前缀、前缀:与其他指令配合使用,段跨越前缀、重复前缀、总线封锁前缀、操纵尺寸和寻址尺寸等;操纵尺寸和寻址尺寸等; MOV AX,ES:2000H 段跨越前缀 REP MOVSB 重复前缀 操作数:指令要处理的数据,可分为常数、常量、变量和标号;操作数:指令要处理的数据,可分为常数、常量、变量和标号; 注释:指令的功能说明,以;开始的字符串,不影响程序执行注释:指令的功能说明,以;开始的字符
16、串,不影响程序执行二、句法(语句和结构)常数:编程时已经确定其值,程序运行期间编程时已经确定其值,程序运行期间不会改变其值的数据对象;不会改变其值的数据对象;常量:用符号表示的常数,其值在程序执行用符号表示的常数,其值在程序执行过程中保持不变过程中保持不变;变量:编程时确定其初始值,程序运行期间编程时确定其初始值,程序运行期间可修改其值的数据对象。可修改其值的数据对象。伪指令语句名字 伪操作命令伪操作命令 操作数操作数 ;注释 名字:可以是符号名、常量名、变量名、过程名和段名; 伪操作命令:主要包括符号定义、变量定义、程序分段定义、过程定义、模块定义、宏定义、段简化定义和内存模式定义等命令;
17、操作数:随伪操作命令的不同而不同。1 1、符号定义语句、符号定义语句等值语句EQU语句格式:语句格式: 符号 EQU 表达式把EQU右边表达式的值或表达式赋给左边的符号 例: CONT EQU 10 NUM EQU 89*3+5-9等号语句=语句格式:语句格式: 符号 = 表达式功能同功能同EQUEQU一样,但等号语句可以多次重新定义同一符号一样,但等号语句可以多次重新定义同一符号 NUM = 10HNUM = 10H NUM = NUM + 20H NUM = NUM + 20H取消语句PURGE语句格式:语句格式: PURGE 符号名1,符号名2,取消被EQU语句定义的符号名。 例: CO
18、NT EQUEQU 10 PURGE PURGE CONT CONT EQUEQU 122、数据定义语句 为数据项分配存储单元为数据项分配存储单元格式格式1: 变量名变量名 伪指令名伪指令名 表达式表达式1,表达式,表达式2, 这里伪指令可为DB,DW,DD,表达式有以下几种情况: 数值表达式数值表达式 例: DA_BYTE DB 50H , 50 , 0caH DA_WORD DW 0a3f1H , 498dH A1 DD 12345H ; Memory: 45H,23H,01H,00H ? 表达式,表达式,不带引号的?表示可预置任何内容 例: DA_B DB ? , ? ;要求分配两个字节
19、单元 DA_W DW ? , ? ;要求分配两个字单元 字符串表达式字符串表达式 数据项可以写成字符串形式,但只能用DB、DW、DD定义,而且DW、DD语句定义的串只允许包含两个字符。 例: S1 DB ABCDEF S2 DW AB, CD, EF S3 DD AB, CD 这几个变量在存储器中存放情况如下: S1 41H S2 42H S3 42H 42H 41H 41H 43H 44H 00H 44H 43H 00H 45H 46H 44H 46H 45H 43H 00H 00H 注意:定义多于两个以上字符的字符串时,只能使注意:定义多于两个以上字符的字符串时,只能使 用用DB伪指令,不
20、能使用伪指令,不能使用DW和和DD等伪指令。等伪指令。格式2: 变量名变量名 伪指令名表达式伪指令名表达式DUP(表达式)(表达式) 用于定义重复的数据或分配一数据块空间例: D_B1DB 20H DUP(?) ;保留20H个字节 D_B2 DB 10H DUP(ABCD) ;字符串ABCD ;重复10H次 D_W1 DW 10H DUP(4) ;字4重复10H次 3、段定义语句段开始语句SEGMENT和段结束语句ENDS段定义格式段定义格式: : 段名段名 SEGMENT SEGMENT 定位类型定位类型 组合类型组合类型 类别类别 段名段名 ENDSENDS 定位类型:用来规定段起始边界的
21、要求,可以为以下四种,缺省为 PARA)PAGE: 16位段地址的最低8位必须为0,即从一页的起点开始;PARA: 16位段地址的最低4位必须为0,即从一段的起点开始;WORD: 16位段地址的最低1位必须为0,即从偶地址开始;BYTE: 16位段地址可以为任意值,即段可以从任何字节开始。 组合类型 告诉连接程序本段与其他段的关系告诉连接程序本段与其他段的关系 NONE 本段与其他段逻辑上不发生关系,每段有独立段基地址;本段与其他段逻辑上不发生关系,每段有独立段基地址; PUBLIC 将本段与用将本段与用PUBLIC说明的同名同类别的其他段连接成一说明的同名同类别的其他段连接成一个段,所有这些
22、段用同一个段基地址;个段,所有这些段用同一个段基地址; COMMON 同名同类段相重叠,段的长度为其中最长段的长度同名同类段相重叠,段的长度为其中最长段的长度 STACK 表示本段是堆栈段,连接方式同表示本段是堆栈段,连接方式同PUBLIC MEMORY 该段在连接时被放在所有段的最后该段在连接时被放在所有段的最后 AT 把本段装在表达式的值所指定的段基地址处把本段装在表达式的值所指定的段基地址处 类别 段分配语句ASSUMECPUCPU对存储器的访问必须通过一个段寄存器来提供段基址,对存储器的访问必须通过一个段寄存器来提供段基址,ASSUMEASSUME用来建立段与段寄存器之间的联系。用来建
23、立段与段寄存器之间的联系。格式:格式:ASSUME ASSUME 段寄存器名:段名段寄存器名:段名,段寄存器名:段名段寄存器名:段名 DATADATA SEGMENT SEGMENT DATADATA ENDS ENDSSTACKSTACK SEGMENT STACK SEGMENT STACK STACKSTACK ENDS ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK CODE ENDSCODE ENDSENDENDDATA1 SEGMENT VAR1 DB 12HDATA1 ENDSDATA2 SEGMENT VAR2 DB 34HDA
24、TA2 ENDSCODE SEGMENT VAR3 DB 56H ASSUME CS:CODE,DS:DATA1 START: INC VAR1 INC VAR2 INC VAR3 CODE ENDS END START例:4、过程定义语句 在程序设计中,常将多次重复使用的具有一定功能在程序设计中,常将多次重复使用的具有一定功能的程序段组成一个子程序,称为过程,可用的程序段组成一个子程序,称为过程,可用CALL调用,调用,RET返回。返回。定义格式:定义格式: 过程名过程名 PROC NEAR/FARPROC NEAR/FAR 过程名过程名 ENDPENDP NEAR过程只允许段内调用,过程只
25、允许段内调用,FAR允许段间调用允许段间调用5.宏指令宏定义语句格式:宏定义语句格式: 宏指令名 MACRO 形式参数1,形式参数2 ENDM宏调用:宏调用: 宏指令名 实参数,实参数,SHIFT MACRO X MOV CL,X SAL AL,CL ENDMSHIFT 6宏扩展:宏扩展: + MOV CL,6 + SAL AL,CL5.3 ROM BIOS5.3 ROM BIOS中断调用中断调用和和DOSDOS系统功能调用系统功能调用5.3.1 ROM BIOS中断调用BIOS(Basic Input Output System) 基本输入输出系统基本输入输出系统 是一组固化到计算机内主板R
26、OM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序, 提供最低级、最直接的硬件控制,是硬件与软件之间的接口。 BIOS的功能: 系统自检及初始化系统自检及初始化 对硬件设备进行自检;对外部设备初始化;设置中断对硬件设备进行自检;对外部设备初始化;设置中断向量;引导操作系统等;向量;引导操作系统等; 程序服务处理程序服务处理 为操作系统和应用程序提供与为操作系统和应用程序提供与I/OI/O有关的系统服务。有关的系统服务。BIOSBIOS直接与直接与I/OI/O设备打交道,通过端口与设备打交道,通过端口与I/OI/O设备传送设备传送数据,使应用
27、程序脱离具体的硬件操作。数据,使应用程序脱离具体的硬件操作。 硬件中断处理硬件中断处理 提供硬件中断服务程序提供硬件中断服务程序BIOS的服务功能是通过调用中断服务程序来实现的 中断:CPUCPU执行程序的过程中,由于出现了某个事件,执行程序的过程中,由于出现了某个事件,CPUCPU暂停当前程序,转而去执行其他程序,处理完后,返暂停当前程序,转而去执行其他程序,处理完后,返回被暂停的程序继续执行,这个过程称为中断,引起中断回被暂停的程序继续执行,这个过程称为中断,引起中断的事件称为的事件称为中断源。处理该事件的程序称。处理该事件的程序称中断服务程序。中断号:80868086系统允许系统允许25
28、6256种中断,每种中断对应种中断,每种中断对应02550255之之间的一个数,称为中断号。间的一个数,称为中断号。每种中断都对应于一种中断服务,在实模式下,将中断服每种中断都对应于一种中断服务,在实模式下,将中断服务程序的入口地址称为务程序的入口地址称为中断向量,存放,存放256256个中断向量的内个中断向量的内存区域称为存区域称为中断向量表BIOS中断调用: BIOSBIOS由许多功能模块组成,每个功能模块的入口地址都由许多功能模块组成,每个功能模块的入口地址都在中断向量表中。通过软件中断指令在中断向量表中。通过软件中断指令“INT n”INT n”可以直接可以直接调用这些模块。调用这些模
29、块。CPUCPU响应中断后,把控制权交给指定的响应中断后,把控制权交给指定的BIOSBIOS功能模块,由它提供相应的服务。功能模块,由它提供相应的服务。基本方法:将所要调用功能的功能号送入将所要调用功能的功能号送入AHAH寄存器;寄存器;根据所要调用功能的规定设置入口参数;根据所要调用功能的规定设置入口参数;执行执行“INT INT 中断号中断号”指令,进入相应的服务子程序;指令,进入相应的服务子程序;中断服务子程序执行完毕后,可按规定取得出口参数。中断服务子程序执行完毕后,可按规定取得出口参数。 1. INT 10H 显示输出INT 10HINT 10H包含了与显示器有关的功能,可以用来设包
30、含了与显示器有关的功能,可以用来设置显示方式、光标大小和位置、显示字符等。置显示方式、光标大小和位置、显示字符等。AH=0AHAH=0AH,显示字符,显示字符入口参数入口参数;AL=;AL=预显示字符的预显示字符的ASCIIASCII码码功能:在当前光标位置显示功能:在当前光标位置显示ALAL中的字符,光标位置中的字符,光标位置不变不变AH=0EHAH=0EH,显示字符,显示字符功能:类似功能:类似0AH0AH功能,但显示字符后光标随之移动,功能,但显示字符后光标随之移动,并可解释回车、换行和退格等控制符并可解释回车、换行和退格等控制符2. INT 16H 键盘输入AH=0AH=0,从键盘读一
31、键,从键盘读一键出口参数:出口参数:AL=ASCIIAL=ASCII码,码,AH=AH=扫描码扫描码功能:从键盘读入一个键返回,按键不显示在屏幕上。对于功能:从键盘读入一个键返回,按键不显示在屏幕上。对于无相应无相应ASCIIASCII码的键,如功能键等,码的键,如功能键等,ALAL返回返回0 0AH=1AH=1,判断是否有键可读,判断是否有键可读出口参数出口参数: :若若ZF=0ZF=0,则有键可读,则有键可读,AL=ASCIIAL=ASCII码,码,AH=AH=扫描扫描码;否则,无键可读;码;否则,无键可读;AH=2AH=2,返回变换键的当前状态,返回变换键的当前状态出口参数出口参数:AL
32、=:AL=变换键状态变换键状态变换键指变换键指CtrlCtrl,AltAlt,Num lockNum lock等;等;例:读键盘输入,显示其中的例:读键盘输入,显示其中的ASCII字符,按回车键退出。字符,按回车键退出。CODE SEGMENTSTART:READNEXT: MOV AH,0 INT 16H CMP AL,ODH JE EXIT CMP AL,0 JZ READNEXT EXIT:MOV AH,4CH MOV AH,0EH INT 21H INT 10H CODE ENDS JMP READNEXT END START5.3.2 DOS5.3.2 DOS功能调用功能调用 前面一
33、些程序的运行结果,或是保留在寄存器中,或是保前面一些程序的运行结果,或是保留在寄存器中,或是保留在存储器中,不能方便直观的看到。要了解运算的结果,留在存储器中,不能方便直观的看到。要了解运算的结果,应在显示器上输出,方便的方法是调用操作系统中的应在显示器上输出,方便的方法是调用操作系统中的I/OI/O子程序,操作系统的核心是许多有关子程序,操作系统的核心是许多有关I/OI/O驱动,磁盘读写驱动,磁盘读写以及文件管理等子程序。这些子程序都编了号,调用时把以及文件管理等子程序。这些子程序都编了号,调用时把子程序号(或称系统功能调用号)送到子程序号(或称系统功能调用号)送到INT 21HINT 21
34、H。 通常按照如下4个步骤进行: 在在AHAH寄存器中设置系统功能调用号寄存器中设置系统功能调用号 在指定寄存器中设置入口参数在指定寄存器中设置入口参数 执行指令执行指令INT 21H INT 21H 实现中断服务程序的功能调用实现中断服务程序的功能调用 根据出口参数分析功能调用执行情况根据出口参数分析功能调用执行情况1、 键盘输入字符键盘输入字符调用格式: MOV AH, 01H INT 21H功能:等待从键盘输入一个字符并将输入字符的ASCII码送入寄存器AL中,同时在显示器上显示该字符。入口参数: 无出口参数: AL=输入的ASCII码字符2、 控制台输入控制台输入调用格式: MOV A
35、H, 08H INT 21H功能:与1号相似,但只从键盘上输入而不显示字符。入口参数: 无出口参数: AL=输入的ASCII码字符DOSDOS功能调用功能调用3. 向显示器输出一个字符(向显示器输出一个字符(2号功能调用)号功能调用)功能号:AH02H 入口参数:DL字符的字符的ASCII码码 功能:在显示器当前光标位置显示给定的字符,光标右移一个字符位置。如按Ctrl-Break或Ctrl-C则退出例:在当前显示器光标位置显示一个问号 mov ah,02hmov ah,02h;设置功能号:ah02h mov dl,?mov dl,?;提供入口参数:dl? int 21hint 21h ;DO
36、S功能调用:显示DOSDOS功能调用功能调用4. 显示字符串(显示字符串(9号功能调用)号功能调用)功能号:AH09H 入口参数:DS:DX欲显示字符串在主存中的首地址欲显示字符串在主存中的首地址字符串应以字符串应以$(24H)结束)结束 功能:在显示器输出指定的字符串string db Hello,Everybody !,0dh,0ah,$string db Hello,Everybody !,0dh,0ah,$ mov ah,09hmov ah,09hmov dx,offset stringmov dx,offset stringint 21hint 21hDOSDOS功能调用功能调用5.
37、 从键盘输入一个字符串(从键盘输入一个字符串(10号功能调用)号功能调用) 功能号:AH0AH 入口参数:DS:DX缓冲区首地址缓冲区首地址 执行该功能调用时,用户按键,最后用回车确认缓冲区的定义: 第第1字节字节事先填入最多欲接收的字符个数最多欲接收的字符个数(包括回车字符,可以是1255) 第第2字节字节将存放实际输入的字符个数实际输入的字符个数(不包括回车符) 第第3字节字节开始存放将输入的字符串输入的字符串 实际输入的字符数多于定义数时,多出的字符丢掉,且响铃DOSDOS功能调用功能调用例:Buffer db 81 Buffer db 81 ;定义缓冲区;定义缓冲区 ;第;第1 1个字
38、节填入可能输入的最大字符数个字节填入可能输入的最大字符数db 0db 0 ;存放实际输入的字符数;存放实际输入的字符数db 81 dup(0) db 81 dup(0) ;存放输入的字符串;存放输入的字符串.mov dx,seg buffer mov dx,seg buffer ;伪指令;伪指令segseg取得取得bufferbuffer的段地址的段地址mov ds,dxmov ds,dx;设置数据段;设置数据段DSDSmov dx,offset buffermov dx,offset buffermov ah,0ahmov ah,0ahint 21hint 21h 4. 4. 文件管理系统调
39、用文件管理系统调用: :AH(功能号)功能 入口参数 出口参数 3C 建立文件 DS:DX=ASCII串地址 成功 AX= 文件代号 CX=文件属性 失败 AX=错误码 3D 打开文件 DS:DX=ASCII串地址 成功 AX= 文件代号 AL=0读,=1写,=2读写 失败 AX=错误码 3E 关闭文件 BX=文件代号 失败 AX=错误码 3F 读文件或设备 DS:DX=数据缓冲区地址 成功AX=实际读入字数 BX=文件代号 AX=0已到文件尾 CX=读取字节数 读错误:AX=错误码 40 写文件或设备 DS:DX=数据缓冲区地址 成功AX=实际写入字数 BX=文件代号 CX=写入字节数 写错
40、误:AX=错误码 41 删除文件 DS:DX=ASCII串地址 成功 AX=00 错误AX=错误码 DOSDOS功能调用功能调用 例:写数据文件,步骤:输入文件名,建立文件,写文例:写数据文件,步骤:输入文件名,建立文件,写文件,关闭文件。件,关闭文件。Datasegment;数据段;数据段mesgndb16 dup(?) ;文件名字符区;文件名字符区dataregdb2048dup(?) ;数据区;数据区DataendsCodesegment ;代码段;代码段leasi, mesgn ;文件名字符区的偏移地址;文件名字符区的偏移地址Rep1: movah,1;键入文件名;键入文件名int21
41、hcmpal ,0dh ;判断是否是回车键;判断是否是回车键jenext1 ;是,转;是,转next1;否继续输入;否继续输入DOSDOS功能调用功能调用DOSDOS功能调用功能调用movsi,al;文件名字符送入incsijmprep1Next1:leadx,mesgn ;文件名区的偏移地址movcx,0 ;文件属性为0movah,3ch;建立文件int21hmovbx,ax;文件代号送bxleadx,dataregmovcx,2048;写入的字节数movah,40h;写文件int21hmovah,3eh;关闭文件int21hCsegendsend 例:读数据文件例:读数据文件 Mseg s
42、egment ; 数据段数据段 mesgn db 16dup(?) errmesg db “File not found $” datareg db 2048dup(?) Csegsegment ;代码段代码段 leasi, mesgnbeg: movah, 1 ;键入文件名键入文件名 int21h cmpal, 0dh jenext1 movsi, al incsi jmp begNext1:leadx, mesgn moval, 0 movah, 3dh ;打开文件打开文件 int21h cmpal, 2;2为文件未找到为文件未找到jneready;不等于;不等于2,转,转 leadx, errmesgmovah, 9 ;显示字符串显示字符串int21hcrlf;回车换行宏指令回车换行宏指令jmpbegReady: leadx, dataregmovcx, 2048mov bx, ax;ax中为文件代号中为文件代号movah, 3fh ;读文件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电子转盘课程设计
- 2024赠与房产合同样本
- 电子皮带秤课程设计
- 电子电工类课程设计
- 置业住房合同(2篇)
- 生日宴合同范本
- 简单茶场租赁合同(2篇)
- 给学校做窗帘的合同范本(2篇)
- 电子实习与课程设计
- 2024装饰装修工程合同书新范文
- 2024年糖尿病指南解读
- 二十届三中全会精神知识竞赛试题及答案
- 中国农业文化遗产与生态智慧智慧树知到期末考试答案章节答案2024年浙江农林大学
- 人教版小学数学六年级上册《百分数》单元作业设计
- 增值税预缴税款表电子版
- 最新二年级看图写话10篇带格
- 《奇妙的建筑》教学设计大赛教案
- 脑干梗死患者疑难病例讨论
- 爱立信BSC硬件介绍
- 工程监理工作联系单(范本)范本
- 管理学案例分析之健力宝案例
评论
0/150
提交评论