《第3章汇编语言程序设计》由会员分享,可在线阅读,更多相关《第3章汇编语言程序设计(185页珍藏版)》请在金锄头文库上搜索。
1、计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学第第3章章汇编语言程序设计汇编语言程序设计3.1 3.1 概述概述指令:指令:计算机完成某种操作的命令计算机完成某种操作的命令程序:程序:完成某种功能的指令序列完成某种功能的指令序列软件:软件:各种程序总称各种程序总称机器代码,汇编语
2、言程序,汇编程序机器代码,汇编语言程序,汇编程序汇编语言程序建立步骤:汇编语言程序建立步骤:()用编辑程序建立()用编辑程序建立.ASM.ASM源文件源文件()用()用LINKLINK程序把程序把.ASM.ASM文件转换为文件转换为OBJOBJ文件文件()用用LINKLINK程程序序把把.OBJ.OBJ文文件件转转换换为为.EXE.EXE文文件件,或用或用EXEEXEBINBIN程序把程序把.EXE.EXE文件转换为文件转换为.COM.COM文件文件()在()在DOSDOS下直接键入下直接键入.EXE.EXE文件或文件或.COM.COM文件的文件的文件名就可运行该程序文件名就可运行该程序 墒引
3、渴各踏牌咎咒阳绒刨宽遣匀拭怯书丁惠兴耻措筐竣警钦渝扦播看烹毫第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学3.2 3.2 语句格式语句格式语句格式语句格式: :名字名字 操作符操作符 操作数操作数1 1,操作数,操作数2 2 ;注释;注
4、释 1 1名字名字一种符号地址一种符号地址组成:组成:A AZ Z,a az z,0 09 9,专用符号?、,专用符号?、. .、 、_ _、$ $限制:限制:第一个字符不能为数字第一个字符不能为数字 “.” “.”必须为第一个字符必须为第一个字符 前前3131个字符有效个字符有效 不能为关键字不能为关键字类型:类型: 标号:指令符号地址标号:指令符号地址 变量:数据符号地址变量:数据符号地址2 2操作符操作符组成:组成:CPUCPU指令,伪指令,宏指令指令,伪指令,宏指令3 3操作数操作数指定参与操作的数据,或数据所在单元地址指定参与操作的数据,或数据所在单元地址4 4注释注释说明程序、指令
5、功能,增加程序可读性说明程序、指令功能,增加程序可读性 隆唾畸啦舶砌秘羚象残息束翻址黑约鹃脚措膛推勉哆铺溶肋惕剖届腊氨运第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学3.3 3.3 伪指令伪指令 功功能能:指指示示汇汇编编程程序序完完成
6、成规规定定的的操操作作,如如选选择择处处理器,定义数据,分配存储器等。理器,定义数据,分配存储器等。汉陪攻伞夺文您我俏邵犯琴铬苯空吭盲卖瘩钢灼模妆耘濒茄沤骸塌寐卓荣第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学一、程序开始与结束一、程序
7、开始与结束1程序开始:程序开始:可以用可以用name,title给程序起名。给程序起名。格式:格式:NAMEmodule_name汇汇编编程程序序以以模模块块名名作作为为模模块块的的名名字字,若若未未使使用用NAME,则则可可用用TITLE给程序指定标题给程序指定标题格式:格式:TITLEtext文文本本在在每每一一页页上上打打印印出出来来,若若没没有有NAME,则则text的的前前6个个字字符符为为模块名,模块名,text最多为最多为60个字符。个字符。若未使用若未使用NAME、TITLE,则源文件名为模块名。,则源文件名为模块名。2程序结束:程序结束:表示原程序结束,不可缺,源程序的最后一
8、条语句。表示原程序结束,不可缺,源程序的最后一条语句。格式:格式:ENDlabel标标号号指指示示程程序序开开始始执执行行的的起起始始地地址址,多多个个模模块块连连接接,主主程程序序用用标标号,其他程序不用,主程序缺省值为代码段第一条指令。号,其他程序不用,主程序缺省值为代码段第一条指令。3MASM6.0定义的入口点、出口点定义的入口点、出口点入入口口点点:.STARUP;产产生生设设置置DS、SS、SP代代码码,此此时时,END不不用用标号。标号。出口点:出口点:.EXIT;返回操作系统,常用值为;返回操作系统,常用值为0。例:例:.STARUP.EXIT0END池扭高药镊枷糊变递仅驻镇斥驱
9、埋膜橙琼短婿元趴絮肘爱喊根楼蛇盅丑绒第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学二、处理器选择二、处理器选择功能:功能:选择对应的指令集,也即对应的汇编执行语句集选择对应的指令集,也即对应的汇编执行语句集放在程序最前面放在程序最前面缺
10、省值为缺省值为.8086.8086此类指令主要有:此类指令主要有:.8086 .8086 选择选择80868086指令系统指令系统.286 .286 选择选择8028680286指令系统指令系统.286P .286P 选择保护方式下选择保护方式下8028680286指令系统指令系统.386 .386 选择选择8038680386指令系统指令系统.386P .386P 选择保护方式下选择保护方式下8038680386指令系统指令系统.486 .486 选择选择8048680486指令系统指令系统.486P .486P 选择保护方式下选择保护方式下8048680486指令系统指令系统.586 .5
11、86 选择选择PentiumPentium指令系统指令系统.586P .586P 选择保护方式下选择保护方式下PentiumPentium指令系统指令系统级晕敏厘害汝驮龋综合醉装鲜钒掘妻硝惕簧赢民瓜宋寒教玖铂人瑰苔朔厩第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECH
12、NOLOGY吉林大学吉林大学吉林大学远程教育学院微机原理及汇编语言微机原理及汇编语言微机原理及汇编语言微机原理及汇编语言 主讲人:主讲人: 赵宏伟赵宏伟 教授教授 总学时:总学时: 80 80吉林大学计算机科学与技术学院吉林大学计算机科学与技术学院第第二十二十讲讲靶和亚澳苹径肘伯羔幅耳炯竿焚堂壬酷介渝算邓童驱授蛇瞪著甩饵郝谷食第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYC
13、OMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学三、段定义三、段定义段定义:段定义:确定代码组织与数据存储的方式确定代码组织与数据存储的方式2种种:完完整整的的段段定定义义和和简简化化的的段段定定义义(MASM5.0以上)以上)完整的段定义包括:完整的段定义包括:(1 1)segmentsegment和和endend段定义段定义 (2 2)ASSUMEASSUME段分配段分配 (3 3)GROUP GROUP 段组定义段组定义 赎乳年翔土多绍崎令季猪癣真讲诣芬总痪莹杆全鸳级如碗滴已竹众谚沦渣第3章汇编语言
14、程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学segment和和end段定义段定义(1)格式:格式: 段名段名 segment segment 定位类型组合类型定位类型组合类型 字长类型字长类型类别类别 段名段名 end end功能:功能:定义段名、
15、段属性。定义段名、段属性。一一般般情情况况下下,选选项项可可以以不不用用,用用默默认认值值,但但若若需需连接本程序和其他程序,就要使用这些说明。连接本程序和其他程序,就要使用这些说明。段名是段的标识符,指明段的基址,由程序员指段名是段的标识符,指明段的基址,由程序员指定。定。 遁她礁恿闰损澡题底璃赦释躺竞故住根赃跑老雨摇蝎詹赢审讹教状忽于幢第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECH
16、NOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学segment和和end段定义段定义(2)定位类型定位类型定位类型:定位类型:指定段起始边界,指定段起始边界,5 5种种BYTE:BYTE: 任意位置任意位置WORD:WORD: 偶地址,地址低偶地址,地址低1 1位为位为0 0DWORD:DWORD:4 4的倍数地址,地址低的倍数地址,地址低2 2位为位为0 0PARA:PARA: 16 16的倍数地址,地址低的倍数地址,地址低4 4位为位为0 0PAGE:PAGE: 256 256的倍数地址
17、,地址低的倍数地址,地址低8 8位为位为0 0,一页的,一页的起点,起点,默认值默认值。 阑匡赖胚焉尊泌脖腕拙橇携钟缎募啸敏杂默魂融届肿皮汝洗约厂赂域菠队第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学segment和和end段定义段定义
18、(3)组合类型组合类型组组合合类类型型:表表示示本本段段与与其其它它段段之之间间,具具有有相相同同段段名名的的各各段段的的组组合合关系,为连接程序提供信息,属于连接类型,关系,为连接程序提供信息,属于连接类型,6 6种。种。PUBLIC:PUBLIC:本本段段连连接接时时将将与与有有相相同同段段名名.public.public类类型型的的其其它它段段连连接接在在一一起起,连连接接次次序序由由连连接接命命令令指指定定(共共用用一一个个段段),即即同同名名段段连连接接在一起,有共同段地址。在一起,有共同段地址。STACK:STACK:用用于于说说明明堆堆栈栈段段,把把不不同同程程序序段段中中的的具
19、具有有SARCKSARCK类类型型的的同同名名段段组组合合而而形形成成一一个个堆堆栈栈段段,其其长长度度为为各各原原有有段段的的总总和和,LINKLINK自自动动将将新新段段的的段段地地址址送送SSSS,长长度度送送SPSP,若若未未定定义义SARCKSARCK类类型型,需需在在程序中用指令设置程序中用指令设置SSSS、SPSP。COMMON:COMMON:本本段段连连接接时时,使使具具有有COMMONCOMMON类类型型的的同同名名段段具具有有同同一一个个起起始始地地址址,所所以以会会产产生生覆覆盖盖,新新段段的的长长度度是是最最长长COMMONCOMMON段段的的长长度度,新段的内容取决于
20、依次覆盖的最后内容。新段的内容取决于依次覆盖的最后内容。MEMORY:MEMORY:表表示示该该段段应应定定位位在在所所有有段段的的最最下下面面(即即地地址址最最大大的的区区域域),如如果果模模块块中中不不止止一一个个MEMORYMEMORY段段,以以第第一一个个遇遇到到的的作作为为MEMORYMEMORY段段,其其它它段段作作为为COMMONCOMMON段段处处理理,而而LINKLINK程程序序在在处处理理MEMORYMEMORY时时与与PUBLICPUBLIC同样对待。同样对待。PRIVATE:PRIVATE:独立段,与其它段逻辑上没有关系,不与同名段合并,独立段,与其它段逻辑上没有关系,
21、不与同名段合并,默认值默认值。 AT AT 表达式表达式: :指定本段起始地址为指定本段起始地址为“表达式表达式”,偏移量为,偏移量为0 0,不能,不能用于代码段。用于代码段。 腮磊艘僳浅厅阿纺赚渝内党叙哺股椭码发耳僵疮摄篇笔毙喻瞪剥械橡氯刊第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIE
22、NCE AND TECHNOLOGY吉林大学吉林大学segment和和end段定义段定义(4)字长类型字长类型字字长长类类型型: 386386以以后后,说说明明使使用用1616位位寻寻址址方方式式,还是还是3232位寻址方式。位寻址方式。.USE16:.USE16: 1616位位寻寻址址方方式式,段段长长64KB64KB,1616位位段段地地址,址,1616位偏移量,位偏移量,默认值默认值。.USE32:.USE32: 3232位位寻寻址址方方式式,段段长长4GB4GB,1616位位段段地地址,址,3232位偏移量。位偏移量。类别类别类别:类别:引号括起的字符串,连接时,引号括起的字符串,连接
23、时,类别类别相相同的分段同的分段( (他们可能不同名他们可能不同名) )均放在连续的存储空均放在连续的存储空间中,但他们仍然是不同的分段(连续空间)。间中,但他们仍然是不同的分段(连续空间)。 炉牡胁福想擅浊茹雄告澎溃铣跟迪舌瓮骨穷锐获德限懊签鳖篙冗拖淋追咏第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPU
24、TER SCIENCE AND TECHNOLOGY吉林大学吉林大学ASSUME段分配段分配格式:格式:ASSUME ASSUME 段寄存器名:段名,段寄存器名:段名,功功能能:指指定定分分段段寄寄存存器器,说说明明哪哪个个段段使使用用哪哪个个段段寄存器。寄存器。说明:说明:程序段必须用程序段必须用CSCS,堆栈段必须用,堆栈段必须用SSSS该语句一般放在代码段的最前面该语句一般放在代码段的最前面说说明明性性语语句句,除除CSCS外外(初初始始化化赋赋值值),各各段段寄寄存器在程序中赋值。存器在程序中赋值。取消语句:取消语句:ASSUME NOTHING ASSUME NOTHING 耳刃反袋
25、傲玲失宫佛睛另卢抑狮傀婴纂佛毙赌支序辐纵嚎镰宇依梦邵扭洽第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学一般汇编格式举例一般汇编格式举例DATA1 SEGMENT DATADATA1 SEGMENT DATA DATA1 ENDSDATA
26、1 ENDSDATA2 SEGMENT EXTRADATA2 SEGMENT EXTRA DATA2 ENDSDATA2 ENDSDATA3 SEGMENT DATADATA3 SEGMENT DATA DATA3 ENDSDATA3 ENDSCODE SEGMENT CODECODE SEGMENT CODE ASSUME CS:CODE,DS:DATA1,ES:DATA3,SS:DATA2 ASSUME CS:CODE,DS:DATA1,ES:DATA3,SS:DATA2START: MOV AX, DATA1START: MOV AX, DATA1 MOV DS, AX MOV DS,
27、AX ;数据段地址赋给;数据段地址赋给DSDS MOV AX, DATA2 MOV AX, DATA2 MOV SS, AX MOV SS, AX ;堆栈段地址赋给;堆栈段地址赋给SSSS MOV AX, DATA3 MOV AX, DATA3 MOV ES, AX MOV ES, AX ;附加段地址赋给;附加段地址赋给ESES MOV AH, 4CH MOV AH, 4CH INT 21H INT 21H ;返回;返回DOSDOSCODE ENDSCODE ENDS END START END START 虑田遗翅数衬柏赠掐笑喷诞醉菊以养渺离赴恤硅脉屯锦沏苍敢落赫摇毖鞋第3章汇编语言程序设计
28、第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学GROUP段组定义段组定义格式:格式:段组名段组名 GROUP GROUP 段名,段名段名,段名功功能能:将将指指定定的的所所有有段段分分配配在在同同一一个个物物理理存存储储器器内内,使使用用同同一一个个组组名名
29、,使用同一个使用同一个DSDS内容。内容。用用户户自自行行指指定定段段组组中中的的段段,段段组组不不影影响响各各段段次次序序,对对定定义义在在不不同同段段中中的的变变量量,可可以以用用同同一一个个DSDS访访问问,但但各各段段仍仍为为独独立立段段,通通常常将将具具有有相相同同性性质质的段分在一个段组。的段分在一个段组。举例:举例: DATA1 SEGMENT DATA DATA1 SEGMENT DATA DATA1 ENDS DATA1 ENDS DATA2 SEGMENT DATA DATA2 SEGMENT DATA DATA2 ENDS DATA2 ENDS AA5 GROUP DAT
30、A1, DATA2 AA5 GROUP DATA1, DATA2 CODE SEGMENT CODE CODE SEGMENT CODE ASSUME CS:CODE,DS:AA5 ASSUME CS:CODE,DS:AA5 START: MOV AX, AA5 START: MOV AX, AA5 MOV DS, AX MOV DS, AX ;数据段地址赋给;数据段地址赋给DSDS MOV AH, 4CH MOV AH, 4CH INT 21H INT 21H ;返回;返回DOSDOS CODE ENDS CODE ENDS END START END START 诞哟番糖辐嘘环佬乃桩眉铁解
31、呸检义绽钨黔淌综炯提立读米倪绅柳蚁千撑第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学简化的段定义简化的段定义 MASM MASM 5.05.0以以上上支支持持的的段段定定义义,不不像像SEGMENTSEGMENT定定义义得那么完善,但易
32、用。得那么完善,但易用。简化段有利于汇编语言程序模块与高级语言程序简化段有利于汇编语言程序模块与高级语言程序模块的连接,但模块的连接,但.COM.COM程序不能用简化段定义。程序不能用简化段定义。 裔甥谣断尔娥艳少帽开蝎夷人丝疚然殊诞慢金桩坛氏衫青零埂捐压厩撅滇第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOM
33、PUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学四、地址计数器伪指令四、地址计数器伪指令1 1地址计数器地址计数器$ $功功能能:指指出出汇汇编编地地址址,是是偏偏移移量量,记记载载下下一一个个变变量量或或指指令令在在当当前前段中的偏移量。段中的偏移量。每每个个段段开开始始时时,$ $0 0,随随着着汇汇编编过过程程的的进进行行而而增增值值,每每处处理理一一条条指令,指令,$ $增加一个值,此值为该指令所需的字节数。增加一个值,此值为该指令所需的字节数。允许直接引用允许直接引用$ $,如:,如:JNE $JNE $6 6 ;转向;转向JNEJNE指令的首地址加上指令的首
34、地址加上6 6。$ $用用于于指指令令时时,表表示示本本条条指指令令的的第第一一个个字字节节地地址址,$ $用用于于其其他他情情况况,表示表示$ $的当前值。的当前值。2 2ORG ORG 起始地址定义起始地址定义格式:格式: ORG ORG 表达式表达式功功能能:定定义义指指令令或或数数据据的的起起始始地地址址,把把表表达达式式的的值值送送给给$ $(地地址址计数器)计数器)3 3EVEN EVEN 偶数地址定义偶数地址定义功功能能:使使下下一一个个变变量量或或指指令令从从偶偶数数地地址址开开始始,便便于于字字存存储储对对准准(EVENEVEN在代码段中可能多出一个在代码段中可能多出一个NO
35、PNOP语句)。语句)。4 4ALIGN ALIGN 边界定义边界定义格式:格式:ALIGN nALIGN n ;n n为为2 2的幂次的幂次功能:功能:使下一个变量或指令从使下一个变量或指令从n n的接续整数倍地址开始,保证双的接续整数倍地址开始,保证双字、四倍字对准。字、四倍字对准。 爵董男迪岩崔擂酞辛歪掺边寄即渗茂埃殃较效砒毅愉颈乒牵呈商研协拂姻第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AN
36、D TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学五、数据定义五、数据定义格式:格式:变量名变量名 操作符操作符 操作数操作数 ;注释;注释功功能能:为为操操作作数数分分配配存存储储单单元元,用用变变量量与与存存储储单单元元联联系系。为变量分配存储单元,并预置初值。为变量分配存储单元,并预置初值。操作符:操作符: DBDB:一一个个操操作作数数占占有有1 1个个字字节节单单元元(8 8位位),定定义义的的变变量量为为字节变量。字节变量。 DWDW:一一个个操操作作数数占占有有1 1
37、个个字字单单元元(1616位位),定定义义的的变变量量为为字字变量。变量。 DDDD:一一个个操操作作数数占占有有1 1个个双双字字单单元元(3232位位),定定义义的的变变量量为为双字变量。双字变量。 DFDF:一一个个操操作作数数占占有有1 1个个三三字字单单元元(4848位位),定定义义的的变变量量为为三字变量。三字变量。 DQDQ:一一个个操操作作数数占占有有1 1个个四四字字单单元元(6464位位),定定义义的的变变量量为为四字变量。四字变量。 DTDT:一个操作数占有一个操作数占有1 1个五字单元(个五字单元(8080位),定义的变量为位),定义的变量为五字变量。五字变量。 操作数
38、:操作数:常数、表达式、字符串、?常数、表达式、字符串、? 阐赡绪慰泥淡傲钨杯拭教沧滥疹蒜臆产束滁拒霉萌枷料痛揣盒曝驭浊助娠第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学数据定义举例(数据定义举例(1 1) ORG 200H ORG 2
39、00H ;设置设置$ $DATA1 DB 12H,2+6,34HDATA1 DB 12H,2+6,34HEVEN EVEN ;偶地址,使偶地址,使$ $指向偶地址指向偶地址DATA2 DW 789AHDATA2 DW 789AHALIGN 4 ALIGN 4 ;4 4倍地址,使倍地址,使$ $指向指向4 4倍地址倍地址DATA3 DD 12345678HDATA3 DD 12345678HDATA4 DW $,6699H DATA4 DW $,6699H ;$ $为汇编指针,为汇编指针,1616位,设置位,设置当前当前$ $(原(原$ $)的内容)的内容 行拨孙磨微莹周乎账惩庆菊喀保佐室冗褥聊
40、絮衰几认珊熄靡冶哈笛僳邢诧第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学吉林大学远程教育学院微机原理及汇编语言微机原理及汇编语言微机原理及汇编语言微机原理及汇编语言 主讲人:主讲人: 赵宏伟赵宏伟 教授教授 总学时:总学时: 80 80
41、吉林大学计算机科学与技术学院吉林大学计算机科学与技术学院第第二十一二十一讲讲树鸭炯何疤袖赋痰兄芝贡锰坠弱驴娩嫌棉赌孤擂牢袋邀氦呸论治撩华嗣搬第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学数据定义举例(数据定义举例(2 2) ORG 10
42、0H ORG 100HDATA1 DB abcdDATA1 DB abcd ;字符串必须用单引号字符串必须用单引号DATA2 DB AB DATA2 DB AB DATA3 DW AB DATA3 DW AB ;按字处理,个数只能为按字处理,个数只能为22 病徽豪族茬易聊脉惦吏确诬稍腆欲铜尊缸溢颓侄字玩韧苇娶肺雾罐藻泉荧第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMP
43、UTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学数据定义举例(数据定义举例(3 3) ORG 400H ORG 400HDATA1 DB 1,2,?,4 DATA1 DB 1,2,?,4 ;按字节定义按字节定义DATA2 DW 5,?,6 DATA2 DW 5,?,6 ;按字定义按字定义DATA3 DF ? DATA3 DF ? ;按三字定义按三字定义DATA4 DB 8 DATA4 DB 8 版窃厄材薄漳函遇崭寸芥招登酱眩像襟恰郸剪撤撞拍农牺下篆魏楔梨硼泞第3章汇编语言程序设计第3章汇编语言程序设计计算机科学
44、与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学数据定义举例(数据定义举例(4 4) ORG 300H ORG 300HDATA1 DB 2 DUP (12H,34H,56H) DATA1 DB 2 DUP (12H,34H,56H) 辅迸启误斩诗五昼腋琉股页纯抚首痉帖资桨朋辊羚棉魔崔踊库伍
45、革环酸沽第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学数据定义举例(数据定义举例(5 5) ORG 100H ORG 100HDATA1 DB 12H,34H,2 DUP (56H,3 DUP(9AH),78H) DATA1 DB 12
46、H,34H,2 DUP (56H,3 DUP(9AH),78H) 胰离拖楞讨壤艾趟鞋筑台选返盒踊吩狮应逛节贡祁呈惟搭琳头呻瞧纫辊猩第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学六、六、PROCPROC、ENDPENDP过程定义过程定义
47、功功能能:用用于于定定义义子子程程序序结结构构,过过程程名名是是CALLCALL的的操操作数。作数。格式:格式: 过程名过程名 PROC PROC 属性属性 过程名过程名 ENDP ENDP属性:属性:FARFAR,NEARNEAR(默认值)(默认值) 铰录巴略刹嫌墨蒸凌棍廉噬鳞述滩吵资院袄咕腮余裤茫请伐涵看摔移姓姨第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUT
48、ER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学吉林大学远程教育学院微机原理及汇编语言微机原理及汇编语言微机原理及汇编语言微机原理及汇编语言 主讲人:主讲人: 赵宏伟赵宏伟 教授教授 总学时:总学时: 80 80吉林大学计算机科学与技术学院吉林大学计算机科学与技术学院第第二十二二十二讲讲砖葬苔采劫勺牺剑赁缮项喊恰戈钞摔涉茫悲撼肢津茁退昂剩拓园谚粹一奖第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SC
49、IENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学七、模块连接伪指令七、模块连接伪指令用于定义各模块之间的共享信息用于定义各模块之间的共享信息1 1PUBLICPUBLIC格式:格式:PUBLIC PUBLIC 符号符号1 1,符号,符号2 2,功能:功能:公共引用,说明本模块定义,而其它模块引用的共享信息。公共引用,说明本模块定义,而其它模块引用的共享信息。2 2EXTRNEXTRN格式:格式:EXTR
50、N EXTRN 符号符号1 1:类型,符号:类型,符号2 2:类型,:类型,功能:功能:外部引用,说明其他模块定义,而本模块引用的共享信息。外部引用,说明其他模块定义,而本模块引用的共享信息。类型:类型: 对对于于变变量量,可可以以是是字字节节(BYTEBYTE),字字(WORDWORD),双双字字(DWORDDWORD),三字(),三字(FWORDFWORD),四字(),四字(QWORDQWORD),五字(),五字(TWORDTWORD)。)。 对对于于标标号号、过过程程名名,可可以以是是段段内内引引用用型型(FARFAR),段段间间引引用用型(型(NEARNEAR)。)。共享信息是全局变量
51、,包括常量、变量、标号、过程名等。共享信息是全局变量,包括常量、变量、标号、过程名等。EXTRNEXTRN说明的信息应是在说明的信息应是在PUBLICPUBLIC中已经定义的,否则出错。中已经定义的,否则出错。例:例: PUBLIC VAR1, VAR2 PUBLIC VAR1, VAR2 EXTRN VAR1:WORD, VAR2:BYTE EXTRN VAR1:WORD, VAR2:BYTE 博样蚂耘驼讹杖馆貉柠己负眺掇旱痒泣港盐怕联邀渺寓硕恭骗察又乖晒狄第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHN
52、OLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学3.4操作数字段操作数字段操作数字段可以是寄存器、标号、变量、常数、操作数字段可以是寄存器、标号、变量、常数、表达式等。寄存器、标号、变量已作介绍,本节表达式等。寄存器、标号、变量已作介绍,本节重点介绍常数、表达式。重点介绍常数、表达式。 谈胡奋祥织诺粮硝爱郑祖旧匀秃哈瘫纸狗披笑撂辞瑞聚狭判华砒羽遍友劈第3章汇编语言程序设计
53、第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学一、常数(一、常数(1 1)包括:包括:数值常数、字符串常数、符号常数数值常数、字符串常数、符号常数1 1数值常数数值常数数数值值常常数数可可以以是是二二进进制制数数、八八进进制制数数、十十进进制制数数、十十六六
54、进进制数。制数。基数控制伪指令:基数控制伪指令:改变基数默认值(原默认值为十进制)。改变基数默认值(原默认值为十进制)。格式:格式: .RADIX .RADIX 数值表达式数值表达式功能:功能:把默认的基数改变为把默认的基数改变为2 21616范围内的任何基数。范围内的任何基数。例:例: MOV BX, 0FFHMOV BX, 0FFH 等价于等价于 .RADIX 16.RADIX 16 MOV BX, 178 MOV BX, 178 MOV BX, 0FFHMOV BX, 0FFH MOV BX,178DMOV BX,178D2 2字符串常数字符串常数字符串常数:字符串常数:包括在单引号中的
55、若干字符。包括在单引号中的若干字符。字符串在存储器中储存的是相应字符的字符串在存储器中储存的是相应字符的ASCIIASCII码。码。 亮寒坝茎荐茄所笑搏悯鲁域尉结豫饿宅指堑裙滋纺模胡褒涕臂母屡库丰倒第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学
56、吉林大学一、常数(一、常数(2 2)3 3符号常数符号常数包括:包括:EQUEQU和和(1 1)EQUEQU赋值伪指令赋值伪指令格式:格式:符号常数名符号常数名 EQU EQU 表达式表达式功能:功能:将表达式的值赋给符号常数。将表达式的值赋给符号常数。说说明明:表表达达式式可可以以是是有有效效的的操操作作数数格格式式,也也可可以以是是任任何何可可求求出出数数值值常常数数的的表表达达式式,还还可可以以是是任任何何有有效效的的符符号号(如如操操作作符符、寄寄存存器器名名、变量名等)。变量名等)。EQUEQU定义的一个符号常数名在程序中只能定义一次。定义的一个符号常数名在程序中只能定义一次。例:例
57、: DATA1 EQU 88DATA1 EQU 88 NEW_CX EQU CX NEW_CX EQU CX DATA2 EQU DATA1+12 DATA2 EQU DATA1+12(2 2)伪指令)伪指令格式:格式:符号常数名符号常数名 表达式表达式功能:功能:将表达式的值赋给符号常数。将表达式的值赋给符号常数。定义的一个符号常数名在程序中可以重复定义多次。定义的一个符号常数名在程序中可以重复定义多次。例:例: DATA1 = 88 DATA1 = 88 DATA1 =DATA1+99 DATA1 =DATA1+99 睛树惯俯狭陀蘑早卤喀衍惺俩灭错苛经拢橡咽攘闻毛徽民钵蔫擎沟茂仿坐第3章汇
58、编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学二、表达式二、表达式 (1 1)表表达达式式:常常数数、寄寄存存器器、标标号号、变变量量与与一一些些运运算算符相组合的序列。符相组合的序列。包括:包括:数值表达式,地址表达式。数值表达式,地址表达式
59、。 1 1运算符运算符六六种种运运算算:算算术术运运算算、逻逻辑辑运运算算、移移位位运运算算、关关系运算、返回值运算、属性运算。系运算、返回值运算、属性运算。(1 1)算术运算符)算术运算符算算术术运运算算符符:有有5 5个个,加加()、减减()、乘乘()、除()、除(/ /)和取余()和取余(MODMOD)。)。(2 2)逻辑运算符)逻辑运算符逻辑运算符:逻辑运算符:4 4个,与(个,与(ANDAND)、或()、或(OROR)、非)、非(NOTNOT)和异或()和异或(XORXOR)。)。歪窃种吗枚整靶句才树脚咏儒洗痒布绝深零咨篷混淘果斑伸暗月谢崭细白第3章汇编语言程序设计第3章汇编语言程序
60、设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学二、表达式二、表达式 (2 2)(3 3)移位运算符)移位运算符移位运算符:移位运算符:2 2个,左移(个,左移(SHLSHL)和右移()和右移(SHRSHR)。)。例:例: MOV AL, 0MOV AL, 0 MOV BL,
61、11011000B MOV BL, 11011000B MOV AL, BL SHR 3 MOV AL, BL SHR 3 ; (AL)=00011011B; (AL)=00011011B MOV CL, BL SHL 6 MOV CL, BL SHL 6 ; (CL)=11000000B ; (CL)=11000000B(4 4)关系运算符)关系运算符关关系系运运算算符符:6 6个个,等等于于(EQEQ)、不不等等(NENE)、小小于于(LTLT)、大于(大于(GTGT)、小于等于()、小于等于(LELE)、大于等于()、大于等于(GTGT)。)。功功能能:关关系系运运算算符符的的两两个个操
62、操作作数数的的计计算算结结果果应应为为逻逻辑辑值值,结结果果为为真真(关关系系成成立立),表表示示为为0FFFFH0FFFFH,结结果果为为假假(关关系系不成立),表示为不成立),表示为0 0。例:例: MOV AX, 2 LT 7 ; (AX)=0FFFFHMOV AX, 2 LT 7 ; (AX)=0FFFFH 制放启众贱滦由挚绪靖途奄配险锯焊娟括挣字犹驮绩异喊焦租罐谱佯橙痕第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPU
63、TER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学二、表达式二、表达式 (3 3)(5 5)返回值运算符)返回值运算符返返回回值值运运算算符符:5 5个个,返返回回变变量量或或标标号号的的段段地地址址(SEGSEG)、返返回回变变量量或或标标号号的的偏偏移移地地址址(OFFSETOFFSET)、返返回回变变量量或或标标号号的的类类型型值值(TYPETYPE)、返返回回变变量量的的单单元元数数(LENGTHLENGTH)、返返回回变变量量的的字字节节数数(
64、SIZESIZE)。)。SEGSEG返回变量或标号的段地址运算符返回变量或标号的段地址运算符格式:格式:操作数操作数 SEG SEG 变量变量/ /标号标号功能:功能:将变量将变量/ /标号所在段的段基址值赋给操作数。标号所在段的段基址值赋给操作数。OFFSETOFFSET返回变量或标号的偏移地址运算符返回变量或标号的偏移地址运算符格式:格式:操作数操作数 OFFSET OFFSET 变量变量/ /标号标号功能:功能:将变量将变量/ /标号所在段中的偏移值赋给操作数。标号所在段中的偏移值赋给操作数。TYPETYPE返回变量或标号的类型值运算符返回变量或标号的类型值运算符格式:格式:操作数操作数
65、 TYPE TYPE 变量变量/ /标号标号功能:功能:将代表变量将代表变量/ /标号类型的值赋给操作数。标号类型的值赋给操作数。说明:说明:如果是变量,则汇编程序将根据变量对应的数据定义伪指如果是变量,则汇编程序将根据变量对应的数据定义伪指令回送类型值(即变量类型代表的字节数):令回送类型值(即变量类型代表的字节数):DBDB为为1 1,DWDW为为2 2,DDDD为为4 4,DFDF为为6 6,DQDQ为为8 8,DTDT为为1010。返回以字节数表示的类型,常数。返回以字节数表示的类型,常数返回返回0 0。如果是标号,则汇编程序将回送代表该标号类型的数值:。如果是标号,则汇编程序将回送代
66、表该标号类型的数值:NEARNEAR为为1 1,FARFAR为为22。 顺氮膀亏臻净萍惶引怀峻很砰牧帛奶斧勋砧衅稳蕉钧彻荒转郸恒招贫饯议第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学二、表达式二、表达式 (4 4)LENGTHLENGT
67、H返回变量的单元数运算符返回变量的单元数运算符格式:格式:操作数操作数 LENGTH LENGTH 变量变量功能:功能:将代表变量的单元数赋给操作数。将代表变量的单元数赋给操作数。说说明明:返返回回一一次次数数据据定定义义的的第第一一个个元元素素的的长长度度,DUPDUP时时返回重复次数,其他情况返回返回重复次数,其他情况返回1 1。 对对于于变变量量中中使使用用DUPDUP的的情情况况,汇汇编编程程序序将将回回送送分分配配给给该该变变量量的的单单元元数数(按按类类型型TYPETYPE算算),而而对对于于其其他他情情况况,则则均均送送1 1。只只对对DUPDUP定定义义的的变变量量有有意意义义
68、,返返回回分分配配给给该该变变量量的的元元素素的的个个数数。只只返返回回第第一一个个DUPDUP前前的的元元素素个个数数,与与DUPDUP括括号号内内的的数数据据无无关关,认认为为只只是是一一组组数数据据而而已已,若若与与DUPDUP并并列列地地定义了其它数据,就只能返回定义了其它数据,就只能返回1 1。SIZESIZE返回变量的字节数运算符返回变量的字节数运算符格式:格式:操作数操作数 SIZE SIZE 变量变量功能:功能:将代表变量的字节数赋给操作数。将代表变量的字节数赋给操作数。说明:说明:就是返回就是返回LENGTHTYPELENGTHTYPE的结果。的结果。 汇编程序将回送分配给该
69、变量的字节数。只对汇编程序将回送分配给该变量的字节数。只对DUPDUP定义的变量有意义。定义的变量有意义。 乎乘敛莫孵励盛褐斯册镀疆旬妒分卞普痔盂蝎殷苑衫谗哈农装闰气冉哀咱第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学吉林大学远程教育学
70、院微机原理及汇编语言微机原理及汇编语言微机原理及汇编语言微机原理及汇编语言 主讲人:主讲人: 赵宏伟赵宏伟 教授教授 总学时:总学时: 80 80吉林大学计算机科学与技术学院吉林大学计算机科学与技术学院第第二十三二十三讲讲在眨每趾渴逻门反虹雾棉讥牙芳舱结萎彰楞肘黄苫捣仕契廓囊坦减钒掂革第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND T
71、ECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学二、表达式二、表达式 (5 5)例:例:DATASEGMENTAT1000HORG3000HAA1DW100DUP(0)BB1DW1,2CC1DBABCDDD1DW1000DUP(2,3)EE1DB50DUP(5,6)FF1DW1,2,100DUP(?)GG1DD5DUP(6DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAHH1:MOVAX,DATA;AX=1000HMOVDS,AXMOVAX,SEGAA1;AX=1000H,AT定义定义MOVBX,OFF
72、SETAA1;BX=3000HMOVCL,TYPEAA1;CL=2,字类型,字类型MOVCH,TYPECC1;CH=1,字节类型,字节类型MOVAL,TYPEGG1;AL=4,双字类型,双字类型厌京察帅六谢陋眯撤赋柄团知扎靶酬准窥蛀疑继丧究客莲戈毅囚拯碟渝铲第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPU
73、TER SCIENCE AND TECHNOLOGY吉林大学吉林大学二、表达式二、表达式 (6 6)MOVDX,LENGTHAA1;DX=100,元素个数,元素个数MOVAX,SIZEAA1;AX=200,元素个数,元素个数类型类型MOVDX,LENGTHBB1;DX=1,LENGTH只对只对DUP定义的变量有意义定义的变量有意义MOVAX,SIZEBB1;AX=2MOVDX,LENGTHCC1;DX=1MOVAX,SIZECC1;AX=1MOVDX,LENGTHDD1;DX=1000MOVAX,TYPEDD1;AX=2000MOVDX,LENGTHEE1;DX=50MOVAX,SIZEEE1
74、;AX=50MOVDX,LENGTHFF1;DX=1MOVAX,TYPEFF1;AX=2MOVDX,LENGTHGG1;DX=5MOVAX,TYPEGG1;AX=20MOVAH,4CHINT21HCODEENDSENDHH1辐躇扭乘竹忆德序寞僚码吾幽诧擒射准泪药冬璃托槐泽皿吗骏菲镀帛追揖第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND
75、TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学二、表达式二、表达式 (7 7)(6 6)属性运算符)属性运算符属属性性运运算算符符:3 3个个,临临时时改改变变类类型型属属性性运运算算符符PTRPTR、指指定定类类型属性运算符型属性运算符THISTHIS、定义类型属性运算符、定义类型属性运算符LABELLABEL。 PTR PTR 临时改变类型属性运算符临时改变类型属性运算符格式:格式:类型类型 PTR PTR 变量变量/ /标号标号功功能能:将将PTRPTR前前面面的的类类型型临临时时赋赋给给变变量量/ /标标号号,而而原原有有段段属属性和
76、偏移属性保持不变,其本身并不分配存储单元。性和偏移属性保持不变,其本身并不分配存储单元。说说明明:对对于于变变量量,可可以以指指定定类类型型BYTEBYTE、WORDWORD、DWORDWOR、DFWORDDFWORD、QWORDQWORD、TWORDTWORD。对于标号,可以指定类型。对于标号,可以指定类型NEARFARNEARFAR例:例: DATA DB 66H,77HDATA DB 66H,77H MOV AX, WORD PRT DATA MOV AX, WORD PRT DATA 绚及淘努鹃诱尖避松孽痪院滔啊痒咆楞妇胺昔仟扩眩枪招和腐视搐麓乓凰第3章汇编语言程序设计第3章汇编语言程
77、序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学二、表达式二、表达式 (8 8) THIS THIS 指定类型属性运算符指定类型属性运算符格式:格式:变量变量/ /标号标号 EQU THIS EQU THIS 类型类型 功能:功能:将变量或标号定义成指定的类型。将变量或标号定
78、义成指定的类型。说说明明:THISTHIS指指定定的的变变量量或或标标号号本本身身并并不不分分配配存存储储单单元元,它它与与紧紧跟跟其其后后的的变变量量或或标标号号只只有有类类型型不不同同,而而段段地地址址和和偏偏移移量量均均相相同同。THISTHIS指指定定类类型型与与PTRPTR相同。相同。例:例: DATA1 EQU THIS BYTE DATA1 EQU THIS BYTE DATA2 DATA2 DW DW 1234H 1234H ;DATA1;DATA1和和DATA2DATA2具具有相同的段地址和偏移量,但类型值分别为有相同的段地址和偏移量,但类型值分别为1 1和和2 2。 MOV
79、 AX, DATA2 ; AX=1234H MOV AX, DATA2 ; AX=1234H MOV BL, DATA1 ; BL=34H MOV BL, DATA1 ; BL=34H 够囤娩忍受奖燥玲早部失扛边更显渐宣以狱未与凶盐珊乳混蔓习增祁妮双第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER
80、SCIENCE AND TECHNOLOGY吉林大学吉林大学二、表达式二、表达式 (9 9) LABEL LABEL 定义类型属性运算符定义类型属性运算符格式:格式:变量变量/ /标号标号 LABEL LABEL 类型类型功能:功能:将变量或标号定义成指定的类型。将变量或标号定义成指定的类型。说说明明:LABELLABEL指指定定的的变变量量或或标标号号本本身身并并不不分分配配存存储储单单元元,它它与与紧紧跟跟其其后后的的变变量量或或标标号号只只有有类类型型不不同同,而而段段地地址址和和偏偏移移量均相同。量均相同。THISTHIS指定类型与指定类型与PTRPTR相同。相同。例:例: AA1 L
81、ABEL FAR AA1 LABEL FAR ; AA1; AA1为段间转移入口为段间转移入口 AA2: AA2: ; AA2; AA2为段内转移入口为段内转移入口 AA3 LABEL BYTE AA3 LABEL BYTE AA4 DW 1234H AA4 DW 1234H MOV AX, AA4 MOV AX, AA4 MOV BH, AA3+1 MOV BH, AA3+1 换均罪轩醉硫红乐兵竣河邱夺牲砾朔瘁徽瘁讳致匈镊元摸县哼溢诵谓癸钮第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMP
82、UTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学二、表达式二、表达式 (1010)2 2数字表达式数字表达式数数字字表表达达式式:有有常常数数、变变量量、标标号号与与一一些些运运算算符符相相组组合合的的序序列列。运运算算符符可可以以是是算算术术运运算算符符、逻逻辑辑运运算算符符、移移位位运运算算符、关系运算符、返回值运算符,但结果必须是常数。符、关系运算符、返回值运算符,但结果必须是常数。
83、3 3标号标号标号:标号:指令所在单元的符号地址。指令所在单元的符号地址。标号的三种属性:标号的三种属性:段地址、偏移量、类型(段地址、偏移量、类型(NEARNEAR、FARFAR)。)。4 4变量变量变量:变量:数据所在单元的符号地址。数据所在单元的符号地址。变变量量的的五五种种属属性性:段段地地址址(SEGSEG返返回回值值)、偏偏移移量量(OFFSETOFFSET返返回回值值)、类类型型(TYPETYPE返返回回值值)、单单元元数数(LENGTHLENGTH返返回回值值)、字节数(、字节数(SIZESIZE返回值)返回值)5 5地址表达式地址表达式地址表达式:地址表达式:存储器地址,即存
84、储器地址,即EAEA的计算。是常数、变量、的计算。是常数、变量、标号与一些运算符相组合的序列。标号与一些运算符相组合的序列。 洞巫鸟谅蛇蝉听礁显们丢质延亿轧矛虚两犊擒粕众塞便兑尼经应箍望钻凛第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学
85、吉林大学远程教育学院微机原理及汇编语言微机原理及汇编语言微机原理及汇编语言微机原理及汇编语言 主讲人:主讲人: 赵宏伟赵宏伟 教授教授 总学时:总学时: 80 80吉林大学计算机科学与技术学院吉林大学计算机科学与技术学院第第二十四二十四讲讲抽粤另现惜抹保载叔摊捣抖拎惨碾期峨妨娇扮瘩妓佰够众们支恬揉予凸病第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIE
86、NCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学3.5汇编语言程序设计及举例(汇编语言程序设计及举例(1 1)(一)(一) 编写汇编语言程序的步骤编写汇编语言程序的步骤1.1.从实际问题抽象出从实际问题抽象出数学模型数学模型。2.2.确定解决此数学模型的确定解决此数学模型的算法算法。解决同一个问题可以有不同的算法。它们。解决同一个问题可以有不同的算法。它们的效率可能有很大的差别。例如要做的效率可能有很大的差别。例如要做X*10,X*10,可以用乘法指令;也可以用可以用乘法指令;也可以用X*8+X*2,X*8+X*2,而而X*2X
87、*2或或X*8X*8也可以自身相加,或也可以自身相加,或X X左移来实现;这些方法的程序复左移来实现;这些方法的程序复杂程度和执行时间差别是很大的。又例如查表,是用线性查找还是用对分查杂程度和执行时间差别是很大的。又例如查表,是用线性查找还是用对分查找区别也很大。所以,确定合适的算法是很重要的。找区别也很大。所以,确定合适的算法是很重要的。3.3.画出程序画出程序流程图流程图。把根据算法解决问题的思路和方法,用图形表示出。把根据算法解决问题的思路和方法,用图形表示出来。来。4.4.分配内存分配内存工作单元和寄存器。工作单元和寄存器。5.5.根据流程图根据流程图编制程序编制程序。当然,到这儿只是
88、设计出了基本程序,此程序是否正确,可靠,还必须上机当然,到这儿只是设计出了基本程序,此程序是否正确,可靠,还必须上机调试,排错和进行不要的检测。调试,排错和进行不要的检测。(二)(二) 判断程序质量的标准判断程序质量的标准为解决同一个问题所编制的程序,往往是多种多样的,如何衡量程序的质量为解决同一个问题所编制的程序,往往是多种多样的,如何衡量程序的质量呢?通常有三个标准:呢?通常有三个标准: 1. 1.程序的执行时间程序的执行时间 2. 2.程序所占用的内存字节数程序所占用的内存字节数 3. 3.程序的语句行数程序的语句行数前两个标准是主要的,由于半导体存储器容量越来越大,成本急剧降低。前两个
89、标准是主要的,由于半导体存储器容量越来越大,成本急剧降低。盾颧矣涣康课揣圈蔑钒汗涵盎鞍捂驶雁骚瞻澄拷理惺瑰唆晰柴减就藏奴寝第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学3.5汇编语言程序设计及举例(汇编语言程序设计及举例(2 2)(三)
90、(三) 程序流程图程序流程图在确定问题的算法以后,先不要急于写一条条指令,而要在确定问题的算法以后,先不要急于写一条条指令,而要用程序流程图把编制程序的方法和思路勾画出来,确定程用程序流程图把编制程序的方法和思路勾画出来,确定程序的结构和相互之间的关系。本书中的流程图,采用以下序的结构和相互之间的关系。本书中的流程图,采用以下一些惯用的画法。一些惯用的画法。 1.1.用用方方框框表表示示工工作作框框,方方框框中中用用简简明明的的语语言言标标明明所所完完成的特定功能。它有一个入口一个出口,用箭头表示。成的特定功能。它有一个入口一个出口,用箭头表示。 2.2.用用菱菱形形表表示示判判断断框框,菱菱
91、形形内内标标明明比比较较,判判断断和和条条件件。它它有有一一个个入入口口和和几几个个出出口口,各各用用箭箭头头表表示示。在在各各个个出出口口处处标标明明出出口口条条件件,条条件件成成立立则则写写“是是(用用Y Y表表示示)”,条条件件不不成立用成立用“否(用否(用N N表示)表示)”。 3.3.程程序序中中要要调调用用的的子子程程序序或或过过程程,用用 框框表表示示,在在框框中中标标明明子子程程序序或或过过程程的的名名字字(包包括括入入口口地地址址、入入口口条条件件、参参数数、出出口口参参数数)。它它有有一一个个入入口口一一个个出出口口,各各用用箭箭头表示。头表示。带箭头的直线。程序的各框之间
92、用箭头的直线连接起来,带箭头的直线。程序的各框之间用箭头的直线连接起来,表示程序的走向。表示程序的走向。 驭淌肾绪涂列恰县蹭翱彪司越甚身畏嘶卡兆醚癸夹砌巡隙葫焦垣九睦瑚祸第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学算术运算程序设计算术
93、运算程序设计(直线运行程序)(直线运行程序)最简单的程序是没有分最简单的程序是没有分支,没有循环的直线运支,没有循环的直线运行程序。行程序。在在8088/80868088/8086中,数据中,数据是是1616位的,它只有位的,它只有1616位位的运算指令,若是两个的运算指令,若是两个3232位的数相乘就无法直位的数相乘就无法直接用指令实现接用指令实现( (在在8038680386中有中有3232位数相乘的指令位数相乘的指令),),但可以用但可以用1616位乘法指位乘法指令做令做4 4次乘法,然后把次乘法,然后把部分积相加来实现。其部分积相加来实现。其原理如图原理如图所示。所示。奴汕劣淳豌宵姨贾
94、被皿揍庚梨颂聪趾顽恒酗籍嗡噶忱宾缎聘肉祟愚扳艳父第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学算术运算程序设计算术运算程序设计(1 1)例例1:两个两个32位无位无符号数乘法程序符号数乘法程序若数据区中已有一若数据区中已有一个缓冲区存放
95、了个缓冲区存放了32位的被乘数和乘数,位的被乘数和乘数,保留了保留了64位的空间位的空间以存放乘积,能实以存放乘积,能实现上述运算的程序现上述运算的程序流程图流程图如图所示如图所示懦薪茹赏赶吵貌微盟称骑陨净淘舶咕牌致逞签请田跺杀尚翼恤句荒站砖昆第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCI
96、ENCE AND TECHNOLOGY吉林大学吉林大学算术运算程序设计(算术运算程序设计(2 2)相应的程序为:相应的程序为: name 32bit mutiptyname 32bit mutiptydatadatasegmentsegmentmulnum dw 0000,0ffffh,0000,0ffffh, 4 dup(?) mulnum dw 0000,0ffffh,0000,0ffffh, 4 dup(?) datadataendsendsstackstacksegmentsegmentpara stack stackpara stack stackdbdb100 dup(?)100
97、dup(?)stackstackendsendscode code segment segment assumeassumecs:code, ds:data,cs:code, ds:data, ss:stack,esss:stack,es:datadatastart start proc farproc farbeginbegin:push dspush ds;DS;DS中包含的是程序段前缀的起始地址中包含的是程序段前缀的起始地址 mov ax, 0mov ax, 0 push axpush ax; ;设置返回至设置返回至DOSDOS的段值和的段值和IPIP值值 mov ax, datamov
98、 ax, data mov ds, axmov ds, axmov es, axmov es, ax; ;置段寄存器初值置段寄存器初值lea bx, mulnumlea bx, mulnummulu32mulu32: mov ax, bx ;B-AX mov ax, bx ;B-AX 宏骚骨扎摇需川狠试栽忌棉备蹭枪次距桥痴值酋枕操却唇适厄皖积饼酱抠第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND
99、TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学算术运算程序设计(算术运算程序设计(3 3)movsi,bx+4;D-SImovdi,bx+6;C-DImulsi;BDmovbx+8,ax;保存部分积保存部分积Imov bx+0ah,dxmovax.,bx+2;A-AXmulsi;ADaddax,bx+0ahadcdx,0;部分积部分积2的一部分与部分积的一部分与部分积1的相应部分相加的相应部分相加movbx+0ah,axmovbx+0ch,dx;保存保存movax,bx;B-AXm
100、uldi;BCaddax,bx+0ah;与部分积与部分积3的相应部分相加的相应部分相加adcdx,bx+0ch恿渴敏譬氢智冕鞘神群冗夹砧穿劈优牧凿赴潭妥淹岳劫控轿泉岸濒逆贤欺第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学算术运算程序设计
101、(算术运算程序设计(4 4)movbx+0ah,axmovbx+0ch,dxpushf;保存后一次相加的进位位保存后一次相加的进位位movax,bx+2;A-AXmuldi;ACpopfadcax,bx+0ch;与部分积与部分积4的相加部分相加的相加部分相加adcdx,0movbx+0ch,axmovbx+0eh,dxretstartendpcodeends endbegin兄赢误雇的牛酗秦料所善先结司数梁岸柿鲁蜒抉蕉泣来荐蓟乌灼咸楔扶携第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUT
102、ER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学吉林大学远程教育学院微机原理及汇编语言微机原理及汇编语言微机原理及汇编语言微机原理及汇编语言 主讲人:主讲人: 赵宏伟赵宏伟 教授教授 总学时:总学时: 80 80吉林大学计算机科学与技术学院吉林大学计算机科学与技术学院第第二十五二十五讲讲啮苑阎毫帖被珍割岭契籍湿忱瓦栏榜辖摘烃疗警塔鄙挣璃见摊嗣轨缎沿酝第3章汇编语言程序设计第3章汇编语言程序设计
103、计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学算术运算程序设计(算术运算程序设计(5 5)例例2:32位符号数乘法位符号数乘法在在32位无符号数乘法程位无符号数乘法程序的基础上很容易实现序的基础上很容易实现32位带符号数的乘法。位带符号数的乘法。首先设一个乘积的符号首先设一个乘积
104、的符号标志初值为标志初值为0;检查被乘;检查被乘数,若为负,一方面对数,若为负,一方面对被乘数取补,另一方面被乘数取补,另一方面对符号标志取反;对符号标志取反;再检查乘数,若是负数再检查乘数,若是负数也对乘数取补和符号标也对乘数取补和符号标志取反;然而调用志取反;然而调用32位位无符号数乘法程序。无符号数乘法程序。最后检查乘积符号标志,最后检查乘积符号标志,若为负(即两个异号数若为负(即两个异号数相乘),则对相乘),则对64为乘积为乘积取补。取补。程序流程图如图所示。程序流程图如图所示。涡公汾纬桌匆尿鸳穗假浙胜彩携掩猾果亲厨淘吐汉钳迹往抓沮讥掖辩汹久第3章汇编语言程序设计第3章汇编语言程序设计
105、计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学算术运算程序设计(算术运算程序设计(6 6)相应的程序为相应的程序为namesigned32bitmulptydatasegmentsigndb?mulnum dw0X1,X2,Y1,4dup(?)dataendsstacksegme
106、ntparastackstackdb100dup(?)stackendscodesegmentassumecs:code,ds:data,ss:stack;以下是主过程以下是主过程startprocfarbegin:pushdsmovax,0pushax;为返回为返回DOS设置返回地址设置返回地址腑田窄灼捉制补楞卤姐冯靳担磐雹恫溉化篓彰窑姚搓紧桌穗辕瞪祥眺且奎第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENC
107、E AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学算术运算程序设计(算术运算程序设计(7 7)mov ax,datamov ds,ax;设置段寄存器初值设置段寄存器初值mov sign,0;置符号为初值置符号为初值leabx,mulnummov ax,bx;B-AXmov dx,bx+2;A-DXmov si,bx+4;D-SImov si,bx+6;C-DIcmp dx,0;检验正或负检验正或负jnsother;为正时转至为正时转至OTHREnotaxnotdxaddax
108、,1adcdx,0;负则取补负则取补notsign;改变符号位改变符号位mov bx,axmov bx+2,dx;暂存暂存惰奋追耗过旬栈崖溯绵悸互获距荆瘟婶永卿枣尘气箭眯章国变薯茂浆幼按第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学算术
109、运算程序设计(算术运算程序设计(8 8)other:cmpdi,0;检查乘数符号检查乘数符号jnsgomul;为正时转至为正时转至GOMULnotsinotdiaddsi,1adcdi,0;为负则取补为负则取补notsign;实现符号运算;实现符号运算gomul:callmulu32;调用调用32位无符号数乘法程序位无符号数乘法程序cmpsign,0;检查乘积的符号检查乘积的符号jedone;乘积为正则结束乘积为正则结束notbx+8notbx+0ahnotbx+0chnotbx+0ehaddwordptrbx+8,1addwordptrbx+0ah,0adcwordptrbx+0ch,0ad
110、cwordptrbx+0eh,0 ;乘积取补乘积取补done:retstartendp展柏贩刀什情舱衣和扮石钠苟掐胯际辈冀诸抱唯蓉贝径仁绣驭瞄钨晋十仰第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学算术运算程序设计(算术运算程序设计(9
111、9);以下是以下是32位无符号数的乘法程序位无符号数的乘法程序mul32procmovax,bxmulsimovbx+8,axmovbx+0ah,dxmovax,bx+2mulsiaddax,bx+0ahadcdx,0movbx+0ah,axmovbx+0ch,dxmovax,bxmuldiaddax,bx+0ahadcdx,bx+0chmovbx+0ah,axmovbx+0ch,dxpushf噎万涸渴六字碰兢伊岿召琵桃泼猫寇逛亡孟枝裁畸丑桂菇晨亡止晴跺注置第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNO
112、LOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学算术运算程序设计(算术运算程序设计(1010)movax,bx+2muldipopfadcax,bx+0chadcdx,0movbx+0ch,axmovbx+0ch,dxretmulu32 endpcodeendsendbegin帕卷诽泼纠又钾宇汇当拽涌翁煎礁菠丽厘娜赎毋智迸铡牙粱雨就楼蹭殿爆第3章汇编语言程序设计第3章汇编语
113、言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学分支程序设计(分支程序设计(1 1) 在一个实际的程序中,程序始终是直线执行的情况是不多见的,通常都会有在一个实际的程序中,程序始终是直线执行的情况是不多见的,通常都会有各种分支,例如变量各种分支,例如变量x的符号函数用下式
114、表示的符号函数用下式表示1当当x0y=0当当x=0-1当当xAXcwddivcxaddax,cxshrax,1;得到新的试探值;得到新的试探值movdx,ax;与上一个试探值比较;与上一个试探值比较subdx,ax;相等则结束循环;相等则结束循环jedone;若差为;若差为11也结束循环也结束循环cmpdx,1jedonecmpdx,-1jnecontidone:movbx+2,ax;存结果;存结果retstartendpcodeendsendbegin由于在8088中,数是用整数表示的,所以用上述办法求平方根的应用范围是十分有限的。若要求实数的平方根就要用8087数值协处理器。抄众宙协霖乌冈
115、积岔梦竞咙池斯卿楷昭饮坞芭孪捉于宅穷频浪鸯塔穆舱配第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学吉林大学远程教育学院微机原理及汇编语言微机原理及汇编语言微机原理及汇编语言微机原理及汇编语言 主讲人:主讲人: 赵宏伟赵宏伟 教授教授 总学
116、时:总学时: 80 80吉林大学计算机科学与技术学院吉林大学计算机科学与技术学院第第二十七二十七讲讲直蜜维此蒋暖吝厕里嘎榨遁戎阴样畦苟彬战悼镇仍仍宰拖楚恐坯梆俺旱绕第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学循环程序设计(循环程序设计
117、(6 6)例例3 3:规格化一个二进制数:规格化一个二进制数在在80888088中数是以二进制整数表示的,中数是以二进制整数表示的,8 8位带符号二进制整数位带符号二进制整数的表示范围为的表示范围为-128=X=+127,16-128=X=+127,16位带符号二进制整数的表位带符号二进制整数的表示范围为示范围为-32768=X=+32767-32768=X0,X0,1/2=a11/2=a1-128=b=+127-128=b=+1273.3.若若X0,X0,-1=a-1/2-1=a-1/2-128=b=+127-128=b=+127所以能表示的所以能表示的X X的数值范围为:的数值范围为: 2
118、-128|X|2+127 2-128|X|2+127也即也即1.47-3910|X|X|1.710+381.47-3910|X|X|ALagain:scasb;搜索串 jedone;找到结束标志,停止 incdl;串长度加1jmpagaindone:leabx, llmovbx,dlretstartendpcode endsendbegin雇席荫隧室龋芯驱叙毗雷毡搞愈封亏柞娄补暗爹怜钱葛矫狱岛恨袍寨足赛第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TEC
119、HNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学字符串处理程序设计(字符串处理程序设计(4 4) 以上的循环是由特定的字符控制的,万一此字符丢失,就有可能进以上的循环是由特定的字符控制的,万一此字符丢失,就有可能进入死循环。为避免出现这种情况,还用循环次数控制循环,要求循入死循环。为避免出现这种情况,还用循环次数控制循环,要求循环次数大于字符串长度。另外,在程序结束时,检查程序得到的字环次数大于字符串长度。另外,在程序结束时,检
120、查程序得到的字符串长度是否与给定的循环次数相等,若等,则转至出错处理。按符串长度是否与给定的循环次数相等,若等,则转至出错处理。按上数要求,上数要求,程序改为:程序改为:datadatasegmentsegmentstringstringdbdbabcdefghij,0dhabcdefghij,0dhcountcountequequ$-sring$-sringlllldbdb? ?datadataendsendsstackstacksegmentsegment paraparastack stackstack stackdbdb100 dup (?)100 dup (?)stackstacke
121、ndsendscodecodesegmentsegmentassumeassumecscs:code, dscode, ds:data, esdata, es:data, ssdata, ss:stackstackstartstartprocprocfarfarbeginbegin: pushpushdsdsmovmovax,0ax,0push push axax垛柴言赵芯彝甸千膜蕊衅香祟纳简蛊纪磅沉半亮额离蔫彬戍惦剁粤盯毙果第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCI
122、ENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学字符串处理程序设计(字符串处理程序设计(5 5) movmovax, dataax, datamov mov ds, axds, axmovmoves, axes, ax lea leadi, stringdi, string; ;置被搜索串的地址指针置被搜索串的地址指针 mov movdl, 0dl, 0; ;置串长度初值为置串长度初值为0 0movmov
123、al, 0dhal, 0dh mov movcx, count+10 ;cx, count+10 ;置循环次数大于串长度置循环次数大于串长度againagain:scasbscasb; ;搜索串搜索串 je jedonedone; ;找到结束标志,停止找到结束标志,停止incincdldl dec deccxcx; ;循环次数减循环次数减1 1 jne jneagainagain; ; 规定的循环次数未完,循环规定的循环次数未完,循环 jmp jmperrorerror ;由计数停止循环,则出错,;由计数停止循环,则出错, ; ;转至出错处理程序转至出错处理程序done:done:movmov
124、dl, lldl, llretretstartstartendpendpcode code endsendsendendbeginbegin菜掂吾庄邦捞国货肩克附挥几昼服西闯吸娠琢酉约裤狞惫毯甸伍囤狙潭祝第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉
125、林大学吉林大学字符串处理程序设计(字符串处理程序设计(6 6) 2. 2. 找串中的第一个非空格字符找串中的第一个非空格字符一个串常以空格为前导,在实际处理时就要去掉一个串常以空格为前导,在实际处理时就要去掉这些空格,就要寻找第一个非空格字符。这些空格,就要寻找第一个非空格字符。例例 2: 2: 从一个给定的字符串中,从头开始比较,从一个给定的字符串中,从头开始比较,找到第一个非空格字符,其找到第一个非空格字符,其流程图流程图如图所示。如图所示。相应的程序为:相应的程序为:namenamedel_blankdel_blankdatadatasegmentsegmentstringstringd
126、bdb0000abcdefghij,$0000abcdefghij,$countcountequequ$-string$-stringstrin2strin2dbdbcount dup (?)count dup (?)strin3strin3dbdb0dh, 0ah,$0dh, 0ah,$datadataendsendsstackstacksegmentsegmentpara stack stackpara stack stackdbdb100 dup (?)100 dup (?)stackstackendsends 参渐房和微沏魁敦巍眺晃狭笼肖峦赊聂辊舅襄岸墨筏坎麻毋纽妥塔却牡凹第3章汇编语
127、言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学字符串处理程序设计(字符串处理程序设计(7 7) repstosbpopcxleasi,stringaddsi,bxrepmovsb;把串把串1中的非空格中的非空格,字符传送至串字符传送至串2leadx
128、,stringmovah,9int21h;显示串显示串1leadx,strin3movah,9int21h;显示回车、换行显示回车、换行leadx,strin2movah,9int21h;显示串显示串2retstartendpcodeendsendbegincodesegmentassumecs:code,ds:data,es:data,ss:stackstartprocfarbegin:pushdsmovax,0pushaxmovax,datamovds,axmoves,axleadi,stringmovcx,countmoval,;在在AL中送入空格字符中送入空格字符repescasb;搜
129、索空格直至非空格字符搜索空格直至非空格字符inccxmovbx,countsubbx,cx;空格的个数空格的个数leadi,strin2moval,20hpushcxmovcx,bx诀沸喂附裹鸳邹灯融氢贴此遁改阎戈沟秃洋脸铺谜哆取汛撒山巧墟姜拆罗第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SC
130、IENCE AND TECHNOLOGY吉林大学吉林大学字符串处理程序设计(字符串处理程序设计(8 8) 3.用空格代替前导零用空格代替前导零例例3:有些字符串以零作为前导,现要求以空格来有些字符串以零作为前导,现要求以空格来代替前导零,其代替前导零,其流程图流程图如图所示。如图所示。相应的程序为:相应的程序为:nameuse_space_rpl_0datasegmentstring1db0000abcdserty876 ,$countequ$-string1string2dbcountdup(?),$string3db0dh,0ah,$dataendsstacksegmentparastac
131、kstackdb100dup(?)stackendscodesegmentassumecs:code,ds:data,es:data,ss:stackstartprocfarbegin:pushdsmovax,0pushax维谚阵棋纺捣抡枷背跑纸调山陋爬躲钻希叙颤沈秃独指榴柴硷颂左摧捞葛第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND
132、TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学字符串处理程序设计(字符串处理程序设计(9 9) movax,datamovds,axmoves,axleadi,string1movcx,countmoval,0repescasb;搜索搜索0 inccxmovbx,countsubbx,cx;得到得到0的个数的个数leadi,sting2pushcxmovcx,bxmoval,20h;在在STRING2中用空中用空;格代替前导;格代替前导0repstosbpopcxleasi,string1addsi,bxrepmovsb;把;把STRING1
133、中中;非;非0字符传字符传送送leadx,string1movah,9int21h;显示显示STRING1leadx,string3movah,9int21h;显示回车换行显示回车换行leadx,string2movah,9int21h;显示显示STRING2startendpcodeendsendbegin甘管魏食嫡砖乞渭降枢唤堪悼滨腿撇属卞沉掳夫惕沿蝇额疾醒气波盟归洛第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER
134、SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学吉林大学远程教育学院微机原理及汇编语言微机原理及汇编语言微机原理及汇编语言微机原理及汇编语言 主讲人:主讲人: 赵宏伟赵宏伟 教授教授 总学时:总学时: 80 80吉林大学计算机科学与技术学院吉林大学计算机科学与技术学院第第二十九二十九讲讲厌械沙龙稼起货某墒涣晶数戍撩渡凡赶释撕乌呢仕蹄托卫遇继黎邦陪围硝第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIEN
135、CE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学字符串处理程序设计(字符串处理程序设计(1010) 4. 4. 加偶校验到加偶校验到ASCIIASCII字符字符 标准的标准的ASCIIASCII码字符集用七位二进制编码码字符集用七位二进制编码来表示一个字符,而在微机中通常用一来表示一个字符,而在微机中通常用一个字节个字节(8(8位位) )来存放一个
136、字符,它的最高来存放一个字符,它的最高位始终为零。但字符在传送时,特别是位始终为零。但字符在传送时,特别是在串行传送时,由于传送距离长容易出在串行传送时,由于传送距离长容易出错,就要进行校验。对一个字符的校验错,就要进行校验。对一个字符的校验常用奇偶校验,即用最高位作为校验位,常用奇偶校验,即用最高位作为校验位,使得每个字符包括校验位,其中使得每个字符包括校验位,其中“1”“1”的的个数为奇数个数为奇数( (奇校验奇校验) )或为偶数或为偶数( (偶校验偶校验) )。在传送时,校验电路自动产生校验位作在传送时,校验电路自动产生校验位作为最高位传送;在接收时。对接收到的为最高位传送;在接收时。对
137、接收到的整个字符中的整个字符中的“1”“1”的个数进行检验,有的个数进行检验,有错则指示。错则指示。例例4:4: 若有一个若有一个ASCIIASCII字符串,它们的起字符串,它们的起始地址存放在单元始地址存放在单元STRINGSTRING内,要求从串内,要求从串中取出每一个字符,检查其中包含的中取出每一个字符,检查其中包含的“1”“1”的个数,若已为偶数,则它的最高的个数,若已为偶数,则它的最高有效位置有效位置“0”“0”;否则,最高有效位置;否则,最高有效位置“1”“1”后,送回后,送回流程如图所示流程如图所示。 办玲校庚蜗们擒皆瘤亡茨慨棘盛尧郧例韦冻籍瓤辆隘饺旺袄痹熔阑库静靛第3章汇编语言
138、程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学字符串处理程序设计(字符串处理程序设计(1111) 相应的程序为:nameparity_checkdatasegmentstringdb 1234567890countequ $-stringdataen
139、dsstacksegment para stack stack db 100 dup(?)stackendscodesegment assume cs:code, ds:data, es:data, ss:stackstartproc farbegin:push ds mov ax,0 push ax mov ax, data mov ds, axmoves, ax lea si, string mov cx, countagain:lodsb andal, al; jpenext oral,80h movsi-1,alnext:deccx jnzagain retstartendpcodee
140、ndsendbegin譬百踊慷蓉浑乍疮细乎渍攫经润掩仙枫网舵盘旗吞猴寺兜元远忘童圭市俐第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学码转换程序设计码转换程序设计 (1 1) 输入输出设备以输入输出设备以ASCIIASCII码表示字符,码
141、表示字符,数通常是用十进制数表示,而机器数通常是用十进制数表示,而机器内部以二进制表示。所以,在内部以二进制表示。所以,在CPUCPU与与I IO O设备之间必然要进行码的转换,设备之间必然要进行码的转换,有几种实现码转换的方法。有几种实现码转换的方法。 1 1有些转换利用有些转换利用CPUCPU的算术和的算术和逻辑运算指令很容易实现,故可用逻辑运算指令很容易实现,故可用软件实现转换。软件实现转换。 2 2某些更为复杂的转换,可某些更为复杂的转换,可以用查表来实现,但要求占用较大以用查表来实现,但要求占用较大的内存空间。的内存空间。 3 3对于某些转换,用硬件也对于某些转换,用硬件也是容易实现
142、的,如是容易实现的,如BCDBCD到七段显示之到七段显示之间转换的译码器等。间转换的译码器等。下下面面讨讨论论利利用用软软件件实实现现码码之之间间的的转转换。换。1. 1. 十六进制到十六进制到ASCIIASCII 例例1:1: 若若有有一一个个二二进进制制数数码码串串,要要把把每每一一个个字字节节中中的的二二进进制制转转换换为为两两位位十十六六进进制制数数的的ASCIIASCII码码,高高4 4位位的的ASCIIASCII码码放放在在地地址址高高的的单单元元。串串中中的的第一个字节为串的长度第一个字节为串的长度( (小于小于128)128)。流程如图所示。流程如图所示。 旭确汲哎添匠阴怯凉藤
143、酸您珠服渺膝垮势顾丙蛤开佑达沏磺想棘睫涸啊契第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学码转换程序设计码转换程序设计 (2 2) 相应的程序为: name hex_change_to_asciidatasegment11 dw2str
144、ingdb34h,98h12dw?buffer db2*2 dup(?)dataendsstacksegmentpara stack stackdb100 dup (?)stackendscodesegmentassumecs:code, ds:data, es:data, ss:stackstartprocfarbegin:pushdsmovax, 0pushaxmovds, axmoves, axmovcx, 11leabx, stringleasi, buffermovax,cxsalcx,1mov12,cxmovcx, axagain:moval, bxmovdl, alandal,
145、0fhcallchangemoval, dlpushcxmovcl, 4 shra1,clpopcx callchangeincbx loopagain retstartendpchangeproccmpal,10 j1add_0 add al,a-0-10add_0: addal,0movsi,alincsiretchangeendpcodeends endbegin凹檄共件圭宽蝗采拭陵呐嘿劣仓肺执枷迟妄悄拷顶老仰秋榆畦儡背蹄存戌第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER
146、SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学码转换程序设计码转换程序设计 (3 3) 2. ASCII2. ASCII码到十进制码到十进制(BCD)(BCD)的转换的转换例例2:2: 若有一输入的若有一输入的ASCHASCH码串码串( (长长度在串中的第一字节度在串中的第一字节) ),要把其中,要把其中的数码取出来,转换为未组合的的数码取出来,转换为未组合的BCDBCD码,放至另一缓冲区中,并统
147、码,放至另一缓冲区中,并统计数码串的长度,放入此缓冲区的计数码串的长度,放入此缓冲区的第一个字节。第一个字节。程序流程图程序流程图如图所示如图所示媳秒剿肃膝砍复给摊至强烧乘圃惑哼萌旱抓钱档乙砍李族胞瓮端霹唆赢旷第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLO
148、GY吉林大学吉林大学码转换程序设计码转换程序设计 (4 4) 相应的程序为: nameascii_to_bcddatasegment11db10stringdb123asdfgklbufferdb? db10 dup(?)dataendsstacksegmentpara stack stack db 100 dup(?)stackendscodesegment assumecs:code,.ds:data,es:data,ss:stackstartprocfarbegin:pushdsmovax,0pushaxmovax,data movds,axmoves,axmovcl,11 movch,
149、0 leasi,stringleadi,bufferincdimovdl,0again:lodsbcmpal,0jlnextcmpal,9jgnextandal,0fhstosbincdlnext:loopagainmovbuffer,dlretstartendpcodeendsendbegin 襄屉贮辙穷访毛肤辩菩咏英红衰锯湖喧娃密尧蚜盔弘浊戊椰囚拔秀暖剪剪第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENC
150、E AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学码转换程序设计码转换程序设计 (5 5) 3. 3. 把把BCDBCD码转换为二进制码转换为二进制若若有有一一个个1616位位存存储储单单元元,存存放放4 4位位BCDBCD数数,要要把把它它转转换换成成二二进进制制,放放至至另另一一存存储储单单元元,把把BCDBCD转转换换为为二二进制,常用的有两种办法进制,常用的有两种办法: :一种是用一种是用 (千千位位数数10 10 + + 百百位位数数)10 10 + + 十位数)
151、十位数)10 + 10 + 个位数个位数 就可以得到转换的结果。就可以得到转换的结果。另另一一种种是是用用千千位位数数控控制制加加10001000的的次次数数,用用百百位位数数,十十位位数数控控制制加加100100,加,加1010的次数,最后与个位数相加。的次数,最后与个位数相加。下下面面分分别别介介绍绍用用这这两两种种办办法法编编程程序序的例子。的例子。例例3:3: 用第一种办法转换用第一种办法转换流程如图所示流程如图所示。 瞥埔恳琅佑擞喳退蟹辉旬励辗殃充贴毙晶顾哺劳功肝岂吱溅辱比雄黔僳话第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER S
152、CIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学码转换程序设计码转换程序设计 (6 6) 相应的程序为:相应的程序为:namebcd_to_binary1datasegmentdnumdw9999hbnumdw?dataendsstacksegmentparastackstackdb100dup(?)stackendscodesegment
153、assumecs:code,ds:data,es:data,ss:stackstartprocfarbegin:pushdsmovax,0pushaxmovax,datamovds,axmoves,axmovax,dnum;取要转换的十进制数;取要转换的十进制数movdi,axmovdx,axmovbx,axandbx,000fh;分离出个位;分离出个位anddx,00f0hmovcl,4shrdx,cl;分离出十位;分离出十位anddi,0f00hmovcl,8shrdi,cl;分离出百位;分离出百位andax,0f00hmovcl,12shrax,cl;分离出千位;分离出千位addax,a
154、xmovcx,axaddax,axaddax,axaddax,cxaddax,diaddax,axmovcx,axaddax,axaddax,axaddax,cxaddax,dxaddax,axmovcx,axaddax,axaddax,axaddax,cxaddax,bxmovbnum,axretstartendpcodeendsendbegin墟萌沁该筏得粤淌它孝窟交满痕吟脐阀雇桩航饮抑柔奶赢落谢席赖州孔煤第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND
155、 TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学码转换程序设计码转换程序设计 (7 7) 例例4:4: 用第二种办法实用第二种办法实现转换,即用加千加百现转换,即用加千加百加十加个位数的办法实加十加个位数的办法实现现BCDBCD至二进制的转换至二进制的转换其其流程如图所示流程如图所示 妹凤掣乱萄瞪祥书另弯嘛遵花查粉约仑掣冕据锁盎盗拒瞥缸谊修考泞丰建第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学
156、与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学码转换程序设计码转换程序设计 (8 8) 相应的程序为:name bcd_to_binary2data segmentdnum dw 9999h bnum dw ?data ends stack segment db 100 dup(?)stack endscod
157、e segmentassume cs:code, ds:data, es:data, ss:stackstart proc farbegin: push dsmov ax,0push axmov ax,datamov ds,axmov es,axmov ax,dnum ;取要转换的BCD数mov si,axmov di,axmov dx,axmov bx,ax ;分别送至SI,DI,DX,BXmov ax,0 ;AX要作为累加和,初值应置为0and bx,000fh ;分离出个位数and dx,00f0h ;分离出十位数je next1mov cl,4shr dx,clagain: add a
158、x,000ah ;用十位数控制加10的次数dec dxjne againnext1: and di,0f00h ;分离出百位数je next2 mov cl,8shr di,clagan2: add ax,0064h ;用百位数控制 ;加100的次数dec dijne agan2next2: and si,0f000h ;分离出千位数je next3mov cl,12shr si,clagan3: add ax,03e8h ;控制加1000的次数dec sijne agan3next3: add ax,bx ;最后加上个位数mov bnum, ax ret start endpcode end
159、send begin 锐执饲烘篓毖锈矽躺庚揽玲紊掖盗漫蛆驶刊之仗甸徒砚馁荤寐始阑粮痞谦第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学码转换程序设计码转换程序设计 (9 9) 4. 4. 二进制到二进制到BCDBCD的转换的转换这这是是上
160、上面面介介绍绍的的BCDBCD到到二二进进制制转转换换的的逆逆转转换换,可可以以由由找找到到在在二二进进制制数数中中所所包包含含的的1000010000,10001000,100100,1010的的个个数数,就就可可以以转转换为相应的换为相应的BCDBCD数。数。 例例5:5: 在某一个存储在某一个存储单元中,有一个单元中,有一个1616位位二进制数,要把它转二进制数,要把它转换为相应的十进制数换为相应的十进制数的的ASCIIASCII码存放在缓码存放在缓冲区中。冲区中。流程如图所示。流程如图所示。 龋泽蔽普忙产愤仗前嗽变姆荒耀蹄求遥朵葵胜卞喝间宠近逝茎蝉尼禽仁验第3章汇编语言程序设计第3章汇
161、编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学码转换程序设计码转换程序设计 (1010) 相应的程序为:相应的程序为:namebinary_tobcddatasegmentbnumdw270fha_strgdb5dup(?)dataendsstacksegmentp
162、arastackstackdb100dup(?)stackendscodesegmentassumecs:code,ds:data,es:data,ss:stackstartprocfarbegin:pushdsmovax,0pushaxmovax,datamovds,axmoves,axmovax,bnumleabx,a_strgmovdl,0卤潮玫耻幂木陋照华捂泊念止糕荆蕾酉宅慎含英愉沛燎亭狙诗坦斯阜澳和第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND
163、TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学码转换程序设计码转换程序设计 (1111) again1:subax,2710h;AX10000jsnext1incdl;计算;计算AX中包含由中包含由10000的个数的个数jmpagain1next1:addax,2710hadddl,30h;把;把10000的个数变为的个数变为ASCII码码movbx,dlincbxmovdl,0again2:subax,03e8h;还包
164、含多少个;还包含多少个1000jsnext2incdljmpagain2next2:addax,03e8hadddl,30h;把;把1000的个数变为的个数变为ASCII码码movbx,dlincbxmovdl,0again3:subax,0064h;还包含多少个;还包含多少个100jsnext3滚龙俄彰艳绚疥坏徐掷术臻厢聊蹋囱吻密枷瑚逮盛横挣筑赖励锌洲诽驹暑第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENC
165、E AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学码转换程序设计码转换程序设计 (1212) incdljmpagain3next3:addax,0064hadddl,30h;100的个数变为的个数变为ASCII码码movbx,dlincbxmovdl,0again4:subax,000ah;还包含多少个;还包含多少个10jsnext4incdljmpagain4Next4:addax,000ahadddl,30h;10的个数变为的个数变为ASCII码码movbx,dlin
166、cbxaddal,30h;AX中的个位数变为中的个位数变为ASCII码码movbx,alretstartendpcodeendsendbegin趴击晦钥扭灌滚末卧冷弱愁前兽缄圃金铭愧染畅逝谁肠订填爹篙顾辑追拌第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOG
167、Y吉林大学吉林大学码转换程序设计码转换程序设计 (1313) 5. 5. 从二进制到从二进制到ASCIIASCII串的转换串的转换若若要要把把一一个个二二进进制制位位串串显显示示或或输输出出打打印印,则则要要把把位位串串中中的的每每一位转换为它的一位转换为它的ASCIIASCII码。码。例例6:6: 把在内存变量把在内存变量NUMBERNUMBER中中的的1616位二进制数,每一位转换位二进制数,每一位转换为相应的为相应的ASCIIASCII码,存入串变码,存入串变量量STRINGSTRING中中其其流程如图所示流程如图所示。 冕侥猎随诈裳广堤操亩插琅深铁送硷蝉寓箱少奎鹰尖姥捡财碗绥胡挖焰碧第
168、3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学码转换程序设计码转换程序设计 (1414) 相应的程序为: name binary_to asciizdata segmentnum dw 4f78hstring db 16 dup(?)da
169、ta endsstack segment para stack stack db 100 dup(?)stack endscode segmentassume cs:code, ds:data, es:data, ss:stackstart proc farbegin: push dsmov ax,0push axmov ax,datamov ds,axmov es,axlea di,stringmov cx,length stringpush dipush cxmov al,30h ;使缓冲区全置0rep stosbpop cxpop dimov al,31hmov bx,numagain:
170、 rcl bx, 1 ;左移CX,把相应位进入C标志jnc next ;若为零则转至NEXTmov di,al ;若为“1”,则把“1”置入缓冲区next: inc diloop againret start endpcode endsend begin 想量鞋柿瞩血衣躇来娠厉郴腐宛症芜涨盒憨滩蜂琉重遇异粉炒柴贪崔款窥第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPU
171、TER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关列和表的程序设计(有关列和表的程序设计(1 1) 1. 1. 无序列无序列(1) (1) 加一个项至一个无序列加一个项至一个无序列例例1:1: 若在缓冲区中存在一个无序列,若在缓冲区中存在一个无序列,此列的长度放在缓冲区的第一个字节,此列的长度放在缓冲区的第一个字节,要把在内存某个单元中的一项,加入要把在内存某个单元中的一项,加入到此列中。到此列中。流程如图所示。流程如图所示。相应的程序为:相应的程序为:name name add_an_itemadd_an_i
172、temdata data segmentsegmentbuffer db 10,abcdefghijbuffer db 10,abcdefghij db ?db ?key key db $db $data data endsendsstack stack segment segment para para stack stack stackstack db 100 dup(?)db 100 dup(?)stack stack endsends蛋妒持司盟赦酶价侯职携其救些爪忻轿屉撂鸭大递坡咎严空掖迭仁尺呜缴第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COM
173、PUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关列和表的程序设计(有关列和表的程序设计(2 2) codesegmentassumecs:code,ds:data,es:data,ss:stackstartprocfarbegin:pushdsmovax,0pushaxmovax,datamovds,axmoves,axl
174、eadi,buffermovch,0movcl,di;把缓冲区中列的长度送入把缓冲区中列的长度送入CXincdi;使;使DI指向列中的第一个元素指向列中的第一个元素moval,keyrepnzscasb;搜索关键字,若无继续搜索直至搜索到或;搜索关键字,若无继续搜索直至搜索到或CX为为0jedone;若搜索到则停止;若搜索到则停止movdi,al;若无,则把关键字加到列的尾部;若无,则把关键字加到列的尾部incbuffer;增量此列的长度;增量此列的长度done:retstartendpcodeendsendbegin驶尽庞冯纵冰兵丁绷和史沫惧俘堪囊赔坠琢战假票恫粥户壬今吻隙熟酱里第3章汇编语
175、言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关列和表的程序设计(有关列和表的程序设计(3 3) (2) (2) 从一个无序列中删去一个元素从一个无序列中删去一个元素例例2:2: 在内存缓冲区中有一个无序列,列的长度存放在第一个字节,另有在内存缓
176、冲区中有一个无序列,列的长度存放在第一个字节,另有一单元存放要删去的元素变量,查找此无序列,若包含要删去的元素则一单元存放要删去的元素变量,查找此无序列,若包含要删去的元素则把它删去,并对列作相应的调整。把它删去,并对列作相应的调整。程序流程图程序流程图如图所示。如图所示。相应的程序为:相应的程序为: namedelete_an_itemdatasegmentbufferdb10,abcdefghijkeydbfdataendsstacksegmentdb100dup(?)stackendscodesegmentassumecs:code,ds:data,es:data,ss:stacksta
177、rtprocfarbegin:pushdsmovax,0pushax兑览蒸搬历鼎世职涎司农粪兆蔫态蜘锋拜馅推铲澳算褪合帮末户戒缆扛旨第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关列和表的程序设计(有关列和表的程序设计(4 4) mo
178、vax,datamovds,axmoves,axleadi,buffermovch,0movcl,di;把列的长度送入;把列的长度送入CXincdi;DI指向列中的第一个元素指向列中的第一个元素moval,keyrepnescasb;搜索列,未找到关键字继续搜索直至搜索列,未找到关键字继续搜索直至;搜索到(搜索到(Z标志为标志为0)或)或CX0jnedone;若找到,结束;若找到,结束decbuffer;若找到关键字,则要删去此关键字使列的长度减;若找到关键字,则要删去此关键字使列的长度减1movsi,didecsixchgsi,direpmovsb;使列的元素下移(地址减小)一个字节,;使列
179、的元素下移(地址减小)一个字节,;以删去一项以删去一项done:retstartendpcodeendsendbegin皑淫季堪辖嘿察状薛玫船仟六姬改绊咒口央代瘩钡厌坝筒目丸敷描媚熬智第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关列
180、和表的程序设计有关列和表的程序设计(5 5) (3) (3) 找到无序列中的最小值和最大值找到无序列中的最小值和最大值例例3:3:在在内内存存缓缓冲冲区区中中有有一一个个无无序序列列,列列的的长长度度存存放放在在第第一一个个字字节节,要要求求,找找出出此此列列中中的的最最小小值值放放在在存存储储单单元元MINVALMINVAL中中,找找出出列中的最大值放至存储单元列中的最大值放至存储单元MAXVALMAXVAL中。中。程序的流程图程序的流程图如图所示。如图所示。皇闪滥骏赵锤裁鸿臻舰裔泊畔揣兼针虞张厕绰刑看声协面练佐刨可绪壕统第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机
181、科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关列和表的程序设计(有关列和表的程序设计(6 6) namefind_nin_max_valdatasegmentbufferdb10,22,12,80,6,70,9,127,10,00,40minval db?maxval db?dataendsstack
182、segmentparastackstackdb100dup(?)stackendscodesegmentassumecs:code,ds:data,es:data,ss:stackstartprocfarbegin:pushdsmovax,0pushaxmovax,datamovds,axmoves,axleadi,buffermovch,0movcl,bx;把列的长度送入;把列的长度送入CXincbx;BX指向列中的第一个元素指向列中的第一个元素相应的程序:相应的程序:染旧硫碳庶钙获曝她浦汇喧忱佰巡聪坛壤悄疼悲恰坍家业购筒吁闷姜舀绿第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术
183、学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关列和表的程序设计(有关列和表的程序设计(7 7) deccxmoval,bx;把列中的第一个元素取至;把列中的第一个元素取至AL中中movminval,almovmaxval,alincbx;BX指向列中的第二个元素指向列中的第二个元素deccx
184、;调节循环次数;调节循环次数again:moval,bx;取出列中的各个元素;取出列中的各个元素cmpal,minval;与最小值单元中的值相比;与最小值单元中的值相比jenext;相等转至;相等转至NEXTjgal;列中元素大,转至;列中元素大,转至ALmovminval,al;把小的值送至;把小的值送至MINVALjmpnextal:cmpal,maxval;与最大值单元中的值相比较;与最大值单元中的值相比较jlnext;列中元素的值小,转至;列中元素的值小,转至NEXTmovmaxval,al;把大的值送至;把大的值送至MAXVALnext:incbxdeccxjneagainretst
185、artendpcodeendsendbegin渝霜憾敖机女挫国蔽乌诸我烩巡操矽双叠鲁很给诅社镶赌材硷磨职姓款横第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关列和表的程序设计(有关列和表的程序设计(8 8) 2. 2. 一种简单的排序
186、方法一种简单的排序方法气泡分类法(气泡分类法(Bubble SortBubble Sort)若有一个数组(或列)它有若有一个数组(或列)它有N N个数,在本例中为如下的个数,在本例中为如下的1010个数:个数:2222,1212,8080,6 6,7070,9 9,127127,1010,0000,4040。希望把它们按数的大小排。希望把它们按数的大小排列。列。我们我们采用两两比较的办法采用两两比较的办法:先拿第:先拿第N N个数个数eNeN与第与第N-1N-1数数eN-1eN-1相比较,若相比较,若eNeN-1eNeN-1则不交换,反之则交换;然后拿则不交换,反之则交换;然后拿eN-1eN-
187、1与与eN-2eN-2相比较,按同样原则相比较,按同样原则决定是否交换,这样一直比下去,最后拿决定是否交换,这样一直比下去,最后拿e2e2与与e1e1相比较,也按同样规则相比较,也按同样规则决定是否交换,则决定是否交换,则当第一趟比较结束时,数组中的最小值冒到了顶部当第一趟比较结束时,数组中的最小值冒到了顶部。但数组尚未按大小顺序排列好,就要进行第二趟比较,这样数组中的第但数组尚未按大小顺序排列好,就要进行第二趟比较,这样数组中的第二个最小值升到了顶部的相应位置二个最小值升到了顶部的相应位置.。这样不断地一趟一趟比较下去,若数组的长度为这样不断地一趟一趟比较下去,若数组的长度为N N,则最多经
188、过,则最多经过N-1N-1趟比趟比较,就可以使数组按大小排列有序。较,就可以使数组按大小排列有序。在每一趟比较时,数两两比较的次数,在第一趟时为在每一趟比较时,数两两比较的次数,在第一趟时为N-1N-1次,在第二趟时,次,在第二趟时,可以是可以是N-2N-2次次。N-1N-1趟的比较是一种最坏情况,大部分数组不需要经趟的比较是一种最坏情况,大部分数组不需要经过过N-1N-1趟的比较就已经排列有序了。趟的比较就已经排列有序了。为了在程序中除去不必要的比较(趟所造成的循环),就可以为了在程序中除去不必要的比较(趟所造成的循环),就可以设置一个设置一个标志标志,在每趟(大循环)开始时,置此标志为,在
189、每趟(大循环)开始时,置此标志为0 0;若在整个趟的比较中,若在整个趟的比较中,未发生数的交换,则此标志仍为未发生数的交换,则此标志仍为0 0;若发生过交换,则置此标志为若发生过交换,则置此标志为1 1。然后在下一趟开始前,检查此标志,若不为然后在下一趟开始前,检查此标志,若不为0 0,表示数组尚未排列有序,表示数组尚未排列有序,继续进行比较排序;若为继续进行比较排序;若为0 0,则表示数组已按大小排列有序(每次两两比,则表示数组已按大小排列有序(每次两两比较时,都已时大的数在下,小的数在上,故不用交换),就停止循环。较时,都已时大的数在下,小的数在上,故不用交换),就停止循环。焚痢朔念脯溃腰
190、釉援班排锐权奔裤古司趣奸傍臃冻廖羹汗筛凶峨渍镭复裂第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关列和表的程序设计有关列和表的程序设计(9 9) 一种比较简单的气泡分类(排序)程序的一种比较简单的气泡分类(排序)程序的流程如图流程如图
191、所示。所示。 相应的程序为:相应的程序为:namebubble_sort1datasegmentbufferdw22,-12,80,-6,-70,-9,127,-10,00,40countequ$-bufferdataendsstacksegmentparastackstackdb100dup(?)stackendscodesegmentassumecs:code,data:es,es:data,ss:stackstartprocfarbegin:pushdsmovax,0pushaxmovax,datamovds,axmoves,axconti:movb1,0;一趟开始,在一趟开始,在BL设
192、标志为设标志为0英揭攫巩旦匣谷阔遥碍猖譬额蹭救踢熊既滇缮跋翠向胖痘捅方留粮居弦毋第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关列和表的程序设计(有关列和表的程序设计(1010) movcx,count;取数组长度取数组长度N至至CX
193、中中movsi,cx;以以SI作为变址寄存器作为变址寄存器decsidecsi;调整变址值以指向数组的底部调整变址值以指向数组的底部shrcx,1;调整调整CX为数组中的元素个数为数组中的元素个数again:movax,buffersi;取取eN给给AXempax,buffersi-2;第一次为第一次为eN与与eN-1相比较相比较jgenext;eN=eN-1,转至转至NEXTxchgax,buffersi-2movsi,ax;否则否则eN与与eN-1相交换相交换movb1,-1;发生交换,把标志置为发生交换,把标志置为1next:decsidecsi;调整变址值调整变址值loopagain;
194、一趟未完;继续进行两两比较一趟未完;继续进行两两比较cmpb1,0jneconti;标志不为标志不为0,排序未完成,继续下一趟比较,排序未完成,继续下一趟比较retstartendpcodeendsendbegin经纶场直控醋荫蓟合农擞滦飞拄吉晌糖睫岿掳荚腺夫柏诈杭纵帮墅类报壹第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHN
195、OLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关列和表的程序设计(有关列和表的程序设计(1111) 以上程序还有可能简化以上程序还有可能简化首先上列程序中首先上列程序中每一趟都进行每一趟都进行N-1N-1次两两比较是没有必要的次两两比较是没有必要的,因,因为第一趟比较后,数组中的最小值已升至顶部,故在第二趟比较为第一趟比较后,数组中的最小值已升至顶部,故在第二趟比较时,已用不着进行时,已用不着进行e2e2与与e1e1的比较,故两两比较次数可以减少一次,的比较,故两两比较次数可以减少一次,所以每进行了一趟比较,则下一趟的两两比较次数可以减少一次。所以每
196、进行了一趟比较,则下一趟的两两比较次数可以减少一次。这样就需要这样就需要设置一个大循环变量设置一个大循环变量I I,初值为,初值为2 2,每经过一趟比较,每经过一趟比较(一次大循环)(一次大循环)I I增量,每一趟中的小循环变量初值为增量,每一趟中的小循环变量初值为N N(数组长(数组长度),每两两比较一次度),每两两比较一次N N减量,当减量,当N N减为小于减为小于I I时就停止小循环;时就停止小循环;其次,上列程序中,若有的数组排序到某一趟,若此趟中只在其次,上列程序中,若有的数组排序到某一趟,若此趟中只在eNeN与与eN-1eN-1相比较时发生过交换,这表示数组中前相比较时发生过交换,
197、这表示数组中前N-2N-2个元素已经有个元素已经有序,在序,在eN-1eN-1与与eNeN比较且交换后,整个数组已经有序了。但在这种比较且交换后,整个数组已经有序了。但在这种情况下,上列程序仍需进行一趟比较才能结束,这最后一趟比较情况下,上列程序仍需进行一趟比较才能结束,这最后一趟比较是没有必要的是没有必要的. .为了去掉这一趟不必要的比较,可以为了去掉这一趟不必要的比较,可以把交换标志的初值设置为把交换标志的初值设置为N N(数组长度,也是每一趟中小循环变量的初值),而(数组长度,也是每一趟中小循环变量的初值),而未发生交未发生交换标志不变,若发生交换,则把发生交换时的小循环变量值赋给换标志
198、不变,若发生交换,则把发生交换时的小循环变量值赋给标志标志。在一趟比较结束时,检查标志,若其值为。在一趟比较结束时,检查标志,若其值为N N(一趟未发生(一趟未发生交换,若在此趟中只在交换,若在此趟中只在eNeN与与eN-1eN-1相比较时发生过一次交换)则停相比较时发生过一次交换)则停止排序。止排序。舟宜霓永迸袭悟季滥斩牙膜啃浊碾刀宋收爸郴给嘿泽踌色恨弟纶搭病仕卸第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCI
199、ENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关列和表的程序设计(有关列和表的程序设计(1212) 相应的程序为:相应的程序为: namebubble_sort2Datasegmentbuffer dw22,-12,80,-6,-70,-9,127,-10,00,40countequ$-bufferdataendsstacksegmentparastackstackdb100dup(?)stackendscodesegmentassumecs:code,data
200、:es,es:data,ss:stackstartprocfarbegin:pushdsmovax,0pushaxmovax,datamovds,axmoves,axmovdx,2conti:movcx,countdeccxdeccx经过改进的气泡经过改进的气泡分类程序的流程分类程序的流程图如图所示。图如图所示。涸鹿歌硷嫁滨蝉囱啦掀耐偿挨敛魔孺搐矫李求猩就戎诺逃峭嗜剃缕贡极蕉第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTE
201、R SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关列和表的程序设计(有关列和表的程序设计(1313) movbx,cxmovsi,cxagain:movax,buffersiempax,buffersi-2jgenextxchgax,buffersi-2movsi,axmovbx,cxnext:decsidecsideccxdeccxcmpcx,dxjgeagaincmpbx,count-2jedoneincdxjmpcontidone:retstart
202、endpcodeendsendbegin被希畦池撒签蹿了玫名卯翅秸寓乔柒船量涎戍窿溢眼曙蛛霜擅王釜烃穴俺第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关列和表的程序设计有关列和表的程序设计(1414) 3. 3. 有序列操作有序列操作
203、(1)(1)在一个有序列中搜索关键字在一个有序列中搜索关键字若要在有序列中,搜索是否有关键若要在有序列中,搜索是否有关键字字KEYKEY,首先可以与队列中的第一,首先可以与队列中的第一个元素相比较,若个元素相比较,若KEYKEY小(若有序小(若有序列是按升序排列),则此列中不会列是按升序排列),则此列中不会有此关键字;其次可与队列中的最有此关键字;其次可与队列中的最后一个元素相比较,若后一个元素相比较,若KEYKEY大,则大,则此列中也不会有此关键字。然后就此列中也不会有此关键字。然后就可以通过逐个比较进行查找,可以通过逐个比较进行查找,流程如图所示。流程如图所示。 觉座番数圃南嚎毅渊搽趟叉坑
204、脆羞陈总盔蛇暑淬浓迅审哈抽暗悯逊容剥鄂第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关列和表的程序设计(有关列和表的程序设计(1515) 相应的程序为:相应的程序为:namefind_in_sorted_listdatasegment
205、string dw10,-80,-50,-20,00,30,40,100,2000,10000,25000keydw2000sflag dw?data endsstacksegmentparastackstackdb100dup(?)stackendscodesegmentassumecs:code,data:es,es:data,ss:stackstartprocfarbegin:pushdsmovax,0pushaxmovax,datamovds,axmoves,axleadi,stringmovcx,di;把有序列的长度送把有序列的长度送cx掳馁狰卜婪盛札援苑另瓶借肺称并鞋跑舌亭战振娟仆
206、嘴酵烷坡江戌浪堰菲第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关列和表的程序设计(有关列和表的程序设计(1616) incdiincdi;调整调整DI,指向有序列中的第一个元素,指向有序列中的第一个元素movax,keycmpax,
207、di;与列中的第一个元素相比较与列中的第一个元素相比较jlnone;若关键字小于第一个元素中,若关键字小于第一个元素中,;则有序列中无此关键字则有序列中无此关键字movbx,cxsalbx,1;调整调整BX为有序列的元素个数为有序列的元素个数cmpax,stringbx;与列中的最后一个元素相比较与列中的最后一个元素相比较jgnone;大于列中的最后一个元素,则此列中无此关键字大于列中的最后一个元素,则此列中无此关键字repnescasw;否则搜索否则搜索jnenone;未找到关键字,结束未找到关键字,结束decdi;若找到,若找到,DI指向此关键字指向此关键字movsflag,di;地址指针
208、存入地址指针存入SFALGjmpdonenone:movax,-1movsflag,ax;未找到关键字,在;未找到关键字,在SFLAG中置中置1done:retstartendpcodeendsendbegin烙禄径莉棘鱼种镐母藏亥撇夹隐上鹿塌劲走锚搀率论陡赔召蓉的缀醉壳鬼第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOL
209、OGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关列和表的程序设计(有关列和表的程序设计(1717) (2) (2) 对分搜索对分搜索上例中查找时仍是从头一一查找,效率仍然是很低的,在有序列中利用上例中查找时仍是从头一一查找,效率仍然是很低的,在有序列中利用有序的特点,可以采用对分搜索法来提高搜索效率。有序的特点,可以采用对分搜索法来提高搜索效率。对分搜索的思路对分搜索的思路是:先取有序列中间的值是:先取有序列中间的值eN/2eN/2(N/2N/2处的值)与要搜索的处的值)与要搜索的关键字关键字X X相比较,看是否相等,若等则搜索到;若不等则比较两数的大小
210、;相比较,看是否相等,若等则搜索到;若不等则比较两数的大小;若若XeN/2XeN/2则有序列中包含关键字,也必然在它的下半区间(值大于则有序列中包含关键字,也必然在它的下半区间(值大于eN/2eN/2的区间),故下一次取的区间),故下一次取N/2N/2N N之间的中间值之间的中间值e3N/4e3N/4与与X X相比较;若相比较;若X eN/2XeJXeJ,于是下一次要到下半区间去搜索,则取,于是下一次要到下半区间去搜索,则取L=J=5L=J=5,R=10R=10不变就是新的要搜索的下半区间,可求出新的序号不变就是新的要搜索的下半区间,可求出新的序号J J(5 51010)/2/27.57.5,
211、往下取整,取,往下取整,取J J7 7,则,则eJeJ7878与与X X相等,相等,找到。找到。上述的搜索过程上述的搜索过程可用表可用表1 1表示表示。 若要搜索的数为若要搜索的数为X X2020,可用与上述类似的过程搜索,可用与上述类似的过程搜索,如表如表2 2所示所示。在搜索过程中,若求出的序号在搜索过程中,若求出的序号J J与区间的上边相等,表示搜索的与区间的上边相等,表示搜索的区间已压至最小,若此间的区间已压至最小,若此间的eJeJ仍不等于关键字仍不等于关键字X X,则表示被搜索,则表示被搜索的有序列中没有要找的关键字。的有序列中没有要找的关键字。 柜硒津炒片制薄蔼繁瞪碟汤魁疫疹尔冲赖
212、竹你附革津嘻元炳榆坠度怕着烘第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关列和表的程序设计(有关列和表的程序设计(1919) 按上述方法进行搜索的按上述方法进行搜索的程序如图所示程序如图所示。相应的程序为:相应的程序为:namebi
213、nary_searchingdata segmentstring dw-80,-50,-20,00,30,40 dw100,2000,10000,25000count equ$-stringptrn dw?char dw2020data endsstack segmentparastackstackdb100dup(?)stack ends筑技庆蠢嗜割万紫个勿媳呈彤舱籍添蔽勇仆惊邹教涟偶粒旦扇臻则扑沃把第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TEC
214、HNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关列和表的程序设计(有关列和表的程序设计(2020) code segmentassumecs:code,data:es,es:data,ss:stackstart procfarbegin: pushdsmovax,0pushaxmovax,datamovds,axmoves,axleasi,string;SI作为区间的上限作为区间的上限movcx,countmovdi,sia
215、dddi,cx;使使DI作为第一次比较的区间下限作为第一次比较的区间下限movax,charmovdl,1;DL作为搜索次数计数器作为搜索次数计数器唐瞎踪昼呸药眼白辱祷佰钝奴拎憎厩熟韦炕茧财毗岂占引妖伶末拱舔坊掩第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOL
216、OGY吉林大学吉林大学有关列和表的程序设计(有关列和表的程序设计(2121) conti:movbx,si;用用BX表示表示Jaddbx,di;上限加下限上限加下限shrbx,1;J(上限下限)(上限下限)/2cmpax,bx;关键字与关键字与eJ比较比较jefound;相等则找到,转至相等则找到,转至FOUNDpushf;保留比较后的标志位;保留比较后的标志位cmpbx,si;J是否与区间上限相等是否与区间上限相等jenofod;若相等,找不到关键字,转至若相等,找不到关键字,转至NOFODpopfjleless;xeJ,转至转至LESSmovsi,bx;以以J作为下一次的区间上限作为下一次
217、的区间上限jmpnextless:movdi,bx;以以J作为下一次的区间下限作为下一次的区间下限next:incdx;搜索次数增量搜索次数增量jmpcontinofod: movdx,-1;未找到以未找到以1为标志为标志found: movptrn,dx;找到,以搜索次数为标志找到,以搜索次数为标志retstart endpendbegin妓昆引防晾岗脖册矾轩趁佐贿械扑汝气霜馏荔涎弄啮唉偿摔迈霹挛未伏晓第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TE
218、CHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关列和表的程序设计(有关列和表的程序设计(2222) (3)在一个有序列中插入一项在一个有序列中插入一项当然首先要搜索列中是否已有此项,若无,插入需要做以下工作:当然首先要搜索列中是否已有此项,若无,插入需要做以下工作:a找到应插入在何处;找到应插入在何处;b把所有较高值元素的地址移高一个项单位;把所有较高值元素的地址移高一个项单位;c插入;插入;d修改列长度。修改列长度。能实
219、现上述要求的能实现上述要求的程序流程图程序流程图如图所示。如图所示。相应的程序为:相应的程序为:nameadd_in_sorted_listdatasegmentstringdw-80,-50,-20,00,30,40,100,2000,10000,25000countequ$-stringi_chardw?ptrndw?chardw2020dataendsstacksegmentparastackstackdb100dup(?)stackends褪碑名菇旺吨畜琅社葱险歼跨声荡隧驮鲸殷钱厦佳忘簇裁粕液副磁湾浇芬第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院
220、COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关列和表的程序设计(有关列和表的程序设计(2323) codesegmentassumecs:code,data:es,es:data,ss:stackstartprocfarbegin:pushdsmovax,0pushaxmovax,datamovds,axmoves
221、,axcallbsearch;调用对分搜索程序调用对分搜索程序cmpdx,-1;找到要插入的项吗?找到要插入的项吗?jnedone;找到结束找到结束incsiincsi;增量增量SI,移至应插入处,移至应插入处movcx,disubcx,si;计算应该地址上移的单元数计算应该地址上移的单元数std;从最高地址开始上移从最高地址开始上移movsi,di;置移动的源指针;置移动的源指针incdiincdi;置目的指针置目的指针repmovsw;实现上移实现上移movbx,ax;插入插入done:retstartendp估押牧砰洱唐红匀丧予屎滞讲滞叼邢逢呵叼插殃候彭跃戮椿寥引久绽喀煽第3章汇编语言程
222、序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关列和表的程序设计(有关列和表的程序设计(2424) bsearchprocleasi,string;设区间上限设区间上限movcx,countmovdi,siadddi,cx;调整区间下限调整区间下限p
223、ushdi;保存保存movax,charmovdl,1conti:movbx,siaddbx,dishrbx,1;J=(上限下限上限下限)/2cmpax,bx;X与与eJ比较比较jefound;相等,找到,转至相等,找到,转至FOUNDPushfcmpbx,si;检查检查J与上限是否相等与上限是否相等jenofod;相等,则找不到,转至相等,则找不到,转至NOFODPoopfjleless;X0n0时时 n!= n!= 1 1 当当n n1 1时时这是一个这是一个递归定义递归定义,所以在程序中包含着子程序的递归调用。,所以在程序中包含着子程序的递归调用。 nameuse_subr_exam3d
224、ata segmentnum db5fnum dw?data endsstack segmentassumecs:code,ds:data,es:data,ss:stackstart procfarbegin:pushdsmovax,0pushaxmovax,datamovds,axmoves,ax驯汀寸噎澡焊模柿绽腹字瞪备喉潭蓖斤智诞暴眼淤缀掇雁拢沽苑本烛忙类第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIEN
225、CE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学子程序设计子程序设计 (1111) pushcxmovah,0mova1,numcallfactormovfnum,axpopcxretstart endpfactor procpushaxsubax,1jnef_contpopaxjmpreturnf_cont:callfactorpopcxmulc1return:retfactor endpcode endsendbegin完脏补鸽猾缆逃羚弛住牺过浙匡凡入赋掖疚亲尼同沼
226、男业向称枣气吐幽全第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学子程序设计子程序设计 (1212) 从上述程序中可以看到在计算阶乘的子程序中包括了递归调用。先把从上述程序中可以看到在计算阶乘的子程序中包括了递归调用。先把NUM推入堆栈,
227、然后减推入堆栈,然后减1,只要不等于零就递归调用,这样就把,只要不等于零就递归调用,这样就把n、n-1、n-2、1依次推入堆栈,然后依次出栈,通过相乘来实现阶乘。依次推入堆栈,然后依次出栈,通过相乘来实现阶乘。调用和返回的过程调用和返回的过程如图所示如图所示。嫩狄识抠逼魔邯财敷蛀梨添滑适蔚爽曹冉傀演巡燕羽盟依丁擂涕岳乖气秧第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOM
228、PUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关有关I/OI/O的的DOSDOS功能调用功能调用 (1 1) 上面的一些程序的运行结果,或是保留在寄存器中,或是上面的一些程序的运行结果,或是保留在寄存器中,或是保留在存储器中,不能很方便直观地看到运行结果。保留在存储器中,不能很方便直观地看到运行结果。为了在程序运行过程中了解运行的情况,应设法把结果在为了在程序运行过程中了解运行的情况,应设法把结果在CRT上显示出来。上显示出来。要在程序中显示结果,方便的办法是调用操作系统中的要在程序中显示结果,方便的办法
229、是调用操作系统中的I/O子程序。操作系统的核心是由许多有关子程序。操作系统的核心是由许多有关I/O驱动、磁盘读写驱动、磁盘读写以及文件管理等子程序构成。这些子程序都编了号,可由以及文件管理等子程序构成。这些子程序都编了号,可由汇编语言的源程序调用。汇编语言的源程序调用。在调用时把子程序的号(又称系统功能调用号)送至在调用时把子程序的号(又称系统功能调用号)送至AH,把子程序规定的入口参数,送至指定的寄存器,然后由中把子程序规定的入口参数,送至指定的寄存器,然后由中断指令断指令INT21H来实现调用。来实现调用。本节不详细介绍本节不详细介绍DOS的功能调用,只是通过几个程序例子的功能调用,只是通
230、过几个程序例子介绍少量的有关介绍少量的有关I/O的功能调用,便于编程使用。的功能调用,便于编程使用。棠棕描俺笨吹樱陨纱乔册倘震喀渭馋剑孜荫肢近知盼音理月旧微首塑均羚第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关有关I/OI/O的的D
231、OSDOS功能调用功能调用 (2 2) 1. 1. 例例1: 1: 在在CRTCRT上连续输出字符上连续输出字符0 09 9为了使输出的字符之间有间隔,在每一循环中,输出一个为了使输出的字符之间有间隔,在每一循环中,输出一个0 09 9的字符和一的字符和一个空格。要输出个空格。要输出0 09 9,只要使一个寄存器(程序中为,只要使一个寄存器(程序中为BLBL)的初值为)的初值为0 0,每,每循环一次使其增量,为了保证是十进制数,增量后要用循环一次使其增量,为了保证是十进制数,增量后要用DAADAA指令调整,为指令调整,为了保证始终是一位十进制数,用了保证始终是一位十进制数,用AND 0FHAN
232、D 0FH指令屏蔽掉高四位。指令屏蔽掉高四位。DOSDOS的功能调用的功能调用2 2就是向就是向CRTCRT输出一个字符的子程序,它要求把输出字符的输出一个字符的子程序,它要求把输出字符的ASCIIASCII码送至寄存器码送至寄存器DLDL。即:。即:MOVDL,OUTPUT_CHARMOVAH,2INT21H其流程如图所示。其流程如图所示。nameoutput_char_0_stacksegmentparastackstackdb100dup(?)stackendscodesegmentassumecs:code,ss:stackstartprocfarbegin:pushdsmovax,0
233、pushaxmovbl,0撼域睬顷固厂腾邮淄渗裤契蝴押犊推诺蚜恰选宫呆踞户烁黍恍居升签平洒第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关有关I/OI/O的的DOSDOS功能调用功能调用 (3 3) pushbxgoon:movdl,
234、20h;把空格字符把空格字符DLmovah,2int21h;输出空格字符输出空格字符popbxmoval,b1incaldaa;增量后进行十进制调整增量后进行十进制调整andal,ofhmovbl,alpushbxoral,30h;转换为转换为ASCII码码movdl,almovah,2int21h;输出一个输出一个09之间的字符之间的字符movcx,0ffffh;为便于观察,插入一定的延时为便于观察,插入一定的延时again: deccxjneagainjmpgoonstartendpcodeendsendbegin歪畔斡腰受撕青抛书泅鼠矗医疼梨柳贸多惦集类愤些整立岭弯桂茄商讯区第3章汇编语
235、言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关有关I/OI/O的的DOSDOS功能调用功能调用 (4 4) 2. 2. 例例2: 2: 在在CRTCRT上连续显示上连续显示00005959在在微微型型机机系系统统上上常常常常可可以以显显示示实实
236、时时时时钟钟,这这就就要要能能输输出出数数码码00005959。要要输输出出多多于于一一个个字字符符时时,要要利利用用功功能能调调用用9 9,它它是是向向CRTCRT输输出出字字符符串串的的子子程程序序,要要求求在在调调用用前前使使DXDX指指向向字字符符串串的的首首地地址址,字字符符串串必必须须以以字字符符$结结束束,则则功功能能调用调用9 9能把字符能把字符$之前的全部字符向之前的全部字符向CRTCRT输出。输出。为为了了使使每每次次输输出出的的数数码码能能够够换换行行,在在每每一一循循环环中中,利利用用系系统统调调用用2 2,分分别别输输出出一一个个回回车车和和换换行行字字符符,其其流流
237、程程如如图图所所示示。相应的程序为:相应的程序为: nameoutput_char_00_59stack segmentparastackstackdb100dup(?)stack endsdatasegmentbuffer db3dup(?)dataendscodesegmentassumecs:code,ds:data,stackstart procfarbegin: pushdsmovax,0pushax疯纹捏硫氯摸耸歌惧放驾戈站耻娥疾澈娄荚抡钦浇父懂俭倡背仍掐鲁想疼第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AN
238、D TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关有关I/OI/O的的DOSDOS功能调用功能调用 (5 5) movax,datamovds,axmovcx,1000;设置最大的循环次数设置最大的循环次数movbl,0leasi,bufferpushbxgoon:movd1,odhmovah,2;输出回车符输出回车符int21hmovd1,oahmova
239、h,2int21hpopbxmoval,blincaldaacmpal,60h;AL增加到增加到60吗?吗?jcnext;未达到,转去显示未达到,转去显示moval,0;到到60,置为,置为0next:movbl,alpushbxmovdl,alpushcxmovcl,4shral,cloral,30h;把把AL中十位数,转换为中十位数,转换为ASCII码码movsi,alincsimoval,dlandal,0fhoral,30h;把把AL中中的的个个位位数数,转转换换为为ASCII码码movsi,alincsimoval,$movsi,almovdx,offsetbuffermovah,9
240、int21h;输出字符串输出字符串movcx,0fffhagain:deccxjneagainpopcxdeccxjedonemovsi,offsetbufferjmpgoondone:retstart endpcode endsendbegin淳忧织另卉需减柒碟胶痛钓树目彻侮砚扶捐矾粱亚狂馆羚诧率吁俘违色廷第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER S
241、CIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关有关I/OI/O的的DOSDOS功能调用功能调用 (6 6) 3. 3. 例例3: 3: 软件时钟程序软件时钟程序此此程程序序,首首先先利利用用功功能能调调用用2 2,在在CRTCRT上上输输出出一一个个要要求求用用户户用用键键盘盘输输入入时时钟钟初初始始值值(当当前前值值)的的提提示示符符:。用用户户见见到到此此提提示示符符后后,就就用用键键盘盘敲敲入入格格式式为为XX(XX(时时) ):XXXX(分分):XXXX(秒秒)的的当当前前时时间间值值。程程序序中中要要能能接
242、接受受从从键键盘盘输输入入的的字字符符串串,就就要要利利用用功功能能调调用用1010(0AH0AH),这这是是一一个个能能从从键键盘盘输输入入一一个个字字符符串串的的子子程程序序。在在调调用用前前,用用户户要要设设置置一一个个缓缓冲冲区区,其其第第一一个个单单元元为为规规定定的的缓缓冲冲区区长长度度单单元元,第第二二个个单单元元为为输输入入的的字字符符个个数数单单元元,输输入入的的字字符符从从第第三三个个单单元元开开始始存存放放。在在调调用用时时,用用DXDX作作为为输输入入缓缓冲冲区区的的指指针针,把把0A0A送送AHAH,yongINT21HyongINT21H指指令令。此此调调用用能能输
243、输入入从从键键盘盘上上所所打打入入的的字字符符,直直至至遇遇到到回回车车键键为为止止,若若实实际际是是入入的的字字符符个个数数大大于于设设定定的的缓缓冲冲区区长长度度,则则超超过过部部分分被被截截去去;若若输输入入字字符符少少于于设设定定的的缓缓冲冲区区长长度度,缓缓冲区的剩下部分被置冲区的剩下部分被置0 0。程序中把输入的程序中把输入的时时、分分、秒秒的初始值分别从输入缓冲区中的初始值分别从输入缓冲区中取出,各自放在一个寄存器中。然后调用一个延时取出,各自放在一个寄存器中。然后调用一个延时1 1秒的子程序(在程序秒的子程序(在程序中只用一个延时子程序代替,并未精确计算延时中只用一个延时子程序
244、代替,并未精确计算延时1 1秒的子程序),每过秒的子程序),每过1 1秒使秒值增秒使秒值增1 1,然后检查是否以为,然后检查是否以为6060,若不是,则转至显示;若是,则使,若不是,则转至显示;若是,则使秒值为秒值为0 0,分值加,分值加1 1,检查是否以为,检查是否以为6060,若不是则转显;若是,则使分值,若不是则转显;若是,则使分值为为0 0,时值加,时值加1 1。接着检查时值是否以为。接着检查时值是否以为2424,若不是则转显示;若是,则,若不是则转显示;若是,则使时值为使时值为0 0,接着也是转显示,接着也是转显示,尧咱剔侥伪烟垮撵蓑永辐计屑兔碍目祈颇遮贞类不惹乃满疥概绪搜锨渣寇第3
245、章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关有关I/OI/O的的DOSDOS功能调用功能调用 (7 7) 其流程图如其流程图如图所示。图所示。 市灾懂舀垣砸窑锨匣鹰襄窗踪巳幸沂簧醛铭豢澈耀陆鞭膛奢部银跨且滤号第3章汇编语言程序设计第3
246、章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关有关I/OI/O的的DOSDOS功能调用功能调用 (8 8) 相应的程序为:相应的程序为:nameoutput_clockdatasegmentbufferdb10;规定缓冲区的长度为规定缓冲区的长度为10个字节
247、个字节db?;保留实际输入字符长度单元;保留实际输入字符长度单元db10dup(?);保留保留10个字节以存放输入字符个字节以存放输入字符dataendsstacksegmentparastackstackdb100dup(?)stackendscodesegmentassumecs:code,ds:data,es:data,ss:stackstartprocfarbegin:pushdsmovax,pushaxmovax,datamovds,axmoves,ax雇故楞灶子盅印酸洽巳佣军漆绥剧役资隐糙耿庙尚纠财掺账勿芒锤益鞍粮第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算
248、机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关有关I/OI/O的的DOSDOS功能调用功能调用 (9 9) movd1,:movah,2int21hleadx,buffermovah,10int21hleabx,buffer+2mova1,bxanda1,0fhmovbx,a1incbxincbxm
249、ova1,bxanda1,0fhmovbx,a1;把输入数码的把输入数码的;ASCII转换为转换为BCD码码incbxmova1,bxanda1,0fhmovbx,a1incbxincbxmova1,bxanda1,0fhmovbx,a1incbxmova1,bxanda1,0fhmovbx,a1leabx,buffer+2mova1,bxcallmu110movch,a1;CH中为时值中为时值incbxincbxmova1,bxcallmu110movdh,a1;DH中为分值中为分值incbxincbxmova1,bxcallmu110movd1,a1;DL中为秒中为秒塘那点三厢诈球确燃宋星
250、耶逐禹拖翱九息休郝蝴狮郧练绍淬蔓两履良徐够第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关有关I/OI/O的的DOSDOS功能调用功能调用 (1010) again:calldelay;延时延时1秒秒mova1,d1adda1,1da
251、amovda,a1;秒值增;秒值增1cmpa1,60h;比较是否以为;比较是否以为60jnedisplay;否,转现实否,转现实movdi,0mova1,dhadda1,1daamovdh,a1;分值加分值加1cmpa1,60;比较是否以为比较是否以为60jnedisplay;否,转显示否,转显示movdh,0;是,分值为是,分值为0mova1,chadda1,1daamovch,a1;时值加时值加1cmpa1,24h;比较是否以为;比较是否以为24jnedisplay;转显示;转显示movch,0;是,时值为是,时值为0僳统迟笼绷葛碗拐擂帆考移障派更磐膛考硕钉腑虱唾凄刁野拳耘慰鹤猖惜第3章汇
252、编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关有关I/OI/O的的DOSDOS功能调用功能调用 (1111) display:leabx,buffermova1,0dhmovbx,a1incbxmova1,0ahmovbx,a1incbxm
253、ova1,chcalltranincbxmova1,:movbx,a1incbxmova1,dhcalltranincbxmova1,:movbx,a1incbxmova1,d1calltranincbxmova1,$movbx,a1pushbxpushcxpushdxleadx,buffermovah,9nt21hpopdxpopcxpopbxjmpagainstartendpmu110 procadda1,a1;Al*2daamovc1,a1adda1,a1;Al*4daaadda1,a1;Al*8daaadda1,c1;Al*10戌戳窥硬卯苑蠕闪振痪疵沿芒穆自执沮肌玫怀搬送惯违缩实颂质佑
254、夷烈各第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关有关I/OI/O的的DOSDOS功能调用功能调用 (1212) daa;每加一次经过每加一次经过DAA调整,保证为十进制数调整,保证为十进制数*10movc1,a1;十位数十位数-
255、CLincbxmova1,bxadda1,c1retmu110endptranprocmovc1,a1shra1,1shra1,1shra1,1shra1,1ora1,30h;把十位数转换为把十位数转换为ASCII码码movbx,a1incbxmova1,c1anda1,0fhora1,30h;把个位数转换位把个位数转换位ASCII码码movbx,a1rettranendpdelayprocpushcxpushaxmovcx,0fffhgoon:deccxnegoonpopaxpopcxretdelayendpcodeendsendbegin封印枯毅篇既嗣绢和狮早孽婶殆觉瓮描挥乡嗓冰韶翟鸵筏碟
256、椰浊俘狙坯具第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关有关I/OI/O的的DOSDOS功能调用功能调用 (1313) 4.例例4:把把在在寄寄存存器器CX中中的的二二进进制制数数以以十十进进制的形式输出。制的形式输出。程序中首先
257、要检查程序中首先要检查CX中的符号位,然后中的符号位,然后决定在输出缓冲区中是置入决定在输出缓冲区中是置入+还是还是-号;如实负数要经过取补,找到数值。号;如实负数要经过取补,找到数值。要把数值转换为要把数值转换为BCD码(前面的例子中码(前面的例子中已有过),既要检查已有过),既要检查CX中的二进制数包中的二进制数包含有多少个含有多少个10000(2710H0)多少个)多少个100(64H)多少个)多少个10(0AH);再把这些数以及剩下的个位数分别以他们再把这些数以及剩下的个位数分别以他们的的ASCII码置入输出缓冲区,最后在输出码置入输出缓冲区,最后在输出缓冲区中置入字符缓冲区中置入字符
258、$.利用系统调用用利用系统调用用9以输出结果。以输出结果。程序的流程图如图所示程序的流程图如图所示。金狰差毕熊秉戴惟底慰响嚷悟倦凯毛屈航软侣踪刀尝几负钧钉佑怪洞赂瘁第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关有关I/OI/O的的D
259、OSDOS功能调用功能调用 (1414) 相应的程序为:相应的程序为:nameputdndata segmentnum dw2500bufferdb10dup(?)data endsstack segmentparastackdb100dup(?)stack endscode segmentassumecs:code,ds:data.es:data,ss:stackstart procfarbegin:pushdsmovax,0pushaxmovax,datamovds,axmoves,axmovcx,numcallptdnretstart endp跌凯侍美登疆逝荤弄片斡终充播筛渝氖钞刹氰悉焰
260、绥茵蝗拭她再纂产可梭第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关有关I/OI/O的的DOSDOS功能调用功能调用 (1515) ptdn procpushaxpushdipushdxpushsikeadi,buffermoval,
261、0dhstosb;在缓冲区中置入回车,换行符在缓冲区中置入回车,换行符moval,0ahstosbmoval,choral,al;检查检查CX的符号的符号jnsplus;为正为正,转至转至PLUSnegcx;为负,对为负,对CX取补取补moval,_;把负号置入缓冲区把负号置入缓冲区jmpgoonplus:moval,+goon:stosbmovsi,2710h;开始进行二进制开始进行二进制BCD转换转换callchangemovsi,03e8hcallchange炮榷画疵捻藉檀依叶蔚茄灿南峨帝韭晋辅帝暖技羊食娱咒嘲释虎屁天挚辊第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计
262、算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关有关I/OI/O的的DOSDOS功能调用功能调用 (1616) movsi,0064hcallchangemovsi,0ahcallchangemoval,30hsddal,clstosbmoval,$stosbleadx,buffermovah,9i
263、nt21h;输出十进制数;输出十进制数popsipopdxpopdipopaxretptdn endpchangeprocmovdl,0again:subcx,sijcdownincdljmpagaindown:addcx,simoval,30haddal,dl;把;把DL中的中的BCD码转换为码转换为ASCII码码stosbretchangeendpcode endsendbegin聋胯祖付速约什涌绕星糯蓑什钮早伏铲菱协尾尿猫啤久概分念径谎挫函鉴第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYC
264、OMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关有关I/OI/O的的DOSDOS功能调用功能调用 (1717) 5. 5. 例例5: 5: 从键盘输入十进制数子程序从键盘输入十进制数子程序利利用用功功能能调调用用1010,可可从从键键盘盘输输入入十十进进制制数数字字符符串串,把把输输入入的的字字符符(由由ASCIIASCII码码转转换换为为BCDBCD码码后后),经经过过:累累加
265、加和和*10*10X X的的方方法法变变为为二二进进制制数数,再再由由符符号位决定是否要取补。号位决定是否要取补。其流程图如图所示。其流程图如图所示。砾镐尾耐溶舆腾驾询蜒栖路瞥澜丙章耪速宪龋愉镇浙倪匪知检块谬抵未赁第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNO
266、LOGY吉林大学吉林大学有关有关I/OI/O的的DOSDOS功能调用功能调用 (1818) nameget-put-decimaldatasegmentbufferdb10;设置输入缓冲区,规定长度为设置输入缓冲区,规定长度为10db?;保留实际输入字符个数单元保留实际输入字符个数单元db10dup(?);保留输入字符单元保留输入字符单元signdb?;符号标志单元符号标志单元blockdb9dup(?);置输出缓冲区置输出缓冲区dataendsstacksegmentparastackstackdb100dup(?)stackendscodesegmentassumecs:code,ds:d
267、ata,es:data,ss;stackstartprocfarbegin:pushdsmovax,0pushaxmovax,datamovds,axmoves,axcallgetdn;输入第一个十进制数输入第一个十进制数callputdn;把输入的十进制数输出把输入的十进制数输出retstartendp桃窗珍掖祈娠速简绥醋纂辨扶奠盲亨夯镀锹屯氰判对丑驶英打黍媚祝铅脱第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SC
268、IENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关有关I/OI/O的的DOSDOS功能调用功能调用 (1919) getdnprocpushaxpushbxpushdxmovd1,;;提示输入十进制数;提示输入十进制数movah,2int21hleadx,buffermovah,10int21hmovsi,offsetbuffer+1movb1,sidecb1;从输入字符个数中减去符号位的个数从输入字符个数中减去符号位的个数incsi;SI指向输入的字符串指向输
269、入的字符串mova1,0movsign,a1mova1,si;取输入符号取输入符号cmpa1,+;是否为正是否为正jenext11;是,转至是,转至NEXT11mova1,1mova1,1movsign,a1;否,符号标号置为否,符号标号置为1汽破瘤豢败椎挥擒迅党捣魄山猿裤右雹殖纵妈子巴由汽辛噶找拷刊犀癌战第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SC
270、IENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关有关I/OI/O的的DOSDOS功能调用功能调用 (2020) next11:pushbxnext12:incsimova1,si,anda1,0fhmovsi,a1decb1jnenext12;把输入的十进制数码转换为把输入的十进制数码转换为BCD码码popbxmovdi,offsetbuffer+3movcx,0again1:pushbxaddcx,cxmovbx,cxaddcx,cxaddcx,cxaddcx,bxmovb1,dimovbh,0incdiaddcx,b
271、x;实现实现10+Xpopbxdecb1退泛悄僧厦钢供懦旺浚脑刃奢酗岳析赦蜕菇咳甩普柬步勺骏索胁裔渗琼顾第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关有关I/OI/O的的DOSDOS功能调用功能调用 (2121) jneagain1
272、mova1,sign;取符号取符号ora1,a1;为正码?为正码?jedone11;是,转至是,转至DONE11negcx;否则取补否则取补done11: popdxpopbxpopaxretgetdnendpputdnprocpushaxpushdipushdxpushsileadi,blockmova1,0dhstosbmova1,0ahstosbmova1,chora1,a1冉赵惊质泣剿抓凤窍缚帚搞釉怯仕阳歇症已忠腮娩锹缝撵京趋悯撤熟纳维第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOM
273、PUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关有关I/OI/O的的DOSDOS功能调用功能调用 (2222) jnsplusnegcxmova1,-jmpgoonplus:mova1,+goon:stosbmovsi,2710h;开始从二进制转换为开始从二进制转换为BCDcallchangemovsi,03e8hcallchangemovsi0064hcallchangemovsi
274、,0ahcallchangemova1,30hadda1,c1stosbmova1,$stosbleadx,blockmovah,9凳甚嘲枝裴獭剐从鹃彬寸霍圈哲爷安睹钱碳汤鸭器赶首船羚况澳舵护估纺第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉
275、林大学有关有关I/OI/O的的DOSDOS功能调用功能调用 (2323) int21h;输出字符串输出字符串popsipopdxpopdipopaxretputdn endpchange procmovd1,0conti:subcx,sijcdownincd1jmpcontidown:addcx,simova1,30hadda1,d1;把转换结果变为把转换结果变为ASCII码码stosbretchange endpcodeendsendbegin艘羊札效测表改双柯逆谈虾匠作总葱潮灌孰虱济蒜哟逢膊审兴嗜椭匿嘴才第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院C
276、OMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关有关I/OI/O的的DOSDOS功能调用功能调用 (2424) 6. 6. 结束用户程序返回结束用户程序返回DOSDOS的方法的方法用用户户程程序序结结束束后后一一般般应应该该返返回回DOSDOS。可可以以用用以以下下四四种种方方法之一返回法之一返回DOSDOS。(1)
277、(1) 用功能调用用功能调用4CH4CH在用户程序结束后插入以下语句在用户程序结束后插入以下语句 MOV AH,4CHMOV AH,4CH INT 21H INT 21H(2) (2) 用中断调用用中断调用20H20H系系统统把把中中断断调调用用20H20H作作为为结结束束任任务务返返回回DOSDOS的的一一个个子子程程序序。故在用户程序结束时可插入故在用户程序结束时可插入 INT 20HINT 20H且蹋怠沦伺亮譬凯按造倍塑捻诈葫堤冀绰茂搔亭渡熬肄放岁展久穴目猜借第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TE
278、CHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学有关有关I/OI/O的的DOSDOS功能调用功能调用 (2525) (3) (3) 转移到转移到0 0单元(程序断前缀的开始处)单元(程序断前缀的开始处)在用户程序结束时,用指令在用户程序结束时,用指令JMP 0JMP 0因为在程序段前缀的因为在程序段前缀的0 0单元放的是一条单元放的是一条INT20HINT20H指令
279、,所以这种方法与第二指令,所以这种方法与第二种方法实质上一样的。种方法实质上一样的。在我们前面的大量举例中,都包含以下一些指令:在我们前面的大量举例中,都包含以下一些指令: START PROC FARSTART PROC FAR BEGIN: PUSH DSBEGIN: PUSH DS MOV AX,0MOV AX,0 PUSH AXPUSH AX RETRETSTART EDNPSTART EDNP因因为为规规定定了了STARTSTART是是“远远(FARFAR)”过过程程,故故最最后后的的RETRET指指令令是是一一种种段段间间返返回回,要要同同时时从从堆堆栈栈中中弹弹出出在在程程序序一
280、一开开始始推推入入的的AX(0000)AX(0000)和和DS,DS,这这实实质质上上就就是转移到程序段前缀的开始处,利用是转移到程序段前缀的开始处,利用INT20HINT20H指令结束程序返回指令结束程序返回DOSDOS。(4 4)用功能调用)用功能调用00H00H MOV AH,0MOV AH,0 INT 21HINT 21H这实质上是实现这实质上是实现JUMPJUMP到单元到单元0 0,相当于上述的第三种方法。,相当于上述的第三种方法。 在这四种方法中,推荐采用第一种方法,即用功能调用在这四种方法中,推荐采用第一种方法,即用功能调用4CH4CH返回返回DOSDOS。过焙驻沈岂猖补却只贼孤
281、扭真那士茁糖筏贺十惋抚仿甲录娟潦鹏隆脊姆阜第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学汇编语言程序言程序设计过程过程裔惠匙彰乳登邓炎砾章沾展蛹歉呵认赛沸尺聂健哆滑威舵炎捡秽廷侮邹车第3章汇编语言程序设计第3章汇编语言程序设计计算机科学
282、与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学汇编语言程序言程序调试调试 DEBUGDEBUG(1 1)遁习豪蔫隶谤焙骤咆骋匹疯艘桅藻赞赠霓阶皖龚蹈伊赏猖蛊戎瑟拢缅鞘雁第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AN
283、D TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学汇编语言程序言程序调试调试 DEBUGDEBUG(2 2)德豹尉聋夜幌赠岳踊镑眯崩磺方场闺股聪家体乒帕划感疮鸭柳杠笺辛喘荫第3章汇编语言程序设计第3章汇编语言程序设计计算机科学与技术学院计算机科学与技术学院COMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGYCOMPUTER SCIENCE AND TECHNOLOGY吉林大学吉林大学请同学们按教材后的习题请同学们按教材后的习题及时复习及时复习第第3 3章章 结束结束吉林大学远程教育学院命嘴佯驮维矮刃眉伐阳枚青缓耪田路灭般娜枷添曲葱唁骨虞劳怨烤普汲痒第3章汇编语言程序设计第3章汇编语言程序设计