barriers / 阅读 / 详情

什么是计算机语言

2023-10-04 09:53:59
TAG: 计算机
共1条回复
黑桃云

计算机语言(Computer Lnguage)指用于人与计算机之间通讯的语言。计算机语言是人与计算机之间传递信息的媒介。

计算机程序设计语言的发展,经历了从机器语言、汇编语言到高级语言的历程。

计算机语言主要分为三类:

- 低级语言

- 高级语言

- 专用语言

1、低级语言

- 机器语言、汇编语言和符号语言。

- 汇编语言源程序必须经过汇编,生成目标文件,然后执行。

2、高级语言

- BASIC(True basic、Qbasic、Virtual Basic)、C、PASCAL、FORTRAN、智能化语言(LISP、Prolog)等等。

- 高级语言源程序可以用解释、编译两种方式执行。通常用后一种。

我们使用的C语言就是使用的后者。

3、专用语言

CAD系统中的绘图语言和DBMS的数据库查询语言。

1.1.机器语言

电子计算机所使用的是由"0"和"1"组成的二进制数,二进制是计算机的语言的基础。计算机发明之初,人们只能降贵纡尊,用计算机的语言去命令计算机干这干那,一句话,就是写出一串串由"0"和"1"组成的指令序列交由计算机执行,这种计算机能够认识的语言,就是机器语言。使用机器语言是十分痛苦的,特别是在程序有错需要修改时,更是如此。

因此程序就是一个个的二进制文件。一条机器语言成为一条指令。指令是不可分割的最小功能单元。而且,由于每台计算机的指令系统往往各不相同,所以,在一台计算机上执行的程序,要想在另一台计算机上执行,必须另编程序,造成了重复工作。但由于使用的是针对特定型号计算机的语言,故而运算效率是所有语言中最高的。机器语言,是第一代计算机语言。

1.2.汇编语言

为了减轻使用机器语言编程的痛苦,人们进行了一种有益的改进:用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串,比如,用"ADD"代表加法,"MOV"代表数据传递等等,这样一来,人们很容易读懂并理解程序在干什么,纠错及维护都变得方便了,这种程序设计语言就称为汇编语言,即第二代计算机语言。然而计算机是不认识这些符号的,这就需要一个专门的程序,专门负责将这些符号翻译成二进制数的机器语言,这种翻译程序被称为汇编程序。

汇编语言同样十分依赖于机器硬件,移植性不好,但效率仍十分高,针对计算机特定硬件而编制的汇编语言程序,能准确发挥计算机硬件的功能和特长,程序精炼而质量高,所以至今仍是一种常用而强有力的软件开发工具。

1.3.高级语言

1.3.1.高级语言的发展

从最初与计算机交流的痛苦经历中,人们意识到,应该设计一种这样的语言,这种语言接近于数学语言或人的自然语言,同时又不依赖于计算机硬件,编出的程序能在所有机器上通用。经过努力,1954年,第一个完全脱离机器硬件的高级语言--FORTRAN问世了,40 多年来,共有几百种高级语言出现,有重要意义的有几十种,影响较大、使用较普遍的有FORTRAN、ALGOL、COBOL、BASIC、LISP、SNOBOL、PL/1、Pascal、C、PROLOG、Ada、C++、VC、VB、Delphi、JAVA等。

特别要提到的:在C语言诞生以前,系统软件主要是用汇编语言编写的。由于汇编语言程序依赖于计算机硬件,其可读性和可移植性都很差;但一般的高级语言又难以实现对计算机硬件的直接操作(这正是汇编语言的优势),于是人们盼望有一种兼有汇编语言和高级语言特性的新语言——C语言。

高级语言的发展也经历了从早期语言到结构化程序设计语言,从面向过程到非过程化程序语言的过程。相应地,软件的开发也由最初的个体手工作坊式的封闭式生产,发展为产业化、流水线式的工业化生产。

60年代中后期,软件越来越多,规模越来越大,而软件的生产基本上是人自为战,缺乏科学规范的系统规划与测试、评估标准,其恶果是大批耗费巨资建立起来的软件系统,由于含有错误而无法使用,甚至带来巨大损失,软件给人的感觉是越来越不可靠,以致几乎没有不出错的软件。这一切,极大地震动了计算机界,史称"软件危机"。人们认识到:大型程序的编制不同于写小程序,它应该是一项新的技术,应该像处理工程一样处理软件研制的全过程。程序的设计应易于保证正确性,也便于验证正确性。1969年,提出了结构化程序设计方法,1970年,第一个结构化程序设计语言--Pascal语言出现,标志着结构化程序设计时期的开始。

80年代初开始,在软件设计思想上,又产生了一次革命,其成果就是面向对象的程序设计。在此之前的高级语言,几乎都是面向过程的,程序的执行是流水线似的,在一个模块被执行完成前,人们不能干别的事,也无法动态地改变程序的执行方向。这和人们日常处理事物的方式是不一致的,对人而言是希望发生一件事就处理一件事,也就是说,不能面向过程,而应是面向具体的应用功能,也就是对象(Object)。其方法就是软件的集成化,如同硬件的集成电路一样,生产一些通用的、封装紧密的功能模块,称之为软件集成块,它与具体应用无关,但能相互组合,完成具体的应用功能,同时又能重复使用。对使用者来说,只关心它的接口(输入量、输出量)及能实现的功能,至于如何实现的,那是它内部的事,使用者完全不用关心,C++、Virtual Basic、Delphi就是典型代表。

高级语言的下一个发展目标是面向应用,也就是说:只需要告诉程序你要干什么,程序就能自动生成算法,自动进行处理,这就是非过程化的程序语言。

相关推荐

汇编语言是一种什么程序设计语言

汇编语言是一种工具程序设计语言,用于将汇编语言源程序转换为机器语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的不同平台之间不可直接移植。许多汇编程序为程序开发、汇编控制、辅助调试提供了额外的支持机制。有的汇编语言编程工具经常会提供宏,它们也被称为宏汇编器。汇编语言不像其他大多数的程序设计语言一样被广泛用于程序设计。在今天的实际应用中,它通常被应用在底层,硬件操作和高要求的程序优化的场合。驱动程序、嵌入式操作系统和实时运行程序都需要汇编语言。
2023-09-11 01:05:091

程序设计语言中汇编语言速度最快,对吗?

所有语言最终都要转换成汇编,因为各种语言只是人类能看懂,机器看不懂。所以各种语言都要转汇编
2023-09-11 01:05:202

汇编语言是一种什么程序设计语言?

A
2023-09-11 01:05:375

汇编语言程序设计步骤有那几步_汇编语言编程步骤有哪些

汇编语言程序设计步骤:1、分析问题,抽象出描述问题的数据模型2、确定问题的算法思想3、画出流程图或结构图4、分配存储器和工作单元(寄存器)5、逐条编写程序6、静态检查,上机调试例:编程查找考生的最高分,假设所有考生分数已存入计算机内存1、分析问题根据条件、特点、规律→数学模型本例分数已给定为0~200之间的整数集合(考虑加试分),记为{S},找max{S}(注:简单问题不一定写数学模型)2、确定算法思想最好利用现成算法和程序设计方法,若无,则需根据实践经验总结算法思想如本例,从成绩单第一分数往下看,边看边比较,记住较高分,舍弃较低分,直至看完,最高分存于脑中归纳算法思想:建立数据指针并指向数据区首地址将第一数取入寄存器(如AL),与下一数比较,若下一数大则将其取入寄存器,否则调整指针,再与下一数比较,重复上述过程,直至比较完毕,寄存器中即最高分读分数用MOV指令,比较用CMP指令,分析判断用条件转移指令3、画流程图或结构图有逻辑流程、算法流程、程序流程等,复杂问题需画模块结构本例简单,只画出程序流程图(用模块化结构的N-S流程图表示):本例的N-S流程图图中初始化包括:设一个计数器,将分数个数减一后送计数器,每比较一次减一,至零查找结束;建立一个指针指向数据区开始初始化取第一数到寄存器与下一数比较下一数大?是否取大数到寄存器修改指针,计数次数减一返回到循环体开始,直到计数次数为0退出循环结束4、分配存储器空间和工作单元(寄存器)定义数据段、堆栈段、代码段等工作单元一般用寄存器本例:分数放数据段,建100字节堆栈空间,BX作数据指针,CX作计数器,AL放最高分5、逐条编写程序DATASEGMENTFENDB85,90,60,75,87,35,80,78,96,82;存分数MAXDB?;存最高分DATAENDSSTACKSEGMENTPARASTACK‘STACK"DB100DUP(?);100字节堆栈STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTARTPROCFARPUSHDSMOVAX,0PUSHAX;为了返回DOSMOVAX,DATAMOVDS,AX;置数据段寄存器MOVBX,OFFSETFEN;置数据指针MOVCX,MAX-FEN;置计数器初值DECCX;N个分数比较N-1次MOVAL,[BX];取第一个分数LOP:INCBX;调整指针CMPAL,[BX];与下一数比较JAENEXT;大于等于则转MOVAL,[BX];否则取下一数NEXT:LOOPLOP;计数器减一,;不为零转LOPMOVMAX,AL;存放最高分RET;返回DOSSTARTENDPCODEENDSENDSTART6、静态检查,上机调试选用指令尽量字节少,使其执行速度快易错处应重点查,如比较次数、转移条件等确信无错后方可上机调试
2023-09-11 01:05:541

汇编语言程序设计_汇编语言程序设计第五版答案钱晓捷

一.1.ADDBX,AX或ADDBL,AL;类型配对2.MOVAX,0A999H3.MOVAX,0F8H4.MOVAX,1234H或MOVAL,12H5.MOVAX,[BX]6.MOVDS,AX;DS不能直接存立即数7.ADD[BX],10;对8.PUSHAX;push不能直接push立即数9.INAL,DX10.OUT40H,AL11.MULAL;mul不能直接跟立即数12.MOV[DI],AX;mov不能两个都是内存13.ADDDI,AX14.MOVDS,AX;CS不可以改15.SUB10[SI],AX;sidi不可以同时出现二.SUB[BP],BX寄存器间接寻址方式;30400H;MOV[BXDI],SI基址变址寻址方式;10400H;ADDES:[SI],DI寄存器相对寻址方式;20200H;MOV10[BX],DI寄存器相对寻址方式;10100H;MOVDS:[100H],BX相对基址变址寻址方式;10100H三.3456H;5678H;1234H;5678H;四.1234H;2468H;0008H;1008H;0804H;0408H;0508H;0508H五.01H,31H,0FFH,00H,78H,56H,FFH,FFH,00H,24H,00H,0BH,00H,0BH,19H,09H,09H(从左往右地址变大)AX=3101H,BX=0023H六.1.汇编语言:()是面向机器的程序设计语言。汇编:把汇编语言翻译成机器语言的过程称为汇编。汇编程序:把汇编语言书写的程序翻译成与之等价的机器语言程序的翻译程序。汇编程序输入的是用汇编语言书写的源程序,输出的是用机器语言表示的目标程序。汇编语言是为特定计算机或计算机系列设计的一种面向机器的语言,由汇编执行指令和汇编伪指令组成。采用汇编语言编写程序虽不如高级程序设计语言简便、直观,但是汇编出的目标程序占用内存较少、运行效率较高,且能直接引用计算机的各种设备资源。它通常用于编写系统的核心部分程序,或编写需要耗费大量运行时间和实时性要求较高的程序段。2.3.单独cmpsb就是逐一比较8个位;加上rep,循环比较,还是比较这8位啊4.是指在计算机执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的时间处理程序。待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程。5.宏和子程序都是为了简化源程序的编写,提高程序的可维护性,但是它们二者之间存在着以下本质的区别:1、在源程序中,通过书写宏名来引用宏,而子程序是通过CALL指令来调用;2、汇编程序对宏通过宏扩展来加入其定义体,宏引用多少次,就相应扩展多少次,所以,引用宏不会缩短目标程序;而子程序代码在目标程序中只出现一次,调用子程序是执行同一程序段,因此,目标程序也得到相应的简化;3、宏引用时,参数是通过“实参”替换“形参”的方式来实现传递的,参数形式灵活多样,而子程序调用时,参数是通过寄存器、堆栈或约定存储单元进行传递的;4、宏引用语句扩展后,目标程序中就不再有宏引用语句,运行时,不会有额外的时间开销,而子程序的调用在目标程序中仍存在,子程序的调用和返回均需要时间。总之,当程序片段不长,速度是关键因素时,可采用宏来简化源程序,但当程序片段较长,存储空间是关键因素时,可采用子程序的方法来简化源程序和目标程序。七.
2023-09-11 01:06:111

汇编语言顺序程序设计:从键盘输入一个字符串,讲其中的小写字母转换为大写字母,然后原样输出。

汇编语言程序设计:由键盘输入一个字符串,回车结束。将其中的小写字母转换为大写输出。其它符号不变。
2023-09-11 01:06:201

汇编语言程序设计程序结构可分为哪四种

dfhdf
2023-09-11 01:06:485

汇编语言程序设计的一般步骤是什么?

汇编语言程序设计的基本步骤 了解了汇编语言指令的功能和用法,了解了汇编语言程序的编写格式,就可以编制完整的汇编语言程序了。一个程序通常具有顺序、分支、循环和子程序4种结构形式。顺序程序结构就是指完全按顺序逐条执行的指令序列。在程序设计过程中,顺序结构大量存在,屡见不鲜。但一个完整的程序只是逐条去执行指令,这非常少见。常见的程序结构,是上述4种结构的混合体。  一般来说,编制一个汇编语言程序的步骤如下:  (1) 分析题意,确定算法或算法思想。  算法是指解决问题的方法和步骤。比如现有的一些计算方法和日常生活中解决问题的逻辑思维推理方法等。  (2) 根据算法画出流程图,简单的情况也可不画。  画出描述算法的流程图,可以首先从图上检验算法的正确性,减少出错的可能,使得动手编写程序时的思路更加清晰。  (3) 分配存储空间和工作单元,合理地使用寄存器。  分配存储空间和工作单元,是指存储空间的分段和数据定义。另外,由于寄存器的数量有限,编写程序时经常会感到寄存器不够用。因此,对于字节数据,要尽量使用8位寄存器。而采用适当的寻址方式,也会达到节省寄存器的目的。  (4) 根据流程图编写程序。  这是编制汇编语言程序最为重要的一步。算法里规定的功能,是要通过一条条指令描述出来的。为了提高编程能力,对于初学者,一是要多阅读现有的程序,以学习别人的编程经验;而更为重要的是,必须多亲自动手编写,不要怕失败,只有通过无数次失败,才能从中积累自己的编程经验。  (5) 上机调试运行程序。  通过汇编的源程序,只能说明它里面不存在语法错误。但是它是否能达到算法所要求的预期效果,还必须经过上机调试,用一些实验数据来测试,才能够真正地得出结论。可以这么说,即使是一个非常有经验的程序员,也没有百分之百的把握说他编写的程序一次就成功。 用流程图表示算法 流程图用一些图形框来代表各种操作。用图形表示算法,直观形象,可以用来帮助人们对算法的理解。下图给出了一些常用的流程图符号。上图中的判断框(菱形)用来对一个给定的条件作出判断,以决定如何执行其后的操作。它有一个入口,两个出口,如下图(a)所示。连接点(圆圈)是用来将画在不同地方的流程线连接起来。例如在下图(b)里,有两个圈里写着数字1的圆圈,它表示是从左边的1出来,进到右边图的1里(这由流程线的方向给出)。可以看出,这两个点其实就是同一个点,只是由于画不下而分开来画的。用连接点,可以避免流程图中的流程线相互交叉或过长,从而使流程图清晰。注释框不是流程图中必需的部分。在流程图中使用它,是为了对流程图中的某些框的操作做一些必要的说明,以便使人们能够更好地通过流程图来理解算法。处理框反映做些什么样的操作,如把某个单元的内容送入某个寄存器,从某个存储单元取出数据等。它是流程图里最为本质的、出现最多的图形框。输入/输出框反映程序的输入和输出情况。计算机程序无外乎接收数据,进行处理,然后加以输出,所以输入/输出框是必不可少的。
2023-09-11 01:07:441

汇编语言程序设计的四个主要步骤(主要步骤)

1、画框图2、编制代码3、调试编译4、运行测试。
2023-09-11 01:07:572

汇编语言程序设计

比较
2023-09-11 01:08:082

MCS-51汇编语言源程序设计中,下列符号中不能用作标号的有()。

MCS-51汇编语言源程序设计中,下列符号中不能用作标号的有()。 A.LOOPB.MOVC.LD1D.ADD1正确答案:MOV
2023-09-11 01:08:151

汇编语言程序设计

一、MOV DI,0000H ;让ds:di指向字符串MOV CX,n ;设置循环次数MOV AL,"A" ;设置扫描的字母CLD ;设置df为0REPNE SCASB ;开始扫描JZ FOUND ;找到则跳转MOV DI,00H ;没找到则让di指向字符串开头FOUND: MOV BX,DI ;让bx记录A所在位置HLT ;处理器暂停二、TEST AX, 0001H ;判断最后一位是否为一JZ EVEN ;为一,是奇数,跳转ADD AX,1 ;是偶数,加一EVEN: SHR AX,1 ;右移一位,相当于除2三、 MOV CX,100 ;设置循环次数 MOV SI,00FFH ;di指向字符串的前一个字节L1:INC SI CMP BYTE PTR[SI],"$" LOOPNE L1 ;di指向下一个字节,如果它不是$而且循环次数未到,则转到L1继续循环; SUB SI,0100H MOV CX,SI MOV SI,0100H ;指向第一个字符 MOV AL,[SI] ;把第一个字符送入al DEC CX ;指向前一个字符 L2: INC SI ;指向下一个字符 ADD AL,[SI] ;把字符加到al LOOP L2 ;如果次数没到则转L2继续 HLT ;处理器暂停
2023-09-11 01:08:251

汇编语言程序设计P93

1 XOR AL,BL用处是通过异或后最低位是1还是0,判断这两个数是一个为奇数另一个为偶数(异或结果AL最低位为1),还是同时为奇数或者同时为偶数(异或结果AL最低位为0) 2 TEST AL,01H TEST是测试指令,实际完成的是AND运算,但结果不回送;这句的意思是测试AL最低位是否为0 ,如果结果为0,则说明AL最低位为0.此条指令相当于TEST AL,0000 0001B3 JZ SAME JZ的意思是结果为零的时候转移(Jump if zero) SAME是目的指令的标号,表明要转移到的指令所在的位置4 XCHG BL,Z1 MOV Z2,BL 通过BL实现两个变量Z1和Z2交换的功能整个程序注释如下:DATA SEGMENT Z1 DB 87H ;定义变量Z1Z2 DB 64H ;定义变量Z2DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA ;数据段物理定位MOV DS,AX MOV AL,Z1 ;将第一个变量取到AL中MOV BL,Z2 ;将第二个变量取到BL中XOR AL,BL ;将这两个变量进行异或后给ALTEST AL,01H ;判断异或后AL的最低位是否为0JZ SAME ;如果为0,说明两个变量最低位不同,即有一个为奇数,另一个为偶数,则转到标号为SAME的指令去执行TEST BL,01H ;否则说明两个变量最低位相同,即两个变量都是奇数或者都是偶数,此条指令的作用就是判断第二个数是否为偶数JZ DONE ;若为偶数,则转移到标号为DONE的指令执行XCHG BL,Z1 ;若为奇数,则将BL中的第二个数和Z1中的第一个数交换MOV Z2,BL;再将BL中交换后的第一个数传送给Z2,实现Z1和Z2中的两个数的互换 JMP DONE ;无条件转移到标号为DONE的指令执行SAME: TEST BL,01H ;此条指令的作用就是判断第二个数是否为偶数JZ DONE ;若为偶数,则转移到标号为DONE的指令执行DEC Z1;若为奇数,则将Z1中的数减1 DEC Z2; 将Z2中的数减1 DONE: MOV AH,4CH ;结束程序,返回系统INI 21H CODE: ENDS END START
2023-09-11 01:08:571

汇编语言程序设计(高起专) 求大神帮助回答以下两道题

真无聊!我们学习汇编语言,能够把握住“指令系统”就很了不起了。学习这些错误干嘛?这些难得一见的错误指令,不都是垃圾吗?这些,是“知识”吗?学校,应该教什么,他们自己还没搞清楚!
2023-09-11 01:09:071

《汇编语言程序设计》pdf下载在线阅读,求百度网盘云资源

《汇编语言程序设计》(张晓明)电子书网盘下载免费在线阅读链接:https://pan.baidu.com/s/1w_IrReaLhyxxxFtgPwYz9w 密码:zjxn书名:汇编语言程序设计作者:张晓明出版年份:2009-1页数:284内容简介:《汇编语言程序设计》以Microsoft宏汇编MASM为背景,系统讲述了8086指令系统及汇编语言程序设计的方法和技术,介绍了32位80x86系列微处理器指令及其程序设计。全书共分10章,第1章介绍基础知识;第2、3章介绍8086微处理器的基本结构、寻址方式及汇编语言程序格式;第4~7章叙述基本指令系统及顺序结构、分支结构、循环结构、子程序等设计方法;第8章介绍宏与多模块程序设计技术;第9章介绍输入/输出和中断程序设计;第10章介绍32位80x86微处理器指令及其程序设计方法。全书提供了大量程序实例,每章后均附有习题。
2023-09-11 01:09:151

简单介绍一下汇编语言程序设计

汇编比较好的书有:王爽老师《汇编语言》,杨季文老师的《80X86汇编语言程序设计》。看汇编不看保护模式的程序设计的话,汇编也就白学了,所以保护模式非常重要。当然这也是汇编一些应用的基础,比如软件解密,驱动的编写。有了好书,肯定会事半功倍的。这些书上也会肯定会有HELLO WORLD的实现。学习汇编首先从数制学起,各种数制的转换肯定也是非常重要的基础。然后学习基本的8086指令,程序设计的3种语句形式(顺序,循环,选择)接着是学习调用DOS的一些系统功能实现简单的程序,最后进入了最重要的一部分保护模式的程序设计,开始学习80386指令等等,我就不详说了,路漫漫其修远兮。以上还只是停留在DOS时代,还没有进入复杂的windows世界。现在的windows都是VISTA了。汇编其实也不是这么神秘,不过是很多人习惯了高级语言的东西,再看汇编就很不习惯了,因为很多事情都得自己做。包括栈的平衡等。楼主既然一定想做,那么就回答了2个问题,what,why。接下来就死haw了,编程的学习当时是要靠多上机练习。轻松汇编,这是一个大学生开发的汇编集成环境,初学的时候可以在上面用。学习编程,最重要的是调试,汇编代码级的调试也是软件解密的关键。所以学了汇编,比较高的境界就是看懂别人的程序,当然不是从源代码,而是反汇编代码。保护模式很重要,因为在windows下,自己肯定是弄不了保护模式了,我不知道能不能在cmd下面调用从实模式到保护模式的程序,没试过,应该是不行吧。如果不行的话,可以装个虚拟机,里面安装DOS,在windows里面写好程序后,做成ISO文件,再进入DOS,编译执行保护模式程序,我是这么做的,不知道还有其他更简便的方法没有,你可以自己摸索下。以上是个人意见哈,供参考。
2023-09-11 01:09:291

汇编语言程序设计习题

1.写出下列程序段执行的结果,(AL)=? (DL)=? 并指出此程序段完成的是什么功能? MOV CL, 4 MOV AL, 87d=57H MOV DL, AL AND AL, 0FH OR AL, 30H SHR DL, CL OR DL, 30H (AL)=37H (DL)=35H程序段完成功能是:把AL中的16进制数高位送DL,移位取出低位,再分别转化为对应的ASCII码.2.假定DS=2100H,BX=0100H,SI=0002H;[21100H]=12H,[21101H]=34H,[21102H]=56H,[21103H]=78H。2100:100H=12H,34H,56H,78H分析下列指令执行后寄存器的内容。 (1) MOV AX,[101H] ;ax=5634H(2) MOV AX,[BX+2] ;ax=[0102H]=7856H(3) MOV AL,[BX][SI+1] ;al=[0103H]=78H(4) MOV AX,100H[SI] ;ax=[0102H]=7856H3.识别下列指令正确与否,对错误指令,说明出错的原因。 (1) MOV DS,100 × ;数据段不允许用立即数赋值(2) MOV [1000H],23H ×;立即数送入内存需指明是字还是字节(3) MOV [1000H],[2000H] ×;源和目标不能同为内存数(4) MOV DATA,1133H ? ;如用DATA定义过数据段,DATA就不能再用作变量名(5) MOV 1020H,DX ×;目标不能是立即数(6) MOV AX,[0100H+BX+BP] ×;寻址时,BX、BP只能用一个(7) MOV CS,AX ×;CS不能直接赋值(8) PUSH AL ×;堆栈不能压入字节,只能压入字(32位压入双字)(9) PUSH WORD PTR[SI] √(10) IN AL,378H ×;端口寻址大于0FFH,端口号源要放入DX(11) OUT 80H,AX √(12) MOV CX,[AX+SI]×;AX不能用于内存寻址
2023-09-11 01:09:391

汇编语言程序设计

发声; 按键说明:; 1、不输入任何数字,直接按回车键,结束程序,返回操作系统; 2、每次最多能够输入N(本程序,N=8)个数字(1~8); 3、不足8位数字的,按回车结束输入; 本程序在MASMPlus 1.2集成环境下通过编译,经过调试,运行正确。Code Segment Assume CS:Code,DS:CodeCR EQU 000DHLF EQU 000AH; -------------------------------------; 功能:显示指定地址(Str_Addr)的字符串; 入口:; Str_Addr=字符串地址(要求在数据段); 用法: Output Str_Addr; 用法举例:Output PromptStrOutput MACRO Str_Addr lea dx,Str_Addr mov ah,9 int 21h EndM; -------------------------------------; 功能:输出一个字符 ; 入口:dl=要显示的字符 Output_Chr proc Near push ax mov ah,02h int 21h pop ax ret Output_Chr endp ; -------------------------------------; 功能:输出回车换行Output_CTLF proc Near push ax push dx mov ah,02h mov dl,0dh int 21h mov dl,0ah int 21h pop dx pop ax retOutput_CTLF endp ; -------------------------------------; Subroutine 延时指定的时钟嘀嗒数; 入口:; Didas=时钟嘀嗒数(1秒钟约嘀嗒18.2次,10秒钟嘀嗒182次。若延时不是秒的10数次倍,误差稍微大点)Delay Proc Near push dx push cx xor ax,ax int 1ah mov Times,dx mov Times[2],cxRead_Time: xor ax,ax int 1ah sub dx,Times sbb cx,Times[2] cmp dx,Didas jb Read_Time pop cx pop dx ret Times dw 0,0Delay EndP ; -----------------------------------------; 功能:从键盘输入N位数字; 入口:N=数字位数;di=保存输入的数字首地址; 出口:cx=实际接收的数字位数Input_Digit Proc Near cld mov cx,N@@Input: mov ah,1 int 21h cmp al,CR jz @@Return cmp al,"1" jb @@Input cmp al,"8" ja @@Input stosb loop @@Input@@Return: mov ax,N sub ax,cx xchg ax,cx retInput_Digit EndP; -----------------------------------------; 入口参数; SI=声音频率地址; CX=时间Music Proc Near in al,61h push ax or al,3 out 61h,al ;接通扬声器 push cx push dx push si mov al,0b6h out 43h,al mov dx,12h mov ax,348ch div word ptr [si] out 42h,al mov al,ah out 42h,al in al,61h mov ah,al or al,3 out 61h,al mov cx,3314 push ax @@Waitf1: in al,61h and al,10h cmp al,ah jz @@Waitf1 mov ah,al loop @@Waitf1 pop ax call Delay ;延时 mov al,ah out 61h,al ;关闭扬声器 pop si pop dx pop cx pop ax out 61h,al retMusic EndP; -----------------------------------------Didas equ 18 ;延时(时钟嘀嗒次数)frequency dw 262,294,330,349,392,440,492,524 ;频率值; dw 441,495,556,589,661,742,833 ;从其它音乐程序抄来的频率值; dw 882,990,1112,1178,1322,1484,1655 ;同上行N equ 8PromptStr db "Please Enter ",N or 30h," digitals(1-8): $"Number db N dup(?)Press_Key db CR,LF,CR,LF,"Press any key to exit...$" ; -----------------------------------------Start: push cs pop ds push cs pop es ;使数据段、附加段与代码段同段Input_Str: Output PromptStr ;提示输入N位数字 lea di,Number ;数字保存地址 call Input_Digit ;从键盘接收数字 call Output_CTLF ;输出一个回车、换行 call Output_CTLF ;输出一个回车、换行 jcxz Exit_Proc lea bx,Number ;数字保存地址Sound: push cx push bx mov dl,[bx] ;读入一个数字 call Output_Chr ;屏幕显示这个数字 and dl,0fh dec dl shl dl,1 mov bl,dl mov dl,0eh call Output_Chr ;显示一个音乐符号 mov dl,20h call Output_Chr ;显示一个空格 lea si,frequency[bx] ;对应的频率值地址 call Music ;激活扬声器,使之发出指定频率、指定时长的声音 pop bx inc bx ;增1,处理下一个音符 pop cx loop Sound call Output_CTLF ;输出一个回车、换行 call Output_CTLF ;输出一个回车、换行 jmp Input_Str; -------------------------------------Exit_Proc: Output Press_Key ;提示操作完成,按任意键结束程序 mov ah,1 int 21h mov ah,4ch ;结束程序 int 21hCode ENDS END Start ;编译到此结束
2023-09-11 01:09:502

汇编语言程序设计题目

AX是改单片机的累加器或者工作寄存器吗?
2023-09-11 01:10:022

汇编语言 子程序设计

数放在ax里面 MOV AX,DATAS MOV DS,AX mov ax,0f2h mov cl,4 push ax shl ax,cl cmp ah,9 ja n1 add ah,30h mov dl,ah mov ah,02h int 21h jmp n2n1: add ah,37h mov dl,ah mov ah,02h int 21hn2: pop ax and al,0fh cmp al,9 ja n3 add al,30h mov dl,al mov ah,02h int 21h jmp n4n3: add al,37h mov dl,al mov ah,02h int 21hn4: mov ah,4ch int 21h上面是16进制输出
2023-09-11 01:10:122

简单的汇编语言程序设计!加急!

MOV 32H, 30HMOV A, 30HCLR CSUBB A, 31H ;(30H)-(31H)JC EXIT ;不够减转移MOV 32H, 31H ;否则31H才是小数EXIT:END---------------------------2. 将片内RAM单元中 30H~37H 的数据送到片外RAM的 40H~47H。MOV R0, #30HMOV R1, #40HMOV R2, #8LOOP:MOV A, @R0MOVX @R1, AINC R0INC R1DJNZ R2, LOOPEND
2023-09-11 01:10:331

汇编语言是用什么软件编写啊?

任何文本编辑器可以编写汇编,但是要用专门的程序来进行编译和链接,一般8086的汇编都用masm来进行编译,具体的参考说明手册.
2023-09-11 01:10:522

汇编语言程序设计问题帮忙解决下

内存地址:数据10000H:0210001H:20/地址10000H中存放字数据2002H10002H:4D10003H:41|从地址10002H开始存放字符串"MASM"的ASCII代码,10004H:53|每个字符占用一个字节,分别为"M"、"A"、"S"、"M"。10005H:4D/10006H:7810007H:56|地址10006H存放双字数据12345678H10008H:34|10009H:12/数据的高字节存放在地址高的存储单元里,依此类推。整个数据的存储地址是数据的最低字节的存放地址。
2023-09-11 01:10:591

汇编语言程序设计P83

1 ORG 1000H 的意思是定义起始偏移地址为1000H 2 NUM4 DW NUM1的意思是将NUM1的地址作为NUM4的内容3 MOV AX,SEG 数据段段名 SEG 数据段段名意思是取数据段的段值,不用中文汇编 4 MOV BX,NUM2+2 ;我认为BX=3344H 5 MOV BL,BYTE PTR NUM3 ;BL=68H PTR是属性操作符,PTR的英文全称是 这句的意思是将字节属性的NUM3单元中的内容传送给BL 6 MOV BL,NUM1[2*2] ;BL=90H “[]”是相对寻址,MOV BL,NUM1[2*2]相当于MOV BL,[NUM1+2*2] [2*2]可以表示为[4] 7 MOV BX,NUM2[4] ;BX=5566H NUM2只表示这三个数的起始地址,在内容中数据是依次存放的,可以向下或向上取其它值8 MOV BX,3 意思是把十进制的3赋给BX 9 MOV BL,NUM1[BX] ;BL=78H BX是个16位通用寄存器,[BX]是将BX的值作为内存单元的地址,此条指令的作用是将DS段中偏移地址为 NUM1+BX单元中的内容传送给BL10 MOV SI,OFFSET NUM1 OFFSET的意思取偏移地址,这句的意思是将内存单元NUM1的偏移地址赋给SI 11 MOV BX,[SI+1] ;BX=5634H SI是个16位通用寄存器,[SI+1] 是将DS段偏移地址为SI+1中的内容传送给BX12 MOV BX,NUM4 ;BX=1000H 结果是将NUM4的内容即NUM1的起始地址传送给BX,所以BX=1000H octal表示八进制数,为了避免八进制数的后缀O与数字0混淆,所以将O改为Q
2023-09-11 01:11:091

单片机汇编语言程序设计

ORG 0000H LJMP MAIN ORG 0030H MAIN: CLR P3.5 NOP NOP SETB P3.5 SETB P1.0 CLR P1.1 CLR P3.3 MOV A,#76H MOV P2,A SETB P3.3 NOP NOP CLR P3.3 LCALL KEY MOV DPTR,#0200H MOV R2,A ADD A,R2 ADD A,R2 JMP @A+DPTR KEY: MOV A,P0 CPL A JZ KEY LCALL DELAY MOV A,P0 CPL A JZ KEY MOV R5,#08H KEYS: RLC A JC HASKEY DJNZ R5,KEYS SJMP KEY HASKEY: MOV A,P0 CPL A JNZ HASKEY DEC R5 MOV A,R5 RET ORG 0170H DELAY: MOV R6,#14H DL1: MOV R7,#0FFH DL2: DJNZ R7,DL2 DJNZ R6,DL1 RET
2023-09-11 01:11:201

汇编语言程序设计 画出下列数据段定义的内存储单元分配图。要求: (1)指出各变量的偏移地址

DAT1 1000h:0 1,2,18h,34h,35h,36h,45h,0f0hDAT2 1000h:8 0ch,0,0dh,0,0fbh,0ffhCOUNT=7 1000h:0eh 12h,0,78h,56hDAT3 1000h:12h 0,3,0,0,8,0,0,0
2023-09-11 01:11:381

汇编语言是一种什么程序设计语言

汇编语言是一种用于电子计算机、微处理器、微控制器或其他可编程设备的低级语言,也称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。同时,因为资源的稀缺性,计算机运行的效率也成为那个时代工程师追求的目标。为了更高效地使用计算机,人们设计了高级编程语言,以满足人们对高效简洁编程语言的追求。在编程语言被机器语言和汇编语言更新之后,人们发现了限制程序普及的关键因素——程序的可移植性。有必要设计一个可以独立于计算机硬件在不同机器上运行的程序。这样可以避免很多重复的编程过程,提高效率。同时,这种语言应该接近数学语言或人类自然语言。20世纪50年代,计算机还很匮乏的时候,第一个高级编程语言诞生了。那时候计算机的成本很贵,但是每天的计算量是有限的。如何有效利用计算机有限的计算能力,成为当时人们面临的问题。
2023-09-11 01:12:011

汇编语言程序设计步骤 有那几步

汇编语言程序设计步骤:1、 分析问题,抽象出描述问题的数据模型 2、 确定问题的算法思想 3、 画出流程图或结构图 4、 分配存储器和工作单元(寄存器) 5、 逐条编写程序 6、 静态检查,上机调试 例:编程查找考生的最高分,假设所有考生分数已存入计算机内存.1、 分析问题 根据条件、特点、规律 →数学模型 本例分数已给定为0~200之间的整数集合(考虑加试分) ,记为{S},找max{S}(注:简单问题不一定写数学模型) .2、 确定算法思想 最好利用现成算法和程序设计方法,若无,则需根据实践经验总结算法思想.如本例,从成绩单第一分数往下看,边看边比较,记住较高分,舍弃较低分,直至看完,最高分存于 脑中.归纳算法思想:建立数据指针并指向数据区首地址.将第一数取入寄存器(如AL) ,与下一数比较,若下一数大则将其取入寄存器,否则调整指针,再与下一数比较,重复上述 直至比较完毕,寄存器中即最高分.读分数用MOV指令,比较用CMP指令,分析判断用条件转移指令.3、 画流程图或结构图 有逻辑流程、算法流程、程序流程等,复杂问题需画模块结构.本例简单,只画出程序 流程图(用模块化结构的N-S流程图表示) :本例的N-S流程图 图中初始化包括:设一个计数器,将分数个数减一后送计数器,每比较一次减一,至 零查找结束;建立一个指针指向数据区.开始 初始化 取第一数到寄存器 与下一数比较 下一数大?是 否 取大数到寄存器 修改指针,计数次数减一 返回到循环体开始,直到计数次数为0退出循环 结束 4、 分配存储器空间和工作单元(寄存器) 定义数据段、堆栈段、代码段等.工作单元一般用寄存器.本例:分数放数据段,建100 字节堆栈空间,BX作数据指针,CX作计数器,AL放最高分.5、 逐条编写程序 DATA SEGMENT FEN DB 85,90,60,75,87,35,80,78,96,82…… ;存分数 MAX DB ;存最高分 DATA ENDS STACK SEGMENT PARA STACK ‘STACK" DB 100 DUP(?) ;100字节堆栈 STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START PROC FAR PUSH DS MOV AX,0 PUSH AX ;为了返回DOS MOV AX,DATA MOV DS,AX ;置数据段寄存器 MOV BX,OFFSET FEN ;置数据指针 MOV CX,MAX-FEN ;置计数器初值 DEC CX ;N个分数比较N-1次 MOV AL,[BX] ;取第一个分数 LOP:INC BX ;调整指针 CMP AL,[BX] ;与下一数比较 JAE NEXT ;大于等于则转 MOV AL,[BX] ;否则取下一数 NEXT:LOOP LOP ;计数器减一,;不为零转LOP MOV MAX,AL ;存放最高分 RET ;返回DOS START ENDP CODE ENDS END START 6、 静态检查,上机调试 选用指令尽量字节少,使其执行速度快.易错处应重点查,如比较次数、转移条件等.确信无错后方可上机调试.
2023-09-11 01:12:341

汇编语言程序设计的一般步骤是什么

一、 上机实验步骤注:以下步骤适用于除汇编语言程序设计的实验一到实验四外的所有实验(实验一到实验四仅使用TD.EXE)。1.确定源程序的存放目录建议源程序存放的目录名为ASM(或MASM),并放在C盘或D盘的根目录下。如果没有创建过此目录,请用如下方法创建:通过Windows的资源管理器找到C盘的根目录,在C盘的根目录窗口中点击右键,在弹出的菜单中选择“新建”→“文件夹”,并把新建的文件夹命名为ASM。请把MASM.EXE、LINK.EXE、DENUG.EXE和TD.EXE都拷贝到此目录中。2.建立ASM源程序建立ASM源程序可以使用EDIT或NOTEPAD(记事本)文本编辑器。下面的例子说明了用EDIT文本编辑器来建立ASM源程序的步骤(假定要建立的源程序名为HELLO.ASM),用NOTEPAD(记事本)建立ASM源程序的步骤与此类似。在Windows中点击桌面左下角的“开始”按钮→选择“运行”→在弹出的窗口中输入“EDIT.COM C:ASMHELLO.ASM”,屏幕上出现EDIT的编辑窗口窗口标题行显示了EDIT程序的完整路径名。紧接着标题行下面的是菜单行,窗口最下面一行是提示行。菜单可以用Alt键激活,然后用方向键选择菜单项,也可以直接用Alt-F打开File文件菜单,用Alt-E打开Edit编辑菜单,等等。如果键入EDIT命令时已带上了源程序文件名(C:ASMHELLO.ASM),在编辑窗口上部就会显示该文件名。如果在键入EDIT命令时未给出源程序文件名,则编辑窗口上会显示“UNTITLED1”,表示文件还没有名字,在这种情况下保存源程序文件时,EDIT会提示输入要保存的源程序的文件名。编辑窗口用于输入源程序。EDIT是一个全屏幕编辑程序,故可以使用方向键把光标定位到编辑窗口中的任何一个位置上。EDIT中的编辑键和功能键符合Windows的标准,这里不再赘述。源程序输入完毕后,用Alt-F打开File菜单,用其中的Save功能将文件存盘。如果在键入EDIT命令时未给出源程序文件名,则这时会弹出一个“Save as”窗口,在这个窗口中输入你想要保存的源程序的路径和文件名(本例中为C:ASMHELLO.ASM)。 注意,汇编语言源程序文件的扩展名最好起名为.ASM,这样能给后面的汇编和连接操作带来很大的方便。3.用MASM.EXE汇编源程序产生OBJ目标文件源文件HELLO.ASM建立后,要使用汇编程序对源程序文件汇编,汇编后产生二进制的目标文件(.OBJ文件)。具体操作如下: 方法一:在Windows中操作用资源管理器打开源程序目录C:ASM,把HELLO.ASM拖到MASM.EXE程序图标上。 方法二:在DOS命令提示符窗口中操作选择“开始”→“程序”→“附件”→“命令提示符”,打开DOS命令提示符窗口,然后用CD命令转到源程序目录下,接着输入MASM命令:I:>C: C:>CD ASMC:ASM>MASM HELLO.ASM 不管用以上二个方法中的哪个方法,进入MASM程序后,都会提示让你输入目标文件名(Object filename),并在方括号中显示默认的目标文件名,建议输入目标文件的完整路径名,如:C:ASMHELLO.OBJ〈回车〉。后面的两个提示为可选项,直接按回车。注意,若打开MASM程序时未给出源程序名,则MASM程序会首先提示让你输入源程序文件名(Source filename),此时输入源程序文件名HELLO.ASM并回车,然后进行的操作与上面完全相同。如果没有错误,MASM就会在当前目录下建立一个HELLO.OBJ文件(名字与源文件名相同,只是扩展名不同)。如果源文件有错误,MASM会指出错误的行号和错误的原因。4.用LINK.EXE产生EXE可执行文件在上一步骤中,汇编程序产生的是二进制目标文件(OBJ文件),并不是可执行文件,要想使我们编制的程序能够运行,还必须用连接程序(LINK.EXE)把OBJ文件转换为可执行的EXE文件。具体操作如下: 方法一:在Windows中操作用资源管理器打开源程序目录C:ASM,把HELLO.OBJ拖到LINK.EXE程序图标上。 方法二:在DOS命令提示符窗口中操作选择“开始”→“程序”→“附件”→“命令提示符”,打开DOS命令提示符窗口,然后用CD命令转到源程序目录下,接着输入LINK命令:I:>C: C:>CD ASMC:ASM>LINK HELLO.OBJ不管用以上二个方法中的哪个方法,进入LINK程序后,都会提示让你输入可执行文件名(Run file),并在方括号中显示默认的可执行文件名,建议输入可执行文件的完整路径名,如:C:ASMHELLO.EXE〈回车〉。后面的两个提示为可选项,直接按回车。注意,若打开LINK程序时未给出OBJ文件名,则LINK程序会首先提示让你输入OBJ文件名(Object Modules),此时输入OBJ文件名HELLO.OBJ并回车,然后进行的操作与上面完全相同。如果没有错误,LINK就会建立一个HELLO.EXE文件。如果OBJ文件有错误,LINK会指出错误的原因。对于无堆栈警告(Warning:NO STACK segment)信息,可以不予理睬,它不影响程序的执行。如链接时有其它错误。须检查修改源程序,重新汇编、连接,直到正确。5.执行程序建立了HELLO.EXE文件后,就可以直接在DOS下运行此程序,如下所示:C:>HELLO〈回车〉C:>程序运行结束后,返回DOS。如果运行结果正确,那么程序运行结束时结果会直接显示在屏幕上。如果程序不显示结果,我们如何知道程序是否正确呢?例如,这里的HELLO.EXE程序并未显示出结果,所以我们不知道程序执行的结果是否正确。这时,我们就要使用TD.EXE调试工具来查看运行结果。此外,大部分程序必须经过调试阶段才能纠正程序执行中的错误,调试程序时也要使用TD.EXE。
2023-09-11 01:12:461

什么是汇编语言?

介于机器语言和高级语言之间的一种
2023-09-11 01:13:134

汇编语言程序设计 编写1+2+3+.......+50的值?

1+2+3+4……50=1050
2023-09-11 01:13:322

汇编语言的一些程序设计题,谁能举例解答一下

你的问题问的不对,寄存机 AX BX CX DX就是具体的数据,你可以把这些当成变量使用a,b,c,d在程序中是分配的内存空间,和寄存器存在着本质上的区别,所以这些题目使用的数据就是:AX,BX,CX,DX这些寄存器数据1、交换可以用堆栈进行,AX。BX相互交换内容PUSH AXPUSH BXPOP AXPOP BX这样AX和BX内容就交换了2、为了方便你理解,写一些不正确的表达式吧MOV AX,0 相当于 int a=0;XOR AX,AX XOR这个指令,如果后面两个数相同,则为0,并将0存放到第一个寄存器AX中SUB AX,AX 相当于 int a=1; a=a-a; 所以结果也是0AND AX,0 AND指令,将后面两个数据按位‘与"操作,只要有一个数为0,结果就为0,所以AX的结果就是0了。第三题看不懂什么意思,想问什么东西?4、内存复制的代码:mov si,offset setscreen;原数据偏移地址 mov di,0 ;目标偏移地址 mov cx,offset setscreen_end-offset setscreen ;计算出数据长度 cld ;di,si每次执行movsb的时候都递增1 rep movsb ;开始复制清零:如果数据段有一块内存需要清零mov cx,100; // 数据段长度mov si,0; // 开始地址mov al,0;_start: mov byte ptr ds:[si],al; dec cx; inc si; // 指向下一个字节 cmp cx,0; jnz _start; // 如果cx不为0事继续清空下一个内存百度【幽灵代码论坛】加入我们一起学习
2023-09-11 01:13:521

汇编语言程序设计题

这个我们以前做过,但找不到了,早2年写的
2023-09-11 01:14:033

汇编语言循环程序设计和子程序设计原理

一个标准的循环程序应由以下四部分组成:循环准备、循环体、循环修改、循环控制。循环准备是为循环做准备的,有循环次数和起始地址;循环体是循环程序解题所需的核心程序,题目要完成的功能在此进行;循环修改用来更新某些数据或修正循环控制的参数;循环控制是循环是否结束的控制。如果在一个程序中的多个地方、或多个程序中的多个地方要用同一段程序,那么可以将这段程序单独设计,存放在某一存储区域,每当需要执行这段程序时,就调用指令转到这段程序去,执行完毕,再返回原来的程序。这段独立出来的程序叫做子程序或过程,调用它的程序称为主程序。采用子程序。使得设计结构清楚,程序的维护方便。当主程序需要执行这个子程序功能时,通过调用该子程序,执行子程序,子程序完成后返回主程序调用处,继续主程序后面的指令的执行。与子程序有关的指令有子程序的调用CALL、子程序返回RET两条指令。
2023-09-11 01:14:131

IBM-PC汇编语言程序设计练习题

兄弟,你如果真的不懂,就算别人帮你做出来,你还是不懂啊,你还是自己先做,然后把不懂的发上来,问问大家吧
2023-09-11 01:14:246

汇编语言程序设计题

先将BCD码转换为对应的16进制(BCD码的调整),再加上30就是ASCII码了至于设计,知道这了,难道还不知道怎么设计吗?
2023-09-11 01:14:447

汇编语言程序设计 主要学的是什么内容?

学习每个汇编语言的代码的意思,然后再学习一些语法和算法,然后编程序,汇编其实很简单,如过你学过C,学起来会更简单
2023-09-11 01:15:151

汇编语言的字符输入/输出程序设计

我也正在学汇编,上个星期五上机也是这个题目。我做一下试试。
2023-09-11 01:15:286

好好看书吧,基本上书上都有的汇编我已经忘的差不多了
2023-09-11 01:15:462

汇编语言 音乐动画程序设计(急用)

早期的PC系列机中有一个专门用于定时的集成电路,型号是8253/8254。它有三个通道,第一个通道用于控制系统时钟正常运转;第二个通道用于存储器刷新;这两个通道与我们现在讨论的问题无关。第三个通道是最有意思的,它通过一组电路与喇叭相联。 图4-1所示即为PC机中完整的发声电路。定时器通道3的G端与61H端口的bit0位相联,如果将61H端口的bit0位置成1,那么定时器通道3就被启动,此时将有一组信号从OUT端输出,信号的频率可以用程序控制;若61H端口bit0位为0,则定时器被关闭,OUT端就会恒定为1 此电路用在这里相当一个"可控开关",如果将61H端口的bit0、bit1位都置成1,则相当于既打开了定时器又打开了开关,这时候定时器产生的声音信号就会送到放大器推动喇叭发声;若将bit0位置0,则定时器关闭,此时OUT端为1,这时候如果连续改变bit1位的状态,也可以从喇叭中听到声音,这就是我们在第二章中所用的方法;若将bit1位置0,则开关关闭,此时即使打开定时器也不能听到声音。 这一点可以通过DEBUG加以验证:进入DEBUG,在"-"后打入"O61 3",即可听到喇叭发出连续的叫声。(在纯DOS下实验) 向61H端口输出"03",相当于打开定时器和开关,此时将有连续的声音发出,这个声音的频率约是896Hz,和我们刚开机时听到的蜂鸣音频率一样。 有趣的是声音一旦发出就不会停止,而且不干扰用户的任何操作。 停止这种声音的唯一方法就是进入DEBUG,打入命令"O61 0(也可以是1或2)"。之所以有这种现象是因为定时器的工作并不需CPU直接参与,CPU只要给定时设定好工作状态和频率值并打开定时器,此时定时器就会自主工作,CPU即可去做别的事情。这个特性十分有用,它是实现"背景音乐"的前提。 那么如何改变声音的频率呢?请注意定时器的通道3还有一个输入端CLK,这一端输入了一个固定的信号,频率是1193181.6Hz。输出信号与此信号具有如下关系: -------------------------------------------------------------------------------- F(OUT)=F(CLK)/N -------------------------------------------------------------------------------- 其中N是一个16bit数据,它的值可以由程序设定。方法很简单:将此16位数据分成高、低两个8位,先把低8位送至42H端口,紧接着再把高8位送至42H端口,输出信号的频率就会改变。我们可以试一下: C:ASM>DEBUG[Enter] -O61 3[Enter] -O42 0[Enter] -O42 3[Enter] 设定新的N值是300H,对应的F(OUT)是1193191.6/300H=1553Hz。声音马上变尖了。 有一点必须说明,定时器具有多种工作状态,并非每种工作状态都能产生声音,所以当我们想通过定时器产生声音时,我们应首先"初始化"定时器,为其建立正确的工作状态。初始化定时器并不复杂,向端口43H输出数据0B6H即可。这个数据的二进制形式是10110110,有些书籍把这个数称为"幻数"(MAGIC BYTE)。 有了上面介绍的这些知识,我们就可以编程控制定时器发出给定频率的声音。程序PROG6可以使喇叭发出1000Hz的声音 ------------------------------------------------ 0A3E:0100 MOV AL,B6 ;AL寄存器装入定时器初始化设置码 0A3E:0102 OUT 43,AL ;将设置码输出到43H端口 初始化 0A3E:0104 MOV AX,04A9 ;1193181.6Hz/1000=1193hz =04A9 hexadecimal AX寄存器置入N值 0A3E:0107 OUT 42,AL ;将N值分两次输出到42H端口 因为是8位 0A3E:0109 MOV AL,AH 0A3E:010B OUT 42,AL 0A3E:010D IN AL,61 ;取得61H端口的当前状态 0A3E:010F PUSH AX ;入栈 0A3E:0110 OR AL,03 ;0111 0A3E:0112 OUT 61,AL ;打开定时器及电子开关 0A3E:0114 MOV AH,01 ;AH = 01h Return: AL = character read 等待输入 ;character is echoed to standard output(回显) 0A3E:0116 INT 21 0A3E:0118 POP AX ;恢复61H 0A3E:0119 OUT 61,AL 0A3E:011B RET 0A3E:011C 我们已经讨论了如何通过定时器的通道3发出确定频率的声音,这一节我们要一起学习怎样精确地定时,这样才能解决演奏音乐的问题。 PC中的定时电路有三个通道,通道3用于发声,通道1用于控制系统内部的时钟。大家都十分清楚用DOS的"TIME"命令可以观察并修改系统内部的一个时钟,这个时钟之所以能连续运转主要依靠定时器的通道1。 通道1的工作方式和通道3一样,但是系统启动时设定其发出一个频率固定为18.2Hz的信号,这个信号直接送到系统中的"中断控制器"。每一个"Hz"都产生一个硬件中断,一般称这个硬中断为"IRQ0",对应的中断号是08H。也就是说,当计算机启动后,我们的机器看上去十分平静,但实际上CPU非常忙碌。在定时器的控制下每隔55毫秒就要执行一个08H号中断,这个中断的主要工作就是连续地计数。 在内存"0040H:006CH"处有四字节的存储空间专门用于保存计数值,CPU每执行一次08H中断,这四字节的计数值就被加1,不难算出这个计数值每增加1091后时间恰好过了1分钟,每增加65454后时间恰好过了1小时。系统内部的时钟之所以能准确走时,靠得就是08H中断和这四字节的计数值。因此我们要想精确的定时,必须依靠时钟计数值才行 ;---一个能准确发出1000Hz声音的程序,声音持续时间为5秒钟--------------- PORTB equ 61H code segment assume cs:code,ds:code org 100h main proc near mov al,10110110b ;初始化定时器 out 43h,al mov ax,4a9h ;设置N值为04A9H out 42h,al mov al,ah out 42h,al in al,PORT_B ;打开定时器及与门 or al,3 out PORT_B,al ;------------------以下为定时部分--------------- mov ah,0 ;选择1AH中断的0号功能 int 1ah ;调用1AH中断取得当前时钟计数 add dx,91 ;在当前时钟计数上加91---5秒 mov bx,dx ;保存定时终了时的计数值 delay: int 1ah ;两次调用1AH中断取得时钟计数值 cmp dx,bx ;到达定时终了时的计数值了吗? jne delay ; 没有到达,则返回DELAY处继续 ;---------------------------------------------------- in al,PORT_B ;定时终止,关闭定时器及与门 and al,0fch ;1111 1100 out PORT_B,al int 20h ;结束程序 main endp code ends参考资料:PC机汇编语言实践精解/李春生编著。data segment freq dw 196,220 dw 262,262,262,262,262,220,196 dw 262,262,262,262,294,262,220,262 dw 294,294,294,294,294,262,220 dw 294,294,294,294,330,294,330,392 dw 440,440,392,440,392,330 dw 294,294,330,294,262,220,196,220 dw 262,262,262,262,262,220 dw 262,196,220 dw 440,440,392,440,524,440 dw 392,330,294,262,220,196,220 dw 262,262,262,262,294,262 dw 262,330,392 dw 440,440,440,440,524,440 dw 392,392,392,440,392,330,294 dw 262,262,262,262,294 dw 330,330,294 dw 262,262,262,262,524,440 dw 392,392,392,440,392,330,392 dw 440,524,524,440,392 dw 392,330,392 dw 440,440,440,440,524,440 dw 392,392,392,440,392,330,294 dw 262,262,262,262,392 dw 330,330,294 dw 262,262,262,262,294,330 dw 392,392,330,392,330,392 dw 440 dw 9,9,196,660,294,294,262 dw 262,-1 time dw 400,400 dw 400,200,400,400,800,400,400 dw 400,200,400,200,200,800,400,400 dw 400,200,400,400,800,400,400 dw 400,200,400,200,200,800,400,400 dw 400,800,400,800,400,400 dw 400,200,200,400,400,800,400,400 dw 400,200,400,400,800,800 dw 1600,800,800 dw 400,800,400,800,400,400 dw 400,400,400,400,800,400,400 dw 400,800,400,800,400,200 dw 2400,400,400 dw 400,800,400,800,400,400 dw 400,800,200,200,800,400,400 dw 400,800,400,800,800 dw 2400,400,400 dw 400,800,400,800,400,400 dw 400,800,200,200,800,400,400 dw 800,400,800,400,200 dw 2400,400,400 dw 400,800,400,800,400,400 dw 400,800,200,200,800,400,400 dw 400,800,400,800,800 dw 2400,400,400 dw 400,800,400,800,400,400 dw 400,800,400,800,400,400 dw 3200 dw 800,400,400,400,400,400,400 dw 4000 data ends code segment assume cs:code,ds:data main proc far start:mov ax,data mov ds,ax mov si,offset freq mov di,offset time l1: mov cx,[si] cmp cx,-1 je exit mov bx,[di] call gensound add si,2 add di,2 jmp l1 exit:mov ax,4c00h int 21h main endp gensound proc near push dx mov al,0b6h out 43h,al mov dx,08h mov ax,3208h div cx out 42h,al mov al,ah out 42h,al in al,61h mov ah,al or al,3 out 61h,al l2: push dx push ax mov dx,8h mov ax,0f05h s1: sub ax,1 sbb dx,0 jnz s1 pop ax pop dx dec bx jnz l2 mov al,ah out 61h,al pop dx ret gensound endp code ends end start
2023-09-11 01:16:331

急~急~急~汇编语言程序设计题目

fbbxcBxcFBBXCbXC
2023-09-11 01:16:424

51单片机,数据块传送程序设计,汇编语言程序怎么写?

为适应上网的需求,系统软件设计主要包括两部分内容:一是要执行对RTL8019AS等的控制功能,二是要执行与连接Internet相关的功能,实现TCP/IP协议。
2023-09-11 01:17:132

跪求钱晓捷的汇编语言程序设计课后习题答案,新版或第二版都可以

第一章 1.1 CPU 分析、控制并执行指令的部件 IP 指示下一条将要执行的指令的地址 SP 保存当前栈顶地址的寄存器 状态标志 指出指令操作结果的标志,如ZF,CF等。 控制标志 控制操作的标志,只有DF,IF,TF三个。 ALU 进行算术和逻辑运算的单元 存储器 存储程序、数据等信息的的记忆装置。 物理地址 CPU发出的访问存储器的地址信息。 偏移地址 相对于段起始地址的偏移量。 段地址 是逻辑段的起始地址。 1.2下列操作可使用哪些寄存器 ·存放各种运算操作的数据:AX,BX,CX,DX,SP,BP,SI,DI (我的辅导书上没有SP,BP;why?) ·存放数据串操作时的计数值:CX ·查看程序已执行到哪条指令的地址:IP ·查看堆栈中当前正要进行入出栈的存储单元的地址:SP ·查年运算结果是否等于零:PSW的ZF ·查年程序中的数据存放段区是从哪个地址开始的:DS,ES ·查看程序中的指令存放的段区是从哪个地址开始的:CS 1.3段地址和偏移地址为1000:117A的存储单元的物理地址是什么?而1109:00EA或1025:0F2A的存储单元的物理地址又是什么:这说明了什么问题? 1000:117A物理地址为:1117A;1109:00EA的物理地址为:1117A;1025:0F2A的物理地址为:1117A.说明物理地址不变,段地址改变,偏移地址也随之变化. 1.存储器地址对应的数据(图略) 75422H(字节):9CH 75424H(字节):5DH 75422H(字):249CH 75424H(字):E65DH 第二章 2.1写出相应的汇编语言指令: (1)以寄存器BX和SI作为基址变址寻址方式把存储器中的一个字传送到CX寄存器。 MOV CX,[BX][SI(注:寄存器寻址只能使用:BX,BP,SI,DI;且BX、BP或SI,DI不能同时使用,可能我说的不太对,请版主确认一下) (2)以寄存器BX和偏移量value作寄存器相对寻址方式把存储器的一个字和AX相加,把结果(即和)送回那个字单元中。 ADD value[BX],AX (3)将一个字节立即数0B6H与符号的地址为NUM的存储器字节单元内容相比较。 CMP BYTE PTR 0B6H,NUM(如果前面不加BYTE RTR,默认的也是字节比较吧?还有双字比较,应该怎么写?) (4)测试从寄存器BP和DI、偏移量COUNT作为相对基址变址寻址方式寻址的存储器字节单元内容最高位B7的值,字节单元的内容不能改变。 TEST COUNT[BP][DI],80H (5)将AH寄存中的高4位和低4位数据互换。 MOV CL,4 ROL(或ROR) AH,CL (6)清除以寄存器SI间接寻址的存储器字单元,同时清除CF标志位. XOR AX,AX ;使AX=00000000,CF=0 MOV [SI],AX 2.2设DS=1000H,BX=2865H,SI=0120H,偏移量D=47A8H,试计算下列各种寻址方式下的有效地址. 1)使用D的直接寻址 47A8H (这道指令怎么写?如何定义D的值) 2)使用BX的寄存器间接寻址 2865H 3)使用BX和D的寄存器相对寻址 700DH 4)使用BX、SI和F的相对基址变址寻址 712DH 5)使用BX、SI的基址变址寻址 2985 2.3假设DS=1000H,BX=2A80H,CX=3142H,SI=0050H,(10050H)=3BH,(10051H)=86H,(11200H)=7AH,(11101H)=64H,(12ADOH)=0A3H,每小题的括号中分别填入指令执行后的结果: 1)MOV AX,1200H ;AX=1200H 2)MOV AX,[1200H] ;AX=1200H(书上的答案是647A,但是我用DEBUG试了一下是1200,可能是因为我的PII的原因吧,希望有8088的朋友能试一下,版主,考起试来应该怎么写呀?) 3)ADD [SI],CX ;(10050H)=7DH,9100510=B7H,ZF=0,CF=0,SF=1,OF=1 4)OR BYTE PTR [BX][SI],54 ;(12AD0H)=F7,CF=0,OF=0 5)MOV 150H[BX],CH ;[12BD0H]=31,CH=31 2.4指出下列指令的错误原因 1)MOV AX,CL 两操作数的长度不一样. 2)MOV CS,AX 不能给CS赋值 3)INC BETA[BP] 书上说:没有数据类型说明,但我认为它应该自动默认为字节操作,版主再来看看吧 4)MOV ES,1850H 立即数不能直接送段寄存器 5)ADD BX,DS 段寄存器不能做为加法操作数使用 6)AND AX,[CX] 寄存器寻址只能使用BX,SI,DI,BP 2.5说明下列指令执行的操作,说明原始数据和结果数据的存储地点 贴子相关图片: 作者: 218.27.73.* 2005-9-3 09:21 回复此发言 --------------------------------------------------------------------------------2 汇编语言程序设计课后习题答案 [原始数据](结果数据) 1)mov [2700h],cx 这条指令在我的P4试了一下,是错误的;如果考试时出只好说是:把[CX]中的内容送到(数据段中偏移地址为2700h字单元)中; 2)MOV DH,50[SI] 将[数据段中有效地址为SI+50的字节单元]中的数据送入(DH)中; 3)LEA SI,ARRAY 将ARRAY的偏移地址送入(SI),结果数据在[代码段对相应指令字节中] 4)DAS 将AL中的压缩的十六进制数调整为十进制数,结果数据在AL中,原始数据也在AL中 5)ADC CL,[BX] 将BX和CL的和加上CF的值后,存放在CL中,结果在CL中,原始在BX,CL,CF中 6)ROR WORD PTR ALPHA[SI],CL 将偏移地址为ALPHA+SI字单元中的数据循环移,结果和原始都在哪个字单元中. 2.6指出下列无条件转移指令的转移地址中的偏移地址是什么,存放在何处. 1)JMP BX 偏移地址是BX中的值,存放在BX中 2)JMP WORD PTR [BX] 偏移地址是以BX中的值为偏移地址的一个字单元中的数值,存放在以BX中的值为偏移地址的一个字单元中 3)JMP NEAR PTR PROA 偏移地址为PROA的偏移地址,存放在CS段的相应指令处(书上说的不一样,请版主做下这道题) 4)JMP FAR PTR FAR_PRO 偏移地址为FAR_PRO的偏移地址,,存放在CS段的相应指令处 5)JMP SHORT AGAIN 偏移地址为AGAIN的偏移地址,存放在CS段的相应指令处(书上说的不一样,请版主做下这道题) 6)JMP DWORD PTR [BX][DI] 偏移地址是以BX,DI为基址变址寻址的两个字单元的内容,存放在以BX,DI为基址变址寻址的两个字单元中 2.7写出把道址为BLOCK的字数组的第六个字送到CX寄器的指令序列,要发别使用以下几种寻址方式 1)以BX寄存器的间接寻址 LEA BX,BLOCK+0AH MOV CX,[BX] 2) 以BX寄存器的相对寻址 LEA BX,BLOCK MOV CX,0AH[BX] 3) 以BX,SI的基址变址寻址 LEA BX,BLOCK MOV CX,[BX][SI] 2.8指出下列指令的源和目的操作数的寻址方式 (目地操作数寻址方式;原操作数寻址方式) 1)MOV ARRAY,BX 直接寻址;寄存器寻址 2)ADC CX,ALPHA[BX][SI] 寄存器寻址;相对基址变址寻址,寄存器寻址 3)AND BYTE PTR GAMMA [DI],11011001B 寄存器相对寻址;立即寻址,寄存器相对寻址 4)INC WORD PTR [BX] 寄存器间接寻址;寄存器间接寻址 5)TEST EX:[IS],DX (目的操作数?在哪?只改变标志位,算寄存器寻址吗?书上写的寄存器间接寻址,不明白);寄存器间接寻址,寄存器寻址 6)SBB SI,[SI] 寄存器寻址;寄存器寻址,寄存器间接寻址 2.9分别说明下列每组指令中的两条指令的区别: 1) MOV AX,TABLE LEA AX,TABLE 前者是将变量TABLE的内容传递给AX;后者是将TABLE和偏移地址传递给AX 2) AND BL,0FH OR BL,0FH 前者是BL的内容与0F相与;后者是BL与0FH相或 3) JMP SHORT L1 JMP NEAR PTR L1 前者为短跳转,后者为近跳转 4) MOV AX,[BX] 第三章 3.1 1)使计算机执行某种操作的命令 ;指令 2)表示计算机执行什么操作的符号 ;助记符 3)存放指令机器码的存储器段区 ;代码段 4)指出指令在程序中位置的符号地址 ;标号 5)将汇编语言程序翻译成机器码程序的实用程序 ;汇编程序 3.2试写出完成下列操作的指示性语句: 1)将56H,78,0B3H,100存放在定义为字节变量ARRAY的存储单元中. ARRAY DB 56H,78,0B3H,100 2)将字数据2965H,45H,2965,0A6H存放在定义为字节变量DATA的存储单元中. ARRAY DB 65H,29H,45H,95H,0BH,0A6H ;书上在0B和0A6H后面有个0,不什么是什么. 3)将字节数据56H,0C6H,78H,12H存放在字变量ALPHA的存储单元中.并且不改变数据按字节存储的次序 ALPHA DW 0C656H,1278H 4)在BETA为道址的存储单元中连续存放字节数据:2个23,5个"A",10个(1,2),20个空单元。 BETA DB 2 DUP (23),5 DUP ("A"),10 DUP (1,2), 20 DUP (?) 5)在STRING为首址的存储单元中存放字符串"THIS IS A EXAMPE" STRING DB "THIS IS A EXAMPE" 3.3下列伪指令序列中,BASUB的值为多少?它表示什么意义? 作者: 218.27.73.* 2005-9-3 09:21 回复此发言 --------------------------------------------------------------------------------3 汇编语言程序设计课后习题答案 BUFF DB 7,6,"56",? ARRAY DW 0,67H,7 BASUB EQU ARRAY-BUFF BASUB的值是5,它表示ARRAY与BUFF的首地址的差. 3.4假设程序中的数据定义如下: BUF1 DB 100 DUP ("a") BUF2 DW 1275H,567,0C5H BUF3 DB 20 DUP (?) BUF4 DB 7,4,6,9,8 1)用一条指令将BUF1的谝移地址送入BX. LEA BX,BUF1 2)将BUF2的第三字节数据送入CL MOV BYTE PTR CL,[BUF2+2] 3)将0A6H送入BUF3的第10个字节单元中 MOV BYTE PTR [BUF3+9],0A6H 4)用伪指令写出BUF1和BUF2二者的总长度(字节数) L1_2 EQU BUF3-BUF1 5)用一组指令写出BUF2的第二个数据567和BUF4的第三个数据6相加,结果(和)送入BUF3 MOV AL,BUF4+2 MOV AH,0 ADD AX,BUF2+2 MOV BUF3,AX 3.5指出下列第一对伪指令语句的区别: 1)X1 DB 76; X2 EQU 76 前者是向X1的字节单元存入76,后者是将X2的值定义为76. 2)X1 DW 3548H; X2 EQU BYTE PTR X1 前者是定义X1的字单元值为3548,后者是定义X2的值为X1的第一个字节单元的值48. 3)X1 EQU 3; X2 = 3 两者都是赋值语句,但前者只能定义一次,后者可以重复定义. 4)X1 DW 3678H; X2 DB 36H,78H 前者的字节单元内容依次为78,36;后者的字节单元内容依次为36,78. 5)X1 DW 6341H; X2 DW 6341 前者为十六进制的6341;后者为十进制的6341 3.6设置一个数据段DATA_SEC,其中连续存放下列的8个变量,用段定义语句和数据定义语句写出数据段: 1)DATA1为字符串变量:"DATA SEGMENT" 2)DATA2为十进制数字节变量:72,65,-10 3)DATA3为十六进制数字字节变量:109,98,21,40 4)DATA4为10个零的字节变量. 5)DATA5为数字的ASCII字符字节变量:12345 6)DATA6为十进制的字变量:7,9,298,1967 7)DATA7为十六进制的数的字变量:785,13475 8)DATA8为本段中字变量和字节变量之间的字节单元数之差 DATA_SEC SEGMENT DATA1 DB "DATA SEGMENT" DATA2 DB 72,65,-10 DATA3 DB 6DH,62H,15H,28H DATA4 DB 10 DUP (0) DATA5 DB "12345" DATA6 DW 7,9,298,1967 DATA7 DW 0311H,34A3H D1 EQU DATA6-DATA1 D2 EQU $-DATA6 DATA8 EQU D2-D1 3.7设程序中的数据定义如下: DATA1 DW ? DATA2 DB 32 DUP (?) DATA3 DD ? DLENGTH EQU $-DATA1 问DLENGTH的值为多少?它表示什么意义? DLENGTH的值为38,表示DATA1,DATA2,DATA3所占用的字节数之和 3.8指出下列第一小题中的伪指令表达的操作哪些是错误的?错误在哪时? 1) ALPHA EQU 78H BETA EQU ALPHA+1 没错. 2) DATA DB 395 1个字节最多能够表示256 3) X1 SEG . . . X1 ENDS SEG应该写成SEGMENT 4) ALPHA EQU BETA BETA没有赋值 5) COUNT EQU 100 COUNT EQU 78 不可以用EQU给一个变量重复赋值 6) MAIN PROC . . . ENDP 过程结束标志,应该有个MAIN 7)ARRAY DW 10 DUP (?) . . . JMP ARRAY ARRAY是变量,JMP不能跳到ARRAY处 8) SEGMENT CODE_SEG . . . ENDS CODE_SEG 书写格式错误,应写为 CODE_SEG SEGMENT CODE_SEG ENDS 3.9对于下面的数据定义,写出各条指令执行的结果: FLDB DW 0A24FH TABLE DB 32H,52,0C2H,213 TEA EQU WORD PTR TABLE ARRAY DB "ABCD" COUNT EQU $-ARRAY 1)MOV AX,FLDB AL=(4FH) 2)MOV BX,TEA BH=(52H)
2023-09-11 01:17:231

用汇编语言设计程序实现10!(10的阶乘)

#include <stdio.h>#include <conio.h>double fun(int n){double result=1.0;if(n==0)return 1.0;while(n>1&&n<170)result*=n--;return result;}main(){int n;printf("Input N:");scanf("%d",&n);printf( %d!=%f ",fun(n));}我运行过得
2023-09-11 01:17:343

51单片机 汇编语言 常用数据处理程序设计 求16个无符号数的最大值

现在写还来得及吧?分少了……你回复我就给你写……
2023-09-11 01:17:593

单片机课程设计电梯程序设计汇编语言

① 单片机编程,汇编语言 A中数据进行开平方,如下即可: ; MOV R2, #255 LP1: INC R2 SETB C SUBB A, R2 JC EXIT SUBB A, R2 JNC LP1 EXIT: MOV A, R2 RET ;应用《减奇数法》来开平方。 ② 单片机编程,求程序(用汇编语言) 汇编语言针对不同单片机不一样,怎么给你编?用C语言通用,其实真的很简单,主要是硬件设计 ③ 求单片机课程设计 用汇编语言设计计数器(要求从0~9999,在数码管上显示)!!!!!!!!!!!!! 单片机课程设计报告 题 目 计时器设计 班 级 电 信 093 学 号 090301334 姓 名 周 剑 时 间 2010.12.20 成 绩 指导教师 石巧云 目录 一、 前言………………………………………………………………1 单片机的应用介绍…………………………………………………1 二、 课程设计的目的和要求…………………………………………2 (一)课程设计的目的…………………………………………… 2 (二)课程设计的基本要求……………………………………… 3 三、 总体设计…………………………………………………………3 (一)工作原理…………………………………………………… 3 (二)硬件总体设计……………………………………………… 4 (三)软件总体设计……………………………………………… 5 四、综合调试………………………………………………………… 7 (一)keil调试 …………………………………………………… 8 (二)Proteus调试………………………………………………… 9 五、结束语…………………………………………………………… 9 六、参考文献 …………………………………………………………10 前言 单片机的应用介绍 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。 单片机是指一个集成在一块芯片上的完整计算机系统。尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。同时集成诸如通讯接口、定时器,实时时钟等外围设备。而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。 目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用单片机的应用介绍 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。 单片机是指一个集成在一块芯片上的完整计算机系统。尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。同时集成诸如通讯接口、定时器,实时时钟等外围设备。而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。 目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应 智能化控制的科学家、工程师。 与智能化控制的科学家、工程师。 单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴: (1.在智能仪器仪表上的应用 (2.在工业控制中的应用 (3.在家用电器中的应用 (4.在计算机网络和通信领域中的应用 (5.单片机在医用设备领域中的应用 (6.在各种大型电器中的模块化应用 此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。 二、 课程设计的目的和要求 (一)课程设计的目的 1. 进一步熟悉和掌握8051单片机的结构及工作原理。 2. 掌握单片机的接口技术及相关外围芯片的外特性,控制方法 3. 通过课程设计,掌握以单片机核心的电路设计的基本方法和技术,了解表关电路参数的计算方法。 4. 通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。 5. 通过完成一个包括电路设计和程序开发的完整过程,使学生了解开发一单片机应用系统的全过程,为今后从事相应打下基础。 (二)课程设计的基本要求 用AT89C51 单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,但一秒产生时,秒计数加1,秒计数加到60时,自动从0开始。单片机晶振频率为12MHz。 二、 总体设计 (一) 工作原理 LED显示器的结构与原理 1、结构种类 七段LED显示器(数码管)系发光器件的一种。常用的LED发光器件有两类:数码管和点阵。数码管内部有七个条形发光二极管和一个小圆点发光二极管组成,根据各管的亮暗组成字符。常见数码管有10根管脚。管脚排列如下图(a)所示。其中COM为公共端,根据内部发光二极管的接线形式可分为共阴极和共阳极两种。如下图(b)(c)所示,使用时,共阴极数码管公共端接地,共阳极数码管公共端接电源。发光二极管需5~10mA的驱动电流才能正常发光,一般需加限流电阻控制电流的大小。 2、显示原理 LED数码管的a~g七个发光二极管。加正电压的发光加零电压的不能发光,不同亮暗的组合能形成不同的字符,这种组合称为字型码。共阳极和共阴极的字型码是不同的,如下图所示。 LED字符显示代码表 显示 段符号 十六进制代码 dp g f e d c b a 共阴极 共阳极 0 0 0 1 1 1 1 1 1 3FH C0H 1 0 0 0 0 0 1 1 0 06H F9H 2 0 1 0 1 1 0 1 1 5BH A4H 3 0 1 0 0 1 1 1 1 4FH B0H 4 0 1 1 0 0 1 1 0 66H 99H 5 0 1 1 0 1 1 0 1 6DH 92H 6 0 1 1 1 1 1 0 1 7DH 82H 7 0 0 0 0 0 1 1 1 07H F8H 8 0 1 1 1 1 1 1 1 7FH 80H 9 0 1 1 0 1 1 1 1 6FH 90H (二) 硬件总体设计 1、主要元器件选择 主要元器件选用型号和数量如下: 1个AT89C51(单片机) 1个CRYSTAL(晶振) 2个CAP(电容) 3个RES(电阻) 2个7SEG-COM-CATHOD(共阴极数码管) 1个CAP-ELEC(电解电容) 2、系统板上硬件连线 (1. 把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。 (2. 把“单片机系统”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P2.0/A8对应着a,P2.1/A9对应着b,……,P2.7/A15对应着h。 3、计时器电原理图 (三)软件总体设计 1、程序设计内容 (1.在设计过程中我们用一个存储单元作为秒计数单元,当一秒钟到来时,就让秒计数单元加1,当秒计数达到60时,就自动返回到0,从新秒计数。 (2.对于秒计数单元中的数据要把它十位数和个数分开,方法仍采用对10整除和对10求余。 (3.在数码上显示,仍通过查表的方式完成。 (4.一秒时间的产生在这里我们采用软件精确延时的方法来完成,经过精确计算得到1秒时间为1.002秒。 2、延时1秒子程序 DELY1S: MOV R5,#100 D2: MOV R6,#20 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 DJNZ R5,D2 RET 3、程序流程图 4、汇编源程序设计 Second EQU 30H ORG 0 START: MOV Second,#00H ;设置显示初值为00 NEXT: MOV A,Second MOV B,#10 DIV AB ;十位数存于A中,个位数存于B中 MOV DPTR,#TABLE ;字型码地址送DPTR MOVC A,@A+DPTR ;查十位字型码 MOV P1,A ;送P1口显示 MOV A,B MOVC A,@A+DPTR ;查个位字型码 MOV P2,A ;送P2口显示 LCALL DELY1S ;调用延时1秒子程序DELY1S INC Second ;显示值加1 MOV A,Second CJNE A,#90,NEXT ;显示值不为90转到NEXT执行 LJMP START ;返回到主程序 DELY1S: MOV R5,#100 ;1S延时子程序 D2: MOV R6,#20 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 DJNZ R5,D2 RET TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;共阴数码管字型码 END 四、综合调试 (一)Keil调试 程序调试完成图 (二)Proteus调试 五、结束语 完成情况:经过两个星期的努力,我们一组成员终于完成了秒表控制方案的设计,主要是用AT89C51单片机实现0-99秒计时器控制方案。本设计还包含数码管显示部分,可直接显示时间可方便观察。通过这次课程设计,使我得到了一次用专业知识和专业技能去分析问题、解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及用汇编语言设计程序的思路技巧等方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。 六、参考文献 [1]. 江力主编,单片机原理与应用技术,清华大学出版社,2008年4月第6次印刷 [2].蔡骏主编,单片机实验指导教程,安徽大学出版社,2008年7月第一次印刷 [3]. //51c51/51test/cc411 ④ 单片机课程设计(用汇编语言) 51单片机的,交通灯设计,用汇编写程序,可以 ⑤ 51单片机编程题,用汇编语言怎么做 在8051单片机的时钟频率为6MHz,那么定时器的计数脉冲周期就是 2uS; *** it CP=P1^0; void Timer0_init(){ TMOD |=0x01; //T0定时器,方式1,采回用16位定时器 TH0 = (65536-500)/256; //定时器装初答值500, 即 1000uS 中断一次 TL0 = (65536-500)%256; EA=1; ET0=1; TR0=1; }void timer0() interrupt 1 { TH0 = (65536-500)/256; //定时器装初值500, 1mS 中断一次 TL0 = (65536-500)%256; CP=~CP; //改变脉冲信号的输出状态 }void main() { Timer0_init(); CP=0; while(1) { } }汇编语言,才看到,算了,你别人的回答吧 ⑥ 求单片机课程设计 用汇编语言设计计数器(要求从0~9999,... 求单片机课程设计 用汇编语言设计计数器(要求从0~9999,... 片机课程设计报告 题 目 计时器设计 班 级 电 信 093 学 号 090301334 姓 名 周 剑 时 间 2010.12.20 成 绩 指导教师 石巧云 目录 一、前言………………………………………………………………1 单片机的应用介绍…………………………………………………1 二、课程设计的目的和要求…………………………………………2 (一)课程设计的目的…………………………………………… 2 (二)课程设计的基本要求……………………………………… 3 三、总体设计…………………………………………………………3 (一)工作原理…………………………………………………… 3 (二)硬件总体设计……………………………………………… 4 (三)软件总体设计……………………………………………… 5 四、综合调试………………………………………………………… 7 (一)keil调试 …………………………………………………… 8 (二)Proteus调试………………………………………………… 9 五、结束语…………………………………………………………… 9 六、参考文献 …………………………………………………………10 前言 单片机的应用介绍 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。 单片机是指一个集成在一块芯片上的完整计算机系统。尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。同时集成诸如通讯接口、定时器,实时时钟等外围设备。而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。 目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用单片机的应用介绍 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。 单片机是指一个集成在一块芯片上的完整计算机系统。尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。同时集成诸如通讯接口、定时器,实时时钟等外围设备。而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。 目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,...... ⑦ 单片机编程(汇编语言) 子程序如下: MIDL: MOV A, R1 CLR C SUBB A, R2 ;R1-R2 JNC BIGR1 MOV A, R2 ;交换R1R2的内容. XCH A, R1 MOV R2, A ;较小值存到R2 BIGR1: MOV A, R2 ;取出较小值. CLR C SUBB A, R3 ;R2-R3 JNC BIGR2 MOV A, R3 ;交换R2R3的内容. XCH A, R2 ;较大者存到R2 MOV R3, A ;最小值存到R3 BIGR2: MOV A, R1 CLR C SUBB A, R2 ;R1-R2,比较两个较大的值. JNC LITR2 MOV A, R1 ;交换R1R2的内容. XCH A, R2 MOV R1, A LITR2: RET ⑧ 单片机原理与应用课程设计 要汇编语言的 多谢 无法贴上来,给邮箱发给你 ⑨ 单片机交通灯课程设计程序汇编语言和C语言 我这有个交通灯的程序,留下邮箱吧! ⑩ 谁有用MCS51单片机设计五层电梯的程序(汇编语言或C语言) 舍近求远,这个用C不烦死你,本来就是汇编的事,你用C也得内嵌语句。
2023-09-11 01:18:081

使用MASM汇编语言设计工具,设计简单的汇编语言程序并进行运行调试

这是我们写的作业,是大写转化成小写字母DATA SEGMENTBUFFER DB "ABCD123EFG",0DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX LEA BX,BUFFER L: MOV AL,[BX] CMP AL,0 JE L0 CMP AL,"A" JB L1 CMP AL,"Z" JA L1 ADD AL,20HL1: INC BXMOV DL,ALMOV AH,2INT 21H JMP LL0: MOV AH,4CH INT 21HMOV AH,4CHINT 21HCODE ENDS END START
2023-09-11 01:18:313

汇编语言程序设计 题目一 用16位乘法指令完成32位无符号数的乘法(结果64位)使用MUL指令,完成双字无符号

data segmentfirst dw ?,? ;第一个成数,低位在前,高位在后second dw ?,? ;同上result dw 0,0,0,0 ;结果,低位在前,高位在后LFLS dw ?,? ;first低位*second低位,结果HFLS dw ?,? ;first高位*second低位,结果LFHS dw ?,? ;first低位*second高位HFHS dw ?,? ;高位*高位data endscode segment assume cs:code,ds:datastart:mov ax,data mov ds,ax mov ax,[first+0] ;获取first低位,+0可以省略,此处加0突出低位 mov bx,[second+0] ;同上 mul bx mov [LFLS+0],ax mov [LFLS+2],dx ;存取低位*低位的结果。下同,不再写了 mov ax,[first+2] ; mov bx,[second+0] ;同上 mul bx mov [HFLS+0],ax mov [HFLS+2],dx ;存取高位*低位的结果。下同,不再写了 mov ax,[first+0] ; mov bx,[second+2] ;同上 mul bx mov [LFHS+0],ax mov [LFHS+2],dx ; mov ax,[first+2] ; mov bx,[second+2] ;同上 mul bx mov [HFHS+0],ax mov [HFHS+2],dx ; mov ax,[LFLS+0] mov [result+0],AX ;结果的低位 mov ax,[LFLS+2] add ax,[HFLS+0] jnc next1 inc word ptr [result+4]next1:add ax,[LFHS+0] jnc next2 inc word ptr [result+4] next2:mov [result+2],ax mov ax,[HFLS+2] add ax,[LFHS+2] jnc next3 inc word ptr [result+6]next3: add ax,[HFHS+0] jnc next4 inc word ptr [result+6]next4:add ax,[result+4] ;以前的进位 jnc next5 inc word ptr [result+6]next5: mov [result+4],ax mov ax,[HFHS+2] add ax,[result+6] mov [result+6],axmov ax,4c00hint 21hcode ends end start
2023-09-11 01:18:411

请问既然学习了王爽的《汇编语言》为什么还要学习《windows环境下32位汇编语言程序设计(第二版)》呢?

请问既然学习了王爽的《汇编语言》为什么还要学习《windows环境下32位汇编语言程序设计(第二版)》呢?都是说汇编语言,可以只学习一个么?它们两者之间有什么区别?我想学习逆向,谢谢、----------------汇编语言,没有必要学那么深入。学了,也没有用处的。当然,极少数狂人除外。
2023-09-11 01:18:523

汇编语言是一种计算机能直接执行的低级程序设计语言对吗

汇编语言是一种计算机能直接执行的低级程序设计语言。汇编语言是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。1、不同的设备汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令,特定的汇编语言和特定的机器语言指令集一一对应,不同平台之间不可直接移植。
2023-09-11 01:19:021