




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇编语言的实例设计【摘要】本文研究并介绍了汇编语言,利用汇编语言编写了一下典型的实例。第一章是汇编语言的一些简介;第二章总结了一些汇编语言的作用和特点;第三章中利用汇编语言编写了一些典型的实例来加深对汇编语言的认识。【Abstract】 The first chapter is a short introduction assembly language. The second chapter summarizes some assembly language functions and features. The third chapter using assembly language some typical examples to deepen the understanding of assembly language.【关键字】汇编语言;实例设计【keywords】Assembly Language,;example design目录1引言2汇编语言的作用和特点2.1汇编语言的作用2.2汇编语言的主要特点3汇编语言典型实例设计3.1条件转移指令3.2算术运算指令3.3移位运算指令3.4综合实例4结束语参考文献1引言。2计算机的工作是依靠机器语言来实现的,而机器语言由于编写的程序不易读、出错率高、难以维护等原因,不能得到广泛应用。在机器语言的基础上,用助记符代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。由于在某些领域中汇编语言的特点较适合编写程序,因此汇编语言得到了广泛的应用。52汇编语言的作用和特点2.1汇编语言的作用汇编语言是面向机器的程序设计语言。汇编语言是汇编指令集、伪指令集和使用它们规则的统称。汇编语言直接同计算机的底层软件甚至硬件进行交互,它的作用主要体现在:(1)能够直接访问与硬件相关的存储器或I/O端口。 (2)能够不受编译器的限制,对生成的二进制代码进行完全的控制。 (3)能够对关键代码进行更准确的控制,避免因线程共同访问引起死锁。 (4)能够根据特定的应用对代码做最佳的优化,提高运行速度。(5)能够最大限度地发挥硬件的功能。2.2汇编语言的主要特点一方面,汇编语言指令是用一些具有相应含义的助忆符来表达的,所以,它要比机器语言容易掌握和运用,但另一方面,它要直接使用CPU的资源,相对高级程序设计语言来说,它又显得难掌握。3汇编语言程序归纳起来大概有以下几个主要特点:(1)与机器相关性汇编语言指令是机器指令的一种符号表示,而不同类型的CPU有不同的机器指令系统,也就有不同的汇编语言,所以,汇编语言程序与机器有着密切的关系。由于汇编语言程序与机器的相关性,所以,除了同系列、不同型号CPU之间的汇编语言程序有一定程度的可移植性之外,其它不同类型(如:小型机和微机等)CPU之间的汇编语言程序是无法移植的,也就是说,汇编语言程序的通用性和可移植性要比高级语言程序低。(2)执行的高效率正因为汇编语言有“与机器相关性”的特性,程序员用汇编语言编写程序时,可充分发挥自己的聪明才智,对机器内部的各种资源进行合理的安排,让它们始终处于最佳的使用状态,这样做的最终效果就是:程序的执行代码短,执行速度快,这也是汇编语言程序执行高效率的原因之一。(3)编写程序的复杂性汇编语言是一种面向机器的语言,其汇编指令与机器指令基本上一一对应,所以,汇编指令也同机器指令一样具有功能单一、具体的特点。要想完成某件工作,就必须安排CPU的每步工作另外,在编写汇编语言程序时,还要考虑机器资源的限制、汇编指令的细节和限制等等。由于汇编语言程序要安排运算的每一个细节,这就使得编写汇编语言程序比较繁琐、复杂。一个简单的计算公式或计算方法,也要用一系列汇编指令一步一步来实现。(4)调试的复杂性在通常情况下,调试汇编语言程序要比调试高级语言程序困难,其主要原因有四:汇编语言指令涉及到机器资源的细节,在调试过程中,要清楚每个资源的变化情况; 程序员在编写汇编语言程序时,为了提高资源的利用率,可以使用各种实现技巧,而这些技巧完全有可能破坏程序的可读性。这样,在调试过程中,除了要知道每条指令的执行功能,还要清楚它在整个解题过程中的作用; 高级语言程序几乎不显式地使用“转移语句”,但汇编语言程序要用到大量的、各类转移指令,这些跳转指令大大地增加了调试程序的难度。如果在汇编语言程序中也强调不使用“转移指令”,那么,汇编语言程序就会变成功能单调的顺序程序,这显然是不现实的。3汇编语言典型实例设计3.1条件转移指令例1:将内存中表list中的前10个数求和(设每个数为16位)C语言:int count=10;int sum=0; int i=0;while (count0)sum=sum+Listi;count=count-1;i=i+1;汇编语言:MOV CX , 10 ; countMOV AX , 0 ; sumMOV DI , 0 ;偏移地址Start: CMP CX , 0JE end ; (CX)=0时转移ADD AX , ListDISUB CX , 1ADD DI , 2JMP startEnd例2:统计表List中前100个字节中的“0”,“=0”,“0”的字节数目C语言:int CA=0 , CX=0 , CE=0 ;for(int i=0;i0) CA+;else if (Listi=0) CE+;else CB+;汇编语言MOV CX,0MOV CA,0MOV CB,0MOV CE,0S:CMP CX,10JE endMOV DI,0ADD CX,1CMP ListDI,0JBE nextADD CA,1JMP Cnext:CMP ListDI,0JE next1ADD CB,1JMP Cnext1:ADD CE,1C:ADD DI,1JMP SEnd3.2算术运算指令例3:分析“ADD AX,BX”:设执行前(AX)=35C9H, (BX)=726DH执行后(AX)=A836H,BX不变, SF=1, PF=1, 2F=0, 0F=1, CF=0, AF=1例4:分析“SUB CX,BX”:设执行前(CX)=1296H, (DS)=2000H,(BX)=100H,(20100H)=3DH,(20101H)=28H, 由BX寻址得到数据283DH;执行后:(CX)=0EA59H,BX不变, SF=1, PF=1, 2F=0, 0F=0, CF=1, AF=1例5:分析“IMUL BL”:设执行前(AL)=05H, (BL)=F7H,(补)=-9执行后(AX)=FFD3H(即-(05*09)的补码)例6:分析“IDIV VL”:设执行前(AX)=FF05H, (BL)=17H,(补)=-9执行后(AL)=F6H(-10的补,为商),(AH)=EBH(-21的补,为余数)例7:对长数的运算 求“7H0A15BEH”“30517A6BH”加法:MOV AX,15BEHADD AX,7A6BHMOV DX,7H0AHADD DX,3051H减法:MOV AX,15BEHSUB AX,7A6BHMOV DX,7H0AHSBB DX,3051H3.3移位运算指令例8:将AL中压缩的BCD码转化为两个字节的ASCII码送BX,设(AL)=a1a0HMOV BH,AL;备份MOV CK,4;设移位次数SHR BH,CL;(BH)=0a1HADD BH 30H;调为ASCII码MOV BL,AL;另一备份AND BL 0FH;(BH)=0a2HADD BL,30H;调为ASCII码例9:不用乘法指令编写程序段实现AX(AX)*10用移位指令SHL AX,1;*2MOV BX,AX;备份SHK AX,1;*2SHL AX,1;*2ADD AX,BX用加法指令ADD AX,AXMOV BX,AXADD AX,AXADD AX,AXADD AX,BX注:(AX)*10=(AX)*(23+2)=(AX)*23+(AX)*2=(AX)*2)*2)*2+(AX)*23.4综合实例例10:设变量char中存储了一个字符,若七位大写则将其改为小写MOV AL,char;CMP AL,A;JB exit;CMP AL,Z;JA exit;ADD char,20H;该指令只在大写时被执行(小写字母的ASCII码比大写的大20H)exit:例11:求DX:AX(共32位)的相反数NOT AXNOT DXADD AX,1ADC DX,0例12:求55矩阵的转置兼程序格式识别DATA segment A DW 20,50,90,30,51;DW 40,50,96,30,81DW 36,53,93,80,56DW 20,53,80,36,51DW 26,68,93,30,58DATA endsSTACK segment PARA STACK STACKSTAPN DW 20 DUP(?)TOP LABEL WORDSTACK endsCode segmentAssume CS:Code,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,offset TopMOV SP,AXMOV CX,4;MOV BX,0;Loop1:push CX;MOV SI,2MOV DI,2Loop2:push ABXSIpush ABXDIpop ABXSIpop ABXDIADD SI,2ADD DI,2Loop Loop2;ADD BX,0CH; Pop CX;Loop Loop1;MOV AH,4CHInt 21Hcode endsend start 例13:以十六进制显示变量bhout中的一个字节MOV AL,bhout;(AL)=x4x3x2x1y4y3y2y1Band AL,1111000B;(AL)=x4x3x2x10000BMOV CL,4;设置移位次数SHR AL,CL;(AL)=0000x4x3x2x1BMOV BL,bhout;(BL)=x4x3x2x1y4y3y2y1BAnd BL,00001111B;(BL)=0000y4y3y2y1BMOV CX,2;设置循环次数(显示两个字符)MOV BH,AL(BH)=0000x4x3x2x1Bpbh1:CMP BH,10;JB pbh2;(BH)10时转移ADD BH,37H;数字AFASCII码JMP pbh3pbh2:ADD BH,30H;数字09ASCII码pbh3:MOV AH,02;带21H号程序的第2号MOV DK,BH;被显示字符的ASCII码INT 21H;调用DOS的第21H号程序MOV BH,BL;(BH)=0000y4y3y2y1B下一次被显示Loop pbh1例14:将BX中存储的数以十六进制显示出来MOV CX,1dPUSH CXMOV CX,10dPUSH CXMOV CX,100dPUSH CXMOV CX,1000dPUSH CXMOV CX,10000dPUSH CXMOV CX,5;循环5次S:POP BP;(BP)除数(10000,1000,1000,10,1)MOV AX,BX;(BX)/(BX)商DX 余数ALMOV DX,0DIV BPMOV BX,X;remainder to BXMOV DL,AL;quotient to DLADD DL,30Hconvert to ASCIIMOV AH,02INT 21hLoop S例15:扬声器发声控制程序(61H号端口可认为是一个控制端口)端口b7b6b5b4b3b2b1b061HX0约定该位取0时关闭2号定时器控制其他设备的控制位 该位是扬声器的开关(1:打开 0:关闭)code segment代码段开始main proc far主过程开始assume cs:code,ds:code代码段和数据段重合org 100h让下列可执行命令从100h处开始存储Start:MOV dx,100循环次数In AL,61H输入端口的初始信息and AL,11111100B使b1= b0=0(关闭扬声器)Sound:XOR AL,00000010B使b1取反,b0=0(控制扬声器的命令字)Out 61H ,AL将新的命令字送到控制端口(控制收声)MOV CX,140H设循环次数Wait1:Loop wait1(什么都不做的空循环)Dec DXjNE Sound(DX)0时转Sound处int 20H结束运行的固定用法main endp主过程结束code ends代码段结束end start例17:用汇编语言实现计算机之间的通讯接收代码之前测试数据是否准备好PUSH DX保护DX,DX将用于纯端口地址MOV DX,03FDH状态口地址COM-IN1:IN AK,DX读状态信息TEST AL,00000001BS0=0说明还未准备好数据JE COM_IN1继续测试状态MOV DX,03F8H数据口地址IN AL,DX输入数据MOV ,AL数据存入内存其他处理POP DX回复DX原有的值发送代码之前测试是否有空Push DXPUSH AX要发送的信息入栈MOV DX,03FDHCOM_OUT1:IN AL,DXTEST AL,00000010BS1=0说明数据端口不空,不能再收送JE COM_OUT1POP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新解读《CB-T 3916-1999钢索压扣》新解读
- 泥浆循环系统平面布置图
- 2025年CT模拟定位机项目提案报告模板
- 人教版2019 必修一 Unit 1 Teenage Life Reading and Thinking课件
- 动画分镜头语言设计运用探析-以毕业作品《Angle》为例
- 浙江省湖州市2022-2023学年高二下学期期末检测化学试题(含答案)
- 汽车传感器与检测技术电子教案:大气压力传感器
- 物理中考一轮复习教案 第七讲 凸透镜成像规律复习教案
- 仓库技能比武活动方案
- 安全生产奖惩记录
- 混凝土结构设计原理-004-国开机考复习资料
- 社会学概论-终结性考核-国开(SC)-参考资料
- 商业建筑空调水系统优化方案
- 海尼曼G1文本76本编辑版
- 《塑料材质食品相关产品质量安全风险管控清单》
- 南邮软件设计报告
- 医疗器械监督管理条例培训2024
- 行车安全培训安全驾驶宣传课件
- 软件安全软件漏洞
- 员工心理健康培训
- 舰艇损害管制与舰艇损害管制训练
评论
0/150
提交评论