《微机原理与应用教学资料》第四章(改).ppt

上传人:wuy****n92 文档编号:72956025 上传时间:2023-02-14 格式:PPT 页数:67 大小:324.50KB
返回 下载 相关 举报
《微机原理与应用教学资料》第四章(改).ppt_第1页
第1页 / 共67页
《微机原理与应用教学资料》第四章(改).ppt_第2页
第2页 / 共67页
点击查看更多>>
资源描述

《《微机原理与应用教学资料》第四章(改).ppt》由会员分享,可在线阅读,更多相关《《微机原理与应用教学资料》第四章(改).ppt(67页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、1 1第四章:宏汇编语言程序设计第四章:宏汇编语言程序设计汇编语言程序格式MASM中的表达式伪指令语句DOS系统功能调用程序设计方法程序举例 电气学院学习部资料库电气学院学习部资料库24.1 汇编语言程序格式汇编语言程序格式汇编语言汇编语言 机器语言的符号表示,面向机器的语言机器语言的符号表示,面向机器的语言汇编语言的特点:汇编语言的特点:直接控制目标代码,可对输入输出设备进行控制,实时性好;直接控制目标代码,可对输入输出设备进行控制,实时性好;编程效率高,节省内存,运行速度快。编程效率高,节省内存,运行速度快。源程序源程序1.asm 1.obj 1.exe8086常用的常用的汇编汇编程序:宏

2、程序:宏汇编汇编程序程序MASM一、指令性语句一、指令性语句:生成机器代码,由生成机器代码,由CPU来执行来执行 格式:格式:标号标号:指令助记符:指令助记符 操作数,操作数;注释操作数,操作数;注释 字母开头,最长字母开头,最长31个字符个字符汇编汇编链接链接电气学院学习部资料库3二、伪指令语句二、伪指令语句:只提供汇编信息只提供汇编信息 功能:变量定义、存储区分配、段定义、段分配、指示程功能:变量定义、存储区分配、段定义、段分配、指示程序开始、结束序开始、结束 格式:格式:名字名字 伪指令助记符伪指令助记符 操作数,操作数;注释操作数,操作数;注释 变量名、段名、过程名、符号名,名字后不允

3、许有变量名、段名、过程名、符号名,名字后不允许有“:”三、数据项三、数据项汇编语言中的操作数:汇编语言中的操作数:常数常数、寄存器、存储器、寄存器、存储器、变量、标号变量、标号和表达式。和表达式。电气学院学习部资料库41.1.常数常数0011 0101B 026H 123D how are you0011 0101B 026H 123D how are you?,空格,空格(20H20H)2.2.变量变量是内存中的一个数据区。在程序中作为操作数使用。变量名是内存中的一个数据区。在程序中作为操作数使用。变量名又称符号地址,表示该数据项中第一项所在的地址。又称符号地址,表示该数据项中第一项所在的地

4、址。和常数区别:变量值可以改变。和常数区别:变量值可以改变。三个属性:段地址,段内偏移地址,字节类型三个属性:段地址,段内偏移地址,字节类型BYTE,WORD,DWORDBYTE,WORD,DWORD3.3.标号标号可执行指令语句可执行指令语句的地址的符号表示。可作为转移指令的目的的地址的符号表示。可作为转移指令的目的操作数。操作数。三个属性:段地址,段内偏移地址,距离类型(三个属性:段地址,段内偏移地址,距离类型(NEAR,NEAR,FARFAR)电气学院学习部资料库54.2 4.2 表达式表达式汇编的表达式为一个值汇编的表达式为一个值组成:运算对象组成:运算对象+运算符,运算对象与结果都是

5、整数运算符,运算对象与结果都是整数运算对象:常数、变量、标号运算对象:常数、变量、标号分为数字表达式和地址表达式两种分为数字表达式和地址表达式两种一、算术运算符:+,-,*,/,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);汇编后汇编后

6、 MOV AX,4例例3:FIRST DB 1,2,3 MOV AX,OFFSET FIRST+2二、逻辑运算符二、逻辑运算符:AND,OR,NOT,XOR 只能用于数字表达式中只能用于数字表达式中例:例:PORT EQU 90H AND DL,PORT AND OFEH 前前AND-指令助记符,在程序执行时运算;指令助记符,在程序执行时运算;后后AND-运算符,在汇编时计算运算符,在汇编时计算电气学院学习部资料库7三、关系运算符三、关系运算符:EQ、NE、GT、LT、GE、LE结果为真:输出结果为真:输出OFFH、OFFFFH 全全1结果为假:结果为假:全全 0例:例:PORT EQU 2

7、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电气学院学习部资料库8l四、数值返回运算符:OFFSET、SEG、TYPE、LENGTH、SIZE 1.OFFSET 返回变量或标号的偏移地址值返回变量或标号的偏移地址值2.SEG 返回变量或标号的段基地址值返回变量或标号的段

8、基地址值例:例:MOV SI,OFFSET FIRST例例4-8 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

9、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电气学院学习部资料库10l五、修改属性运算符:段操作符、段操作符、PTR、THIS、HIGH、LOW、SHORT 1、段操作符:、段操作符:例:例:MOV AX,ES:BX ES-段超越前缀段超越前缀 2、PTR:格式:类型格式:类型/距

10、离距离 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 格

11、式:变量格式:变量/标号标号 EQU THIS 类型类型/距离距离 功能:将类型功能:将类型/距离距离 属性赋予变量属性赋予变量/标号,且该变量标号,且该变量/标号的地标号的地址与下一个存储单元相同。址与下一个存储单元相同。例例1:FIRST EQU THIS BYTE TABLE DW 200 DUP(?)(?);使变量;使变量FIRST与与TABLE的偏移地址相同,但的偏移地址相同,但FIRST为字节类型,为字节类型,TABLE为为字类型字类型例例2:SPP EQU THIS FAR MOV AX,100 ;即;即SPP:MOV AX,100电气学院学习部资料库124、SHORT SHOR

12、T 标号标号例:例:JMP SHORT L1;限制跳转的距离在;限制跳转的距离在-128+127之间之间5、HIGH和和LOW 字节分离符字节分离符 HIGH/LOW 变量或标号变量或标号 HIGH 分离出高位字节分离出高位字节 LOW分离出低位字节分离出低位字节例:例:K1 EQU 1234H MOV AH,HIGH K1 ;MOV AH,34H MOV AL,LOW K1 ;MOV AL,12H MOV AH,HIGH 1234H;不能不能+立即数立即数电气学院学习部资料库13六、其他运算符 1、(、()改变优先级次序改变优先级次序 表表4-3 2、用用 表达地址表达式表达地址表达式例:例

13、:MOV CL,BX MOV AX,BX+2用用 表示多重变量的下标值表示多重变量的下标值例:例:M1 DB 10H,20H,30H,40H MOV AL,M13;MOV AL,40H电气学院学习部资料库144-3 伪指令语句一、数据定义语句一、数据定义语句 DB DW格式:变量名格式:变量名 助记符助记符 操作数,操作数,操作数,操作数,;注释;注释 变量名变量名 助记符助记符 n DUP(操作数,操作数(操作数,操作数);注释);注释 功能:将操作数存入变量名指定的存储单元中,或者只分功能:将操作数存入变量名指定的存储单元中,或者只分配存储空间不存入数据配存储空间不存入数据例例1:A1 D

14、B 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;A8 DW OVER 电气学院学习部资料库152、等号语句、等号语句=功能:同功能:同EQU,但允许重复定义但允许重复定义例:例:X1=100 X1 EQU 100 X1=X1+100;X1=200 X1 EQU 200 ;电气学院学习部资料库16三、段定义语句 1、段定义语句、段定义语句 SEGMENTENDS格式:段名格式:段名 SEGMENT ;内容;内容 段名段名 EN

15、DS (上下段名必须相同)(上下段名必须相同)功能:将一个逻辑段定义成一个整体功能:将一个逻辑段定义成一个整体段名:逻辑段的标识符,不可省略,确定了段名:逻辑段的标识符,不可省略,确定了逻辑段在存储器中逻辑段在存储器中的地址的地址。段基地址段基地址例:例:MOV AX,DATA MOV DS,AX 堆栈段定义:堆栈段定义:段名段名 SEGMENT STACK(不可省略)(不可省略)段名段名 ENDS说明:说明:电气学院学习部资料库171.定位类型、组合类型、分类名一般情况下可省略定位类型、组合类型、分类名一般情况下可省略2.Data,stack,es段中,只能有伪指令段中,只能有伪指令3.Co

16、de段中,可有指令和与指令相关的伪指令段中,可有指令和与指令相关的伪指令电气学院学习部资料库182、段分配语句:、段分配语句:ASSUME 格式:格式:ASSUME CS:段名:段名,DS:段名:段名,SS:段名:段名,ES:段名:段名 功能;将存储器中的某几个逻辑段分别定义成代码段、数功能;将存储器中的某几个逻辑段分别定义成代码段、数据段、堆栈段、附加段。据段、堆栈段、附加段。(指定某程序运行时,哪几个逻(指定某程序运行时,哪几个逻辑段有效。辑段有效。CS、DS段是必须的,段是必须的,SS、ES段看情况)段看情况)注意:注意:assume指令只指定某个段分配给哪几个段寄存器,指令只指定某个段

17、分配给哪几个段寄存器,并将代码段的段基址自动装入并将代码段的段基址自动装入cs中,而不能把其它段基址中,而不能把其它段基址自动装入相应的段寄存器中,所以,在代码段的开始,要自动装入相应的段寄存器中,所以,在代码段的开始,要有一段初始化程序完成这一工作有一段初始化程序完成这一工作电气学院学习部资料库19四、过程定义语句四、过程定义语句 段内调用段内调用 段间段间格式:过程名格式:过程名 PROC 属性属性 (距离属性(距离属性(NEAR FAR);过程内容;过程内容 RET N 过程名过程名 ENDP说明:说明:1.RET N 中中N为正偶数,表示从过程返回后,堆栈指针再为正偶数,表示从过程返回

18、后,堆栈指针再加上加上SP2.过程内部至少有一条过程内部至少有一条RET指令,也可以有多个,表示此指令,也可以有多个,表示此过程具有多个返回出口。过程具有多个返回出口。3.过程调用允许嵌套调用,递归调用。过程调用允许嵌套调用,递归调用。嵌套调用:一个被调用的过程中又调用另一个过程。嵌套调用:一个被调用的过程中又调用另一个过程。递归调用递归调用:一个被调用的过程又调用自己一个被调用的过程又调用自己 电气学院学习部资料库20五、程序开始、结束语句 1、ORG:设置位置指针,指定下面语句的起始偏移地址设置位置指针,指定下面语句的起始偏移地址例:例:DATA SEGMENT ORG 100H A1 D

19、B 10H,20H,30H;A1的偏移地址为的偏移地址为0100H ORG 200H A2 DW 3031H,3233H DATA ENDS 2、END格式:格式:END 标号名标号名 是该程序中第一条可执行语句的标号名,可以缺省是该程序中第一条可执行语句的标号名,可以缺省 若一个程序中,包含多个模块,则为主程序模块中的标号名若一个程序中,包含多个模块,则为主程序模块中的标号名称。称。电气学院学习部资料库21l完整的汇编语言编写的格式完整的汇编语言编写的格式DATA SEGMENTDA1 DB this is a sample programDATA ENDSSTACK SEGMENT STA

20、CKST1 DB 100 DUP(?)TOP EQU LENGHTH ST1 STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATA;初始化初始化 MOV DS,AX电气学院学习部资料库22 MOV AX,STACK MOV SS,AX MOV SP,TOP;设栈底设栈底 MOV AX,4C00H;返回返回DOS INT 21HCODE ENDS END START例例4-29电气学院学习部资料库23l好的程序特点:好的程序特点:1.程序结构模块化,易读,易调试和维护程序结构模块化,易读,易调试和维护2.执

21、行速度快执行速度快3.占用内存小占用内存小l编程基本步骤:编程基本步骤:1.分析问题分析问题2.绘制程序流程图绘制程序流程图3.分配存储空间及工作单元分配存储空间及工作单元4.编程编程5.调试调试6.实际运行实际运行4.4程序设计方法电气学院学习部资料库241、顺序程序设计 例:设计一个顺序程序实现两例:设计一个顺序程序实现两个双字数的加法,结果放在个双字数的加法,结果放在加数单元中加数单元中被加数:变量被加数:变量first,四单元四单元加数:变量加数:变量second,四单元四单元和:变量和:变量second寄存器间接寻址:寄存器间接寻址:SI,DI累加器累加器AX 送被加数、加数地址低位

22、字加高位字加送低位和送高位和电气学院学习部资料库25FIRST DW 1234H,5678HSECOND DW 2233H,4455HMOV 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电气学院学习部资料库262 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:

23、ADD AX,1 JMP P3P2:ADD AX,2P3:MOV 2000H,AXP2AX1?NAX0?NAX+1AX+3AX+2YYP1AX2000HP3电气学院学习部资料库27 跳转表实现多分支跳转表实现多分支根据表内地址分支根据表内地址分支表地址表地址=跳转表首地址跳转表首地址+偏移地址偏移地址P1低位低位P1高位高位P2低位低位P2高位高位.BASEBASE+2P1P2开始开始取编号取编号求偏移量求偏移量求表地址求表地址分支到相应的分支程序分支到相应的分支程序电气学院学习部资料库28例例4-67 有有8个加工子程序,入口地址分别为个加工子程序,入口地址分别为P1,P2,,P8,编程实现

24、检测键盘输入命令,使系统分别转向,编程实现检测键盘输入命令,使系统分别转向8个个加工子程序。用跳转表实现。加工子程序。用跳转表实现。BASE DW P1,P2,P3,P4 DEC AL DW P5,P6,P7,P8 MOV BX,OFFSET BASEKEY DB?MOV AH,0MOV AH,1;从键盘输入字符从键盘输入字符 ADD AL,AL;X2INT 21H ;至;至AL ADD BX,AXAND AL,0FH;ASCIIBIN JMP WORD PTRBX例:例:p3子程序地址在子程序地址在cs:7800H开始开始,则则BASE中第中第3个数据为个数据为7800H,地址地址DS:00

25、04H,当键盘输入字符当键盘输入字符3 AL=33H AL=03H AL=2 BX=0 AH=0 AL=2X2=4 BX=0+4=4 BX=0004H=7800H.程序转移至程序转移至CS:7800H 电气学院学习部资料库292、循环程序设计 循环初始状态循环初始状态 循环体循环体 循环控制条件循环控制条件 Y循环初始状态循环初始状态 循环控制条件循环控制条件 循环体循环体 NY修改参数修改参数修改参数修改参数出口出口循环次数固定循环次数固定N循环次数不固定循环次数不固定电气学院学习部资料库30例例1:题目同上,利用循环程序设计:题目同上,利用循环程序设计 MOV SI,OFFSET FIRS

26、T 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 ;先执行,后判断;先执行,后判断电气学院学习部资料库31 例例2:AX寄存器中有寄存器中有16位二进制数,编程统计其中位二进制数,编程统计其中1的个的个数,结果放到数,结果放到BL中中 MOV BL,0;计数值清计数值清0 L1:AND AX,AX;先判断,后执行;先判断,后执行 JZ STOP;若若AX=0,则不进入循环则不进入循环 MOV CX,16 SHL AX,1 JN

27、C L2 INC BL L2:JMP L1 STOP:电气学院学习部资料库32多重循环多重循环 3 3点注意点注意a)a)多重循环的初始控制条件多重循环的初始控制条件b)b)内循环可嵌套在外循环中,内可跳到外,外不得进内循环可嵌套在外循环中,内可跳到外,外不得进入内入内c)c)循环不要回到初始条件,造成死循环循环不要回到初始条件,造成死循环最大数像气泡一样升至数最大数像气泡一样升至数组尾组尾第二次内循环只要第二次内循环只要N-2次次 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内内循循环环N-1次次外外循循环环N-1次次

28、例例4-72 气泡排序。使一个数气泡排序。使一个数组中的数据从小到大排列。组中的数据从小到大排列。分析:内循环分析:内循环N-1次次 单元号单元号 0 1 2 3 4 5 初始初始 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电气学院学习部资料库33修改地址(BX+2)数i数i+1?两数位置交换修改地址 BX+2BXCX-1内循环CX=0?初始化:数组起始地址BX外循环次数DX内循环次数CX置检测起点i=0(BX)Dx-1外循环DX=0?NNL2L1N电气学院学习部资

29、料库34DATA SEGMENTBUF DW N,15,37,8600,A768H,3412H,1256H,DW 76HDATA ENDSCODE SEGMENTASSUME 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电气学院学习部资料库35 MOV AX,BUFBX CMP AX,BUFBX+2 JBE CONTI XCHG AX,BUFBX+2 MOV BUFBX,AXCO

30、NTI:LOOP L2 MOV CX,DX MOV BX,0;回到;回到i=0,重新开始比较重新开始比较 LOOP L1;CX-1:内循环次数内循环次数N-1,N-2;外循环次数外循环次数-1 MOV AX,4C00H INT 21HCODE ENDS END START 电气学院学习部资料库36四、子程序结构四、子程序结构子程序说明子程序说明l名称、功能名称、功能l存储单元和寄存器存储单元和寄存器l入口和出口入口和出口l有否调用其它子程序有否调用其它子程序主程序调用子程序注意:主程序调用子程序注意:1)堆栈堆栈2)保护现场保护现场3)参数传递参数传递a)寄存器寄存器b)存储器存储器c)堆栈堆

31、栈电气学院学习部资料库37例例4-30:编编程程实现实现两个两个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电气学院学习部资料库38CODE SEGMENT

32、MAIN PROC FAR ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATASTART: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,OF

33、FSET SECOND MOV DI,OFFSET SUM 电气学院学习部资料库39 MOV CX,04 CLD CLCADBCD:CALL AAM LOOP ADBCD RET ;返回返回DOSMAIN ENDP;子程序入口:子程序入口:SI,BX 出口出口:DI 参数传递:参数传递:存储器存储器AAM PROC NEAR LODSB ;DS:SIAL SI+1SI ADC AL,BX DAA STOSB ;ALES:DI DI+1DI INC BX 电气学院学习部资料库40RETAAM ENDPCODE ENDS END START电气学院学习部资料库414.5 DOS4.5 DOS系统功

34、能调用系统功能调用Disk Operation System Disk Operation System 磁盘操作系统磁盘操作系统 一、一、DOSDOS常用的软中断命令常用的软中断命令DOSDOS具有对具有对I/OI/O设备管理及磁盘与文件管理功能,设备管理及磁盘与文件管理功能,一部份固化在系统的一部份固化在系统的ROMROM中中一部份在系统启动时调入内存,通过软件中断来调用一部份在系统启动时调入内存,通过软件中断来调用中断指令中断指令:INT n INT n 表表4-6 DOS 4-6 DOS 常用的常用的软软中断命令中断命令 入口、出口参数入口、出口参数电气学院学习部资料库42二、二、DO

35、SDOS系统功能调用系统功能调用 INT 21H附录附录F AH=功能号功能号每每个个子子程程序序对对应应一一个个功功能能号号(相相应应的的入入口口号号),格格式式如下如下功能号功能号AH入口参数入口参数指定寄存器指定寄存器INT 21H根据出口参数分析功能调用执行情况根据出口参数分析功能调用执行情况1.DOS键盘功能调用键盘功能调用 表表4-7键入单字符键入单字符 AH=1电气学院学习部资料库43 MOV AH,1 INT 21H 出口:出口:AL=字符字符键入字符串 AH=0AH电气学院学习部资料库442、DOS显示功能调用显示功能调用表表4-6单字符操作单字符操作 例:例:MOV DL,

36、$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 电气学院学习部资料库45CODE SEGMENT ASSUME CS:CODE,DS:DATAMAIN:PUSH DS XOR AX,AX PUSH AX

37、MOV AX,DATA MOV DS,AX MOV AH,9 MOV DX,OFFSET MES INT 21H RET CODE ENDS END START字符码字符码功能功能08HOAHOCHODH退格退格换行换行换页换页回车回车电气学院学习部资料库46 3、返回操作系统、返回操作系统 4CH功功能能调调用用:能能够够结结束束当当前前正正在在执执行行的的程程序序,返返回回DOS系统系统 MOV AH,4CH INT 21H电气学院学习部资料库474.6 4.6 上机上机实验实验 参见课本及实验指导书 实验一:两个多位十进制数相减的实验 参见课本P187程序 实验二:排序实验要求:从首地址

38、为1000H的内存区域开始存放10个无符号字数据数,设计程序将这些数从小到大排序,并将排序前后次序的显示在屏幕上。参见课本P181及实验指导书实验十三 MOV BX,0MOV CX,N-1 L1:MOV DX,CX L2:MOV AX,BUFBXCMP AX,BUFBX+2JBE CONTIXCHG AX,BUFBX+2MOV BUFBX,AXCONTI:LOOP L2MOV CX,DXMOV BX,0调用显示子程序,参见P177LOOP L1电气学院学习部资料库484.7程序举例:一、查表一、查表 例例4-64二、代码转换类二、代码转换类 16位二进制位二进制 ASC码码 二进制二进制组合组

39、合BCD码码 非组合非组合BCD 码码 ASC码码 显示显示三、算术运算类三、算术运算类 加减乘除(二进制,加减乘除(二进制,BCD码)码)电气学院学习部资料库49例例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 ;显示字符

40、串;显示字符串MOV AH,1INT 21H ;输入字符;输入字符AND AL,0FH;ASCIIBINMOV BX,OFFSET TABLE;查表查表XLATHLAT电气学院学习部资料库50例例4-69 将将BX中的中的16进制数进制数转换为转换为ASCII码,存放到码,存放到BUF开始的内存单元中去,开始的内存单元中去,并在屏幕显示数值并在屏幕显示数值转换表:转换表:入口参数:入口参数:BX出口参数:出口参数:BUF开始的内存开始的内存 单元中,单元中,SI指示。指示。16进制数进制数ASCII131H232H333H434H939HA41HB42H电气学院学习部资料库51 LEA SI,

41、BUF MOV CH,4;处理;处理4位位HEXNEXT:MOV CL,4 ROL BX,CL;左移;左移4位位BIN MOV AL,BL 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 ;显示;显示325F25 F 3F30333INC SIDEC CHJNZ NEXTHLT电气学院学习部资料库52例例4-78:将将一一个个无无符符号号16位位二二进进制制数数转转换换为为4位位压压缩缩型型BCD码码 算法一算法一:千位数:无符号千位数:无符号16位二位二进

42、进制数制数/1000的商,得余数的商,得余数1百位数:余数百位数:余数1/100的商,得余数的商,得余数2十位数:余数十位数:余数2/10的商,得余数的商,得余数3个位数:余数个位数:余数3电气学院学习部资料库537865700010007 865-余数余数1865100800 65 -余数余数28 65 60 1065 -余数余数3程序中,程序中,7865D=1EB9H1000D=3E8H 865D=361H1EB9H/3E8H=7H.361H361H/64H=8H41H41H/0AH=6H5H电气学院学习部资料库54复复习习除法:除法:16位位/8位位商商AL,余,余AH(AX)(源操作数

43、)(源操作数)32位位/16位位商商AX,余,余DX(DX,AX)(源操作数)(源操作数)若若计计算算 16位位/16位位,8位位/8位位,需将被除数,需将被除数扩扩展展程序:程序:入入口口参参数数:AX=16位位二二进进制制数数出出口口参参数数:AX=4位位压压缩缩型型BCD码码(CF=0时时)占用占用资资源:源:CX,DX千位千位 百位百位 千位千位 百位百位 十位十位 千位千位 百位百位 十位十位 个位个位 千位千位每次所得商,依次移入每次所得商,依次移入DXDXDXDXDX电气学院学习部资料库55 B2TOBCD PROC FAR CMP AX,9999 ;AX9999,则则CF=1,

44、JBE TRAN ;不;不转换转换STCJMP EXITTRAN:PUSH CX ;保;保护现场护现场PUSH DXXOR DX,DX;32位位/16位,需位,需DX MOV CX,1000 ;求千位数;求千位数DIV CX ;商在;商在AX,余数,余数1在在DXXCHG AX,DX ;余数余数1在在AX,千位数(商)在千位数(商)在DX最低最低4位,位,DX=0007H电气学院学习部资料库56 MOV CL,4 ;DX左移左移4位,低位添位,低位添SHL DX,CL ;四个;四个0,DX=0070HMOV CL,100 ;求百位数;求百位数DIV CL ;商在;商在AL,余数,余数2在在AH

45、ADD 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 电气学院学习部资料库57ADD DL,AL;DL=86HMOV CL,4SHL DX,CL;DX=7860HADD DL,AH;DX=7865H MOV AX,DX;转换转换后的数入后的数入AXPOP DXPOP CXEXIT:RETBINTOBCD ENDP算算法法二二:把把要要转

46、转换换的的数数分分别别减减去去相相应应的的最最高高次次幂幂,直直至不够减,此时减的次数即是相应的位至不够减,此时减的次数即是相应的位电气学院学习部资料库58例例4-79 将将十十进进制制数数的的ASCII码码转转换换成成有有符符号号二二进进制制数。数。算算法法:符符号号字字符符串串标标识识符符MINU。若若为为负负,MINU=1;数数 字字 字字 符符(31H 39H)一一 位位 十十 进进 制制 数数(09)a0,a1,a2十进制数转换成十六进制数十进制数转换成十六进制数:十六进制数十六进制数=a2x100+a1x10+a0 =(a2x10+a1)x10+a0电气学院学习部资料库59入口:入

47、口:DX字符串地址偏移量,字符串地址偏移量,CX字符个数字符个数 用存用存储器传递参数。储器传递参数。出口:出口:AXAX为为16位,位,216=65536 字符串字符个数字符串字符个数6,(5位十进制数加位十进制数加1个符号位)个符号位)嵌套的子程序:嵌套的子程序:CHE 用于乘用于乘10 入口:入口:DX 出口:出口:DX,CF 使用的寄存器:使用的寄存器:BX,SI电气学院学习部资料库60查符号X10 CHE置标志位DX清零是负数?修改地址字符串首地址给SI Y读下一位数修改地址累加到DX字符串转换完?是负数?取补Y电气学院学习部资料库61例:两个多字节无符号数乘法子程序例:两个多字节无

48、符号数乘法子程序(参考例(参考例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 电气学院学习部资料库62DATA SEGMENTFIRST DW 3213H,4746H SECOND DW 6452HSUM DW 4 DUP(?)DATA ENDSSTACK SEGMENT STACKSTA DB 100 DU

49、P(?)(?)TOP EQU LENGTH STA;TOP=100STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK MAIN PROC FARSTART:MOV AX,STACK MOV SS,AX MOV SP,TOP PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX 电气学院学习部资料库63MOV SI,OFFSET FIRSTMOV DI,OFFSET SECONDMOV BX,OFFSET SUMCALL DWMULT;执执行乘法行乘法RETMAIN ENDP CODE ENDS;

50、子程序入口:;子程序入口:SI、DI指示的内存单元,指示的内存单元,出口:出口:BX指示的内存单元,指示的内存单元,使用寄存器:使用寄存器:AX、DXDCODE SEGMENT(若题意要求用段间调用来实现)(若题意要求用段间调用来实现)电气学院学习部资料库64ASSUME CS:DCODE,DS:DATA,SS:STACKDWMULT PROC FAR PUSH AX PUSH DX MOV AX,SI ;低;低16位位X低低16位位 MUL WORD PTR DI MOV BX,AX MOV BX+2,DX MOV AX,SI+2电气学院学习部资料库65MUL WORD PTR DI ;高;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁