大工《汇编语言程序设计》大作业参考题目及要求【内容仅供参考】686
大工14 秋《汇编语言程序设计》在线测试3
大工14 秋《汇编语言程序设计》在线测试3一、单选题(共10 道试题,共30 分。
)1. 用指令的助记符、符号地址、标号和伪指令、宏指令等书写程序的语言称为()。
A. 汇编语言B. 高级语言C. 机器语言D. 低级语言正确答案:A2. 中断向量是()A. 子程序入口B. 子程序入口地址的地址C. 中断服务程序入口地址D. 中断服务程序入口地址的地址正确答案:D3. 中断屏蔽字的作用是()A. 暂停外设对主存的访问B. 暂停对某些中断的处理C. 暂停一切中断的处理D. 暂停CPU对主存的访问正确答案:B4. 代码段内子程序调用和返回用到的指令及属性正确的是()A.CALL FAR ;RET NEARB. CALL FAR;RET FARC. CALL NEAR ;RETS NEARD. CALL NEAR;RET NEAR正确答案:D5. 宏指令语句本身不生成目标代码,它仅表示宏调用出现的()。
A. 说明符B. 位置C. 代码格式D. 宏体正确答案:B6. 宏定义标准伪操作是()A. NAME MACRO [哑元]...ENDPB. NAME MACRO [哑元表]...ENDSC. NAME MACRO [哑元表]...ENDD. NAME MACRO [哑元表]...ENDM正确答案:D7. 子程序定义的标准格式是()A. PROC ENDB. PROC ENDSC. PROC ENSPD. PROC ENDSP正确答案:C8. 参数调用过程中都必须使用传送工具是()A. 地址表B. 堆栈C. 寄存器D. 数据段正确答案:C9. 中断返回指令是()A. ENDB. ENDSC. ENDPD. IRET正确答案:D10. DOS和BIOS功能调用正确的顺序是(1)功能号装入AH(2)调用参数装入指定寄存器(3)按中断号调用DOS或BIOS中断(4)检查返回参数是否正确A. (1)(2)(3)(4)B. (2)(3)(4)(1)C. (3)(2)(1)(4)D. (2)(1)(3)(4)正确答案:D二、判断题(共10 道试题,共30 分。
[大连理工大学]20春《汇编语言程序设计》在线作业3-复习资料答案
科目名称:大工20春《汇编语言程序设计》在线作业3学校名称:奥鹏-大连理工大学一、单选题 (共 10 道试题,共 50 分)1.在汇编语言程序的开发过程中使用宏功能的顺序是( )。
A.宏调用,宏定义B.宏展开,宏定义C.宏定义,宏调用,宏展开D.宏定义,宏展开,宏调用提示:本题为必答题,请认真阅读题目后再作答--本题参考答案:C2.如果(AL)=01100011B,(AH)=00100010B,执行ADD AL,AH指令后,(AL)=( )。
A.01100011BB.10000101BC.1100101BD.11B提示:本题为必答题,请认真阅读题目后再作答--本题参考答案:B3.如果(AL)=01100011B,(AH)=00100010B,执行ADD AL,AH指令后,CF=( )。
A.0B.1C.2D.3提示:本题为必答题,请认真阅读题目后再作答--本题参考答案:A4.如果(SI)=0088H,(DS)=5570H,对于物理地址为55788H的内存字单元,其内容为0235H,对于物理地址为5578AH的内存字单元,其内容为0E60H,那么执行指令LDS SI,[SI]以后,(DS)=多少?( )A.5570HB.0235HC.0E60HD.0088H提示:本题为必答题,请认真阅读题目后再作答--本题参考答案:C5.如果(SI)=0088H,(DS)=5570H,对于物理地址为55788H的内存字单元,其内容为0235H,对于物理地址为5578AH的内存字单元,其内容为0E60H,那么执行指令LDS SI,[SI]以后,(SI)=多少?( )A.5570HB.0235H。
大工13春《汇编语言程序设计》在线作业2及答案
大工13春<汇编语言程序设计>在线作业2及答案一、单选题(共10道试题,共50分。
)V1.子程序建立堆栈的参数传送方法中,实现参数传送的过程是(A)。
A.变量地址入栈、原始BP入栈、SP值给BPB.原始SP入栈、变量地址入栈、SP值给BPC.SP值给BP、原始BP入栈、变量地址入栈满分:5分2.数据定义伪操作中,变量定义用符号地址表示,那么他和符号地址及标号有什么区别么(C)。
A.没有区别B.仅仅是变量后面不带冒号的符号地址和标号C.变量就是可以重新赋值的符号地址,因此和符号地址及标号有本质区别满分:5分3.伪指令是汇编语言的组成部分,它是写给哪个程序看的(B)。
A.汇编语言B.汇编程序C.计算机系统满分:5分4.关于分支程序的说法正确的是(B)。
A.分支程序结构可以有三种形式B.分支程序的运行方向是向前的C.可以执行多个分支D.程序的分支一般用地址传送指令产生满分:5分5.下列伪操作中,哪个不是对准伪操作(C)。
A.EVEN伪操作伪操作C.EQU伪操作D.ALIGN伪操作满分:5分6.数据定义中ARRAY DB5DUP(0,2DUP(1,2,3),0,7)的第六个存储单元的内容为(C)。
A.00hB.01hC.02hD.03h满分:5分7.pentium提供的新指令是(D)。
A.SET ccB.MOVSXC.OUTSD.CMPXCHG8B满分:5分8.源程序经汇编程序汇编后,得到的是(B)。
A.可执行文件B.目标文件C.源文件D.链接表满分:5分9.指令END START的作用是(A)。
A.结束汇编及从START处开始执行程序B.结束START程序C.结束汇编及结束START程序满分:5分10.不属于循环程序结构的是(D)。
A.循环初始状态B.循环控制条件C.循环体D.程序终止满分:5分二、多选题(共5道试题,共30分。
)V1.子程序的参数区和局部变量区在堆栈段的情况描述正确的是(AD)A.返回地址和参数地址位于BP指针的正偏移区B.返回地址和参数地址位于BP指针的负偏移区C.局部变量位于BP指针的正偏移区D.局部变量位于BP指针的负偏移区满分:6分2.下列哪种伪操作能定义变量(AB)。
汇编语言程序设计题目以及答案
汇编语言程序设计题目以及答案[P1] 汇编语言程序设计题目以及答案汇编语言是一种底层计算机语言,它直接使用机器指令来编写程序。
本文将介绍一些汇编语言程序设计的题目,并提供相应的答案。
通过这些题目和答案的学习,读者可以更好地理解和掌握汇编语言程序设计的基本概念和技巧。
[题目一] 计算两个数的和要求:编写汇编程序,计算两个给定的整数的和,并将结果存储在指定的内存位置中。
答案:```assemblysection .datanum1 dd 10 ; 第一个整数num2 dd 20 ; 第二个整数result dd 0 ; 结果section .textglobal _start_start:mov eax, [num1] ; 将num1值存入寄存器eaxadd eax, [num2] ; 将num2值与eax寄存器中的值相加mov [result], eax ; 将结果存储到result变量mov eax, 1 ; 准备执行系统调用mov ebx, 1 ; 文件描述符:标准输出mov ecx, result ; 输出的数据mov edx, 4 ; 数据长度int 0x80 ; 执行系统调用mov eax, 1 ; 准备执行系统调用xor ebx, ebx ; 正常退出int 0x80 ; 执行系统调用```[题目二] 字符串反转要求:编写汇编程序,将一个给定的字符串反转,并将结果存储在指定的内存位置中。
答案:```assemblysection .datastr db 'Hello', 0 ; 待反转的字符串section .bssreverse resb 6 ; 存储反转后的字符串section .textglobal _start_start:mov esi, str ; esi指向待反转的字符串mov edi, reverse ; edi指向存储反转结果的位置 mov ecx, 5 ; 字符串长度为5mov ebx, 1 ; ebx用于计数reverse_loop:mov al, [esi+ebx]mov [edi-ebx+5], alinc ebxloop reverse_loopmov byte [edi+5], 0 ; 在末尾添加字符串结束符 mov eax, 4 ; 准备执行系统调用mov ebx, 1 ; 文件描述符:标准输出mov ecx, reverse ; 输出的数据mov edx, 6 ; 数据长度int 0x80 ; 执行系统调用mov eax, 1 ; 准备执行系统调用xor ebx, ebx ; 正常退出int 0x80 ; 执行系统调用```[题目三] 求平均数要求:编写汇编程序,计算给定的一组整数的平均数,并将结果存储在指定的内存位置中。
大工19秋《汇编语言程序设计》在线作业2[学习资料]
【奥鹏大连理工】大工19秋《汇编语言程序设计》在线作业2试卷总分:100 得分:100一、单选题 (共 10 道试题,共 50 分)1.假设数据段定义如下:(1)DA1 DW ’C’,’D’(2)DA2 DB 18 DUP(?)(3)DA3 DW $-DA2(4)……(5)MOV BX,DA3(6)MOV AX,DA1上述指令执行后,BX寄存器中的内容为()。
A.19B.18C.17D.16[参考提示:请参看课本知识,回答本题]答案解析:B2.假设数据段定义如下:(1)DA1 DW ’C’,’D’(2)DA2 DB 18 DUP(?)(3)DA3 DW $-DA2(4)……(5)MOV BX,DA3(6)MOV AX,DA1上述指令执行后,AH寄存器中的内容是()。
A.43HB.42HC.01HD.00H[参考提示:请参看课本知识,回答本题]答案解析:D3.假设数据段定义如下:(1)DA1 DW ’C’,’D’(2)DA2 DB 18 DUP(?)(3)DA3 DW $-DA2(4)……(5)MOV BX,DA3(6)MOV AX,DA1上述指令执行后,AL寄存器中的内容是()。
A.43HB.42HC.01HD.00H[参考提示:请参看课本知识,回答本题]答案解析:A4.现有如下数据段(1)DATA SEGMENT(2)ARRAY1 DB 1,26,‘3456’(3)ARRAY2 DW 7,89H,10(4)VAL EQU ARRAY2-ARRAY1(5)DATA ENDS请问:该数据段已占有()字节的存储空间。
A.8B.13C.12D.11[参考提示:请参看课本知识,回答本题]答案解析:C5.假设数据段定义如下:(1)DA1 DW ’C’,’D’(2)DA2 DB 18 DUP(?)(3)DA3 DW $-DA2(4)……(5)MOV BX,DA3(6)MOV AX,DA1上述指令执行后,BX寄存器中的内容为()H。
汇编语言程序设计试题参考答案
汇编语言程序设计参考答案A卷一、单项选择题(本大题共8小题,每小题2分,共16分)1.C2.B3.B4.A5.C6.A7.A8.C9.D 10.B二、名词解释(本大题共5小题,每小题4分,共20分)11.微处理器:也成中央处理器(CPU),是微型计算机的核心部件,包含运算器、控制器、寄存器组及总线接口等,负责对计算机系统各部件进行统一的协调和控制。
12.寻址方式:就是寻找操作数或操作数地址的方式,根据寻址方式可方便地访问各类操作数。
13.伪指令:是发送给汇编程序的命令,在汇编过程中由汇编程序进行处理,如定义数据、分配存储区、定义段及定义过程等。
14.中断源:指能引起中断的外部设备或内部原因。
15.汇编语言:是一种面向CPU指令系统的程序设计语言,采用指令助记符来表示操作码和操作数,用符号地址表示操作数地址。
三、简答题(本大题共4小题,每小题5分,共20分)16.微型计算机系统软件的主要特点是什么?计算机系统软件的主要特点是简化计算机操作,支持应用软件的运行并提供相关服务,通常包括操作系统、语言处理程序等。
17.什么是逻辑地址?他由哪两部分组成?计算机存储器中给每个逻辑段编址的地址称逻辑地址。
逻辑地址是在程序中使用的地址,他由段地址和偏移地址两部分构成。
18.一个完整的汇编源程序由那些逻辑段组成?各逻辑段的主要作用是什么?一般情况下汇编语言源程序应该由以下3个逻辑段组成:①数据段:用来在内存中建立一个适当容量的工作区,以存放常数,变量等程序需要对其进行操作的数据;②堆栈段:用来在内存中建立一个适当容量的堆栈区,以便在中断、子程序调用时使用;③代码段:包括了许多以符号表示的指令,其内容就是程序需要执行的具体操作。
19. DMA数据传送方式的特点是什么?DMA数据传送方式把外设与内存交换信息的操作与控制交给DMA控制器,简化了CPU对数据交换的控制,数据传送速度快,但这种方式电路结构复杂,硬件开销大。
大工《汇编语言程序》大作业资料
大连理工大学远程与继续教育学院《汇编语言程序设计》课程设计题目:进制转换程序1.谈谈你对本课程学习过程中的心得体会与建议?汇编语言程序设计是我们计算机专科的一门专业课。
本课程是面向机器的一门编程语言课。
在对汇编语言的学习过程中,可以对计算机组成原理有更深入的了解,同时掌握汇编语言对于某些硬件编程比如单片机开发和嵌入式系统的开发应用也是必不可少的。
汇编语言相比于其他高级语言明显的优点就是运行速度快,而缺点就是需要兼顾机器本身的硬件结构特点进行编程,因此学习本课程要多实践多思考。
通过本课程的学习可以对汇编语言有一个整体的把握和认识。
当我刚开始选择这个题目是因为课本上有一个相近的代码转换,所以感觉这个题目应该很好写。
可是等到真正动手的时候就感到了困难。
首先是对字符串的输入输出的处理,解决不了就改成了字母大小写转换是每次只输入一个字母,然后根据其大小写转换,如大写就转换成小写,否则反之。
然而在随后的进制转换中用遇到了同样的问题,发现这是一个不能不解决的问题,随后查阅了资料才解决。
随后实在数值转换过程中对模块的设计上又出现了问题。
最初的构想是设计六个模块分别对应相应的数值转换功能。
可是在三个写好以后发现了下面要写的代码有很多重复的地方,于是就把这些重复的代码定义成了子函数来使用然后发现将程序按照输入、输出的不同来分模块,以BX作为连接,比原来的程序更为简洁,逻辑上也更加清楚,有种豁然开朗的感觉。
在改进程序的过程中感到非常有成就感。
在编写代码的过程中让我充分感受到了不同编程语言之间的差别。
对与高级语言来说或许是很简单的一个程序或者只需要调用已有的函数库,可是对于汇编来说却要写上几十行甚至更多的代码。
可是更加深刻的了解了寄存器、存储器之间的数据流向,因为每个考虑不周都会导致一大堆的错误出现,常常令人感到一种无力感,想要放弃。
当程序一步步接近完成,看着子函数一个个都运行成功,再组合到一起,那种喜悦是无与伦比,之前所受到的苦楚又是那么的微不足道。
大工2020年春《汇编语言程序设计》在线作业3学习资料答案
【奥鹏】-大连理工20春《汇编语言程序设计》在线作业3
提示:请认真阅读本套试卷,核对是否是您需要的题目,本套试卷只做参考学习
使用!!!
一、单选题 (共 10 道试题,共 50 分)
【题目】在汇编语言程序的开发过程中使用宏功能的顺序是( )。
[A.]宏调用,宏定义
[B.]宏展开,宏定义
[C.]宏定义,宏调用,宏展开
[D.]宏定义,宏展开,宏调用
正确的选择是:C
【题目】如果(AL)=01100011B,(AH)=00100010B,执行ADD AL,AH指令后,(AL)=( )。
[A.]01100011B
[B.]10000101B
[C.]1100101B
[D.]11B
正确的选择是:B
【题目】如果(AL)=01100011B,(AH)=00100010B,执行ADD AL,AH指令后,CF=( )。
[A.]0
[B.]1
[C.]2
[D.]3
正确的选择是:A
【题目】如果(SI)=0088H,(DS)=5570H,对于物理地址为55788H的内存字单元,其内容为0235H,对于物理地址为5578AH的内存字单元,其内容为0E60H,那么执行指令LDS SI,[SI]以后,(DS)=多少?( )
[A.]5570H
[B.]0235H
[C.]0E60H
[D.]0088H
正确的选择是:C
【题目】如果(SI)=0088H,(DS)=5570H,对于物理地址为55788H的内存字单元,其内容为0235H,对于物理地址为5578AH的内存字单元,其内容为0E60H,那么执行指令LDS SI,[SI]以后,(SI)=多少?( )
[A.]5570H。
大工20秋《汇编语言程序设计》大作业题目及要求
学习中心:专业:年级:年春/秋季学号:学生:题目:1.谈谈你对本课程学习过程中的心得体会与建议?2.《汇编语言程序设计》课程设计,从以下5个题目中任选其一作答。
《汇编语言程序设计》课程设计注意:从以下5个题目中任选其一作答。
总则:只能使用汇编语言进行编制,不能选用C/C++等高级语言作业提交:大作业上交时文件名写法为:[姓名奥鹏卡号学习中心](如:戴卫东101410013979浙江台州奥鹏学习中心[1]VIP)以附件word文档形式上交离线作业(附件的大小限制在10M以内),选择已完成的作业(注意命名),点提交即可。
如下图所示。
注意事项:独立完成作业,不准抄袭其他人或者请人代做,如有雷同作业,成绩以零分计!题目一:十进制转换十六进制程序设计要求:(1)撰写一份word文档,里面包括(算法思路、算法程序框图、主要函数代码、使用指令具体含义)章节。
(2)算法思路:设计十进制转化十六进制的算法,简单介绍该算法的基本思想,100字左右即可。
(3)算法程序框图:绘制流程图或原理图,从算法的开始到结束的程序框图。
(4)主要函数代码:列出算法的具体代码。
(5)列出算法中使用指令的含义,比如解释MOV指令的含义,ADD指令的含义,至少撰写十个指令。
总则:只能使用汇编语言进行编制,不能选用C/C++等高级语言!题目二:折半查找算法要求:(1)撰写一份word文档,里面包括(算法思路、算法程序框图、主要函数代码、使用指令具体含义)章节。
(2)算法思路:简单介绍折半查找算法的基本思想,至少100字。
(3)算法程序框图:绘制流程图或原理图,从算法的开始到结束的程序框图。
(4)主要函数代码:列出算法的具体代码,如讲一个首地址为A的N字数组,编制程序将该数组中的数据按照从大到小排序。
(5)列出算法中使用指令的含义,比如解释MOV指令的含义,CMP指令的含义,至少撰写十个指令。
总则:只能使用汇编语言进行编制,不能选用C/C++等高级语言!题目三:设立标志位算法要求:(1)撰写一份word文档,里面包括(算法思路、算法程序框图、主要函数代码、使用指令具体含义)章节。
大工19秋《汇编语言程序设计》在线作业1[学习资料]
【奥鹏大连理工】大工19秋《汇编语言程序设计》在线作业1
试卷总分:100 得分:100
一、单选题 (共 10 道试题,共 50 分)
1.设(SP)=100H,(AX)=0FFFFH 按顺序执行下列语句后(1)STC(2)PUSH AX(3)ADC AX,0(4)PUSH AX(5)POP BX,(BX)等于()。
A.F
B.2
C.1
D.0
[参考提示:请参看课本知识,回答本题]
答案解析:D
2.设(SP)=100H,(AX)=0FFFFH 按顺序执行下列语句后(1)STC(2)PUSH AX(3)ADC AX,0(4)PUSH AX(5)POP BX,(SP)等于()。
A.0FFH
B.0FEH
C.0EEH
D.00FA
[参考提示:请参看课本知识,回答本题]
答案解析:B
3.当执行指令ADD AX,BX后,若AX的内容为2BA0H,设置的奇偶标志位PF=1,下面的叙述正确的是()。
A.表示该数为偶数
B.表示结果中含2的个数为偶数
C.表示结果中含1的个数为奇数
D.表示结果中低八位含1的个数为偶数
[参考提示:请参看课本知识,回答本题]
答案解析:D
4.下列对CL寄存器的内容乘以4的正确操作是()。
A.SHL CL,1
B.ROLS CL,4
C.MUL 4
D.MOV CL,2
[参考提示:请参看课本知识,回答本题]
答案解析:A
5.下面各传送指令中,错误的是()。
A.MOV DS,AX
B.MOV [DI],[SI]
C.MOV AX,BX
D.MOV AL,'A'。
汇编语言程序设计期末大作业
汇编语言程序设计期末大作业作为汇编语言程序设计的期末大作业,我选择了一个简单的任务,即编写一个能够对一组学生成绩进行排序的程序。
为了完成这个任务,我首先定义了一个存储学生数据的数组,每个学生的数据包括学生姓名和学生成绩。
然后,我使用冒泡排序算法对学生成绩进行排序。
冒泡排序算法的基本思想是从数组的第一个元素开始,依次比较相邻的两个元素,如果它们的顺序错误,则交换它们的位置。
这样一轮比较下来,最大的元素就会被移到数组的最后一个位置。
然后,我们对剩下的元素再次进行相同的比较和交换,直到整个数组都被排序。
在我的程序中,我使用了8086汇编语言编写了一个排序子程序。
这个子程序接受一个指向学生数据数组的指针和数组的长度作为输入,并使用冒泡排序算法对数组进行排序。
在排序过程中,我使用了一个内循环和一个外循环来实现比较和交换的操作。
内循环用于比较和交换数组中相邻的两个元素,而外循环用于控制内循环的次数,以保证整个数组都被排序。
在主程序中,我首先定义了一个存储学生数据的数组,并初始化了数组中的元素。
然后,我调用排序子程序,并传递数组的指针和长度作为参数。
排序子程序完成后,我打印排序后的学生数据,以展示程序的结果。
通过编写这个程序,我不仅复习了汇编语言的基本知识和技巧,还学会了使用冒泡排序算法对数据进行排序。
我发现在汇编语言中实现算法可能会比高级语言更复杂和繁琐,但它也提供了更大的灵活性和控制力。
此外,我通过这个项目还加深了对指针和数组的理解和应用,并提高了编写结构化程序的能力。
总的来说,这个汇编语言程序设计的期末大作业让我在实践中巩固了所学的知识,培养了解决问题和编写程序的能力。
通过不断地尝试和调试,我成功地实现了一个能够对一组学生成绩进行排序的程序。
这个过程对我个人的成长和学习是非常有意义的。
汇编语言程序设计习题及答案
汇编语言程序设计习题及答案汇编语言程序设计习题及答案汇编语言是一种底层的计算机语言,它直接操作计算机的硬件资源。
虽然在现代计算机编程中,高级语言如C、Java等更为常见,但了解汇编语言的基本原理和编程技巧对于理解计算机底层工作原理和进行性能优化非常重要。
本文将介绍一些汇编语言程序设计的习题及其答案,帮助读者巩固和提升汇编语言编程能力。
一、基础习题1. 编写一个汇编程序,将存储器中的某个字节的值加1,并将结果存回原位置。
答案:```assemblyMOV AL, [地址]INC ALMOV [地址], AL```2. 编写一个汇编程序,计算存储器中一个数组的和,并将结果存放在指定的寄存器中。
答案:```assemblyMOV CX, 数组长度MOV BX, 数组首地址MOV AX, 0LOOP_START:ADD AX, [BX]ADD BX, 2LOOP LOOP_START```二、进阶习题1. 编写一个汇编程序,实现字符串的逆序输出。
答案:```assemblyMOV SI, 字符串首地址MOV DI, 字符串尾地址MOV CX, 字符串长度DEC CXREVERSE:MOV AL, [SI]MOV AH, [DI]MOV [DI], ALMOV [SI], AHINC SIDEC DILOOP REVERSE```2. 编写一个汇编程序,实现两个16位无符号整数的相乘,并将结果存放在指定的寄存器中。
答案:```assemblyMOV AX, 第一个数MOV BX, 第二个数MUL BX```三、挑战习题1. 编写一个汇编程序,实现一个简单的计算器,支持加法、减法、乘法和除法运算。
答案:```assemblyREAD_INPUT:; 读取用户输入; ...PARSE_INPUT:; 解析用户输入,获取操作数和运算符; ...CALCULATE:; 根据运算符进行相应的计算; ...DISPLAY_RESULT:; 将计算结果显示给用户; ...LOOP:; 循环执行计算器程序; ...```2. 编写一个汇编程序,实现一个简单的迷宫游戏,玩家通过键盘控制角色在迷宫中移动,并找到出口。
《汇编语言程序设计》练习题参考答案.
《汇编语言程序设计》练习题一参考答案一、简答题1.2.答:字节单元:(30022H) = AB H,(30024H) = EF H字单元:(30021H) = AB34 H,(30022H) = CDAB H。
3.答:(1)MOV BX, OFFSET BLOCK + 0AHMOV DX, [BX](2)MOV BX, 0AHMOV DX, BLOCK[BX](3)MOV BX, OFFSET BLOCKMOV SI, 0AHMOV DX, [BX][SI]4.答:BYTE_VAR 42 59 54 45 0C EE 00 ?? - 01 02 01 02 ?? 00 ?? 0102 01 02 ?? 00 ?? 01 02 - 01 02 ??WORD_VAR 00 00 01 00 02 00 00 00 - 01 00 02 00 00 00 01 0002 00 00 00 01 00 02 00 - 00 00 01 00 02 00 ?? ??FB FF 59 42 45 54 56 02 -5.答:宏展开:2 DATA0 DW ?2 DATA1 DW ?6.答:可以用来指示存储器地址的寄存器有BX、SP、BP、DI、SI、IP、CS、DS、7.答:该程序的第一个字的物理地址是0AAA40H。
8.答:(1) 064DH(2) 0691H(3) 05ECH9.答:(1)MOV AX, [ BX+0CH ]MOV ZERO, AX(2)MOV AX, ARRAY[BX]MOV ZERO, AX10答:DATASG SEGMENT AT 0E000HWORD_ARRAY LABEL WORDBYTE_ARRAY DB 100 DUP (?)DATASG ENDSSTACKSG SEGMENT PARA STACK 'STACK'DW 32 DUP (?)TOS LABEL WORDSTACKSG ENDSCODESG SEGMENTORG 1000HMAIN PROC FARASSUME CS:CODESG, DS:DATASG, ES:DATASG, SS:STACKSG START:MOV AX, STACKSGMOV SS, AXMOV SP, OFFSET TOSPUSH DSSUB AX, AXPUSH AXMOV AX, DATASGMOV DS, AXMOV ES, AX……RETMAIN ENDPCODESG ENDSEND START11.答: CLRB MACRO N, ARRAYCLDMOV CX, NMOV AL, 20HLEA DI, ARRAYREP STOSBENDM12.答:(1)AX、BX、CX、DX、AH、AL、BH、BL、CH、CL、DH、DL、13.答:唯一正确的是D。
汇编语言程序设计期末大作业。教学内容
汇编语言程序设计期末大作业。
汇编语言程序设计期末大作业:编写一完整的汇编语言源程序,实现从键盘输入一个班(不少于10人)的学生记录(学号:8位数字、姓名:不多余10个英文字符,语文:0-100的整数、数学:0-100的整数、英语:0-100的整数)后,(1)将输入的记录保存在C盘根目录下名为stuscore.dat的文件中;(2)按照各科成绩总分先高后低的顺序输出全部学生记录和排名顺序;(3)输出总分高于班平均总分的全部学生记录。
要求:元月4日前提交一份纸质报告(班长统一收齐)。
大作业格式:1.标题:汇编语言程序设计期末大作业2.作业题目:(上述)3.算法分析(流程图)4.实现代码(必须含注释)5.实验结果(汇编、连接、运行的截图)6.总结代码实现student struct ;定义结构Snumber db 11,0,11 dup(?)Sname db 11,0,11 dup(?)English db 4,0, 4 dup(?)Chinese db 4,0, 4 dup(?)Math db 4,0, 4 dup(?)Sum db 4,0, 4 dup(?)student ends;数据段data segmentmessMenu db '----------------The Homework of Assembler-----------------$'messMenu1 db '----------Name:TU LIN No:8000110028--------------$'messNext db '--------------------------------------------------------------------------------$'messName db 'Please input the student name(<11):$'messNum db 'Please input the student number(<11):$'messEnglish db 'Please input the English score:$'messChinese db 'Please input the Chinese score:$'messMath db 'Please input the Math score:$'mess1 db 'name:$'mess2 db 'number:$'mess3 db 'English:$'mess4 db 'Chinese:$'mess5 db 'Math:$'messSumScore db 'SumScore:$'MessTab db 09,'$' ;Tab 用于排列对齐StudAddress dw 10 dup(?) ;存各学生的偏移地址EnglishScore db 10 dup(?) ;存学生英语成绩的十进制数ChineseScore db 10 dup(?) ;存学生语文成绩的十进制数MathScore db 10 dup(?) ;存学生数学成绩的十进制数Average dw ?Buf db 6 dup(?)SumScore dw 10 dup(?) ;用于记录每个学生总分NumbersOfStudent db 0 Stu student 10 dup(<>)SumRank db 0, 1, 2, 3, 4, 5, 6, 7, 8, 9FName db 'C:\StuScore.dat', 0;文件FileHandle dw ?;文件句柄EndOfFile dw 0ffhOtherLine db 0ah, 0dh, '$'FileSpace db " "data ends;堆栈段stack segmentdb 100h dup(?)stack ends;代码段code segmentassume cs:code,ds:data,ss:stackstart: mov ax,datamov ds,ax ;将数据段首地址传给dsmov ax,stackmov ss,ax ;将堆栈段首地址传给ssmov sp,0call Endlinelea dx,messMenumov ah,09hint 21hcall Endlinelea dx,messMenu1mov ah,09hint 21hcall Endlinelea si,Stu ;取student的首地址给siInputStu:call GetStudentlea dx,messNextmov ah,09hint 21hadd si,50loop InputStu ;输出循环结束lea si,Stucall GetEnglishScorecall GetChineseScorecall GetMathScorecall Stop ;程序运行停止一下,按回车键继续执行call Writetofilecall stopcall SumAveragecall GetSumcall GetAddresscall SortStudentcall Stop ;程序运行暂停一下,按回车键,继续执行call ShowStumov ah,4chint 21h;============================================================;子程序名:GetStudent;功能:录入学生信息;============================================================ GetStudent proc nearpush sipush dxpush axpush cx ;子程序保护现场lea dx,messNamemov ah,9int 21hlea dx,[si].Snameint 21hcall Endlinelea dx,messNummov ah,9int 21hlea dx,[si].Snumbermov ah,0Ahint 21hcall Endlinelea dx,messEnglishmov ah,9int 21hlea dx,[si].Englishmov ah,0Ahint 21hcall Endlinelea dx,messChinesemov ah,9int 21hlea dx,[si].Chinesemov ah,0Ahint 21hcall Endlinelea dx,messMathmov ah,9int 21hlea dx,[si].Mathmov ah,0Ahint 21hcall Endlinepop cxpop axpop dxpop siretGetStudent endp;============================================================ ;子程序名:TureShow;功能辅助子程序ShowStu,用于输出字符串;============================================================ TureShow proc nearpush dx ;保护相关寄存器push cxpush bxpush axmov bx,dx ;将bx指向缓存区的地址xor cx,cxmov cl,[bx+1] ;cl存放了缓存区录入的字符数LoopTS:mov dl,[bx+2] ;从第三个偏移地址开始显示mov ah,2 ;调用单个字符输出中断int 21hinc bxloop LoopTSpop axpop bxpop cxpop dxretTureShow endp;============================================================ ;子程序名:ShowStu;功能:显示学生信息记录;============================================================ ShowStu proc nearpush cxpush axpush dxpush sipush di ;保护现场call Endlinelea di,SumScorelea bx,StudAddressmov cx,10Loop1: mov si,word ptr[bx]lea dx,mess1mov ah,09hlea dx,[si].Snamecall TureShowcall MessTb ;输出1个Tab 用于排序对齐lea dx,mess2mov ah,09hint 21hlea dx,[si].Snumbercall TureShowcall MessTb ;输出1个Tab 用于排序对齐lea dx,mess3mov ah,09hint 21hlea dx,[si].Englishcall TureShowcall MessTb ;输出1个Tab 用于排序对齐lea dx,mess4mov ah,09hint 21hlea dx,[si].Chinesecall TureShowcall MessTb ;输出1个Tab 用于排序对齐lea dx,mess5mov ah,09hint 21hlea dx,[si].Mathcall TureShowcall MessTb ;输出1个Tab 用于排序对齐lea dx,messSumScoremov ah,09hint 21hmov ax,[di]call Outputcall Endlineadd bx,2add di,2loop Loop1lea dx,messNextmov ah,09hpop dipop sipop dxpop axpop cxretShowStu endp;=============================================================;子程序名:Endline;功能:回车换行;============================================================= Endline proc nearpush ax ;保护相关寄存器push dxpush cxmov ah,2 ;回车mov dl,0ahint 21hmov ah,2 ;换行mov dl,0dhint 21hpop cxpop dxpop axretEndline endp;=============================================================;子程序名GetEnglishScores:;功能:将得到的指定个学生的分数以十进制保存到EnglishScore缓冲区中;============================================================= GetEnglishScore proc nearpush di ;保护相关寄存器push sipush dxpush cxpush bxpush axpush bplea si,Stu ;使si指向第一个学生的偏移地lea bp,EnglishScore ;使bp指向以十进制存学生分数的地址mov cx,10 ;共有指定个学生LoopScores0:push cx ;保护外循环的CX值lea bx,[si].English ;使bx指向学生字符分数缓冲区xor di,dixor cx,cxmov cl,[bx+1] ;学生字符分数缓冲区的字符数即使循环次数LoopScore0:mov al,[bx+2] ;从第三个偏移地址开始sub al,30h ;得到一个十进制值xor ah,ahxchg ax,di ;使其暂存到di,且将高位di的值乘10push si ;保护寄存器的原值push dxmov si,10mul si ;将si乘10,乘积低位保存在axpop dxpop sixchg ax,di ;将原来di中低位的值与高位的值ax交换回来add di,ax ;至此又录入一位十进制数inc bxloop LoopScore0mov ax,dimov ds:[bp],al ;将得到的十进制分数存入保存十进制分数缓冲区EnglishScore中add si,50 ;使di指向下一个学生的偏移地址inc bp ;使bp指向下一个保存十进制分数缓冲区的下一个单元,以保存下一个学生的分数pop cx ;弹出外循环的CX值loop LoopScores0pop bppop axpop bxpop cxpop dxpop sipop diretGetEnglishScore endp;=============================================================;子程序名GetChineseScore:;功能:将得到的指定个学生的分数以十进制保存到ChineseScore缓冲区中;============================================================= GetChineseScore proc nearpush di ;保护相关寄存器push sipush dxpush cxpush bxpush axpush bplea si,Stu ;使di指向第一个学生的偏移地lea bp,ChineseScore ;使bp指向以十进制存学生分数的地址mov cx,10 ;共有指定个学生LoopScores1:push cx ;保护外循环的CX值lea bx,[si].Chinese ;使bx指向学生字符分数缓冲区xor di,dixor cx,cxmov cl,[bx+1] ;学生字符分数缓冲区的字符数即使循环次数LoopScore1:mov al,[bx+2] ;从第三个偏移地址开始sub al,30h ;得到一个十进制值xor ah,ahxchg ax,di ;使其暂存到si,且将高位si的值乘10push si ;保护寄存器的原值push dxmov si,10mul si ;将si乘10,乘积低位保存在axpop dxpop sixchg ax,di ;将原来si中低位的值与高位的值ax交换回来add di,ax ;至此又录入一位十进制数inc bxloop LoopScore1mov ax,dimov ds:[bp],al ;将得到的十进制分数存入保存十进制分数缓冲区ChineseScore中add si,50 ;使di指向下一个学生的偏移地址inc bp ;使bp指向下一个保存十进制分数缓冲区的下一个单元,以保存下一个学生的分数pop cx ;弹出外循环的CX值loop LoopScores1pop bppop axpop bxpop cxpop dxpop sipop diretGetChineseScore endp;=============================================================;子程序名GetMathScore:;功能:将得到的指定个学生的数学分数以十进制保存到MathScore缓冲区中;============================================================= GetMathScore proc nearpush di ;保护相关寄存器push sipush dxpush cxpush bxpush axpush bplea si,Stu ;使di指向第一个学生的偏移地lea bp,MathScore ;使bp指向以十进制存学生分数的地址mov cx,10 ;共有指定个学生LoopScores2:push cx ;保护外循环的CX值lea bx,[si].Math ;使bx指向学生字符分数缓冲区xor di,dixor cx,cxmov cl,[bx+1] ;学生字符分数缓冲区的字符数即使循环次数LoopScore2:mov al,[bx+2] ;从第三个偏移地址开始sub al,30h ;得到一个十进制值xor ah,ahxchg ax,di ;使其暂存到si,且将高位si的值乘10push si ;保护寄存器的原值push dxmov si,10mul si ;将si乘10,乘积低位保存在axpop dxpop sixchg ax,di ;将原来si中低位的值与高位的值ax交换回来add di,ax ;至此又录入一位十进制数inc bxloop LoopScore2mov ax,dimov ds:[bp],al ;将得到的十进制分数存入保存十进制分数缓冲区MathScore中add si,50 ;使di指向下一个学生的偏移地址inc bp ;使bp指向下一个保存十进制分数缓冲区的下一个单元,以保存下一个学生的分数pop cx ;弹出外循环的CX值loop LoopScores2pop bppop axpop bxpop cxpop dxpop sipop diretGetMathScore endp;==============================================================;子程序名:Writetofile;功能:用于创建文件并且存储学生信息;==============================================================Buildfile :push axpush cxpush dxmov ah, 3chmov cx, 00lea dx, FNameint 21hjc CreateFileErrormov FileHandle, axjmp CreateFileOk CreateFileError:mov ah, 09hmov dx, offset CreateFileErrorint 21hCreateFileOk:pop dxpop cxpop axretWriteToFile:push axpush bxpush cxpush dxpush dipush silea di, [si].SNamemov dx, diadd dx, 2mov cl, [di+1]mov ch, 0mov bx,FileHandlemov ah, 40hint 21hjc WriteFileErrorcall WriteSpacelea di, [si].SNumbermov dx, diadd dx, 2mov ch, 0mov bx, FileHandlemov ah, 40hint 21hjc WriteFileErrorcall WriteSpacelea di, [si].ChineseScore mov dx, diadd dx, 2mov cl, [di+1]mov ch, 0mov bx, FileHandlemov ah, 40hint 21hjc WriteFileErrorcall WriteSpacelea di, [si].MathScore mov dx, diadd dx, 2mov cl, [di+1]mov ch, 0mov bx, FileHandlemov ah, 40hint 21hjc WriteFileErrorcall WriteSpacelea di, [si].EnglishScore mov dx, diadd dx, 2mov cl, [di+1]mov ch, 0mov bx, FileHandlemov ah, 40hint 21hjc WriteFileErrorcall WriteSpacelea di, [si].SumScore mov dx, diadd dx, 2mov ch, 0mov bx, FileHandlemov ah, 40hint 21hjc WriteFileErrorcall WriteEndLinejmp WriteFileOkWriteFileError:lea dx,WriteFileErrormov ah, 09hint 21hWriteFileOk:pop sipop dipop dxpop cxpop bxpop axret;******************************************************************** WriteSpace:mov cx, 2lea dx, FileSpacemov bx, FileHandlemov ah, 40hint 21hret;******************************************************************** WriteEndLine:mov cx, 2lea dx, OtherLinemov bx, FileHandlemov ah, 40hint 21hretCloseFile:mov ah, 40hmov bx, FileHandlemov cx, 2lea dx, EndOfFileint 21hmov ah, 3ehmov bx, FileHandleint 21hret;============================================================== ;子程序名:GetSum;功能:用于计算出每个学生的各科成绩的总分;============================================================== GetSum proc nearpush axpush dipush sipush bxpush cxlea di,EnglishScorelea si,SumScoremov cx,10mov al,0LoopSum:mov ah,0mov al,[di]mov word ptr[si],axinc diadd si,2loop LoopSumlea di,ChineseScorelea si,SumScoremov cx,10mov al,0LoopSum1:mov ah,0mov al,[di]add word ptr[si],axinc diadd si,2loop LoopSum1lea di,MathScorelea si,SumScoremov cx,10mov al,0LoopSum2:mov ah,0mov al,[di]add word ptr[si],axinc diadd si,2loop LoopSum2pop cxpop bxpop sipop dipop axretGetSum endp;============================================================== ;子程序名:SumAverage;功能:用于计算出平均成绩,并输出总分高于平均分的学生记录;============================================================== SumAverage proc nearpush axpush bxpush cxpush dxpush simov cl, NumbersOfStudentmov ch, 0mov bx, cxmov ax, 0mov dx, 0mov si, offset SumScoreAverageLoop:add ax, word ptr [si]adc dx, 0add si, 2loop AverageLoopdiv bxmov Average, ax;输出高于平均成绩的同学mov dx, offset ShowBigThanAveragemov ah, 09hint 21hmov cl, SNumbermov ch, 0mov di, 0mov si, 0ShowBigThanAverage:mov ax, SumScore[si]cmp ax, Averagejl ShowBigOkmov dl, SumRank[di]mov al, type studentmul dlmov bx, axcall Outputadd si, 2inc diloop ShowBigThanAverageShowBigOk:mov dx, offset OtherLinemov ah, 09hint 21hpop sipop dxpop cxpop bxpop axretSumAverage endp;============================================================= ;子程序名:Output;功能:将ax中的二进制以十进制形式输出;============================================================== Output proc nearpush dipush bxpush axpush dxlea di,Bufadd di,6mov byte ptr[di],'$'mov bx,10CHANGE:dec dimov dx,0div bxadd dl,30hmov byte ptr[di],dlcmp ax,0jnz CHANGEmov dx,dimov ah,09hint 21hpop dxpop axpop bxpop diretOutput endp;=============================================================;子程序名:GetAddress;功能:将指定个学生的偏移地址顺序保存到StudAddress;============================================================= GetAddress proc nearpush si ;保护相关寄存器push bxpush cxlea si,Stu ;使di指向第一个学生的偏移地址lea bx,StudAddress ;使bx指向存学生偏移地址的缓冲区mov cx,10 ;共有指定个学生LoopAdd:mov word ptr[bx],word ptr siadd bx,2 ;使bx指向存学生偏移地址的缓冲区的下一个地址add si,50 ;使di指向下一个学的生偏移地址loop LoopAddpop cxpop bxpop diretGetAddress endp;=============================================================;子程序名:SortStudent;功能:根据学生分数进行排序;用冒泡法根据学生分数对分数从大到小排序;同时将对应的偏移地址进行排序;============================================================= SortStudent proc nearpush dxpush cxpush bxpush axpush dipush simov cx,10dec cxLoopChange0:push cx ;保护外循环的CX值lea bx,SumScore ; bx指向学生分数偏移地址lea si,StudAddress ;si指向存学生偏移地址的地址LoopChange1: ;将学生分数和下一个学生分数分别送入al,dl并比较大小;若当前学生分数小于下一个分数要交换其分数mov dx,word ptr[bx+2] ;此分数对应的学生的偏移地址mov ax,word ptr[bx]cmp ax,dxja EndExchange ;若大于则转而比较下两个分数值;交换偏移地址mov ax,word ptr [si+2] ;指定向ax中传入2个字节数据mov dx,word ptr [si]mov [si],axmov [si+2],dx;交换分数值mov ax,word ptr[bx+2]mov dx,word ptr[bx]mov word ptr[bx],axmov word ptr[bx+2],dxEndExchange:add si,2 ;指向下一个学生偏移地址的地址add bx,2 ;指向下一个存学生分数的地址loop LoopChange1pop cx ;保护外循环的CX值loop LoopChange0pop sipop dipop axpop bxpop cxpop dxretSortStudent endp;=============================================================;子程序名:MessTb;功能:输出1个Tab键;============================================================= MessTb proc nearpush dx ;保护相关寄存器push axlea dx,MessTab ;指向输出1个Tab键缓冲区mov ah,9 ;调用字符串输出程序int 21hpop axpop dxretMessTb endp;===================================================================;子程序名:Stop;功能是让程序停止运行一下,输入回车键继续执行;=================================================================== Stop proc nearpush ax ;保护相关寄存器push dxpush cxmov ah,1 ;回车int 21hpop cxpop dxpop axretStop endpcode endsend start。
大工2020年春《汇编语言程序设计》在线作业1学习资料答案
【奥鹏】-大连理工20春《汇编语言程序设计》在线作业1
提示:请认真阅读本套试卷,核对是否是您需要的题目,本套试卷只做参考学习
使用!!!
一、单选题 (共 10 道试题,共 50 分)
【题目】对计算机的软件、硬件进行管理的是( )的功能。
[A.]操作系统
[B.]数据库管理系统
[C.]编译器
[D.]用户程序
正确的选择是:A
【题目】以下有关运算器运算功能的描述,( )是正确的。
[A.]只做加法
[B.]只做算术运算
[C.]既做算术运算又做逻辑运算
[D.]只做逻辑运算
正确的选择是:C
【题目】一个完整的计算机系统应包括( )。
[A.]运算器、存储器、控制器
[B.]外部设备和主机
[C.]主机和应用程序
[D.]配套的硬件和软件系统
正确的选择是:D
【题目】运算器虽有许多部件组成,但核心部分是( )。
[A.]数据总线
[B.]算术逻辑运算单元
[C.]cache
[D.]CPU和寄存器
正确的选择是:B
【题目】在计算机系统中,存储器是记忆设备,它主要用来( )。
[A.]存放数据
[B.]存放程序
[C.]存放数据和程序
[D.]存放微程序。
大工2020年春《汇编语言程序设计》在线作业2学习资料答案
【奥鹏】-大连理工20春《汇编语言程序设计》在线作业2
提示:请认真阅读本套试卷,核对是否是您需要的题目,本套试卷只做参考学习
使用!!!
一、单选题 (共 10 道试题,共 50 分)
【题目】汇编语言源程序中,每个语句由四项组成,如语句要完成一定功能,那么该语句中不可省略的项是( )。
[A.]名字项
[B.]操作数项
[C.]注释项
[D.]以上都不对
正确的选择是:B
【题目】汇编语言语句格式中对名字项的规定如下,请找出其中错误的说法( )。
[A.]名字的第一个字符可以是大写英文字母
[B.]名字的第一个字符可以是字母、数字、@、_
[C.]名字的有效长度≤31个字符
[D.]一般来说,名字项可以是标号
正确的选择是:B
【题目】以下五个指令(1)MOV AL,55H (2)MOV CL,2(3)ROL AL,CL (4)OR AL,1 (5)RCL AL,CL 顺序执行完后,(AL)=多少( )?
[A.]54H
[B.]53H
[C.]55H
[D.]52H
正确的选择是:A
【题目】以下五个指令(1)MOV AL,55H (2)MOV CL,2(3)ROL AL,CL (4)OR AL,1 (5)RCL AL,CL 顺序执行完后,(CL)=多少( )?
[A.]2
[B.]3
[C.]4
[D.]5
正确的选择是:A
【题目】以下五个指令(1)MOV AL,55H (2)MOV CL,2(3)ROL AL,CL (4)OR AL,1 (5)RCL AL,CL 顺序执行完后,CF=多少( )?
[A.]1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目:题目五:信息检索系统
1.谈谈你对本课程学习过程中的心得体会与建议?
在接触这门课程初始,就感到汇编语言并不是很容易就可以弄懂的。
相比较以前学过的程序语言如C、C++等,电脑等于在迁就人的思维方式,但汇编却是接近机器语言的一门语言,我们学习和编写程序时必须要去迁就电脑的思维方式,要设身处地地用电脑的角度去思考问题,这就是我学习汇编语言时感受最深的地方,想起来很简单,写起来相当的不易。
汇编的学习不仅仅是学习其语法,而更多的是学习计算机基本的体系结构。
其中遇到很多新的概念,名字。
如寄存器、中断、寻址方式等。
这些概念在刚接触汇编这门课的时候难以理解,但在之后的学习中通过老师的讲解,自己亲手编程的方式也就渐渐清晰明了。
我们在学习之前都需要明确什么是汇编语言。
计算机能够直接识别的数据是由二进制数0和1组成的代码。
机器指令就是用二进制代码组成的指令,一条机器指令控制计算机完成一个基本操作。
为了克服机器语言的缺点,人们采用助记符表示机器指令的操作码,用变量代替操作数的存放地址等,这样就形成了汇编语言。
经过一个学期的学习,我也慢慢摸出了汇编学习的规律。
首先,学习这门语言时如果能联系上以前学过的其他高级语言的知识,最重要的是一些思考问题,实现功能的逻辑的思考,会帮助我们很快的找到编写程序的思路和方向。
例如C语言程序的运行逻辑结构有顺序(按语句依次执行)、分支结构(IF...THEN...ELSE...),循环结构(FOR...NEXT)三种结构,也通过C语言了解并掌握了什么是子程序,什么是调用。
事实上,汇编语言中有关程序结构,子程序等等的知识都是跟C语言十分相似的,只是在编程时用到的语言不同:汇编语言完全面向机器,需要指明数据在寄存器、内存中的流向。
第二,学习汇编语言,首要问题是学习80X86指令系统。
如果能将指令系统中的各个助记符、格式等都能完全掌握并灵活运用,大部分工作就已经完成了。
指令系统确定了CPU所能完成的功能,是用汇编语言进行程序设计的最基本部分。
如果不熟悉汇编指令的功能及其有关规定,那肯定不能灵活使用汇编语言。
指令的种类十分繁杂,但其格式却是统一的。
其中方括号中的内容为可
选项。
指令助记符决定了指令的功能,对应一条二进制编码的机器指令。
指令的操作数个数由该指令确定,可以没有操作数,也可以有一个或多个操作数,大多数指令要显示写出来,还有些操作数是隐含的。
当指令包含操作数的时候,书写时必须遵守:1、指令助记符和操作数之间有分隔符,比如几个空格;2、如果含有多个操作数,操作数之间用逗号分隔。
现在简单总结汇编语言指令的分类:1、数据传送指令;2、标志位操作指令;3、算术运算指令;4、逻辑运算指令;5、移位运算指令;6、位操作指令;7比较运算指令;8、循环指令;9、转移指令;10、条件设置字节指令;11、字符串操作指令;12、BCD码运算调整指令;13、处理器指令。
在编写汇编程序时,应该注意特别容易出现的错误,例如在编写数据传送指令时,目的操作数和源操作数的类型一定要匹配,CS不能作为目的操作数,offset后只能跟简单地址符号,等等。
汇编语言的寻址方式有直接寻址,寄存器寻址,基址变址寻址,相对基址变址寻址等等,掌握这些都是编写汇编程序很重要的环节。
汇编语言中的程序结构,子程序等知识也会帮助我们编写出一个更加完善的汇编程序。
另外,我们还应该掌握DOS系统功能调用,宏汇编等知识。
这里要对子程序和宏汇编加以区分,我的理解是:子程序是调用,而宏是替换,比如一个MAX宏,所有出现MAX的地方,都用宏代码代替。
在学习汇编语言时,指令的功能是学习和掌握的重点,要准确有效并合理的使用这些指令,必须了解一些使用的规则。
现对汇编语言编程时的规则进行总结,归纳起来有三点:1、要求指令操作数的寻址方式;2、指令对标志位的影响和标志位对指令的影响;3、指令的执行时间,对可完成同样功能的指令,要选用执行时间短的指令。
还有一点十分重要。
和所有的程序设计语言一样,要学好汇编语言,实验是必不可少的环节。
我们深有体会:书上的程序都能看懂,基本原理也都明白,但是在自己亲手编写程序时,却无从下手,甚至连第一句该怎么写都不知道。
通过实验,可以在很大程度上加深印象。
在书上看程序,一切都是理所当然,十分顺利,而自己动手,才会真正发现自己的不足之处。
程序的编写在记事本中进行即可,掌握debug的使用对实验是有很大帮助的。
现在汇编课程已经结束,感觉不如其他语言学的好,但再不是第一天接触时的云里雾里了,已经有了初步的了解和熟悉,虽说不上得心应手,但简单的问题还是难不倒我的。
书本上的知识是有限的,课后的学习是无止境的。
想要把汇编学的很好,我想我还需要花更多的时间在课后的时间里。
以上便是我。