资源预览内容
第1页 / 共78页
第2页 / 共78页
第3页 / 共78页
第4页 / 共78页
第5页 / 共78页
第6页 / 共78页
第7页 / 共78页
第8页 / 共78页
第9页 / 共78页
第10页 / 共78页
亲,该文档总共78页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1第四章:宏汇编语言程序设计第四章:宏汇编语言程序设计v汇编语言程序格式vMASM中的表达式v伪指令语句vDOS系统功能调用v程序设计方法v程序举例 电气学院学习部资料库24.1 汇编语言程序格式汇编语言程序格式汇编语言汇编语言 机器语言的符号表示,面向机器的语言机器语言的符号表示,面向机器的语言汇编语言的特点:汇编语言的特点:直直接接控控制制目目标标代代码码,可可对对输输入入输输出出设设备备进进行行控控制制,实实时时性好;性好;编程效率高,节省内存,运行速度快。编程效率高,节省内存,运行速度快。源程序源程序8086常用的常用的汇编程序:宏程序:宏汇编程序程序MASM一、指令性语句一、指令性语句:生成机器代码,由生成机器代码,由CPU来执行来执行格式:格式:标号标号:指令助记符:指令助记符 操作数,操作数;注释操作数,操作数;注释 字母开头,最长字母开头,最长31个字符个字符汇编汇编链接链接电气学院学习部资料库3二、伪指令语句二、伪指令语句:只提供汇编信息只提供汇编信息 功能:变量定义、存储区分配、段定义、段分配、指示程功能:变量定义、存储区分配、段定义、段分配、指示程序开始、结束序开始、结束 格式:格式: 名字名字 伪指令助记符伪指令助记符 操作数,操作数;注释操作数,操作数;注释 变量名、段名、过程名、符号名(名字后不允许有变量名、段名、过程名、符号名(名字后不允许有“:”)三、数据项三、数据项汇编语言中的操作数:常数、寄存器、存储器、变量、标汇编语言中的操作数:常数、寄存器、存储器、变量、标号和表达式号和表达式电气学院学习部资料库41 1、常数、常数00110101B 026H 123D how are you00110101B 026H 123D how are you?2 2、变量、变量是内存中的一个数据区。在程序中作为操作数使用。变量名是内存中的一个数据区。在程序中作为操作数使用。变量名又称符号地址,表示该数据项中第一项所在的地址。又称符号地址,表示该数据项中第一项所在的地址。和常数区别:变量值可以改变。和常数区别:变量值可以改变。三个属性:三个属性:段地址段地址 段内偏移地址段内偏移地址 类型属性类型属性(BYTE,WORD,DWORDBYTE,WORD,DWORD)3 3、标号、标号可执行指令语句可执行指令语句的地址的符号表示。可作为转移指令的目的的地址的符号表示。可作为转移指令的目的操作数。操作数。 三个属性:三个属性:段地址段地址 段内偏移地址段内偏移地址 类型属性(类型属性(NEAR, NEAR, FARFAR) 电气学院学习部资料库54.2 4.2 表达式表达式汇编后的表达式为一个值汇编后的表达式为一个值组成:运算对象组成:运算对象+ +运算符,运算对象与结果都是整数运算符,运算对象与结果都是整数运算对象:常数、变量、标号运算对象:常数、变量、标号分为数字表达式和地址表达式两种分为数字表达式和地址表达式两种一、算术运算符:、算术运算符:+,-,*,/,MOD,SHL,SHR1.所有算术运算符都可以对数据进行运算所有算术运算符都可以对数据进行运算 例例 MOV AX ,5+3 ;(;(AX)=8 MOV AX ,(,(9MOD 2) ;(;(AX)=1 MOV AX , 9/2 ;(;(AX)=42. 对地址运算,只能是对地址运算,只能是+,-电气学院学习部资料库6例例2: ARRAY DB 1,2,3,4 TRY DB 20 MOV AX ,(,(TRY-ARRAY) ; 汇编后汇编后 MOV AX ,4例例3: FIRST DB 1,2,3 MOV AX ,FIRST+2二、逻辑运算符二、逻辑运算符:AND,OR,NOT,XOR 只能用于数字表达式中只能用于数字表达式中例:例: PORT EQU 90H AND DL ,PORT AND 0FEH;汇编后;汇编后AND DL,90H 前前AND指令助记符,在程序执行时运算指令助记符,在程序执行时运算 后后AND运算符,在汇编时计算运算符,在汇编时计算电气学院学习部资料库7三、关系运算符三、关系运算符:EQ、NE、GT、LT、GE、LE结果为真:输出结果为真:输出0FFH、0FFFFH 全全1结果为假:结果为假: 全全 0例:例: PORT EQU 2 MOV BX ,PORT LT 5 ;MOV BX ,0FFFFH MOV CX ,(,(PORT LT 5) AND 100)OR(PORT GE 5)AND 200););若若PORT LT 5PORT LT 5=FFFFH FFFFH AND 100=100PORT GE 5=0000 0000H AND 200=0 100 OR 0=100汇编后汇编后 MOV CX, 100电气学院学习部资料库8四、数值返回运算符四、数值返回运算符:OFFSET、SEG、TYPE、LENGTH、SIZE 1. OFFSET 返回变量或标号的偏移地址值返回变量或标号的偏移地址值2. SEG 返回变量或标号的段基地址值返回变量或标号的段基地址值例:例: MOV SI ,OFFSET FIRST例:例: MOV AX ,SEG FIRST MOV DS ,AX MOV DS ,SEG FIRST 3. TYPE 变量变量 :返回类型属性:返回类型属性DB 1 DW 2 DD 4 (字节数)字节数) TYPE 标号标号 :返回距离属性:返回距离属性 NEAR -1 FAR -2例例4-9电气学院学习部资料库94. LENGTH 变量变量当变量定义使用当变量定义使用DUP时,返回变量所包含的单元数时,返回变量所包含的单元数 例例 n DUP( ): 返回返回n 其它其它 : 返回返回 15. SIZE=LENGTH*TYPE例:例: FIRST DW 1,2,3,4 M DW 100 DUP (?) MOV AL ,TYPE FIRST ;MOV AL ,2 MOV AL ,LENGTH FIRST ;MOV AL ,1 MOV AL ,SIZE FIRST ;MOV AL ,2 MOV AL ,TYPE M ;MOV AL ,2 MOV AL ,LENGTH M ;MOV AL ,100 MOV AL ,SIZE FIRST ;MOV AL ,200电气学院学习部资料库10五、修改属性运算符五、修改属性运算符:段操作符、段操作符、PTR、THIS、HIGH、LOW、SHORT 1、段操作符:、段操作符:例:例:MOV AX ,ES:BX ES-段超越前缀段超越前缀 2、PTR:格式:类型格式:类型/距离距离 PTR 变量变量/标号标号变量:变量:BYTE,WORD 标号:标号:NEAR,FAR例例1: AREA1 DB 15H ,23H AREA2 DW 1234H MOV AL ,AREA1 ;AL=15H MOV AX ,AREA1 ; 应为:应为:MOV AX ,WORD PTR AREA1 MOV BL ,BYTE PTR AREA2;BL=34H电气学院学习部资料库11例例2: MOV BYTE PTR BX ,10H; BX 10H MOV WORD PTR BX ,10H ; BX 0010H例例3: JMP FAR PTR AGAIN ;实现段间转移;实现段间转移. AGAIN-标号标号3、THIS 格式:变量格式:变量/标号标号 EQU THIS 类型类型/距离距离 功能:将类型功能:将类型/距离距离 属性赋予变量属性赋予变量/标号,且该变量标号,且该变量/标号的地标号的地址与下一个存储单元相同址与下一个存储单元相同例例1: FIRST EQU THIS BYTE TABLE DW 200 DUP(?)(?) ;使变量;使变量FIRST与与TABLE的偏移地址相同,但的偏移地址相同,但FIRST为字节类为字节类型,型,TABLE为字类型为字类型例例2: SPP EQU THIS FAR MOV AX ,0100 H ;即;即SPP :MOV AX ,0100H电气学院学习部资料库124、SHORT SHORT 标号标号例:例:JMP SHORT L1 ;限制跳转的距离在;限制跳转的距离在-128+127之间之间5、HIGH和和LOW 字节分离符字节分离符 HIGH/LOW 变量或标号变量或标号 HIGH 分离出高位字节分离出高位字节 LOW分离出低位字节分离出低位字节例:例: K1 EQU 1234H MOV AH ,HIGH K1 ; MOV AH,12H MOV AL ,LOW K1 ; MOV AL ,34H MOV AH ,HIGH 1234H ;不能不能+立即数立即数电气学院学习部资料库13六、其他运算符六、其他运算符 1、(、( ) 改变优先级次序改变优先级次序 表表4-3例:例: MOV AL, X1 OR X2 AND X3 MOV AL,(X1 OR X2) AND X3 2、 用用 表达地址表达式表达地址表达式例:例: MOV CL ,BX MOV AX ,BX+2用用 表示多重变量的下标值表示多重变量的下标值例:例: M1 DB 10H,20H,30H,40H MOV AL ,M13 ;MOV AL ,40H电气学院学习部资料库144-3 4-3 伪指令语句伪指令语句一、数据定义语句一、数据定义语句 DB DW格式:变量名格式:变量名 助记符助记符 操作数,操作数,操作数,操作数,;注释;注释 变量名变量名 助记符助记符 n DUP(操作数,操作数(操作数,操作数);注释);注释 功能:将操作数存入变量名指定的存储单元中,或者只分功能:将操作数存入变量名指定的存储单元中,或者只分配存储空间不存入数据配存储空间不存入数据例例1:A1 DB 0DH A2 DW ? A3 DB 00H,01H,03H A5 DB 9 DUP (?) A6 DB 8 DUP (1,2,3) ;共共3x8=24个单元个单元 A7 DB How are you? A8 DW OK A9 DW OVER; 电气学院学习部资料库15二、表达式赋值语句二、表达式赋值语句1、赋值语句、赋值语句EQU格式:符号名格式:符号名 EQU 操作数操作数功能:给操作数(变量、标号、常数、表达式、指令)定义一功能:给操作数(变量、标号、常数、表达式、指令)定义一个符号名个符号名在同一个程序中不允许重复定义在同一个程序中不允许重复定义例例1:ABC EQU 75 XYZ EQU ABC+2; XYZ EQU ABC+2 ABC EQU 75 A1 EQU BX A2 EQU ADDPURGE 语句可以解除赋值,使它在后面可以重新赋值。语句可以解除赋值,使它在后面可以重新赋值。例例2:PURGE ABC电气学院学习部资料库162、等号语句、等号语句=功能:同功能:同EQU , 但允许重复定义但允许重复定义例例1: X1=100 X1=X1+100;X1=200 X1 EQU 100 X1 EQU 200 ; 电气学院学习部资料库17v例例2: PORT EQU 50H IN_PORT DB PORT+1 ; IN_PORT DB 51H PORT DB 50H IN_PORT DB PORT+1 ; PORT DB 50H IN_PORT DW PORT+1 ;将变量将变量PORT+1的偏移地址,赋给字变量的偏移地址,赋给字变量IN_PORT 变量名变量名符号名符号名表达式表达式电气学院学习部资料库18三、段定义语句 1、段定义语句、段定义语句 SEGMENTENDS格式:段名格式:段名 SEGMENT ;逻辑内容;逻辑内容 段名段名 ENDS (上下段名必须相同)(上下段名必须相同)功能:将一个逻辑段定义成一个整体功能:将一个逻辑段定义成一个整体段名:逻辑段的标识符,不可省略,确定了逻辑段在存储器中段名:逻辑段的标识符,不可省略,确定了逻辑段在存储器中的地址的地址(段基地址)(段基地址)例:例: MOV AX ,DATA MOV DS ,AX 电气学院学习部资料库19堆栈段定义:堆栈段定义: 段名段名 SEGMENT STACK(不可省略)(不可省略) 段名段名 ENDS说明:说明:定位类型、组合类型、分类名一般情况下可省略定位类型、组合类型、分类名一般情况下可省略Data,Stack,ES段中,只能有伪指令段中,只能有伪指令Code段中,可有指令和与指令相关的伪指令段中,可有指令和与指令相关的伪指令电气学院学习部资料库202、段分配语句:、段分配语句:ASSUME格式:格式:ASSUME CS:段名:段名 ,DS:段名:段名 ,SS:段名:段名 ,ES:段名:段名功能:将存储器中的某几个逻辑段分别定义成代码段、数据功能:将存储器中的某几个逻辑段分别定义成代码段、数据段、堆栈段、附加段段、堆栈段、附加段(指定某程序运行时,哪几个逻辑段(指定某程序运行时,哪几个逻辑段有效。有效。CS、DS段是必须的,段是必须的,SS、ES段看情况)段看情况)注意:注意:assume指令只指定某个段分配给哪个段寄存器,并指令只指定某个段分配给哪个段寄存器,并将代码段的段基址自动装入将代码段的段基址自动装入CS中,而不能把其它段基址中,而不能把其它段基址自动装入相应的段寄存器中,所以,在代码段的开始,要自动装入相应的段寄存器中,所以,在代码段的开始,要有一段初始化程序完成这一工作有一段初始化程序完成这一工作电气学院学习部资料库21四、过程定义语句四、过程定义语句 段内调用段内调用 段间段间格式:过程名格式:过程名 PROC 属性属性 (距离属性(距离属性(NEAR FAR) ;过程内容;过程内容 RET N 过程名过程名 ENDP说明:说明:1.RET N 带参数返回,其中带参数返回,其中N为正偶数,表示从过程返回为正偶数,表示从过程返回后,堆栈指针后,堆栈指针SP加上加上N2.过程内部至少有一条过程内部至少有一条RET指令,也可以有多个,表示此指令,也可以有多个,表示此过程具有多个返回出口。过程具有多个返回出口。3.过程调用允许嵌套调用,递归调用过程调用允许嵌套调用,递归调用嵌套调用:一个被调用的过程中又调用另一个过程嵌套调用:一个被调用的过程中又调用另一个过程递归调用递归调用: 一个被调用的过程又调用自己一个被调用的过程又调用自己 电气学院学习部资料库22五、程序开始、结束语句 1、ORG : 设置位置指针,指定下面语句的起始偏移地址设置位置指针,指定下面语句的起始偏移地址例:例:DATA SEGMENT ORG 100H A1 DB 10H,20H,30H ;A1的偏移地址为的偏移地址为0100H ORG 200H A2 DW 3031H,3233H ;A2的偏移地址为的偏移地址为0200H DATA ENDS 电气学院学习部资料库232、END格式:格式:END 标号名标号名 放在程序的末尾,放在程序的末尾,CPU遇到遇到END语句停止汇编,语句停止汇编,每段程序只能有一个每段程序只能有一个END标号名是该程序中第一条可执行语句的标号名,可标号名是该程序中第一条可执行语句的标号名,可以缺省,若一个程序中,包含多个模块,则为主程以缺省,若一个程序中,包含多个模块,则为主程序模块中的标号名称序模块中的标号名称电气学院学习部资料库24六、使用地址计数器的值六、使用地址计数器的值$ $来保存当前正在汇编的来保存当前正在汇编的指令的偏移地址指令的偏移地址例:例:ABC DW 1,2,$+4 ;若若ABC的偏移地址为的偏移地址为1000H, 相当于相当于 ABC DW 1,2,1004H电气学院学习部资料库25v完整的汇编语言编写的格式完整的汇编语言编写的格式DATA SEGMENTDA1 DB this is a sample programDATA ENDSSTACK SEGMENT STACKST1 DB 100 DUP (?)TOP EQU LENGTH ST1STACK ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACKMAIN PROC FARSTART: PUSH DS ;返回;返回DOS用用 SUB AX,AX PUSH AX电气学院学习部资料库26 MOV AX, DATA ;初始化初始化DS MOV DS,AX MOV AX,STACK ;初始化初始化SS MOV SS,AX MOV SP,TOP ;设栈底设栈底 RETMAIN ENDPCODE ENDS END START参见例参见例4-29,友情提示友情提示:编程中用到的编程中用到的; , :等符号要用半角形式输入等符号要用半角形式输入电气学院学习部资料库27好的程序特点:好的程序特点:1.程序结构模块化,易读,易调试和维护程序结构模块化,易读,易调试和维护2.执行速度快执行速度快3.占用内存小占用内存小编程基本步骤:编程基本步骤:1.分析问题分析问题2.绘制程序流程图绘制程序流程图3.分配存储空间及工作单元分配存储空间及工作单元4.编程编程5.调试调试6.实际运行实际运行程序设计方法程序设计方法电气学院学习部资料库281、顺序程序设计 例:设计一个顺序程序实现例:设计一个顺序程序实现两个双字数的加法,结果两个双字数的加法,结果放在加数单元中放在加数单元中被加数:变量被加数:变量first,四单元四单元加数:变量加数:变量second,四单元四单元和:变量和:变量second寄存器间接寻址:寄存器间接寻址:SI,DI累加器累加器AX 送被加数、加数地址送被加数、加数地址低位字加低位字加高位字加高位字加送低位和送低位和送高位和送高位和电气学院学习部资料库29 FIRST DD 12345678H SECOND DD 22334455H MOV SI , OFFSET FIRST MOV DI , OFFSET SECOND MOV AX , SI ADD AX , DI MOV DI , AX MOV AX , SI+2 ADC AX , DI+2 MOV DI+2 , AX电气学院学习部资料库302 2、分支程序设计、分支程序设计 多分支多分支例:例: x+1 x1 y = x+2 1x0 x+3 x0假设假设x放在放在AX里里 CMP AX , 1 JGE P1 CMP AX , 0 JGE P2 ADD AX , 3 JMP P3P1: ADD AX ,1 JMP P3P2: ADD AX ,2P3: MOV 2000H , AXAX1?NAX0?NAX+1AX+3AX+2YYAX2000H电气学院学习部资料库31 跳转表实现多分支跳转表实现多分支根据表内地址分支根据表内地址分支表地址表地址=跳转表首地址跳转表首地址+偏移地址偏移地址例例4-67 有有8个加工子程序,入口偏移地址分别为个加工子程序,入口偏移地址分别为P1,P2, ,P8,编程实现检测键盘输入数字,编程实现检测键盘输入数字18,使系统分别转向,使系统分别转向8个加工子程序。用跳转表实现。个加工子程序。用跳转表实现。.P2高高8位位P2低低8位位P1高高8位位P1低低8位位BASEBASE+2开始开始取编号取编号求偏移量求偏移量求表地址求表地址分支到相应的分支程序分支到相应的分支程序电气学院学习部资料库32BASE DW P1,P2,P3,P4,P5,P6,P7,P8KEY DB ? MOV AH,1 INT 21H ;从键盘输入字符从键盘输入字符 , 字符字符ASCII AL AND AL,0FH DEC ALADD AL,AL; AL乘乘2 MOV AH,0MOV BX,OFFSET BASEADD BX,AXJMP WORD PTR BX电气学院学习部资料库33v例:例:p3子程序地址在子程序地址在cs:7800H开始开始,则则BASE中第中第3个数据个数据为为7800H,地址地址DS:0004H,当键盘输入字符当键盘输入字符3 AL=33H AL=03H AL=2 AL=2X2=4 AH=0 BX=0 BX=0+4=4 BX=0004H=7800H.程序转移至程序转移至CS:7800H电气学院学习部资料库343、循环程序设计 循环次数不固定循环次数不固定循环初始状态循环初始状态 循环体循环体 NY修改参数修改参数出口出口循环控制条件循环控制条件循环次数固定循环次数固定循环初始状态循环初始状态 循环体循环体 Y修改参数修改参数N循环控制条件循环控制条件电气学院学习部资料库35例例1:题目同上,利用循环程序设计:题目同上,利用循环程序设计 MOV SI ,OFFSET FIRST MOV DI ,OFFSET SECOND CLC CLD MOV CX ,02HLI: LODSW ; DS :SI AX,SI+2 SI ADC AX ,DI STOSW ; AX ES :DI,DI+2 DI LOOP LI ; 先执行,后判断先执行,后判断电气学院学习部资料库36 例例2:AX寄存器中有寄存器中有16位二进制数,编程统计其中位二进制数,编程统计其中1的个的个数,结果放到数,结果放到BL中中方法一:方法一: MOV BL ,0 ;计数值清计数值清0 L1:AND AX ,AX ;先判断,后执行先判断,后执行 JZ STOP ;若若AX=0,则不进入循环则不进入循环 SHL AX ,1 JNC L2 INC BL L2:JMP L1 STOP: 电气学院学习部资料库37方法二:方法二: MOV BL ,0 ;计数值清计数值清0 MOV CX,16 L1:SHL AX ,1 JNC L2 INC BL L2:LOOP L1 方法三:方法三: MOV BL,0 MOV CX,16 L1:ROL AX,1 ADC BL,0 LOOP L1电气学院学习部资料库38多重循环多重循环 3点注意点注意:v多重循环的初始控制条件多重循环的初始控制条件v内循环可嵌套在外循环中,内可跳到外,外不得内循环可嵌套在外循环中,内可跳到外,外不得进入内进入内v循环不要回到初始条件,造成死循环循环不要回到初始条件,造成死循环电气学院学习部资料库39 3 5 7 8 1 9 3 5 7 1 8 9 3 5 1 7 8 9 3 1 5 7 8 9 1 3 5 7 8 9例例4-72 冒泡排序。使一个数组中的数据从小到大排列。冒泡排序。使一个数组中的数据从小到大排列。分析:第一遍内循环分析:第一遍内循环N-1次,次,最大数像气泡一样升至数组尾最大数像气泡一样升至数组尾第二遍内循环只要第二遍内循环只要N-2次,找到次大数,依次类推次,找到次大数,依次类推外循环共需外循环共需N-1遍遍 初始初始 5 3 8 7 9 1 一一 3 5 8 7 9 1 二二 3 5 8 7 9 1 三三 3 5 7 8 9 1 四四 3 5 7 8 9 1 五五 3 5 7 8 1 9第一遍内循环第一遍内循环 N-1 次次外外循循环环 N-1 遍遍电气学院学习部资料库40修改地址(BX+2)数i数i+1?两数位置交换回到检测起点i=0(BX)CX-1内循环CX=0?初始化:数组起始地址BX外循环次数DX内循环次数CX置检测起点i=0(BX)Dx-1外循环DX=0?NNL2L1N电气学院学习部资料库41DATA SEGMENT BUF DW N,15,37,8600, 0A768H,3412H,1256H, DW 76HDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX, DATA MOV DS,AX MOV BX,0; i=0 MOV CX, BUFBX ; NCX DEC CX ; N-1, 内循环次数内循环次数L1: MOV DX,CX ;外循环次数外循环次数L2: ADD BX, 2电气学院学习部资料库42 MOV AX, BUFBX CMP AX, BUFBX+2 JBE CONTI XCHG AX, BUFBX+2 MOV BUFBX, AXCONTI: LOOP L2 MOV CX,DX MOV BX, 0 ;回到回到i=0,重新开始比较重新开始比较 LOOP L1 ;CX-1:内循环次数内循环次数N-1,N-2;外循环次数外循环次数-1 MOV AX, 4C00H INT 21H RETCODE ENDS END START 电气学院学习部资料库43四、子程序结构四、子程序结构子程序说明子程序说明l名称、功能名称、功能l存储单元和寄存器存储单元和寄存器l入口和出口入口和出口l有否调用其它子程序有否调用其它子程序主程序调用子程序注意:主程序调用子程序注意:1)堆栈堆栈2)保护现场保护现场3)参数传递参数传递a)寄存器寄存器b)存储器存储器c)堆栈堆栈电气学院学习部资料库44例例4-30:过程程调用用,实现内内存存中中N个个BCD码数数据据相相加加(完完整程序)整程序) DATA SEGMENT FIRST DB 22H, 33H,44H,55H ;加数加数1 SECOND DB 55H, 66H,77H,88H ;加数加数2 SUM DB 20 DUP(?)(?) ;定定义存放存放结果果单元元 DATA ENDSSTACK SEGMENT STACK STA DB 20 DUP(?)(?) ;设置堆置堆栈长度度为20个字个字节 TOP EQU LENGTH STASTACK ENDS电气学院学习部资料库45CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATAMAIN PROC FARSTART: MOV AX,STACK ;将堆将堆栈段段地址段段地址SS MOV SS ,AX MOV AX,TOP ;将堆将堆栈指指针指向指向栈底底 MOV SP,AX PUSH DS ;使得程序使得程序执行完了,能返回行完了,能返回DOS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX ;MOV DS ,DATA , 初始化初始化 MOV ES,AX ;将数据段段地址将数据段段地址DS、ES MOV SI ,OFFSET FIRST MOV BX,OFFSET SECOND MOV DI,OFFSET SUM 电气学院学习部资料库46 MOV CX ,04 CLD CLCADBCD: CALL AAM LOOP ADBCD RET ;返回返回DOSMAIN ENDP AAM PROC NEAR LODSB ;DS:SIAL SI+1SI ADC AL ,BX DAA STOSB ;ALES:DI DI+1DI INC BX RETAAM ENDPCODE ENDS END START 电气学院学习部资料库47;子程序入口参数:子程序入口参数:SI, BX 出口参数出口参数: DI 参数传递:参数传递:存储器存储器电气学院学习部资料库484.5 DOS4.5 DOS系统功能调用系统功能调用Disk Operation System Disk Operation System 磁盘操作系统磁盘操作系统 一一、DOS常用的软中断命令常用的软中断命令DOSDOS具有对具有对I/OI/O设备管理及磁盘与文件管理功能,设备管理及磁盘与文件管理功能,一部分固化在系统的一部分固化在系统的ROMROM中中一部分在系统启动时调入内存,通过软件中断来调用一部分在系统启动时调入内存,通过软件中断来调用中断指令中断指令:INT n INT n 表表4-6 DOS 4-6 DOS 常用的常用的软中断命令中断命令 入口、出口参数入口、出口参数电气学院学习部资料库49二、二、DOS系统功能调用系统功能调用 INT 21H附录附录F AH=功能号功能号每个子程序对应一个功能号(相应的入口号),格式如下:每个子程序对应一个功能号(相应的入口号),格式如下:功能号功能号AH入口参数入口参数指定寄存器指定寄存器INT 21H根据出口参数分析功能调用执行情况根据出口参数分析功能调用执行情况1.DOS键盘功能调用键盘功能调用 表表4-7键入单字符键入单字符 AH=1、8、6、7 例:从键盘输入字符并显示例:从键盘输入字符并显示 MOV AH ,1 INT 21H ;检查,若为;检查,若为Break键,自动调用键,自动调用INT 23H电气学院学习部资料库50键入字符串键入字符串 功能号:功能号:AH=0AH 入口参数:入口参数:DS:DX=缓冲区首址缓冲区首址例例4-52:开开辟辟一一个个缓缓冲冲区区,从从键键盘盘输输入入一一个个字字符符串串,将将输输入入的的字字符符数数CL寄存器,并将指针指向字符串的第一个字符。寄存器,并将指针指向字符串的第一个字符。 BUFF DB 100 ;定义存放定义存放100字节的缓冲区字节的缓冲区 DB ? ;系统填入实际输入字符字节数系统填入实际输入字符字节数 DB 100 DUP(?)(?) ;存放输入字符的存放输入字符的ASCII码码 MOV DX, OFFSET BUFF MOV AH, 0AH INT 21H MOV BX, DX MOV CL, BX+1 ;取输入字符数取输入字符数CL ADD DX, 2 ;将指针指向第一个字符将指针指向第一个字符电气学院学习部资料库512、DOS显示功能调用显示功能调用表表4-8单字符操作单字符操作 例:例:MOV DL , $ MOV AH , 2 INT 21H ;调用结果,屏幕上在光标处显示;调用结果,屏幕上在光标处显示$字符串操作字符串操作 AH=9的的INT 21H ,注意串必须以,注意串必须以$结束结束例例4-55:在在屏屏幕幕上上显显示示HOW DO YOU DO?字字符符串串,且且回回车、换行。车、换行。 DATA SEGMENT MES DB HOW DO YOU DO?, 0DH, 0AH, $ ;0DH(回车),回车),0AH(换行换行) DATA ENDS 电气学院学习部资料库52CODE SEGMENT ASSUME CS:CODE ,DS:DATAMAIN :PUSH DS XOR AX ,AX PUSH AX MOV AX ,DATA MOV DS ,AX MOV AH ,9 MOV DX ,OFFSET MES INT 21H RET CODE ENDS END START字符码字符码功能功能08H0AH0CH0DH退格退格换行换行换页换页回车回车电气学院学习部资料库53 3、返回操作系统、返回操作系统 4CH功功能能调调用用:能能够够结结束束当当前前正正在在执执行行的的程程序序,返返回回DOS系统系统 MOV AH ,4CH INT 21H电气学院学习部资料库544.6 4.6 上机上机实验 参见课本及实验指导书 实验一:两个多位十进制数相减的实验 实验二:排序实验要求:从首地址偏移地址为1000H的内存区域开始存放10个无符号字节数,设计程序将这些数从大到小排序,并将排序前后次序分别显示在屏幕上。参见课本P181及实验指导书实验十三 MOV BX ,0 MOV CX ,N-1 ; L1: MOV DX ,CX L2: MOV AX ,BUFBX CMP AX ,BUFBX+1 JAE CONTI XCHG AX ,BUFBX+1 MOV BUFBX,AX ADD BX,1CONTI: LOOP L2MOV CX ,DXMOV BX ,0 LOOP L1 调用显示子程序,参见P177电气学院学习部资料库554.7 4.7 程序举例程序举例一、查表一、查表 例例4-64二、代码转换类二、代码转换类 16位二进制位二进制 ASC码码 (例(例4-69) 无符号二进制无符号二进制组合组合BCD码(例码(例4-78) ASCII码码 有符号二进制有符号二进制 (例(例4-79) ASC码码 显示显示三、算术运算类三、算术运算类 加减乘除(二进制,加减乘除(二进制,BCD码)码)电气学院学习部资料库56例例4-64 内存中内存中TABLE开始存放开始存放09的平方值,通过人机的平方值,通过人机对话,当任给定一个数对话,当任给定一个数X(09),),查表得查表得X的平方值,的平方值,放在放在AL中。中。TABLE DB 0,1,4,9,16,25,36,49,64,81BUF DB Please input one number(09):,0DH,0AH, $MOV DX, OFFSET BUFMOV AH, 9INT 21H ;显示字符串显示字符串MOV AH, 1INT 21H ;输入字符输入字符AND AL,0FH ;ASCIIBINMOV BX, OFFSET TABLE;查表查表XLATHLT电气学院学习部资料库57例例4-69 将将BX中的中的16进制数进制数转换为转换为ASCII码,存放到码,存放到BUF开始的内存单元中去,开始的内存单元中去,并在屏幕显示数值并在屏幕显示数值转换表:转换表:入口参数:入口参数: BX出口参数:出口参数: BUF开始的内存开始的内存单元中,单元中,SI指示。指示。16进制数进制数 ASCII131H232H333H434H939HA41HB42H电气学院学习部资料库58 LEA SI, BUF MOV CH,4 ;循环循环4次次NEXT: MOV CL,4 ROL BX,CL ;最高位移到右边最高位移到右边 MOV AL,BL ;一位十六进制数一位十六进制数转换成转换成ASCII码码 AND AL,0FH ADD AL,30H CMP AL,3AH JL STORE ADD AL,7STORE: MOV SI,AL MOV AH,2 MOV DL,AL INT 21H ;显示显示3 2 5 F2 5 F 3F30333INC SIDEC CHJNZ NEXTHLT电气学院学习部资料库59例例4-78:将将AX中中的的无无符符号号16位位二二进制制数数转换为4位位压缩型型BCD码算法一:算法一:千位数:无符号千位数:无符号16位二位二进制数制数/1000的商,得余数的商,得余数1百位数:余数百位数:余数1/100的商,得余数的商,得余数2十位数:余数十位数:余数2/10的商,得余数的商,得余数3个位数:余数个位数:余数3算法二:算法二: 把把要要转转换换的的数数分分别别减减去去相相应应的的最最高高次次幂幂,直直至至不不够减,此时减的次数即是相应的位够减,此时减的次数即是相应的位电气学院学习部资料库607865700010007 865 -余数余数1865100800 65 -余数余数28 65 60 1065 -余数余数3程序中,程序中,7865D=1EB9H1000D=3E8H 865D=361H1EB9H/3E8H=7H.361H361H/64H=8H41H41H/0AH=6H5H电气学院学习部资料库61复复习除法:除法: 16位位/8位位 商商AL,余,余AH(AX)(源操作数)(源操作数) 32位位/16位位商商AX,余,余DX(DX,AX)(源操作数)(源操作数)若若计算算 16位位/16位位 ,8位位/8位位 ,需将被除数,需将被除数扩展展程序:程序:入入口口参参数数:AX=16位位二二进制制数数出出口口参参数数:AX=4位位压缩型型BCD码(CF=0时) 占用占用资源:源:CX , DX千位千位 百位百位 千位千位 百位百位 十位十位 千位千位 百位百位 十位十位 个位个位 千位千位每次所得商,依次移入每次所得商,依次移入DXDXDXDXDX左移左移4位位电气学院学习部资料库62 B2TOBCD PROC FAR CMP AX ,9999 ;AX9999,则置置CF=1, JBE TRAN ;不不转换 STC JMP EXITTRAN:PUSH CX ;保保护现场 PUSH DX XOR DX ,DX ; 32位位/16位,需位,需DX MOV CX ,1000 ;求千位数求千位数 DIV CX ;商在商在AX,余数,余数1在在DX XCHG AX ,DX ;余数余数1在在AX,千位数(商)在千位数(商)在DX最低最低4位,位,DX=0007H电气学院学习部资料库63 MOV CL ,4 ;DX左移左移4位,低位添位,低位添SHL DX ,CL ;四个四个0,DX=0070HMOV CL,100 ;求百位数求百位数DIV CL ;商在商在AL,余数,余数2在在AHADD DL ,AL ;百位数入百位数入DX,DX=0078H MOV CL ,4 ; DX左移左移4位,位,DX=0780HSHL DX ,CLXCHG AH ,AL ;余数余数2在在AL AND AX ,00FFH ;AH=0MOV CL ,10 ;求十位数求十位数 DIV CL ;商在商在AL,余数,余数3在在AH电气学院学习部资料库64ADD DL ,AL ;DL=86HMOV CL ,4SHL DX ,CL ;DX=7860HADD DL ,AH ;DX=7865H MOV AX ,DX ;转换后的数入后的数入AXPOP DXPOP CXEXIT: RETB2TOBCD ENDP作作业:将将AH中中存存放放的的无无符符号号8位位二二进制制数数转换为3位位压缩型型BCD码电气学院学习部资料库65例例4-79 将将十十进制制数数的的ASCII码转换成成有有符符号号二二进制制数,数,结果存入果存入AX字字符符串串转转换换:数数字字字字符符(30H39H)对对应应一一位位十十进进制制数数(09) 例:例:十进制数十进制数a0a1a2转换成十六进制数转换成十六进制数:十六进制数十六进制数=a0x100+a1x10+a2 =(a0x10+a1) x10+a2符号字符串符号字符串检测字符串的正负,若为正,按检测字符串的正负,若为正,按的算法转换即可的算法转换即可若为负,将标识符若为负,将标识符MINU置置1,转换结束还需将,转换结束还需将AX中的数取补中的数取补电气学院学习部资料库66字符串是否合法?(字符串是否合法?(3点要求)点要求)字符串字符个数字符串字符个数6, AX为为16位,位,216=65536 (5位十进制数加位十进制数加1个符号位)个符号位)字符在字符在09之间之间转换完的结果要能存入转换完的结果要能存入AX中,必须结果中,必须结果-32768+32767调用的子程序:调用的子程序:CHE 乘乘10子程序子程序电气学院学习部资料库67查符号X10 CHE置标志位DX清零是负数?修改地址字符串首地址给SI Y读下一位数修改地址累加到DX字符串转换完?是负数?取补Y电气学院学习部资料库68入口:入口:DX字符串地址偏移量,字符串地址偏移量,CX字符个数字符个数 出口:出口:CF=0,AX=二进制数;二进制数;CF=1,则字符串非法,则字符串非法,AX=0使用的寄存器:使用的寄存器:BX, SIAS2BIN PROC FAR PUSH CX PUSH DX PUSH SI MOV SI,DX CMP CX,6 JA ERR CLD MOV AL,SI ;查符号查符号 CMP AL,- JNE CHK MOV MINU,1 JMP DECSCHK: CMP AL,+ JNE CLRDDECS: DEC CX INC SI电气学院学习部资料库69CLRD: SUB DX,DXNEXT: CALL CHE ;调用乘调用乘10子程序子程序 JC ERR LODSB CMP AL,0 JB ERR CMP AL,9 JA ERR AND AX,000FH ADD DX,AX JC ERR LOOP NEXT MOV AX,DX CMP MINU,1 ;负数求补负数求补 JNE EXIT NEG AX JMP EXITERR: STC ;字符串为非法,将字符串为非法,将CF置置1,AX=0 MOV AX,0电气学院学习部资料库70EXIT: POP SI POP DX POP CX RETAS2BIN ENDPCHE PROC NEAR ;乘;乘10子程序子程序 PUSH BX MOV BX,DX SHL DX,1 SHL DX,1 ADD DX,BX SHL DX,1 POP BX RET CHE ENDP电气学院学习部资料库71例:两个多字节无符号数乘法子程序例:两个多字节无符号数乘法子程序(参考例(参考例4-29,P142 ) 高高16位位 低低16位位 高高16位位 低低16位位 DX0 AX0 被乘数低被乘数低16位位X低低16位位 DX1 AX1 被乘数高被乘数高16位位X低低16位位 DX2 AX2 被乘数低被乘数低16位位X高高16位位 + DX3 AX3 被乘数高被乘数高16位位X高高16位位 BX+6 BX+4 BX+2 BX 电气学院学习部资料库72DATA SEGMENT FIRST DW 3213H , 4746H SECOND DW 2278H, 6452H SUM DW 4 DUP(?)DATA ENDSSTACK SEGMENT STACK STA DB 100 DUP(?) ;定义一个定义一个100字节的堆栈,字节的堆栈, TOP LABEL WORD ; TOP为栈底的名,类型为字为栈底的名,类型为字STACK ENDS电气学院学习部资料库73CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKMAIN PROC FARSTART: MOV AX , STACK MOV SS , AX MOV SP , OFFSET TOP PUSH DS XOR AX , AX PUSH AX MOV AX , DATA MOV DS , AX 电气学院学习部资料库74 MOV SI , OFFSET FIRST MOV DI , OFFSET SECOND MOV BX , OFFSET SUM CALL DWMULT ;调用乘法子程序用乘法子程序 RETMAIN ENDP CODE ENDS (若题意要求用段间调用来实现)(若题意要求用段间调用来实现)DCODE SEGMENT ASSUME CS:DCODE ,DS:DATA ,SS:STACKDWMULT PROC FAR PUSH AX PUSH DX电气学院学习部资料库75 MOV AX , SI ;低低16位位 X 低低16位位 MUL WORD PTR DI MOV BX , AX MOV BX+2 , DX MOV AX , SI+2 MUL WORD PTR DI ;高高16位位 X 乘数低乘数低16位位 MOV BX+4 , DX CLC ADD BX+2 , AX ADC BX+4 , 0 CLC电气学院学习部资料库76 MOV AX , SI ;低低16位位 X 乘数高乘数高16位位 MUL WORD PTR DI+2 ADD BX+2 , AX ADC BX+4 , DX MOV WORD PTR BX+6 , 0 ADC WORD PTR BX+6 , 0 CLC MOV AX , SI+2 ;高高16位位 X 乘数高乘数高16位位 MUL WORD PTR DI+2 ADD BX+4 , AX ADC BX+6 , DX电气学院学习部资料库77 POP DX POP AX RETDWWULT ENDPDCODE ENDS END START 高高16位位 低低16位位 16位位 DX0 AX0 低低16位位 X 16位位 + DX1 AX1 高高16位位 X 16位位 BX+4 BX+2 BX ;子程序入口:;子程序入口:SI、DI指示的内存单元,指示的内存单元, 出口:出口:BX指示的内存单元,指示的内存单元, 使用寄存器:使用寄存器:AX、DX电气学院学习部资料库78谢谢大家!谢谢大家!作业:作业:4-2,3,5,6,11,13,15,16电气学院学习部资料库
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号