《微机原理汇编语言程序设计ppt课件.ppt》由会员分享,可在线阅读,更多相关《微机原理汇编语言程序设计ppt课件.ppt(63页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人微机原理与接口技术第四章第四章 汇编语言程序设计汇编语言程序设计烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人本章内容p4.1 概述概述p4.2 汇编语言的格式与语法汇编语言的格式与语法p4.3 DOS与与BIOS中断调用中断调用p4.4 汇编语言程序设计和上机过程汇编语言程序设计和上机过程烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学
2、们想一想如何来治疗该病人4.1 概述-程序设计语言p机器语言:每种CPU都有自己独立的一套指令系统,其能直接理解和执行的是二进制机器码形式,这种二进制编码格式语言称为机器语言。特点是占内存少、执行速度快,但难以记忆、容易出错,实际中很少使用。例:89H,DCHp汇编语言:用指令的助记符来表示二进制机器码的语言称为汇编语言,即是机器语言的符号表示。它是一种面向机器的程序设计语言,通常是为特定计算机或计算机系列专门设计的。特点是允许直接调用CPU内部资源,代码精简,占内存少,执行速度快,但通用性差,编写、调试周期长。常用来编制系统软件、实时控制程序、实时通信程序及接口的驱动程序等。例:MOV SP
3、,BXp高级语言:是面向过程的语言(如:BASIC语言、C语言等),不依赖于具体的计算机结构和指令系统。特点是通用性强,可移植,但目标程序长,执行速度慢。烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人4.1 概述-汇编程序p用汇编语言编写的程序不能由机器直接执行,而必须经汇编程序(Assembler)翻译成机器语言程序p常使用的汇编程序是Microsoft公司的宏汇编MASM,它可以将源程序翻译成对应的目标程序,并且:n 检查语句语法n 自动分配存储区n 将其他进制转换为二进制数n 计算表达式的值n 展开宏命令烧伤
4、病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人4.2 汇编语言的格式与语法o4.2.1 源程序的结构源程序的结构o4.2.2 语句的格式与构成元素语句的格式与构成元素o4.2.3 语句的操作数语句的操作数n4.2.3.1 常量常量n4.2.3.2 变量和标号变量和标号n4.2.3.3 表达式表达式o4.2.4 伪指令伪指令o4.2.5 宏指令宏指令烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人4.2.1 源程序的结构p汇编语言源程序通常由一
5、个或几个程序模块组汇编语言源程序通常由一个或几个程序模块组成成,每个模块一般由三种逻辑段组成:每个模块一般由三种逻辑段组成:n 数据段、附加段数据段、附加段定义和存放数据、变量定义和存放数据、变量n 堆栈段堆栈段堆栈区域堆栈区域n 代码段代码段存放程序指令存放程序指令烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人4.2.1 源程序的结构NAMEPROGRAM MOV AX,EXTRASTACKSEGMENT STACK MOV ES,AXSTA DB 100 DUP(?)STACKENDSMOV AX,OFFSET
6、 SDAT;-CALL P1DATASEGMENTSDATDB 1,2,3,4,5MOV AH,4CHDATAENDSINT 21H;-MAINENDPEXTRASEGMENT;-DDATDB 5 DUP(?)P1PROCEXTRAENDS;-RETCODESEGMENTP1ENDPASSUME CS:CODE,SS:STACK;-ASSUME DS:DATA,ES:EXTRACODEENDSMAINPROC FAR;-MOV AX,DATAENDMAINMOV DS,AX堆栈段数据段扩展段代码段代码段烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有
7、限,请同学们想一想如何来治疗该病人4.2.1 语句的格式o汇编语言的语句有两种:汇编语言的语句有两种:n指令性语句:由指令性语句:由80868086指令构成的语句指令构成的语句n指示性语句:由伪指令构成的语句指示性语句:由伪指令构成的语句o指令性语句由指令性语句由CPU执行,每一条指令性语句都有一条机器码指执行,每一条指令性语句都有一条机器码指令与其对应,指令性语句汇编时生成机器码。令与其对应,指令性语句汇编时生成机器码。o指示性语句由汇编程序执行指示性语句由汇编程序执行,它指示汇编程序应如何对源程序进它指示汇编程序应如何对源程序进行汇编,如何定义变量、分配存储单元以及指示程序开始和结行汇编,
8、如何定义变量、分配存储单元以及指示程序开始和结束等。指示性语句无机器码指令与其相对应,在汇编时不生成束等。指示性语句无机器码指令与其相对应,在汇编时不生成机器码。机器码。烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人p标号:指令的符号地址,用来代表指令在存储器中的地址标号:指令的符号地址,用来代表指令在存储器中的地址p符号:段、过程、变量的名字,用来代表它们在存储器中的地址符号:段、过程、变量的名字,用来代表它们在存储器中的地址p指令助记符:指令助记符:8086指令助记符、伪指令助记符指令助记符、伪指令助记符p操作
9、数:即指令的操作对象操作数:即指令的操作对象n对指令性语句:对指令性语句:0,1,2个个n对指示性语句:根据需要而定对指示性语句:根据需要而定n操作数之间以逗号分隔操作数之间以逗号分隔n操作数可以由标号、常量、变量、表达式、寄存器操作数操作数可以由标号、常量、变量、表达式、寄存器操作数和存储器操作数等构成和存储器操作数等构成 例如:例如:AX,DI+BX+10,DATA,200,16*8+TABLE,等等,等等4.2.2 语句的构成元素烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人o注释:以分号开头,可放在指令后,
10、也可单独一行。注注释:以分号开头,可放在指令后,也可单独一行。注意注释的写法,要写指令(或程序段)在程序中的作意注释的写法,要写指令(或程序段)在程序中的作用,而不要写指令的操作。用,而不要写指令的操作。n例如:以下为同一条指令写的注释例如:以下为同一条指令写的注释 1)MOV CX,100 ;传送传送100到到CX 2)MOV CX,100 ;循环计数器置初值循环计数器置初值n显然,第二种写法要比第一种写法要好显然,第二种写法要比第一种写法要好 4.2.2 语句的构成元素烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该
11、病人4.2.3 语句的操作数o4.2.3.1 常量常量o4.2.3.2 变量和标号变量和标号o4.2.3.3 表达式表达式烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人4.2.3.1 常量o常量操作数:常量操作数:n数值常数:数值常数:11001000B,0FA21H,329D(329)n字符常数:字符常数:ABCD(41H 42H 43H 44H)o例:例:nMOV AX,0FA21H nVAR DB 329nSTR DB ABCD烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健
12、康皮肤很有限,请同学们想一想如何来治疗该病人p变量:指存储器存储单元中的数据,数据运行时可改变变量:指存储器存储单元中的数据,数据运行时可改变p变量名:是存储单元的符号地址变量名:是存储单元的符号地址p变量在程序中作为存储器操作数被引用变量在程序中作为存储器操作数被引用p变量有三个属性变量有三个属性:n段地址:变量所在段的段地址段地址:变量所在段的段地址n偏移地址:变量所在存储单元的偏移地址偏移地址:变量所在存储单元的偏移地址n类类 型:有型:有BYTE、WORD和和DWORD等等p例:例:MOV AX,VAR PUSH VAR4.2.3.2 变量与标号-变量烧伤病人的治疗通常是取烧伤病人的健
13、康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人p 标号:指令所在存储单元的符号地址标号:指令所在存储单元的符号地址p 标号的三个属性:标号的三个属性:n段地址:即标号所在段的段地址;段地址:即标号所在段的段地址;n偏移量:标号所代表存储单元的段内偏移地址;偏移量:标号所代表存储单元的段内偏移地址;n类类 型:型:NEAR或或FAR:NEAR:段内转移或段内调用:段内转移或段内调用FAR:段间转移或段间调用段间转移或段间调用p 标号通常作为转移指令的转移地址标号通常作为转移指令的转移地址p JMP labelp JNZ non_zero4.2.3.2
14、 变量与标号-标号烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人p组成:组成:A-Z(不分大小写不分大小写),0-9,?._$p不能以数字开头,句号不能以数字开头,句号(.)只能作为首字符只能作为首字符p长度小于长度小于31个字符个字符p不能与保留字不能与保留字(指令助记符、伪指令、预定义符号等指令助记符、伪指令、预定义符号等)重名重名p不能重复定义不能重复定义 例如:例如:正确的:正确的:LP1,AGAIN,NEXT,_GO,OK_1 错误的:错误的:4M,LOOP,AAA,#HELP,+ONE4.2.3.2 变
15、量与标号-命名规则烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人4.2.3.3 表达式p表达式由标号、常量、变量等加上必要的运算符构成表达式由标号、常量、变量等加上必要的运算符构成p有数字表达式和地址表达式两种有数字表达式和地址表达式两种p汇编时按优先规则对表达式进行计算,计算出具体的数值汇编时按优先规则对表达式进行计算,计算出具体的数值或地址或地址,运行时不能改变运行时不能改变p表达式中的运算符包括:算术、逻辑、关系、分析以及属表达式中的运算符包括:算术、逻辑、关系、分析以及属性运算符等性运算符等烧伤病人的治疗通
16、常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人p算术运算符包括:加算术运算符包括:加:,减,减:,乘,乘:*,除,除:/,取模,取模:MOD 例:例:MOV AX,4*1024 汇编后的形式为汇编后的形式为:MOV AX,4096 p逻辑运算符包括:逻辑运算符包括:与:与:AND、或:、或:OR、异或:、异或:XOR、非:、非:NOTn例:例:MOV CL,36H AND 0FH 经汇编后:经汇编后:MOV CL,06Hn逻辑运算符只能用于数字表达式中。逻辑运算符只能用于数字表达式中。n注意,不要把逻辑运算符与逻辑运算指令混淆:注
17、意,不要把逻辑运算符与逻辑运算指令混淆:n例:例:AND AX,3FC0H AND 0FF00H 汇编后源操作数被翻译为:汇编后源操作数被翻译为:3F00H,所以上述指令与以下指令等价所以上述指令与以下指令等价:AND AX,3F00H4.2.3.3 表达式算术运算符烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人p分析运算符包括:分析运算符包括:SEG、OFFSETpSEG:取变量:取变量/标号的段地址标号的段地址pOFFSET:取变量:取变量/标号的偏移地址标号的偏移地址 例:例:VAR DB 12H MOV B
18、X,OFFSET VAR;取变量;取变量VAR的偏移地址的偏移地址 MOV AX,SEG VAR ;取变量;取变量VAR的段地址的段地址pSEG、OFFSET运算符在汇编过程取相应地址运算符在汇编过程取相应地址4.2.3.3 表达式分析运算符烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人4.2.3.3 表达式属性运算符PTRp属性运算符属性运算符PTR用来指定地址操作数的类型用来指定地址操作数的类型 格式:格式:PTR 类型类型BYTE,WORD,DWORD,NEAR,FARp BYTE、WORD、DWORD 用于
19、描述数据存储单元用于描述数据存储单元(变量变量)地址地址 例:例:MOV WORD PTRBX,03Hp NEAR、FAR 用于描述转移、调用的目的地址用于描述转移、调用的目的地址 例:例:JMP FAR PTR LABEL1烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人p例:例:MOV DI,0 ;类型不定类型不定 MOV BYTE PTRDI,0 ;字节类型字节类型 MOV WORD PTRDI,0 ;字类型字类型 4.2.3.3 表达式属性运算符PTRDI48H45H00H45H00H00HBYTE PTRW
20、ORD PTRDIDI烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人4.2.3.3 表达式属性运算符PTRp PTR也可用来进行强制类型转换也可用来进行强制类型转换例:例:VAR DW 1234H ;VAR定义为字类型定义为字类型 MOV AX,VAR1 ;合法合法 MOV AL,VAR1 ;非法非法 MOV AL,BYTE PTR VAR1 ;合法合法烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人4.2 汇编语言的格式与语法o4.2.
21、1 源程序的结构源程序的结构o4.2.2 语句的格式与构成元素语句的格式与构成元素o4.2.3 语句的操作数语句的操作数n4.2.3.1 常量常量n4.2.3.2 变量和标号变量和标号n4.2.3.3 表达式表达式o4.2.4 伪指令伪指令o4.2.5 宏指令宏指令烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人4.2.4 伪指令o伪指令由汇编程序执行的指令,它本身不被汇编成伪指令由汇编程序执行的指令,它本身不被汇编成机器指令。常用的伪指令有机器指令。常用的伪指令有:n数据定义伪指令数据定义伪指令n符号定义伪指令符号
22、定义伪指令n段定义伪指令段定义伪指令n过程定义伪指令过程定义伪指令n程序模块定义伪指令程序模块定义伪指令n定义模块连接标号和变量的伪指令定义模块连接标号和变量的伪指令烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人4.2.4 伪指令数据定义伪指令p用于对程序中使用的变量进行定义用于对程序中使用的变量进行定义p通过变量定义指明变量的类型,并为其分配存储单元。通过变量定义指明变量的类型,并为其分配存储单元。p数据定义伪指令的格式为:数据定义伪指令的格式为:变量名变量名 数据定义伪指令数据定义伪指令 操作数操作数,操作数操
23、作数,VAR DW 1234Hp常用的数据定义伪指令有如下几种:常用的数据定义伪指令有如下几种:DB 定义字节定义字节 DW 定义字定义字 DD 定义双字定义双字 DQ 定义定义4字型变量字型变量(占(占8字节存储空间)字节存储空间)DT 定义定义10字节变量(表示字节变量(表示BCD码,或用于浮点运算)码,或用于浮点运算)p数据定义伪指令中的操作数可以是常数、变量或表达式数据定义伪指令中的操作数可以是常数、变量或表达式DATA1_B DB 10DATA2_B DB 5DATA3_B DB 10HDATA1_W DW 100HDATA2_W DW -4DATA_D DD 0FFFBH汇编后的内
24、存分配情况汇编后的内存分配情况如右图所示。如右图所示。Q05H10H00H01HFCHFFHFBHFFH00H00H0AHDATA_BDATA_BDATA_WDATA_WDATA_DDATA_D10105 510H10H100H100H-4 40FFFBH0FFFBH数据定义伪指令-例1p操作数可以是字符串,使用操作数可以是字符串,使用DB,DW 例例 STR_DB DB HELLO STR_DW DW AB,CD 汇编后的情况如图:汇编后的情况如图:p注意下面两个定义的不同之处:注意下面两个定义的不同之处:STR_DB DB AB ;41H在低字节,在低字节,42H在高字节在高字节 STR_
25、DW DW AB ;42H在低字节,在低字节,41H在高字节在高字节STR_DBHELLO48H45H4CH4CH4FH数据定义伪指令-例2STR_DBA41H42H42H41HSTR_DWBBA烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人p?用来分配存储空间用来分配存储空间,但不置初值但不置初值 例例1:RSV DB?p 复制操作符复制操作符 DUP:重复的数据可以使用复制操作符重复的数据可以使用复制操作符DUP,如上面如上面RSV亦可写成亦可写成:例例2:STR DB 10 DUP(A)DATA DB 10
26、DUP(30H,9 DUP(20H)p 若操作数中若使用若操作数中若使用$,则表示的是地址计数器的当前值。则表示的是地址计数器的当前值。例例3 BUF DW 0A32H,$,$+3 数据元素的初值:数据元素的初值:ADDR+1,(ADDR+2)+34.2.4 伪指令伪指令数据定义伪指令:数据定义伪指令:?、DUP、$烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人o例:例:TABLE DB 10 DUP(?)BUFFER DW TABLE,$+3设设TABLE的偏移地址为的偏移地址为0080H,则汇编后如下图所示:则
27、汇编后如下图所示:BUFFER0080H80HTABLE008AH008BH008CH008DH.8FH00H00H0089H10 Bytes数据定义伪指令-例3烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人4.2.4 伪指令符号定义伪指令:EQUp将一个表达式用一个符号表示,以后凡出现该表达式将一个表达式用一个符号表示,以后凡出现该表达式的地方都可用这个符号表示的地方都可用这个符号表示p类似于类似于C语言中的语言中的#definep汇编时,符号被符号代表的内容替换汇编时,符号被符号代表的内容替换 例:例:COUN
28、T EQU CX TEN EQU 10 MOV COUNT,TEN 汇编后:汇编后:MOV CX,10烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人4.2.4 伪指令段定义伪指令p汇编语言程序是按段来组织程序和数据的,段的划分与存储器的汇编语言程序是按段来组织程序和数据的,段的划分与存储器的物理段相对应。汇编语言程序中的段称为逻辑段,汇编连接后被物理段相对应。汇编语言程序中的段称为逻辑段,汇编连接后被映射到相应的物理段中。映射到相应的物理段中。p逻辑段共分为:代码段、堆栈段、数据段和附加段逻辑段共分为:代码段、堆栈
29、段、数据段和附加段p段定义伪指令:段定义伪指令:SEGMENT、ENDS、ASSUME、ORGp定义一个段的基本格式:定义一个段的基本格式:段名段名 SEGMENT 定位类型定位类型组合方式组合方式类别类别 段名段名 ENDS烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人pSEGMENT和和ENDS成对出现,二者前面的段名应一致成对出现,二者前面的段名应一致p伪指令伪指令SEGMENT说明了一个段的开始说明了一个段的开始p伪指令伪指令ENDS说明了一个段的结束说明了一个段的结束p数据段用于对程序中使用的变量进行定义
30、,堆栈段用于对堆数据段用于对程序中使用的变量进行定义,堆栈段用于对堆栈进行定义,数据段和堆栈段由指示性语句构成;代码段由栈进行定义,数据段和堆栈段由指示性语句构成;代码段由指令性语句构成。指令性语句构成。例如:例如:data_seg SEGMENT data_seg ENDS 4.2.4 伪指令SEGMENT和ENDS烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人4.2.4 伪指令ASSUME伪指令pASSUME伪指令用于明确段和段寄存器的关系,例如伪指令用于明确段和段寄存器的关系,例如 ASSUME CS:cod
31、e_seg,DS:data_seg,SS:stack_segn语句中的语句中的code_seg、data_seg、stack_seg为段名为段名n语句的作用为:语句的作用为:CS将指向段名为将指向段名为 code_seg 的代码段的代码段DS和和ES将指向段名为将指向段名为 data_seg 的数据段的数据段SS将指向段名为将指向段名为 stack_seg 的堆栈段的堆栈段烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人pASSUME伪指令只是告知汇编程序段与段寄存器之间的对应关伪指令只是告知汇编程序段与段寄存器之间
32、的对应关系系,并没有给段寄存器赋予实际的初值,程序中需要通过下面的并没有给段寄存器赋予实际的初值,程序中需要通过下面的语句进行赋值:语句进行赋值:MOVAX,data_seg MOVDS,AX MOVAX,stack_seg MOVSS,AXp上述语句的作用是将段地址装入段寄存器。代码段段地址不需上述语句的作用是将段地址装入段寄存器。代码段段地址不需要程序员装入要程序员装入CS寄存器,而由系统负责装入。寄存器,而由系统负责装入。p上述语句通常放置在代码段主程序的开始处。上述语句通常放置在代码段主程序的开始处。4.2.4 伪指令ASSUME伪指令烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移
33、植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人p伪指令伪指令ORG规定了段内的指令或数据存放的开始地址规定了段内的指令或数据存放的开始地址(偏移地址的偏移地址的初值初值),其格式为:,其格式为:ORG 表达式的值即为开始地址,从此地址起连续存放程序或数据。表达式的值即为开始地址,从此地址起连续存放程序或数据。例:例:ABC SEGMENT ORG 100H begin:ABC ENDS 语语句句“ORG 100H”表表明明段段中中第第一一个个变变量量或或第第一一条条语语句句相相对对于于段段地地址址的偏移量为的偏移量为100H。4.2.4 伪指令ORG伪指令指令从1
34、00H开始存放段定义伪指令-例DATAS SEGMENTSTR DB HELLOVAR DW 10H DATAS ENDSSTACKS SEGMENT STACKSTA DB 100 DUP(?)TOP DW$STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS ORG 100HSTART:MOV AX,DATAS MOV DS,AX MOV AX,STACKS MOV SS,AX MOV SP,TOP .CODES ENDS END START烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康
35、皮肤很有限,请同学们想一想如何来治疗该病人p过程定义伪指令的格式为过程定义伪指令的格式为 格式:格式:过程名过程名 PROC 类型类型 RET 过程名过程名 ENDPp说明:说明:nPROC表示过程的开始,表示过程的开始,ENDP表示过程的结束表示过程的结束n在过程中至少要有一个在过程中至少要有一个RET指令使其返回主程序指令使其返回主程序n每个过程要有一个过程名,通过该名其他程序可以调用该过程每个过程要有一个过程名,通过该名其他程序可以调用该过程n过程中有类型说明过程中有类型说明FAR或或NEAR说明该过程是远过程还是近过程说明该过程是远过程还是近过程p调用一个过程的格式为:调用一个过程的格
36、式为:CALL 过程名过程名4.2.4 伪指令过程定义伪指令烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人4.2.4 伪指令过程定义伪指令MY_ADD PROC FAR PUSH AX PUSH BX MOV AX,BP-TYPE WORD MOV BX,BP-2*TYPE WORD ADD AX,BX MOV BX,BP-3*TYPE WORD MOV BX,AX POP BX POP AX RET 6 MY_ADD ENDP烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤
37、很有限,请同学们想一想如何来治疗该病人4.2.4 伪指令定义程序模块伪指令p功能:定义程序模块功能:定义程序模块 格式:格式:NAME 模块名模块名 END 表达式表达式p模块名:由程序员命名,最多模块名:由程序员命名,最多6个字符个字符p表达式:通常就是程序第一条指令的标号,指示程序的表达式:通常就是程序第一条指令的标号,指示程序的启动地址启动地址(要执行的第一条指令的地址要执行的第一条指令的地址)。烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人4.2.4 伪指令定义程序模块伪指令o伪伪指指令令END表表示示源源
38、程程序序到到此此结结束束,并并可可指指出出程程序序的的启启动动地地址址。格格式式如下:如下:END 标号标号/过程名过程名o模模块块结结束束语语句句放放在在源源程程序序最最后后一一行行,表表示示程程序序到到此此结结束束,一一个个程程序序中中必必须须有有一一个个END语语句句,其其中中的的标标号号或或过过程程名名给给出出了了程程序序开开始始执执行行的启动单元地址,只有主模块才可有此选项的启动单元地址,只有主模块才可有此选项n当当连连接接的的多多个个模模块块中中都都没没有有给给出出启启动动地地址址,将将从从代代码码段段的的第第一个字节处开始执行一个字节处开始执行n当当有有多多个个模模块块都都指指定
39、定了了启启动动地地址址,将将从从最最后后一一条条带带标标号号的的END语句指定的启动地址单元开始执行语句指定的启动地址单元开始执行n以上情况都可能导致程序的错误执行,编程时应予避免以上情况都可能导致程序的错误执行,编程时应予避免烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人本章内容p4.1 概述概述p4.2 汇编语言的格式与语法汇编语言的格式与语法p4.3 DOS与与BIOS中断调用中断调用p4.4 汇编语言程序设计和上机过程汇编语言程序设计和上机过程烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面
40、积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人4.3 DOS与BIOS中断调用p8086微机系统开机过程:微机系统开机过程:BIOS-DOSpBIOS(Basic Input Output System):装于从地址装于从地址0FE00H开始的开始的8k ROM中,提供了硬件系统的加电自检,中,提供了硬件系统的加电自检,操作系统的引导装入,主要操作系统的引导装入,主要I/O设备的处理程序及接口控制等功能模块。使设备的处理程序及接口控制等功能模块。使用用BIOS中断调用,使程序员不必了解硬件中断调用,使程序员不必了解硬件I/O的具体接口特性,可直接通的具体接口特性,可直接通过入口
41、参数来调用,给编程带来方便。过入口参数来调用,给编程带来方便。pDOS(Disk Operation System):DOS操作系统存放于硬盘等外存储器中,启动机器后被装入内存,操作系统存放于硬盘等外存储器中,启动机器后被装入内存,DOS 中断对应于一组中断处理程序,这些子程序分别实现外设管理、文件读中断对应于一组中断处理程序,这些子程序分别实现外设管理、文件读/写写和管理、目录管理等功能。和管理、目录管理等功能。pDOS中断通过调用中断通过调用BIOS中断来实现对外设硬件的控制。中断来实现对外设硬件的控制。DOS中断比中断比BIOS中断更容易使用,应列为首选;中断更容易使用,应列为首选;BI
42、OS调用速度快,适用于访问高速外设。调用速度快,适用于访问高速外设。烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人pDOS中断调用与中断调用与BIOS中断调用的使用方法类似中断调用的使用方法类似:n设置入口参数设置入口参数n设置功能号,通过设置设置功能号,通过设置AH寄存器寄存器n通过通过 INT n 指令调用不同的中断服务程序指令调用不同的中断服务程序pBIOS中断调用:中断调用:n=05H1FHpDOS中断调用:中断调用:n=20H3FH,其中,其中 INT 21H 为最常用的为最常用的DOS中断调用中断调用p
43、例:屏幕输出字符例:屏幕输出字符nMOV DL,;设置入口参数,输出字符送设置入口参数,输出字符送DLnMOV AH,02H ;设置中断调用功能号设置中断调用功能号=02HnINT 21H ;调用调用INT 21H中断输出字符中断输出字符4.3 DOS与BIOS中断调用烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人pDOS INT 21H软中断有软中断有90多种功能,完成设备、目录和多种功能,完成设备、目录和文件管理文件管理n键盘输入并显示,功能号键盘输入并显示,功能号=01H MOV AH,01H ;设置设置IN
44、T 21H中断调用功能号中断调用功能号=01H INT 21H ;调用调用INT 21H中断,输入字符存入中断,输入字符存入AL中中n屏幕输出一个字符,屏幕输出一个字符,功能号功能号=02H MOV DL,A ;待输出字符送待输出字符送DL MOV AH,02H ;设置设置INT 21H中断调用功能号中断调用功能号=02H INT 21H ;调用调用INT 21H中断,屏幕输出字符中断,屏幕输出字符4.3 DOS中断调用 INT 21Hp直接控制台输入输出,功能号直接控制台输入输出,功能号=06Hn直接输入:直接输入:DL=0FFH,表示从键盘输入字符,表示从键盘输入字符ZF=1,表示无键盘输
45、入,表示无键盘输入ZF=0,表示有键盘输入,输入字符存放于,表示有键盘输入,输入字符存放于AL中中中断调用不等待键盘输入中断调用不等待键盘输入例:例:CHECK:MOV DL,0FFH MOV AH,06H INT 21H JZ CHECK ;判断有无键盘输入判断有无键盘输入n直接输出:直接输出:DL0FFH,表示向屏幕输出显示字符,表示向屏幕输出显示字符,DL中存放中存放的是待显示的字符的是待显示的字符:MOV DL,A MOV AH,06H INT 21H 4.3 DOS中断调用 INT 21Hp屏幕输出显示字符串(以屏幕输出显示字符串(以$结束),功能号结束),功能号=09H STRIN
46、G DB HELLO,0AH,0DH,$;0AH:ASCII码换行码换行 ;0DH:ASCII码回车码回车 ;$字符串结束标志字符串结束标志MOV DX,OFFSET STRING ;字符串首地址送字符串首地址送DX MOV AH,09H ;设置中断调用功能号设置中断调用功能号=09H INT 21H ;屏幕输出显示字符串屏幕输出显示字符串p键盘输入字符串,键盘输入字符串,功能号功能号=0AH STRING DB 30,31 DUP(?);串中第串中第1个元素规定允许最多输入的字符数,此个元素规定允许最多输入的字符数,此 ;处最多可输入处最多可输入30个字符个字符(含回车含回车),;串中第串中
47、第2个元素保留个元素保留,保存输入字符的个数保存输入字符的个数 ;从第从第3个元素起为输入字符的缓冲区个元素起为输入字符的缓冲区 MOV DX,OFFSET STRING ;字符串首地址送字符串首地址送DX MOV AH,0AH ;设置中断调用功能号设置中断调用功能号=0AH INT 21H ;键盘输入字符串键盘输入字符串4.3 DOS中断调用 INT 21H烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人4.3 DOS中断调用 INT 21Ho打印机打印一个字符,功能号打印机打印一个字符,功能号=05H MOV D
48、L,A ;待打印字符送待打印字符送DL MOV AH,05H ;设置设置INT 21H中断调用功能号中断调用功能号 INT 21H ;打印输出字符打印输出字符o返回返回DOS系统,功能号系统,功能号=4CH MOV AH,4CH ;设置设置INT 21H中断调用功能号中断调用功能号 INT 21H ;返回返回DOS系统系统pBIOS 中断完成键盘、显示、磁盘和打印机等常用中断完成键盘、显示、磁盘和打印机等常用I/O的驱动。的驱动。n键盘输入,键盘输入,INT 16H,例:例:MOV AH,0 ;输入字符存入输入字符存入AL中中 INT 16H MOV AH,1 ;查询键盘缓冲区,置标志查询键盘
49、缓冲区,置标志ZF INT 16H MOV AH,2 ;功能键状态存入功能键状态存入AL中中 INT 16Hn屏幕显示,屏幕显示,INT 10H,例:定位光标例:定位光标 MOV DH,4 ;行数行数 MOV DL,5 ;列数列数 MOV AH,2 ;光标控制功能号光标控制功能号 INT 10H ;定位光标定位光标 4.3 BIOS中断调用烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人本章内容p4.1 概述概述p4.2 汇编语言的格式与语法汇编语言的格式与语法p4.3 DOS与与BIOS中断调用中断调用p4.4 汇
50、编语言程序设计与上机过程汇编语言程序设计与上机过程烧伤病人的治疗通常是取烧伤病人的健康皮肤进行自体移植,但对于大面积烧伤病人来讲,健康皮肤很有限,请同学们想一想如何来治疗该病人p模块化编程方法:将一个较复杂的任务划分成多个独立的程序模块,模块化编程方法:将一个较复杂的任务划分成多个独立的程序模块,然后分别编制、调试形成目标文件,最后将多个目标文件连接起来然后分别编制、调试形成目标文件,最后将多个目标文件连接起来形成一个完整的可执行文件形成一个完整的可执行文件p模块内程序的基本结构:模块内程序的基本结构:n 顺序结构:顺序结构:完全按照程序指令编排的顺序依次执行完全按照程序指令编排的顺序依次执行