有关汇编语言的实例设计.docx
- 文档编号:29938841
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:14
- 大小:25.04KB
有关汇编语言的实例设计.docx
《有关汇编语言的实例设计.docx》由会员分享,可在线阅读,更多相关《有关汇编语言的实例设计.docx(14页珍藏版)》请在冰豆网上搜索。
有关汇编语言的实例设计
汇编语言的实例设计
【摘要】本文研究并介绍了汇编语言,利用汇编语言编写了一下典型的实例。
第一章是汇编语言的一些简介;第二章总结了一些汇编语言的作用和特点;第三章中利用汇编语言编写了一些典型的实例来加深对汇编语言的认识。
【Abstract】
Thefirstchapterisashortintroductionassemblylanguage.Thesecondchaptersummarizessomeassemblylanguagefunctionsandfeatures.Thethirdchapterusingassemblylanguagesometypicalexamplestodeepentheunderstandingofassemblylanguage.
【关键字】汇编语言;实例设计
【keywords】AssemblyLanguage,;exampledesign
目录
1引言
2汇编语言的作用和特点
2.1汇编语言的作用
2.2汇编语言的主要特点
3汇编语言典型实例设计
3.1条件转移指令
3.2算术运算指令
3.3移位运算指令
3.4综合实例
4结束语
参考文献
1.引言
。
[2]
计算机的工作是依靠机器语言来实现的,而机器语言由于编写的程序不易读、出错率高、难以维护等原因,不能得到广泛应用。
在机器语言的基础上,用助记符代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。
这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。
由于在某些领域中汇编语言的特点较适合编写程序,因此汇编语言得到了广泛的应用。
[5]
2.汇编语言的作用和特点
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语言:
intcount=10;
intsum=0;inti=0;
while(count>0)
{
sum=sum+List[i];
count=count-1;
i=i+1;
}
汇编语言:
MOVCX,10;count
MOVAX,0;sum
MOVDI,0;偏移地址
Start:
CMPCX,0
JEend;(CX)=0时转移
ADDAX,List[DI]
SUBCX,1
ADDDI,2
JMPstart
End
例2:
统计表List中前100个字节中的“>0”,“=0”,“<0”的字节数目
C语言:
intCA=0,CX=0,CE=0;
for(inti=0;i<99:
i++)
if(List[i]>0)CA++;
elseif(List[i]==0)CE++;
elseCB++;
汇编语言
MOVCX,0
MOVCA,0
MOVCB,0
MOVCE,0
S:
CMPCX,10
JEend
MOVDI,0
ADDCX,1
CMPList[DI],0
JBEnext
ADDCA,1
JMPC
next:
CMPList[DI],0
JEnext1
ADDCB,1
JMPC
next1:
ADDCE,1
C:
ADDDI,1
JMPS
End
3.2算术运算指令
例3:
分析“ADDAX,BX”:
设执行前(AX)=35C9H,(BX)=726DH
执行后(AX)=A836H,BX不变,SF=1,PF=1,2F=0,0F=1,CF=0,AF=1
例4:
分析“SUBCX,[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:
分析“IMULBL”:
设执行前(AL)=05H,(BL)=F7H,(补)=-9
执行后(AX)=FFD3H(即-(05*09)的补码)
例6:
分析“IDIVVL”:
设执行前(AX)=FF05H,(BL)=17H,(补)=-9
执行后(AL)=F6H(-10的补,为商),(AH)=EBH(-21的补,为余数)
例7:
对长数的运算求“7H0A15BEH”±“30517A6BH”
加法:
MOVAX,15BEH
ADDAX,7A6BH
MOVDX,7H0AH
ADDDX,3051H
减法:
MOVAX,15BEH
SUBAX,7A6BH
MOVDX,7H0AH
SBBDX,3051H
3.3移位运算指令
例8:
将AL中压缩的BCD码转化为两个字节的ASCII码送BX,设(AL)=a1a0H
MOVBH,AL;备份
MOVCK,4;设移位次数
SHRBH,CL;(BH)=0a1H
ADDBH30H;调为ASCII码
MOVBL,AL;另一备份
ANDBL0FH;(BH)=0a2H
ADDBL,30H;调为ASCII码
例9:
不用乘法指令编写程序段实现AX←(AX)*10
用移位指令
SHLAX,1;*2
MOVBX,AX;备份
SHKAX,1;*2
SHLAX,1;*2
ADDAX,BX
用加法指令
ADDAX,AX
MOVBX,AX
ADDAX,AX
ADDAX,AX
ADDAX,BX
注:
(AX)*10=(AX)*(23+2)=(AX)*23+(AX)*2
=(((AX)*2)*2)*2+(AX)*2
3.4综合实例
例10:
设变量char中存储了一个字符,若七位大写则将其改为小写
MOVAL,char;
CMPAL,’A’;
JBexit;
CMPAL,’Z’;
JAexit;
ADDchar,20H;
该指令只在大写时被执行(小写字母的ASCII码比大写的大20H)
exit:
……
例11:
求DX:
AX(共32位)的相反数
NOTAX
NOTDX
ADDAX,1
ADCDX,0
例12:
求5х5矩阵的转置兼程序格式识别
DATAsegment
ADW20,50,90,30,51;
DW40,50,96,30,81
DW36,53,93,80,56
DW20,53,80,36,51
DW26,68,93,30,58
DATAends
STACKsegmentPARASTACK‘STACK’
STAPNDW20DUP(?
)
TOPLABELWORD
STACKends
Codesegment
AssumeCS:
Code,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
MOVAX,offsetTop
MOVSP,AX
MOVCX,4;
MOVBX,0;
Loop1:
pushCX;
MOVSI,2
MOVDI,2
Loop2:
pushA[BX][SI]
pushA[BX][DI]
popA[BX][SI]
popA[BX][DI]
ADDSI,2
ADDDI,2
LoopLoop2;
ADDBX,0CH;
PopCX;
LoopLoop1;
MOVAH,4CH
Int21H
codeends
endstart
例13:
以十六进制显示变量bhout中的一个字节
MOVAL,bhout;(AL)=x4x3x2x1y4y3y2y1B
andAL,1111000B;(AL)=x4x3x2x10000B
MOVCL,4;设置移位次数
SHRAL,CL;(AL)=0000x4x3x2x1B
MOVBL,bhout;(BL)=x4x3x2x1y4y3y2y1B
AndBL,00001111B;(BL)=0000y4y3y2y1B
MOVCX,2;设置循环次数(显示两个字符)
MOVBH,AL(BH)=0000x4x3x2x1B
pbh1:
CMPBH,10;
JBpbh2;(BH)<10时转移
ADDBH,37H;数字A~F→ASCII码
JMPpbh3
pbh2:
ADDBH,30H;数字0~9→ASCII码
pbh3:
MOVAH,02;带21H号程序的第2号
MOVDK,BH;被显示字符的ASCII码
INT21H;调用DOS的第21H号程序
MOVBH,BL;(BH)=0000y4y3y2y1B下一次被显示
Looppbh1
例14:
将BX中存储的数以十六进制显示出来
MOVCX,1d
PUSHCX
MOVCX,10d
PUSHCX
MOVCX,100d
PUSHCX
MOVCX,1000d
PUSHCX
MOVCX,10000d
PUSHCX
MOVCX,5;循环5次
S:
POPBP;(BP)←除数(10000,1000,1000,10,1)
MOVAX,BX;(BX)/(BX)商→DX余数→AL
MOVDX,0
DIVBP
MOVBX,X;remaindertoBX
MOVDL,AL;quotienttoDL
ADDDL,30HconverttoASCII
MOVAH,02
INT21h
LoopS
例15:
扬声器发声控制程序(61H号端口可认为是一个控制端口)
端口
b7
b6
b5
b4
b3
b2
b1
b0
61H
X
0
←约定该位取0时关闭2号定时器
控制其他设备的控制位该位是扬声器的开关(1:
打开0:
关闭)
codesegment代码段开始
mainprocfar主过程开始
assumecs:
code,ds:
code代码段和数据段重合
org100h让下列可执行命令从100h处开始存储
Start:
MOVdx,100循环次数
InAL,61H输入端口的初始信息
andAL,11111100B使b1=b0=0(关闭扬声器)
Sound:
XORAL,00000010B使b1取反,b0=0(控制扬声器的命令字)
Out61H,AL将新的命令字送到控制端口(控制收声)
MOVCX,140H设循环次数
Wait1:
Loopwait1(什么都不做的空循环)
DecDX
jNESound(DX)≠0时转Sound处
int20H结束运行的固定用法
mainendp主过程结束
codeends代码段结束
endstart
例17:
用汇编语言实现计算机之间的通讯
接收代码之前测试数据是否准备好
PUSHDX保护DX,DX将用于纯端口地址
MOVDX,03FDH状态口地址
COM-IN1:
INAK,DX读状态信息
TESTAL,00000001BS0=0说明还未准备好数据
JECOM_IN1继续测试状态
MOVDX,03F8H数据口地址
INAL,DX输入数据
MOV[…],AL数据存入内存
……其他处理
POPDX回复DX原有的值
发送代码之前测试是否有空
PushDX
PUSHAX要发送的信息入栈
MOVDX,03FDH
COM_OUT1:
INAL,DX
TESTAL,00000010BS1=0说明数据端口不空,不能再收送
JECOM_OUT1
POPAX得发送数据
MOVDX,03F8H
OUTDX,AL
POPDX
4结束语
本文对机器语言汇编语言进行了介绍。
通过一些典型的汇编语言实例设计,来探讨汇编语言的作用特点和应用前景。
参考文献:
[1]徐培福主编,计算机组成与结构,第二版,电子工业出版社,2006
[2]李铭,汇编语言与高级语言的混合编程,《电脑编程技巧与维护》,2004年10期
[3]王志军房生凯,汇编语言程序设计,大连理工大学出版社,2003
[4]刘泰康安风生,86系列微处理器进展与技术特点分析,《电脑开发与应用》,1995年01期
[5][美]SmothermanMark,HistoryofMultithreading,2005年
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 有关 汇编语言 实例 设计