《浙工大微机原理及应用第4章汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《浙工大微机原理及应用第4章汇编语言程序设计.ppt(66页珍藏版)》请在三一文库上搜索。
1、浙工大信息学院,第4章 汇编语言程序设计,机器语言、汇编语言与高级语言 汇编语言语句种类及其格式 汇编语言数据:常数、变量和标号 汇编语言源程序的段结构 汇编语言的运算符:算术运算符、逻辑运算符、关系运算符、数值返回运算符等 一些常用伪指令:符号定义伪指令、程序开始和结束伪指令、全局符号和外部符号伪指令等 过程定义伪指令 中断,浙工大信息学院,4.1 程序设计语言概述,机器语言,汇编语言,高级语言,4.1 程序设计语言概述 1 、机器语言 定义:由0,1二进制代码书写和存储的指令与数据 优点:能为机器直接识别与执行;程序所占内存空间较少 缺点:难认、难记、难编写 2、汇编语言 定义:用指令的助
2、记符、符号地址、标号等书写程序的语言 优点:易读、易写、易记 缺点:不能象机器语言那样为计算机所直接识别,也不如高级语言那样具有良好的通用性和可移植性,3、高级语言 定义:独立于机器、面向用户的通用语言,不依赖于特定计算机的结构与指令系统 优点:简短、易读、易编写、通用性和可移植性 缺点:编译程序或者解释程序复杂、占用内存空间大、目标程序比较大,不适合实时控制 4、小结: 1、2都是面向机器的,是低级语言。高级语言在程序设计的简易性与代码的可移植性等方面有了质的飞跃,当然,用高级语言编写的源程序必须经过编译和连接,将其转变为可执行程序方可在计算机上运行。,我们应根据应用场合加以选用。 Eg:科
3、学计算方面:高级语言 实时控制方面:汇编语言 C/C+ +汇编语言,5、汇编语言程序的上机与处理过程,4.2 汇编语言语句种类及其格式 三种基本语句:指令语句、伪指令语句和宏指令语句 4.2.1 指令语句 执行性语句,汇编时产生一一对应的机器目标代码 格式: 标号: 前缀 指令助记符 操作数项 ;注释 标号字段 任选项。以“:”结束,一个符号是一条指令的符号地址,它代表该指令的第一个字节地址 2. 前缀 一些特殊指令,常作为前缀同其它指令配合使用,例:和串操作指令连用的REP,REPNE,REPE等,3、指令助记符字段 不可或缺,表示这条语句要求CPU完成什么具体操作 4、操作数字段 按指令助
4、记符要求,可以有一个、两个、无操作数,多个操作数用“,”隔开。 5、注释字段 须以“;”开始 4.2.2 伪指令语句 一种说明性语句,本身不产生目标代码,只为汇编程序提供进行汇编所需要的有关信息。 格式: 符号名 伪指令 操作数 ;注释,1、符号名字段: 注后面不得用”:”,符号名可是是常量名,变量名,过程名,结构名等,可以作为指令语句和伪指令语句的操作数,表示一个常量或存储器地址 2、伪指令字段: eg:定义数据伪指令DB,DW,DD,段定义伪指令SEGMENT,过程定义伪指令PROC 3、操作数字段: 可以是一个或多个常数、字符串、变量名、常量名、标号及一些专用的符号如:BYTE,FAR,
5、PARA等。 4、注释。,4.2.3 标识符 指令语句中的标号和伪指令语句中的符号名统称为标识符 组成规则如下: 字符个数:131个 以字母开头,后面可以是字母,数字,?,或下划线 不能使用属于系统专用保留字。如寄存器名,指令助记符,伪指令等 大小写一致,4.3 汇编语言数据 常数、变量和标号。 一个数据包含有它的数值和属性两部分 4.3.1 常数 没有属性的纯数值 可以有以下类型 1、二进制数 B 01 2、八进制数 O/Q 07 3、十进制数 D/省 09 4、十六进制数 H 0F 5、字符串常数:用引号括起来的一个或多个字符,这些字 符用它的ASCII码形式存储在内存中。如A在内存中 就
6、是41H, AB就是41H,42H。 6、实数 R,4.3.2 变量 1、变量的定义与预置 定义变量就是给变量分配存储单元,且对这存储单元赋予一个符号变量名,同时预置初值 变量名,DB DW DD DF DQ DT,表达式1,表达式2,,Eg: VAR_DATA SEGMENT DATA1 DB 12H DATA2 DW 1234H DATA3 DD 12345678H VAR_DATA ENDS 三个属性: (1)段属性(SEG):表示变量存放在哪一个逻辑段中即变量所作段的段地址。 eg:上例中若对DATA1进行存取,须VAR_DATADS (2)偏移量属性(OFFSET):表示变量在逻辑段
7、中离段起始点的字节数,(3)类型属性(TYPE):表示变量占用存储单元的字节数。由数据定义伪指令规定。 预置初值有如下情况 数字表达式 eg ?表达式 eg 字符串表达式 eg 对于DB伪指令,为字符串中每一个字符分配一个字节单元 对于DW,可以给2个字符组成的字符串分配2个字节存储单元,”高高低低” 对于DD,仅可给两个字符组成的字符串分配4个字节单元,且这两个字符ASCII存储在两个低字节中,两个高字节均存放00H。,带DUP表达式:定义重复数据操作符 变量名 表达式1 DUP(表达式2) 2、变量的使用 (1)在指令语句中:直接引用变量名 eg 注:在基址(变址)寻址或基址变址寻址中,引
8、用一个变量名就是取用它的偏移量 (2)在伪指令语句中 eg 注:操作数引用另一变量名就是引用变量名的地址 只能用DW和DD。DW:仅有变量的偏移量 DD:前2个字节偏移量,后2个字节段地址,DB DW DD,eg,4.3.3 标号:一条指令目标代码的符号地址 同变量,有三个属性。(1)段属性,(2)偏移量属性,(3)距离属性 :NEAR 和 FAR 设置标号距离属性有2个方法 隐含方式:隐含为NEAR属性 用LABEL伪指令 名称 LABEL 类型 名称为与之连用的指令或变量一个新的标识符,补充或设置与之连用的指令或变量的类型属性。段地址和偏移量属性同与之连用的指令或变量,即逻辑地址相同。,E
9、g1: SUB1_FAR LABEL FAR SUB1: MOV AX , 30H Eg2: DATA_BYTE LABEL BYTE DATA_WORD DW 20H DUP(?) MOV AX , DATA_WORD+4 MOV AL , DATA_BYTE+4,4.4 汇编语言源程序的段结构 汇编语言源程序的基本结构是段,一个汇编语言源程序有若干个代码段、数据段、附加段和堆栈段组成。 段之间的顺序可以随意安排,通常数据段在前,代码段在后 任何可执行汇编语言源程序至少包含一个代码段,通常还可以有数据段和堆栈段 每一个段都有段首指令和段结束指令,段的内容介于这两条指令之间 4.4.1 段定义
10、伪指令(SEGMENT/ENDS 伪指令) 格式:段名 SEGMENT 定位类型 组合类型 类别名 段名 ENDS,1、段名:用户自己选定,通常使用与本段用途相关的名字。段开始与结尾用的段名应一致 2、定位类型:表示对段的起始边界的要求,可有4种选择 PAGE(页):表示本段从一个页的边界开始,一页256字节,故段基址的最后8位二进制数为0,即以00H结尾的地址 PARA(节):隐含,表示本段从一个节的边界开始,一节16字节,故段基址的最后4位二进制数为0,即以0H结尾的地址 WORD(字):偶地址开始,最后一位二进制为0 BYTE(字节):可以从任一地址开始 3、组合类型 :指定段与段之间是
11、怎样连接和定位的,有6种选择 NONE:隐含。表示本段与其他段无连接关系,PUBLIC:在满足定位类型的前提下,本段与同名的段邻接在一起,形成一个新的逻辑段,共用一个段基址。所有偏移量调整为相对于新逻辑段的起始地址 COMMON:产生一个覆盖段。在两个模块连接时,把本段与其他也用COMMON说明的同名段置成相同的起始地址,共享相同的存储区。 STACK:把所有同名段连接成一个连接段,且系统自动对段寄存器SS初始化为这个段的首址,并初始化堆栈指针SP。用户程序至少有一个段用STACK说明,否则需要用户程序自己初始化SS、SP。 AT表达式:表示本段可定位在表达式所指示的小节边界上 MEMORY:
12、表示本段在存储器中应定位在所有其它段的最高地址。若有多个MEMORY,第一个遇到的当MEMORY处理,其余做COMMON处理,4、类别名 单引号 括起来 在连接处理时,LINK程序把类别名相同的所有段存放在连续的存储区内(如没有指定组合类型PUBLIC、COMMON时,他们仍然是不同的段),小结:对于不大的程序,通常只需要三个段就可以了。Eg: STACK1 SENGMENT PARA STACK . STACK1 ENDS DATA SENGMENT DATA ENDS CODE SEGMENT ASSUME . MAIN: . . CODE ENDS END MAIN,4.4.2 段寻址伪
13、指令(ASSUME伪指令) 作用:指定段与段之间的对应关系 格式: ASSUME 段寄存器名:段名,段寄存器名:段名,. 其中:段寄存器名式CS、DS、SS、ES 说明: 可以用关键字NOTHING将前面的设置删除 Eg: ASSUME ES:NOTHING ASSUME NOTHING ASSMUME伪指令不产生任何目标代码,仅仅告诉汇编程序,哪些段是当前段,且它们分别由哪个段寄存器指向,4.4.3 段寄存器的装入 ASSUME伪指令只是建立了当前段与段寄存器的联系,但不能把各段的段地址装入相应段寄存器种。段寄存器的装入使用程序的方法,且这4各段寄存器的装入略有不同 1、DS和ES的装入 手
14、动装入,在程序中,引用段名就是以立即数形式获取该段的段地址,而立即数不能直接段寄存器,故通过通用寄存器DS ES。设置方法如下: MOV AX , SEGNAME MOV DS , AX 2、SS的装入 有两种方法:,(1)自动装入:在段定义伪指令(SEGMENT)的组合类型须选择“STACK”参数,且在段寻址伪指令在(ASSUME)语句中,把堆栈用的这个段指派给段寄存器SS Eg: STACK1 SEGMENT PARA STACK DB 40H DUP(?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE, SS:STACK1 . 这样:当程序目标代码装入寄
15、存器后,系统会自动装入SS、SP,(2)若未选用”STACK”参数项,或在程序中要调换另一个堆栈段,可类似于DS、ES的装入办法。 Eg: DATA_STACK SEGMENT TOP DW 40H DUP(?) DATA_STACK ENDS CODE SEGMENT MOV AX, DATA_STACK MOV SS , AX MOV SP, SIZE TOP,3、CS的装入 自动装入END后指定的起始地址 任何源程序都以END伪指令结束。 格式: END 起始地址 作用:表示源程序结束和指定程序运行时候的起始地址,装入CS、IP。 例:在数据段定义首地址为string1的10个字符,将这
16、10个字符以相反次序传送到附加段首地址为string2的内存单元中。,4.5 汇编语言的运算符 分别介绍算术运算符、逻辑运算符、关系运算符、数值返回运算符、属性操作符。 1、算术运算符 主要包括、*、/、和MOD、 等,说明: 参加运算的数和运算结果均是整数 /只取商的整数部分 MOD:模除,进行整数除法,只取余数部分 减法可用于段内两个操作数地址(以变量名表示)的运算,表示这两个变量的相距字节数。 表示加法,expr1expr2等价于expr1和expr2相加后形成一个存储器操作数地址 注:两个存储器操作数地址(如两个变量名)不能相加 Eg:,NUM=15*8 ;NUM= NUM=NUM/7
17、 ;NUM= NUM=NUM MOD 3 ;NUM= NUM=NUM5 ;NUM= ORG 30H ;以下数据的起始偏移量为30H DATA1 DB 34H, 56H ,ABCD DATA2 DW 1234H, EF CONT=DATA2DATA1 ;CONT= DATA3=DATA22 ;,MOV AX, DA_WORD20H MOV AX, DA_WORD+20H MOV AX , ARRAYBXSI MOV AX, ARRAYBX+SI MOV AX, ARRAY+BXSI MOV AX , ARRAY+SIBX MOV AX ,ARRAY+BX+SI MOV AX, ARRAY+BX+
18、SI MOV AX, ARRAY+BXSI MOV AX, ARRAY+DA_WORD,2. 逻辑运算符 参加运算的数和运算的结果均是整数,按位操作。 expr:数字表达式,常数 逻辑运算符和逻辑/移位运算指令是完全不同的两回事。运算符结果是一个常数,在汇编时完成操作,MOV AX, NOT 0F0H MOV BL, 55H AND 0F0H MOV BH, 55H OR 0F0H MOV CL, 55H XOR 0F0H MOV AX, 55H SHR 3,MOV AX ,0FF0FH MOV BL , 50H MOV BL , 0F5H MOV CL ,0A5H MOV AX,0AH,3、
19、关系运算符(用于比较两个表达式) expr一定是常数或同段内的变量,若是常数,按无符号数比较,如是变量,则比较它们的偏移量。比较结果以真(全1),假(全0)给出。,MOV AX , 0FH EQ 1111B MOV BX ,0FH NE 1111B,MOV AX , 0FFFFH MOV BX , 0,4、数值返回运算符 有 SEG、OFFSET、TYPE、LENGTH、SIZE 5种 格式: 运算符 变量名或标号 对象必须是: 存储器操作数即变量名或标号,运算后返回的是一个数值。 (1)SEG运算符 作用:返回变量或标号的段地址值,16位二进制数 Eg: (2) OFFSET运算符 作用:返
20、回变量或标号在段内的偏移量 Eg:,Eg: ORG 1000H VAR DW 1234H ADDR DW VAR MOV BX , VAR ;(BX)= MOV SI , OFFSET VAR ;(SI)= MOV DI , ADDR ;(DI)= MOV BP ,OFFSET ADDR ;(BP)= 当用DW或DD伪指令设置了某变量的地址指针后,想获得变量的偏移量,有2个方法:用OFFSET运算符或者直接取出地址指针。,(3) TYPE运算符 返回类型属性的数字形式,TYPE 变量 :表示每个数据所占有的存储单元字节数 Eg: V1 DB ABCDEF V2 DW 1234H, 3456H
21、V3 DD V2,(4)LENGTH运算符 格式:LENGTH 变量 说明:仅加在变量前面,返回值表示数组变量的元素个数。如果变量是用重复数据操作符DUP说明,则返回外层DUP给定的值;如果没有DUP说明,则返回值总是1。 Eg: K1 DB 10H DUP(0) K2 DB 10H,20H,30H,40H K3 DW 20H DUP(1,2,2 DUP(4) K4 DB ABCDEFGH MOV AL , LENGTH K1,(5) SIZE 运算符 SIZE 变量;表示数组变量所占用总字节数 SIZE=TYPE*LENGTH Eg: 上例中:SIZE K1 (6) 小结:TYPE、 LEN
22、GTH 、SIZE对处理数组类型变量是很有用的。 Eg:编程实现数组中各元素的累加,要求从最后一个元 素开始累加。 ARRAY DW 40 DUP(?),5、属性操作符 作用:对变量、标号或某存储器操作数的类型属性进行修改、指定。 (1)PTR 格式: 类型 PTR 地址表达式 说明: 地址表达式是指要修改类型属性的标号、变量或用作地址指针的寄存器。 确定存储单元的类型 BYTE、WORD、DWORD、NEAR、FAR等,DA_BYTE DB 20H DUP(0) DA_WORD DW 30H DUP (0) . MOV AX, WORD PTR DA_BYTE10 ADD BYTE PTR
23、DA_WORD20, BL INC BYTE PTR BX SUB WORD PTR SI ,30H JMP FAR PTR SUB1 临时修改变量的类型属性。本身并不分配存储单元,只是用来对已分配的存储地址赋予另一种属性。注这种修改是临时性的,仅在有这修改运算符的语句内有效。,6、运算符的优先级 见P138表4.4 4.6 符号定义伪指令 1) EQU 格式: 符号 EQU 表达式 说明:符号在汇编时作替代符号用,不产生任何目标代码,也不占用存储单元,故此符号没有属性。 eg: CONST EQU 5 NUM EQU 13+7-8 ;常数或数值表达式 ADDR1 EQU DS:BP+4 ;地
24、址表达式 CREG EQU CX/DAA ;寄存器名或指令助记符 L1 EQU NEXT ;标号 WO EQU WORD PTR DA_BYTE ;变量,2) 格式: 符号表达式 说明:与EQU类似,区别如下: EQU不能重复定义,而,”“伪指令可以重复定义 Eg: NUM EQU 10H NUM EQU 20H ;错 NUM =10H NUM =20H ;对,4.7 程序开始和结束伪指令 格式: NAME MODULE-NAME TITLE TEXT 作用:在列表文件中每一页的第一行都显示这个名字 格式: END 起始地址 说明:任何一个源程序都以END伪指令结束,作用是标 志这源程序的结束
25、和指定程序运行时的起始地址,装入CS、IP。如果多个程序模块相连接,则只要主程序要使用起始标号,其他子程序模块则只用END而不必指定起始地址。,4.8 定位伪指令ORG和当前位置计算器$ 格式: ORG 表达式 说明:表示把表达式的值赋给当前位置计数器。即ORG指令后的指令或数据以表达式给定的值作起始偏移量。 $代表当前位置计数器的现行值。,DATA SEGMENT ORG 30H DB1 DB 12H,34H ORG $+20H STRING DB ABCDEFGHI COUT EQU $STRING DATA ENDS,4.8 定位伪指令ORG和当前位置计算器$ 格式: ORG 表达式 说
26、明:表示把表达式的值赋给当前位置计数器。即ORG指令后的指令或数据以表达式给定的值作起始偏移量。 $代表当前位置计数器的现行值。,DATA SEGMENT ORG 30H DB1 DB 12H,34H ORG $+20H STRING DB ABCDEFGHI COUT EQU $STRING DATA ENDS,4.9 过程定义伪指令 4.9.1 定义过程 过程名 PROC 类型 过程名 ENDP 其中:类型为NEAR(隐含)或FAR NEAR:段内调用,该过程一定要与主程序在同一个段 FAR:该过程可以与主程序在同一个段,也可与主程序不 在同一个段 4.9.2 调用过程 指令:CALL 过
27、程名,功能: 调用NEAR过程:CALL下一条指令的偏移量(IP)进栈 调用FAR过程:CALL下一条指令的段地址(CS)和偏移 量(IP)先后进栈 4.9.3 过程返回 RET 功能:NEAR过程返回:出栈2字节给IP FAR过程返回:出栈4字节给IP和CS RET n ;n为正偶数 功能:实现RET功能后,(SP)+n SP 例:P147,4.9.4全局符号伪指令(PUBLIC)和 外部符号伪指令(EXTRN)(选讲),1、全局符号概念:当一个符号不仅能被自己定义的程序模块访问,且可被其他模块访问 2、定义全局符号 PUBLIC 符号1,符号2, 说明:符号是本模块中定义的变量名、标号、常
28、数等值符号或过程名等 3、定义外部符号: EXTRN 符号1:类型,符号2:类型,. 说明:本模块要访问的外部符号,符号不是本模块定义的,而是其他模块定义的,且出现在定义这些符号模块PUBLIC伪指令中。 PUBLIC和EXTRN必须呼应 若符号为变量,类型为BYTE、WORD、DWORD;若符号为过程名或标号,则类型为NEAR、FAR;若符号为常数等值符号,则类型为ABS 4、过程分类 外部过程:调用该过程的主程序与该过程不在同一个程序模块中 内部过程:调用该过程的主程序与该过程在同一个程序模块中 那么:在调用外部过程的程序模块中应说明该过程为外部过程 即 EXTRN 过程名:FAR 在定义
29、过程的程序模块中应说明该过程为全局过程 即 PUBLIC 过程名,TITLE MODULE 1 DATA SEGMENT STRING DB CHARACTER DISPLY $ DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP(0) STACK1 ENDS PUBLIC STRING EXTRN DISPLY:FAR COSEG SEGMENT ASSUME CS:COSEG,DS:DATA, SS:STACK1 START: MOV AX, DATA MOV DS ,AX CALL DISPLAY MOV AH ,4CH INT 21H COSE
30、G ENDS END START,TITLE MODULE 2 PUBLIC DISPLAY EXTRN STRING:BYTE COSEG1 SEGMENT DISPLAY PROC FAR MOV DX ,OFFSET STRING MOV AH, 9 INT 21H RET DISPLAY ENDP COSEG1 ENDS END,4.10 中断 4.10.1 一般概念,例行程序,第n条指令 断点 第n+1条指令,例行程序,中断服务子程序,4.10.2 中断源及中断类型码 8086/8088 CPU可以处理256种类型的中断,这些中断可来自CPU内 部,也可以来自CPU外部。 外部中断:
31、 非CPU内部原因产生的中断 非屏蔽中断:NMI,不受IF控制 可屏蔽中断:INTR,受IF控制 2. 内部中断 除法出错中断:当除数为0或除法中所得商过大时,立即产生一个内部中断 溢出中断指令INTO(OF=1) 软中断指令INT n 单步中断(TF1,调试程序),软中断指令INT n,溢出中断指令INTO,除法出错,单步(TF=1),中 断 逻 辑,非屏蔽 中断请求,可屏蔽 中断 控制器 8259,中断请求,IRQ0 IRQ1 IRQ7,NMI,INTR,8086/8088中断源,8086/8088CPU,3、中断类型码 8086/8088为每个中断源都分配一个中断类型码(0255) 04
32、号中断如下表:,531:待系统扩展用的保留部分 32255:由用户自行确定的中断类型码,可利用可编程中断控制器8259来设定,4.10.3 中断向量表,8086/8088在内存最小地址的1K字节空间建立了一个中断向量表。 中断类型码 中断处理程序 每个入口地址由4个字节组成:2个低字节存放入口地址的偏移量,2个高字节存放 入口地址的段地址 待中断相应后,把表中对应的4个字节内容分别送入IP和CS,完成程序转移. 中断类型码(n)与中断向量表地址的对应关系为address=4*n IP (4*n, 4*n+1) CS (4*n+2, 4*n+3),类型0,类型1,类型n,类型255,00000h
33、,00004h,00008h,003FCh,4.10.4 中断优先级 如:某个时刻有多个中断源同时提出中断请求,CPU此时相应哪个中断请求呢?又如:CPU在执行一个中断服务时,另一个中断源提出中断请求,CPU是否相应呢? 8086/8088采用中断优先级的方法来处理这些情况。 CPU处理多个中断源的法则: 按优先级由高至低依次响应; 高优先级的中断可以中断低优先级的中断,反之则不行。 每一个中断都有一个优先级别,规定如下表:,4.10.5 中断过程 中断请求 中断响应 中断处理 中断返回 1、中断请求 不同中断源产生中断请求的条件是不一样的。 2、中断响应过程 CPU每执行完一条指令后,均要查
34、询是否有中断请求,若有,就按照下图所示的顺序给予响应或者不响应。除INTR外,其余中断都是非屏蔽中断,只要他们发出中断请求,CPU就一定响应,且它们的中断类型码是固定的。,CPU响应中断请求后,立即完成: 取得中断类型码 FLAGS TF 0,IF 0 CS IP 根据中断类型码从中断向量表中取中断处理程序入口地址 转入执行中断处理程序 中断响应过程图如下:,完成当前指令,内部中断,NMI?,TF=1?,IF=1?,INTR?,识别中断 取得类型号,根据中断类型码 取得中断向量,FLAGS,IF=0,TF=0,CS&IP,转中断处理程序,中断返回,恢复 IP、CS 、FLAGS,执 行 下 一
35、 条 指 令,Y,Y,Y,N,N,3、中断处理程序 在中断处理子程序的开始处常常是保护现场,主要是把CPU中各寄存器入栈;在中断处理结束时,恢复现场。具体需要那几个寄存器入栈,视中断服务子程序而定。 中断处理子程序的基本形式如下:,4、中断返回 指令:IRET 功能:IP CS FLAGS,INTERRUP PROC FAR PUSH AX ;保护现场 PUSH CX ;中断处理 POP CX ;恢复现场 POP AX IRET ;中断返回 INTERRUP ENDP,4.11 DOS中断调用 为了节省系统程序员的编程工作量与优化程序结构,在DOS中预先设计好了一系列的通用子程序,供DOS调用
36、,这种调用采用INT n内部中断指令方式进行,所以常称DOS中断调用。 INT n 指令功能: FLAGS入栈 TF=0,IF=0 当前CS、IP先后入栈 IP,CS 中断向量第n项的4字节内容 DOS的中断向量号范围为20H3FH 。,DOS规定用中断指令INT 21H进入各功能调用子程序的总入口,再为每个功能调用规定一个功能号以便进入相应各子程序的入口。 中断调用步骤如下: 准备入口参数 功能号送AH INT 21H,1、返回DOS 功能号:4CH 作用:结束系统程序,返回DOS状态 Eg: MOV AH , 4CH INT 21H,2、带显示的键盘输入 功能号:1 功能:从键盘输入一个字
37、符,将其ASCII码保存在AL中,同时输入字符显示在CRT上 Eg: MOV AH , 1 INT 21H,3、显示一字符 功能号:2 入口参数:DL=待显示字符的ASCII码 作用:显示DL中字符 Eg:显示字符A MOV AH , 2 MOV DL ,A INT 21H,4、显示以“$”结尾的字符串 功能号:9 入口参数:DS:DX指向字符串的首地址 Eg:P156,5、字符串输入 功能号:0AH 入口参数:DS:DX指向输入缓冲区。,中断作业: 1、什么叫中断?画出8086/8088的主要中断源。 2、 CPU如何处理同一时刻的多个中断源? 3、 8086/8088的CPU相应中断请求后,立即完成哪些工作? 4、请描述CPU响应中断的原理。,4.12 汇编语言程序的上机过程 (1)利用编辑软件产生ABC.ASM文件 凡是能够编辑文本文件的环境都可用来编辑汇编语言源程序 CEDIT (2)MASM汇编ABC.OBJ CMASM ABC.ASM (3)LINK连接ABC.EXE CLINK ABC.OBJ (4)DEBUG 调试ABC.EXE CDEBUG ABC.EXE (5)直接运行一个正确的EXE文件 CABC.EXE,
链接地址:https://www.31doc.com/p-2911616.html