微机原理试题库及答案2013N修改版 - 图文

更新时间:2023-10-30 23:14:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

微机原理及应用试题库 第一章 微型计算机系统 ................................................................................................................. 1 1.1选择题................................................................................................................................. 1 1.2判断题................................................................................................................................. 2 1.3填空题................................................................................................................................. 2 1.4简答题................................................................................................................................. 3 第二章 处理器结构 ......................................................................................................................... 4 2.1选择题................................................................................................................................. 4 2.2名词解释题 ......................................................................................................................... 4 2.3判断 .................................................................................................................................... 5 2.4填空题................................................................................................................................. 6 2.5简答题................................................................................................................................. 6 第三章 数据处理 ............................................................................................................................. 7 3.1.选择 ................................................................................................................................... 7 3.2.名词解释............................................................................................................................. 8 3.3.判断 ................................................................................................................................... 9 3.4.填空 ................................................................................................................................... 9 3.5.简答题............................................................................................................................... 10 第四章 指令系统 ........................................................................................................................... 11 4.1.选择 .................................................................................................................................. 11 4.2.名词解释........................................................................................................................... 12 4.3.判断 .................................................................................................................................. 12 4.4.填空 .................................................................................................................................. 12 4.5.简答题............................................................................................................................... 13 第五章 汇编语言程序设计 ........................................................................................................... 15 5.1.选择 .................................................................................................................................. 15 5.2.名词解释........................................................................................................................... 16 5.3.判断 .................................................................................................................................. 16 5.4.填空 .................................................................................................................................. 16 5.5.简答题............................................................................................................................... 17 5.6.应用题............................................................................................................................... 19 第六章 微机总线 ........................................................................................................................... 40 6.1.选择 .................................................................................................................................. 40 6.2.名词解释........................................................................................................................... 41 6.3.判断 .................................................................................................................................. 41 6.4.填空 .................................................................................................................................. 41 6.5.简答题............................................................................................................................... 42 1

第七章 存储系统 ........................................................................................................................... 44 7.1.选择 .................................................................................................................................. 44 7.2.名词解释........................................................................................................................... 44 7,3.判断 .................................................................................................................................. 45 7.4.填空 .................................................................................................................................. 46 7.5.简答题............................................................................................................................... 46 第八章 无条件与查询传送方式 ................................................................................................... 49 8.1.选择 .................................................................................................................................. 50 8.2.名词解释........................................................................................................................... 51 8.3.判断 .................................................................................................................................. 51 8.4.填空 .................................................................................................................................. 52 8.5.简答题............................................................................................................................... 52 第九章 中断与DMA传送方式 ................................................................................................... 54 9.1.选择 .................................................................................................................................. 54 9.2.名词解释........................................................................................................................... 54 9.3.判断 .................................................................................................................................. 55 9.4.填空 .................................................................................................................................. 55 9.5.简答题............................................................................................................................... 56 第十章 常用接口技术 ................................................................................................................... 58 10.1.选择 ................................................................................................................................ 58 10.2名词解释......................................................................................................................... 59 10.3判断 ................................................................................................................................ 59 10.4填空 ................................................................................................................................ 59 10.5简答题 ............................................................................................................................ 60 10.6应用题 ............................................................................................................................ 61 组卷方案 题型 选择 判断 填空 简答题 名词解释 应用题 题数 10 10 10 5 2 2 满分 10×1.5=15 10×1=10 10*2=20 5*4=20 5*2=10 10+15=25 2,6,7 5,10 1,2;3,4;6,7;8,9;5,10; 3,4;8,9; 1~10 单出章节 合出章节 2

第一章 微型计算机系统 1.1选择题 1.计算机的发展阶段通常是按计算机所采用的( )来划分的。 A.内存容量 B.电子器件 C.程序设计 D.操作系统 2. 一个完整的计算机系统通常应包括( )。 A、系统软件和应用软件 B、计算机及其外部设备 C、硬件系统和软件系统 D、系统硬件和系统软件 3. PC机硬件系统从逻辑上看主要由CPU、内存储器、外存储器、输入设备、输出设备 以及( )组成。 A.运算器 B.键盘 C.显示器 D.总线 4. 以下叙述正确的是( )。 A. 微机的字长可以是8、16、24、32位 B. 微机的字长可以是8、16、32、64位 C. 微机的字长可以是8、16、24、32K D. 字长是指计算机处理数据的精度 5. BIOS是“基本输入输出系统”,在现代的微机系统中,BIOS中代码( )。 A.是不能升级的 B. 是可以升级的 C.更换BIOS芯片后才可以升级 D. 以上说法都不正确 6. 以下有关CPU的说法不正确的是( )。 A. CPU也称作运算控制单元 B. CPU也称作微处理器 C. CPU是微型机的核心部件。 D. CPU也称作运算处理单元 7. 冯?诺依曼计算机的基本思想主要是指( )。 A. 二进制编码和存储程序控制 B. 二进制数和存储器 C. CPU和存储器 D. 存储器和输入输出设备 8. 冯?诺依曼计算机的硬件由( )大基本部件组成。 A. 3 B. 4 C. 5 D. 6 9. 冯?诺依曼计算机的硬件由( )等大基本部件组成。 A. 运算器、控制器、存储器和输入输出设备 B. 寄存器、运算器、控制器、存储器 C. 寄存器、CPU和存储器 D. 存储器和输入输出设备 10. 在现代的微机系统中,描述CPU主频常用的单位是( )。 A. Hz B. KHz C. MHz D. GHz 11. 在现代的微机系统中,描述内存容量常用的单位是( )。 A. B B. KB C. MB D. GB 12. 微型计算机和各个外部设备之间用( )连接起来,再配上软件,就构成了微机系统。 A. 系统总线 B.通信总线 C.数据总线 D.片内总线 13. 所谓微机的字长是指( )。 A. CPU内部数据总线的位数。B. CPU外部数据总线的位数。 C. CPU地址总线的位数。 D. CPU中运算器一次能处理二进制数的最大位数。 14. ( )是以CPU为核心,加上存储器,I/O接口和系统总线构成的. A.微处理器 B.微型计算机 C.微型计算机系统 D.计算机. 1

15. 微型计算机是以超大规模集成电路为主要部件,以集成了控制器和( )的微处理器为 核心,所构造出的计算机 A.存贮器 B.寄存器 C.运算器 D.计数器 16. 存储器是计算机系统的记忆设备,它用来( ) A.存放数据 B.存放程序 C.存放数据和程序 D.存放微程序 17. 通常所说的32位计算机是指( )。 A.CPU字长为32位 B.通用寄存器数目为32个 C.可处理的数据长度为32位 D.地址总线的宽度为32位 1.2判断题 1. 软件与硬件的等价性原理说明软硬件在功能、性能和成本等方面是等价的。F 2. IA-64结构是IA-32结构的64位扩展,也就是Intel 64结构。F 3. 8086的数据总线为16位,也就是说8086的数据总线的个数、或说条数、位数是16。T 4. 微机主存只要使用RAM芯片就可以了。F 5. 处理器并不直接连接外设,而是通过I/O接口电路与外设连接。T 6. 处理器是微机的控制中心,内部只包括5大功能部件的控制器。F 7. Windows的模拟DOS环境与控制台环境是一样的。F 8. 16位IBM PC/AT机采用ISA系统总线。T 9. IA-32处理器吸取了RISC技术特长。RISC是指复杂指令集计算机。F精简指令集计算机 10. 处理器进行读操作,就是把数据从处理器内部读出传送给主存或外设。F 11. IA-32处理器上不能运行Linux。F 12. IA-32处理器地址总线是双向的。F 13. BIOS是“基本输入输出系统”,在现代的微机系统中,BIOS是不能升级的。F 14. 汇编语言就是机器语言的符号化。F 15. 汇编语言程序就是汇编程序。F 1.3填空题 1. .CPU是英文Central Processing Unit的缩写,中文译为中央处理单元。 2. Intel 8086支持1MB容量主存空间,80486支持4GB容量主存空间。 3. .二进制16位共有216个编码组合,如果一位对应处理器一个地址信号,16位地址信号共能寻址64K个存储单元容量主存空间。 4. DOS主要支持两种可执行文件,它们的扩展名分别是EXE和COM。 5. 关于总线的英文缩写ISA原文是 Industry Standard Architecture, PCI原文是Peripheral Component Interconnection。 6. Windows的文件夹对应的专业术语是 目录 ,英文是 file 。 7. Pentium系列处理器的多媒体指令有 MMX ,SSE,SSE2和 SSE3 类指令。 8.Pentium处理器采用 64 位数据总线, 32 位地址总线与主存相连。 9.最初由IBM公司采用Intel 8088处理器和DOS操作系统推出PC机。 10. 当前32位PC机主要采用 PCI 总线连接I/O接口电路卡,键盘、鼠标等则采用 PS/2 (USB) 总线连接。 11. 描述CPU的主要技术参数有_字长_ ,时钟频率,集成度等。 12. 系统总线一般可分为地址总线,数据总线 和控制总线。 13. 在计算机系统的层次结构中,汇编语言位于第 4 层,而高级语言位于第 5 层。 14. 在计算机系统的层次结构中,操作系统位于第 3 层,而机器语言位于第 2 层。 2

15. 在计算机系统的层次结构中,数字电路位于第 0 层,而用户位于第 6 层。 1.4简答题 1. 计算机字长指的是什么? 答: 处理器单位时间可以处理二进制数据的位数。 2. 简述微型计算机系统的硬件组成及各部分作用。 答: CPU:CPU也称处理器,是微机的核心。它采用大规模集成电路芯片,芯片内集成了控制器、运算器和若干高速存储单元(即寄存器)。处理器及其支持电路构成了微机系统的控制中心,对系统的各个部件进行统一的协调和控制。 存储器:存储器是存放程序和数据的部件。 外部设备:外部设备是指可与微机进行交互的输入(Input)设备和输出(Output)设备,也称I/O设备。I/O设备通过I/O接口与主机连接。 总线:互连各个部件的共用通道,主要含数据总线、地址总线和控制总线信号。 3. ROM-BIOS是什么? 答: 基本输入输出系统,操作系统通过对BIOS的调用驱动各硬件设备,用户也可以在应用程序中调用BIOS中的许多功能。 4. 什么是通用微处理器、单片机? 答:1、通用为处理器:适合较广的应用领域的微处理器,如装在PC机、笔记本电脑等的微处理器; 2、单片机:通常用于控制领域的微处理器芯片,期内部除CPU外还集成了计算机的其他一些主要部件,只需配上少量的外部电路和设备,就可以构成具体的应用系统。 5. 什么是DSP芯片、嵌入式系统? 答:1、DSP:数字信号处理器,更适合于处理高速的数字信号,内部集成有高速乘法器,可进行快速乘法加法运算; 2、嵌入式系统:利用微处理器,数字信号处理器或通用微处理器,结合具体应用构成的控制系统。 6. 冯?诺依曼计算机的基本设计思想是什么? 答:采用二进制表达数据和指令,将数据和指令事先保存在存储器中;按顺序执行程序来控制计算机工作 7. 计算机系统通常划分为哪几个层次?普通计算机用户和软件开发人员对计算机系统的认 识一样吗? 答:1、最上层是用户层;第五层是高级语言层;第四层是汇编语言层;第三层是操作系统层;第二层是机器语言层;第一层是控制层;第零层是数字电路层; 2、不一样,普通计算机用户看到的计算机属于用户层,而软件人员看到的属于高级语言层或是汇编语言层。 8. 什么是系列机和兼容机? 答:系列机:同一厂家生产的具有相同计算机结构,但具有不同组成和实现的一系列不同档次不同型号的机器; 兼容机:不同厂家生产的具有相同计算机结构的计算机。 3

7. Little Endian Order 小端方式:存储方式按低字节存放在低地址端高字节存放在高地址端。 8. Intrinsic Data Types 内部数据类型 3.3.判断 1. 对一个正整数,它的原码、反码和补码都一样,也都与无符号数的编码一样。T 2. 常用的BCD码为8421 BCD码,其中的8表示D3位的权重。T 3. IA-32处理器采用小端方式存储多字节数据。T 4. 空操作NOP指令其实根本没有指令。F 5. 堆栈的操作原则是“先进后出”,所以堆栈段的数据除PUSH和POP指令外,不允许其他方法读写。F 6. 虽然ADD指令和SUB指令执行后会影响标志状态,但执行前的标志并不影响它们的执行结果。T 7. 指令“INC ECX”和“ADD ECX,1”的实现功能完全一样,可以互相替换。F 8. 无符号数在前面加零扩展,数值不变;有符号数前面进行符号扩展,位数加长一位、数 值增加一倍。F 9. 逻辑运算没有进位或溢出问题,此时CF和OF没有作用,所以逻辑运算指令如AND、OR等将CF和OF设置为0。T 10. CMP指令是目的操作数减去源操作数,CMPS指令是源操作数减去目的操作数T 11. 指令“DEC ECX”和“SUB ECX,1”的实现功能完全一样,可以互相替换。F 12. 指令“TEST”和“AND”的实现功能完全一样,可以互相替换。F 13. 指令“CMP EAX, ECX”和“SUB EAX, ECX”的实现功能完全一样,可以互相替换。F 14. CPU在实施加减运算时不区分有符号数和无符号数。T 15. VAR是数据段中定义的字变量,指令MOV AL,VAR是正确的。T 3.4.填空 1. (1)定义字节变量的伪指令助记符是 BYTE ,获取变量名所具有的偏移地址的操作符是 OFFSET 。 2. (2)计算机中有一个“01100001”编码。如果把它认为是无符号数,它是10进制数 97 ;如果它是某个ASCII码,则代表字符_ a _。 3. C语言用“\\n”表示让光标回到下一行首位,在汇编语言中需要输出两个控制字符:一个是回车,其ASCII码是 0DH ,它将光标移动到当前所在行的首位;另一个是换行,其ASCII码是 0AH ,它将光标移到下一行。 4. 数据段有语句“H8843 DWORD 99008843H”,代码段指令“MOV CX, WORD PTR H8843”执 行后,CX= 8843H ;代码段指令“MOV CL, BYTE PTR H8843”执行后,CX=_8843H _。 5. 数据段有语句“XYZ DWORD ?”,则XYZ的类型是 DWORD ,用“TYPE XYZ”会得到数值为 4 。 6. 数据段有语句“ABC BYTE 3 DUP (1,2,3)”,代码段指令“MOV CL, ABC+3”执行后,CL= 1 ; “MOV CL, ABC+8”执行后,CL= 3 。 7. 数据段有语句“ABC BYTE 3 DUP (1,2,3)”,代码段指令“MOV AX, WORD PTR ABC”执行后,AX= 0201H ; “MOV EAX, DWORD PTR ABC”执行后,EAX= 01030201H 。 8. 顺序执行指令“XOR EAX, EAX”和“SUB EAX, EAX”后,EAX= 0 ,OF= 0 。 9. 顺序执行指令“XOR EAX, EAX”和“DEC EAX”后,EAX= FFFFFFFFH ,CF= 0 。 10. 欲将EDX内的无符号数除以16,使用指令“SHR EDX, 4 ”; 欲将EAX内的有符号9

数除以16,使用指令“ IDIV 16 ”。 11. 已知:X补=10101100B,Y补=11000110B,则:[X+Y]补= [1]01110010 ,[X-Y]补= 00011000 。 12. 设字长为八位,有x= -1,y=124,则有:[x+y]补= 123 , [x-y] 补= 131 。 13. 已知:寄存器AX=7836H,指令:ADD AX,9A5EH执行后,AX= 1294H CF= 1 。 14. 已知:寄存器AX=7836H,指令:ADD AX,9A5EH执行后,OF= 0 ,SF= 0 。 15. \~\的ASCII码值是 30H~39H ,\~\的ASCII码值是 41H~5AH 。 3.5.简答题 1. 使用二进制8位表达无符号整数,257有对应的编码吗? 答:没有。使用二进制8位表达无符号整数的范围为0~255,因此257没有对应的编码。 2. 字符“'F'”和数值46H作为MOV指令的源操作数有区别吗? 答:字符“'F'”的ASCII码就是数值46H,所以没有区别。 3. 为什么可以把指令“MOV AX, (34+67H)*3”中的数值表达式看成是常量? 答:汇编程序在汇编过程中对数值表达式计算,得到一个确定的数值,故称数值表达式为常量。 4. 数值500,能够作为字节变量的初值吗? 答:不能。数值500大于一个字节所能表达的数据量,所以不能为字节变量赋值。 5. 为什么说“XCHG EDX,CX”是一条错误的指令? 答:源、目标寄存器位数不同,不能用该指令进行数据交换。 6. 都是获取偏移地址,为什么指令“LEA EBX, [ESI]”正确,而指令“MOV EBX, OFFSET[ESI]”就错误? 答:前者在指令执行时获得偏移地址,是正确的;但后者的OFFSET只能在汇编阶段获得偏移地址,但此时寄存器内容是不可知的,所以无法获得偏移地址。 7. INC,DEC,NEG和NOT都是单操作数指令,这个操作数应该是源操作数还是目的操作数? 答:INC,DEC,NEG和NOT指令的操作数既是源操作数也是目的操作数。 8. 大小写字母转换的规律是什么?给出转换的公式。 答:大小写字母转换利用它们的ASCII码相差20H。假设用AX存放所要转换的字母: 大写转小写:ADD AX 20H; 小写转大写:SUB AX 20H 10

第四章 指令系统 4.1.选择 1. 计算机内的“溢出”是指其运算的结果 ( )。 A.无穷大或无穷小 B.超出了内存单元所能存储的数值范围 C.超出了寄存器能存储数值的范围 D.超出了该指令所指定的结果能存储的数值范围 2. 计算机内的“溢出”是指其运算的结果 ( )。 A.无穷大或无穷小 B.超出了内存单元所能存储的数值范围 C.超出了寄存器能存储数值的范围 D.超出了该指令所指定的结果能存储的数值范围 3. 16位二进制无符号数的数值范围是( )。 A.0 ~ 65535 B.0 ~ 65536 C.0~ 32767 D.0 ~ 32768 4. 最大的10位无符号二进制整数转换成十进制数是 。 A. 51 B. 512 C. 1023 D. 1024 A.ZF B. SF C.CF D. TF 6. INC 指令不能影响标志寄存器的( )位。 A.ZF B. SF C.CF D. DF 7. DEC 指令不能影响标志寄存器的( )位。 A.ZF B. SF C.CF D. IF 8. 在执行DIV或IDIV指令发生错误时会产生( )中断。 A.线路故障 B.内部 C.外部 D.单步 9. 在执行ADD或SUB指令发生溢出错误时( )。 A.不产生任何中断 B. 会产生内部中断 C. 会产生外部中断 D. 会产生单步中断 10. 完成同指令XCHG AX,BX相同功能的指令或指令序列是( )。 A. MOV AX,BX B. MOV BX,AX C. PUSH AX D. MOV CX,AX POP BX MOV AX,BX MOV BX,CX 11. 顺序执行PUSH EAX和POP EBX两条指令,其功能等同于( ) A.MOV EAX, EBX B.MOV EBX, EAX C.XCHG EAX, EBX D.XCHG EBX, EAX 12. 目前在微机中最普遍采用的字符的编码是( )。 A.BCD码 B.ASCII码 C.余三码 D.格雷码 13. 已知X、Y的补码分别为11101011B、00001010B,求X+Y的补码等于( )。 A. 10100001B B. 11011111B C. 11110101B D. 溢出 14. 计算机中( )不能直接表示有符号数。 A.原码 B.补码 C.反码 D.BCD码 15. 下列字母中,ASCII码值最小的是( ) 。 A. K B. Y C. a D. i 11

16. 当执行完下列指令序列后,标志位CF和SF的值为( )。 MOV AL,0C4H ADD AL,9DH A. 0,0 B. 0,1 C. 1,0 D. 1,1 4.2.名词解释 1. Program flow control instructions : 程序流程控制指令 2. OFFSET Operator: 在汇编阶段取得变量的偏移地址。 3. Loop Counter: 循环计数器,一般用ECX作计数器,在LOOP循环中每次减1。 4. Pseudo Code: 伪代码,又称虚拟代码,是高层次描述算法的一种。 5. Single Dimension Array:一位数组 6. Conditional Loop Instructions:条件循环指令利,用条件转移指令决定是否进行循环。 7. Arithmetic instructions:算数指令 8. Jumps Based on Unsigned Comparisons:无条件转移比较 4.3.判断 1. VAR是数据段中定义的字变量,指令MOV AX,VAR+2是正确的。T 2. VAR1和VAR2是数据段中定义的字变量,指令MOV AX, VAR1-VAR2是正确的。T 3. VAR1和VAR2是数据段中定义的字变量,指令MOV AX, VAR1+VAR2是正确的。F 4. 执行乘法指令IMUL src时,运算结果不会产生溢出。T 5. 执行乘法指令IMUL REG,src时,运算结果不会产生溢出。F 6. 定义符号常量时,使用“=”与“EQU”没有区别。F 7. 地址操作符OFFSET可以获取任何寻址方式的内存变量的有效地址。F 8. 指令“SHL”与“SAL”的功能是等价的。T 9. 指令“SHR”与“SAR”的功能是等价的。F 10. 指令“LOOP Lable ”与“DEC ECX JNZ Lable”的功能是等价的。F 11. 32位机不能完成64位整数加法运算。F 12. 只有补码才能表示有符号数。F 13. 指令“LEA”可以获取任何寻址方式的内存变量的有效地址。T 14. 指令“LEA”可以实现求两个寄存器与一个立即数三个数之和的功能。T 15. 堆栈内部中的数据是无法修改的。F 4.4.填空 1. 顺序执行指令“XOR EAX, EAX”和“SUB EAX, 1”后,EAX= FFFFFFFFH ,CF= 1 。 2. 数据段有语句“BUF DWORD 10h DUP( 3 DUP( 2,? ) ,3 ,4 ,5)”,则用“LENGTHOF BUF”会得到数值为 144 ,用“SIZEOF BUF”会得到数值为 576 _。 3. 已知AL=01100001B,执行指令“AND AL,5FH”后,AL= 41H ;如果AL的内容是某个ASCII码,则代表字符 A 。 4. 已知AL=01000001B,执行指令“OR AL,20H”后,AL= 61H _;如果AL的内容是某个ASCII码,则代表字符 a 。 5. 设字长为八位,-128补= 80 _H, -1补= FF H。 6. 已知:寄存器AX=7836H,指令:TEST AX,9A5EH执行后,OF= 0 ,SF= 0 。 12

7. 已知:寄存器AX=7836H,指令:CMP AX,9A5EH执行后,AX= 7836 H ,OF= 1_。 8. 要测试AX的第五位是否为1,使用指令 AND AX 0020 H ;若要将AL的第五位置为1,使用指令 OR AL 002O H 。(说明:最低位为第0位。) 9. 已知:寄存器AX=9A5EH,指令: NEG AX执行后,OF= 0 ,SF= 0 。 10. 已知:寄存器EAX=65536,EBX=32768,指令:DIV EBX执行后,EAX=2。则指令:DIV EBX执行前EDX的值应为 0 ,指令:DIV EBX执行后EDX=__0__。 11. 已知:寄存器AL=-1,指令:MOVSX BX,AL执行后,BX= __FFFF__H;指令:MOVZX CX,AL执行后,CX= __00FF__H。 12. 顺序执行指令序列“XOR EAX,EAX ,DEC EAX , ADC EAX,0”后,CF=_0_,ZF=_0_。 13. 顺序执行指令序列“XOR EAX,EAX ,SUB EAX,1 ,ADC EAX,0”后,CF=_1_,ZF=_1__。 14. 已知:寄存器AL=10,BL=-10,指令:MUL BL执行后,AX=__099C__H;而若将指令改为:IMUL BL 则执行后AX=__FF9C__H; 15. 若要将AX的第五位和第九位置为0,使用指令__AND AX ,FDDF H__;若要将AX的第五位和第九位置反,使用指令___XOR AX ,0220 H___。(说明:最低位为第0位。) 4.5.简答题 1. 乘除法运算针对无符号数和有符号数,有两种不同的指令。只有一种指令的加减法如何区别无符号数和有符号数运算? 答:加减法不区别无符号数和有符号数,但根据运算结果分别设置标志寄存器的CF和是SF标志,可利用CF和SF进行区别。 2. 逻辑与运算为什么也称为逻辑乘? 答:逻辑与运算规则是:1^1=1,其他均为0,逻辑与运算规则类似二进制的乘法,所以称其为逻辑乘。 3. 简述逻辑运算指令怎么实现复位、置位和求反功能? 答:实现复位指令:AND AX 0 ;将AX里的数值为0 实现置位指令:OR AX FFFF ;给预置位置为1再与要比较的数作OR运算 实现求反指令:XOR AX FFFF ;将目的操作数与全1作异或运算。 4. 在处理一维数组时,通常可以采用哪些寻址方式?各自的特点是什么? 答:立即数寻址:指令需要的操作数紧跟在操作码之后作为机器指令代码的一部分并随着处理器的取指操作从主存进入指令寄存器。 特点:速度快不需要转换地址,但寻址范围小; 寄存器寻址:指令的操作数存放在处理器的寄存器中。 特点:寻址方式简单快捷,是最常使用的寻址方式; 存储器寻址:寻址主存中存储的操作数就称为存储器寻址。 特点:需要至少两次访存,寻址方式多,地址范围大。 5. 通常在什么情况下需要使用MOVSX、MOVZX指令? 答:对无符号数,在前面加零实现零位扩展。对应指令MOVZX;对有符号数进行符号扩展,即用一个操作数的符号位(最高位)形成另一个操作数,对应指令MOVSX。 6. 通常在什么情况下需要使用PTR类型操作符?举例说明。 答:如在指令“MOV EAX,DWORD PTR ARRAY”,EAX是双字,变量ARRAY被定义为字量,两者类型不同,MOV指令不允许不同类型的数据传送,利用PTR改变ARRAY的类型,将其传送给EAX. 7. ESP是通用寄存器,是否可以随意的修改ESP的值? 答:不可以,堆栈段的范围由堆栈执政寄存器ESP的初值确定,这个位置就是堆栈的底13

部(不再变化),因此不能随意改变ESP的值。修改可能会导致栈里内容丢失,引起异常。 8. 大小写字母转换的规律是什么?给出转换的公式。 答:大小写字母转换利用它们的ASCII码相差20H。 SUB BL 20H:实现小写字母转换为大写; ADD BL 20H:实现大写字母转换为小写。 9. ESP是通用寄存器,是否可以随意的修改ESP的值? 答:不可以,堆栈段的范围由堆栈执政寄存器ESP的初值确定,这个位置就是堆栈的底部(不再变化),因此不能随意改变ESP的值。修改可能会导致栈里内容丢失,引起异常。 14

第五章 汇编语言程序设计 5.1.选择 1. 循环指令LOOP终止循环的条件是( )。 A.ECX=0 B. ECX=0,且ZF=0 C ECX≠0,且ZF=0 D. ECX≠0,或ZF=1 2. 循环指令LOOPNZ终止循环的条件是( )。 A.ECX=0,或ZF=1 B. ECX=0,且ZF=0 C.ECX≠0,且ZF=0 D. ECX≠0,或ZF=1 3. LOOP指令执行时,隐含计数器是( )。 A. ESP B.EBX C. ECX D.EDI 4. 当A>B时转移的条件转移指令为(A、B为无符号数)( )。 A. JA B. JAE C. JG D. JGE 5. 当A>=B时转移的条件转移指令为(A、B为 有符号数)( )。 A. JA B. JAE C. JG D. JGE 6. 条件转移指令JC Label的测试条件是( )。 A. ZF = 1 B. SF = 1 C. OF = 1 D. CF = 1 7. 若主程序通过堆栈向子程序传递了3个参数,子程序返回主程序时,在子程序中清除堆栈中3个参数正确的RET指令是( )。 A. RET 3*1 B. RET 3*2 C. RET 3*3 D. RET 3*4 8. 主程序通过堆栈向子程序传递了3个参数,子程序调用结束后,在主程序中清除堆栈中3个参数正确的指令是( )。 A. ADD ESP, 3*2 B. ADD ESP, 3*4 C. ADD EBP, 3*2 D. ADD EBP, 3*4 9. 条件转移指令JZ Label的测试条件是( )。 A. ZF = 1 B. SF = 1 C. OF = 1 D. CF = 1 10. 利用堆栈传递子程序参数的方法是固定的,若主程序通过堆栈向子程序传递了3个参数,则在子程序中, 主程序中最后一个被压入栈中的参数可以用( )的形式来访问。 A. [EBP-4] B. [EBP-8] C. [EBP+4] D. [EBP+8] 11. 通过堆栈传递参数,在子程序中使用EBP间址取得参数的原因是( )。 A. EBP没有被占用 B. EBP间址速度较快 C. EBP间址默认的段是堆栈段 D. EBP是基址指针 12. 通过寄存器传递参数比通过堆栈传递参数的优点是( )。 A. 能传递更多得参数 B. 存取效率高 C. 能确保正确调用 D. 没有副作用 13. 利用堆栈传递子程序参数的方法是固定的,在子程序中, 修改参数( )可以改变子程序的返回地址。 A. [EBP-4] B. [EBP-8] C. [EBP+4] D. [EBP+8] 14. 在用LOOP Label 指令构成的循环中,若ECX的初值为-10,则循环体将被执行( )次。 A. 10 B. 0 C. 100 D. >100 15. 在用LOOP Label 指令构成的循环中,若ECX的初值为10,在LOOP Label 指令前有一条“SUB ECX,2” 指令,则循环体将被执行( )次。 15

A. 10 B. 5 C. 4 D. >10000 5.2.名词解释 5.3.判断 1. 指令指针或者还包括代码段寄存器值的改变将引起程序流程的改变。T 2. JMP指令对应高级语言的GOTO语句,所以不能使用。F 3. 因为条件转移指令Jcc要利用标志作为条件,所以也影响标志。F 4. JA和JG指令的条件都是“大于”,所以是同一个指令的两个助记符。F 5. 控制循环是否结束只能在一次循环结束之后进行。F 6. 介绍LOOP指令时,常说它相当于DEC ECX和JNZ两条指令。但考虑对状态标志的影响, 它们有差别。LOOP指令不影响标志,而DEC指令却会影响除CF之外的其他状态标志。T 7. CALL指令用在调用程序中,如果被调用程序中也有CALL指令,说明出现了嵌套。T 8. 子程序需要保护寄存器,包括保护传递入口参数和出口参数的通用寄存器。F 9. 利用寄存器在主子程序间传递参数,其实质就是利用全局变量来传递参数。T 10. 子程序采用堆栈传递参数时,只能在主程序中修改ESP方可保持堆栈的平衡。F 11. 汇编语言中不允许递归调用子程序。F 12. 与高级语言中的自定义函数不同,汇编语言中的子程序不能将计算的结果返给主程序F 13. 汇编语言中,子程序嵌套调用就是递归调用。F 14. 在LOOP指令构成的循环结构中,允许修改ECX的值。T 15. 指令CALL或RET的执行,不改变程序执行的流程。F 16. 在软件中只使用一次的功能编写成子程序完全没有必要。F 17. 在执行CALL指令时,硬件自动将断点地址压入堆栈中。T 18. 在高级语言中,若多重循环出现\交叉”的错误,编译系统通常会给出提示来。若汇编 语言程序中也出现\交叉”错误时,汇编程序也会给出提示来。F 5.4.填空 1. JMP指令根据目标地址的寻址方式,可以分成三种类型:相对寻址、直接寻址 和间接寻址。 2. 假设在平展存储模型下,EBX=1256H,双字变量TABLE的偏移地址是20A1H,线性地址32F7H处存放3280H,执行指令“JMP EBX” 后EIP= 1256H _,执行指令“JMP TABLE*EBX+”后EIP= 3280H。 3. “CMP EAX,3721H”指令之后是JZ指令,发生转移的条件是EAX=_3721H_,此时ZF=_1__。 4. JMP指令根据目标地址的寻址方式,可以分成三种类型:相对寻址、_间接寻址 和直接寻址,通常 相对寻址 方式使用的最多。 5. 循环结构程序一般有三个部分组成,它们是_循环初始_, 循环体 和 循环控制__部分。 6. 条件转移指令 JE Label的测试标志位是__ZF__,条件转移指令 JNO Label的测试标志位是_OF__。 //7. 过程定义开始是“TEST PROC”语句,则过程定义结束的语句是__TEST ENDP__。宏定义开始是“DISP MACRO”语句,则宏定义结束的语句是_ENDM_。 8. 利用堆栈传递子程序参数的方法是固定的,在子程序中通常是利用寄存器__EBP__来访问栈中的参数,采用的寻址方式是 间接寻址。 16

9. 调用程序和子程序之间的信息传送称为__参数__,而当传递的信息很大时通常通过 堆栈 来进行传递。 10. 在LOOP Label 指令构成的循环中,若ECX的初值为0,则循环体将被执行__232_次;若ECX的初值为—100,则循环体将被执行(232-100)__次。 11. 只要堆栈空间允许,子程序嵌套调用的层次无限制_,子程序也可调用本身,这称为递归调用_。 12. 通常在子程序的开始部分要保护_子程序中用到的__寄存器,但用做出口参数的通用寄存器则_ _不能保护和恢复 _。 13. 通常在子程序中的参数分为两种类型,分别称为__值参__和 形参 。 14. 通常在子程序中至少要有一条_返回__指令用于返回主程序,而汇编程序在汇编时并不检测__返回_指令是否存在。 15. 在主程序中,采用“JMP subName” 指令可以__转到_ 子程序subName, 但子程序结束后 返回地址不确定 。 5.5.简答题 1. 是什么特点决定了目标地址的相对寻址方式应用最多? 答:当同一个程序被操作系统安排到不同的存储区域执行时,指令间的位移没有改变,目标地址采用相对寻址可方便操作系统的灵活调度。 2. 将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段,其中sign与sinteger均为双字变量。 if ( sinteger = 0) sign = 0; else if ( siteger > 0) sign = 1; else sign = -1; 答: .data ;数据段 定义两个双字变量(此处可以省略) sign dword ? sintegter dword ? .code ;代码段 cmp sinteger , 0 jne outjudge ;若不大于则跳转 mov sign , 0 ; sinteger = = 0 outjudge: cmp sinteger , 0 jl injudge ;若小于则跳转(将sinteger看作有符号数) ;若看作无符号数用jb来判断 mov sign , 1 ; sinteger > 0 injudge: mov sign , -1 ; sinteger < 0 done: ; 结束 3. 将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段,其中ch1与caps均为字节变量。 17

if (ch1> =’a’ && ch1< =’z’) caps= =0; if (ch1> =’A’ && ch1< =’Z’) caps=1; 答: ; .code ;代码段 cmp ch1 , a jb outjudge cmp ch1 , z ja done mov caps , 0 ; if (ch1> =’a’ && ch1< =’z’) outjudge: cmp ch1 , A jb done cmp ch1 , Z ja done mov caps , 1 ; if (ch1> =’A’ && ch1< =’Z’) done: ; 结束 4. 将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段,其中sum与i变量均为双字变量。 sum=0; for ( i=1;i< =100;i++) if ( i%2= =0) sum=sum+i; 答: ; .code ;代码段 mov eax , 0 ; 初始化eax=0 xor ecx , ecx ;用作计数器 mov ecx ,100 xor ebx , ebx ;相当于 i 的作用 mov ebx , 1 ;初始化eax=1 loop: push eax ;保存eax的值 mov eax , ebx xor edx , edx ; 用来判断余数 div 2 ;eax 除以2 cmp edx , 0 ;edx=eax mod 2 jz next ;是偶数则跳转修改参数 pop eax ;恢复eax的值 jmp next_i next: pop eax ;恢复eax的值 add eax , ebx ;eax=eax+ebx next_i: inc ebx jmp loop ;当ecx<>0时继续循环 done: mov sum eax ; 结束 5. 在N分支结构中,至少要使用N—1条 JMP指令,它的作用是什么? 答:等同于switch语句中的break用来跳到分支出口。 6. 不使用CALL指令是否可以实现子程序的调用?若可以,举例说明。 答:可以实现,通过栈来实现。将子程序入口地址压栈通过EBP+4来修改PC值来返回原程序,也就实现子程序的调用。 7. 写出3条以上的可以改变程序执行流程的指令,并简述其用途。 答: JMP 无条件跳转 18

第七章 存储系统 7.1.选择 1. 某处理器设计只支持7KB主存,则内存地址需( )位就足够了。 A 12 B 13 C 14 D 15 2. 需要定时刷新的存储器是( ) A.SRAM B.DRAM C.EPROM D.E2PROM 3. 下列只读存储器中,可紫外线擦除数据的是( ) A.PROM B.EPROM C.Flash Memory D.E2PROM 4. 可编程ROM可简记为( )。 A.PROM B.MROM C.EPROM D.E2PROM 5. 优盘是一种电可擦除.可重写的 ( ) 的存储器。 A.非易失性 B.易失性 C.只读性 D.磁介质性 6. 存储器芯片位数不足时,需用( ) 。 A.字扩展 B.位扩展 C.字位扩展 D.以上均可 7. 64K*1位的DRAM芯片通常有( ) 地址线引脚 A.16 B.8 C.1 D.4 8. 某微机系统的存储器容量为256K字节,若采用单片容量为16K*8位的SRAM芯片,则组成该存储系统共需( )个该类芯片 A.16 B.8 C.1 D.4 9. 64K*1位的EPROM芯片通常有( ) 地址线引脚 A.16 B.8 C.1 D.4 10. 某微机系统的存储器容量为256K字节,若采用单片容量为16K*1位的SRAM芯片,则组成该存储系统共需( )个该类芯片 A.16 B.128 C.64 D.8 11. 8086CPU有20条地址线,可寻址空间为( )。 A.640kB B.64kB C.1MB D.16MB 12. 80286有24条地址线,可寻址空间为( )。 A.640kB B.64kB C.1MB D.16MB 13. PC系列微机可寻址的I/O空间是( ) 。 A.1k B.32k C.64k D.1M 14. 一般PC系列微机I/O寻址只用10根地址线,可寻址( )个。 A.1k B.32k C.64k D.1M 15. 下列只读存储器中,仅能一次写入数据的是( )。 A.PROM B.EPROM C.Flash Memory D.E2PROM 7.2.名词解释 1. RAM: 随机存储器,只要给出存取位置就可以读写内容,存取时间与所处位置无关。 2. ROM: 44

只读存储器,只能读出其中的数据,但数据可以长期保存断电不丢失。 3. SRAM: 静态RAM,SRAM芯片以触发器为基本存储单元用其两种稳定状态表示逻辑0和 逻辑1。SRAM不需要额外的刷新电路只要不掉电,信息就不会消失。 4. FLASH ROM: 是一种新型的电可擦除可编程ROM芯片,能够很快擦除整个芯片内容,中文简称“闪存”。 5. NVRAM: 非易失RAM,NVRAM多指带有后备电池的SRAM芯片。这种芯片采用CMOS制造工艺设计以减少用电,其背部有锂电池,断电后电池维持供电,即使长期不用,所存信息也能维持若干年。 6. 完全译码: 使用全部处理器的地址总线,称之为完全译码。完全译码的特点是地址唯一:一个存储单元只对应一个存储地址,组成的存储系统的地址空间连续。 7. 部分译码: 只使用部分系统地址总线进行译码。没有被使用的地址信号对存储器芯片不产生影响,有一个不使用的地址信号就对应有两个编码,这两个编码实际上指向同一个存储单元,这就出现了地址重复:一个存储单元对应多个存储地址,浪费了存储空间。 8. 系统RAM区: 该去占用地址最低端的640KB空间(00000H-9FFFFH)由dos进行管理。 9. 存储容量: 微机系统存储容量,以字节B为基本单位,半导体芯片以位b为基本单位,表达存储容量。 10. 存取速度: 即存储时间,指从读写命令发出到数据传输操作完成经历的时间。 11. 空间局部: 即紧邻被访单元的地方也将被访问。 12. 时间局部: 刚被访问的单元很快将再次被访问。 13. 辅助存储器: 通过磁记录或光记录方式,以磁盘或光盘形势存放可读可写式制度内容。 14. 地址译码: 将某个特定的编码输入翻译为有效输出的过程。 15. 虚拟存储器: 利用读写辅助存储器,操作系统可以在主存储器与辅助存储器之间以磁盘文件形式建立虚拟存储器。 7,3.判断 1. 存储系统的高速缓存需要操作系统的配合才能提高主存访问速度。F 2. 存储器芯片的集成度高表示单位芯片面积制作的存储单元数多。T 3. 微机大容量主存一般采用DRAM芯片组成。T 4. 部分译码可以简化译码电路,不会减少可用的存储空间。F 5. 存储系统每次给DRAM芯片提供刷新地址,被选中的芯片上所有单元都刷新一遍。F 6. 存储系统的刷新地址提供给所有DRAM芯片。T 7. ROM芯片的烧写或擦写就是指对ROM芯片的编程。T 45

8. 存储器译码时采用全地址译码会浪费地址空间。F 9. 存储器的主要性能指标是存储容量和存储空间。F 10. 存储访问的局部特性保证了层次化存储系统具有优秀的性能。T 11. 存储访问的局部性原理只是指空间局部。F 12. PC机主要采用光盘作为辅助存储器。F 13. 按制造工艺,半导体存储器可分为“双极型”器件和“MOS型”器件。T 14. 芯片的存储容量有存数单元数和每个存储单元的数据位数决定。T 15. 高性能处理器必须配合快速主存储器才能真正发挥作用。T 7.4.填空 1. 计算机存储容量的基本单位:1 B(Byte)= 8 b(bits),1TB= 210 GB。 2. 在半导体存储器中,RAM指的是随机存取存储器 ,可读可写,但断电后信息一般会丢失。 3. 在半导体存储器中ROM指的是 只读存储器 ,正常工作时只能从中 读取 信息。 4. 存储结构为8K×8位的EPROM芯片2764,共有 13 个地址引脚,用其组成64KB的ROM存储区共需 8 片芯片。 5. 对一个存储器芯片进行片选译码时,有一个高位系统地址信号没有参加译码,则该芯片 的每个存储单元占有 2 个存储器地址。假设地址总线A19~A15输出01011时译码电路产生一个有效的片选信号,这个片选信号共有 32K 容量。 6. 半导体 EPROM 芯片顶部开有一个圆形石英窗口。 通常U盘、MP3播放器、数码相机、多媒体手机等设备采用半导体 Flash ROM 芯片构成存储器。 7. SIMM是一种 单列存储器模块 内存条,而 DIMM是一种 双列直插式存储模块 内存条。 8. 每个存储单元被赋予一个唯一的编号,称为 全地址 ,一个存储单元可以存储 1、4、8、16、32 位二进制信息。 9. 存储器扩展有两种方法,分别是 字 扩展和 位 扩展。 10. 用2k×8位的存储芯片,组成16k×8位的存储器,需用 8 片,组成24k×1位的存储器,需用 12 片。 11. 8086的存储器分为 偶 存储体和 奇 存储体。 12. 衡量存储器的技术指标主要有 容量 , 速度 和 成本 。 13. 衡量存储器的技术指标主要有 存储容量 , 存储速度 和 成本价格 。 14. 以8086为CPU的微型计算机内存RAM区为00000H~3FFFFH,若采用8K*8的6264构成,需要__64__片芯片,若采用256K*1的21256构成,需要 16 _片芯片。 15. 计算机需要主存储器存放当前运行的 程序 和 数据 。 7.5.简答题 1. 存储器的存取时间和存取周期有什么区别? 答:存取时间是指从读/写命令发出,导数据传输操作完成所经历的时间;存取周期表示两次存储器访问所允许的最小时间间隔。存取周期大于等于存取时间。 2. 地址重复是怎么回事? 答:译码电路中只有部分地址线参与译码会造成地址重复,也就是一个存储单元占有多个存储器地址。 3. 简述存储系统的层次结构及各层存储部件特点。 答:为解决容量、速度和价格的矛盾,存储系统采用金字塔型层次结构,单位价格和速度自上而下逐层减少,容量自上而下逐层增加。 46

存储系统的各层存储部件自上而下依次是:CPU寄存器.高速缓存.主存存储器(RAM/ROM),辅助存储器如磁盘.光盘等。CPU寄存器.高速缓存器集成在CPU芯片上,对用户来说,是透明的,它们用于暂存主存和处理器交互的数据,以减少频繁读取主存而影响处理器速度;主存储器则可和处理器直接交换数据,而辅助存储器必须经过主存存储器,才可与处理器进行数据交换。 4. DRAM为什么要刷新? 答:DRAM以单个MOS管为基本存储单元,以极间电容充放电表示两种逻辑状态。由于极间电容的容量很小,充电电荷自然泄漏会很快导致信息丢失,所以要不断对它进行刷新操作.即读取原内容.放大再写入。 5. 存储系统如何进行刷新? 答:存储系统的刷新控制电路提供刷新行地址,将存储DRAM芯片中的某一行选中刷新。实际上,刷新控制电路是将刷新行地址同时送达存储系统中所有DRAM芯片,所有DRAM芯片都在同时进行一行的刷新操作。刷新控制电路设置每次行地址增量,并在一定时间间隔内启动一次刷新操作,就能够保证所有DRAM芯片的所有存储单元得到及时刷新。 6. 请给出下图中138译码器的所有译码输出引脚对应的地址范围。 答:由于20根地址线全部参与译码,因此输出引脚地址范围如表所示: /Y /Y0 /Y1 /Y2 /Y3 /Y4 /Y5 /Y6 /Y7 A19A18A17 A16A15A14 A13A12 A11A10A9A8 A7A6A5A4 A3A2A1A0 地址范围 111 000 00 0000 0000 0000~11 1111 1111 1111 E0000H~E3FFFH 111 111 111 111 111 111 111 001 010 011 100 101 110 111 00 0000 0000 0000~11 1111 1111 1111 00 0000 0000 0000~11 1111 1111 1111 00 0000 0000 0000~11 1111 1111 1111 00 0000 0000 0000~11 1111 1111 1111 00 0000 0000 0000~11 1111 1111 1111 00 0000 0000 0000~11 1111 1111 1111 00 0000 0000 0000~11 1111 1111 1111 E4000H~E7FFFH E8000H~EBFFFH EC000H~EFFFFH F0000H~F3FFFH F4000H~F7FFFH F8000H~FBFFFH FC000H~FFFFFH 7. 写出下图中138译码器指定引脚译码输出的地址范围。 47

答:由于A18未使用,属于部分译码,因此有两个编码对应同一存储单元。假设A18=1,其输出地址范围如表所示: /Y /Y0 /Y1 /Y2 /Y3 /Y4 /Y5 /Y6 /Y7 A19A18A17A16 A15A14A13 A12 A11A10A9A8 A7A6A5A4 A3A2A1A0 1100 1100 1100 1100 1100 1100 1100 1100 000 001 010 011 100 101 110 111 地址范围 0 0000 0000 0000~1 1111 1111 1111 C0000H~C1FFFH 0 0000 0000 0000~1 1111 1111 1111 C2000H~C3FFFH 0 0000 0000 0000~1 1111 1111 1111 C4000H~C5FFFH 0 0000 0000 0000~1 1111 1111 1111 C6000H~C7FFFH 0 0000 0000 0000~1 1111 1111 1111 C8000H~C9FFFH 0 0000 0000 0000~1 1111 1111 1111 CA000H~CBFFFH 0 0000 0000 0000~1 1111 1111 1111 CC000H~CDFFFH 0 0000 0000 0000~1 1111 1111 1111 CE000H~CFFFFH 同理 ,当A18=0时可得下表: /Y /Y0 /Y4 /Y6 /Y7 8. 利用全地址译码将6264芯片接在IA-32的系统总线上,其所占地址范围为0BE000H~0BFFFFH,画出连接电路图。 A19A18A17A16 A15A14A13 1000 1000 1000 1000 000 100 110 111 A12 A11A10A9A8 A7A6A5A4 A3A2A1A0 地址范围 0 0000 0000 0000~1 1111 1111 1111 80000H~81FFFH 0 0000 0000 0000~1 1111 1111 1111 88000H~89FFFH 0 0000 0000 0000~1 1111 1111 1111 8C000H~8DFFFH 0 0000 0000 0000~1 1111 1111 1111 8E000H~8FFFFH 48

CALL 调用子程序 RET 返回到调用函数或操作系统 INT 中断指令 8. 在子程序中,可否改变子程序的返回地址?若可以,则举例说明。 答:可以改变,通过修改栈中的 EBP+4的内容。 9. 为什么特别强调为子程序加上必要的注释? 答:完整的子程序注释可方便程序员调用该子程序,子程序注释包括子程序名、子程序功能、入口参数和出口参数、调用注意事项和其他说明等。 5.6.应用题 1. 能被4整除但不能被100整除,或者年被400整除的年份是闰年。编程写一个完整的程序,求出2012年~2099年中的所有闰年年份,并把它们存放在数组Lyear中。 ; Win32 Console Application ;能被4整除但不能被100整除,或者年被400整除的年份是闰年。 ;编程写一个完整的程序,求出2012年~2099年中的所有闰年年份, ;并把它们存放在数组Lyear中。 ; 目的:学习如何利用条件转移指令构造复杂逻辑运算结构。 ; 算法描述 ; esi=0闰年个数计数器;ecx=2012年份计数器; ; while (ecx<2100) ; { if (year mod 4=0 and year mod 100 <>0) or (year mod 400=0) then ; {Lyear[esi]=ecx;esi++;} ; ecx++; ; } ; Lcounter=esi; ; 采用div指令求余数来判断整除性,采用带比例因子的相对寻址处理数组。 include io32.inc .data Lyear dword 100 dup(?) Lcounter dword 0 .code main proc xor esi,esi ;esi闰年个数计数器,兼做Lyear下标。 mov ecx,2012 ;ecx年份计数器。 .while (ecx<2100) mov eax,ecx xor edx,edx mov ebx,400 div ebx cmp edx,0 jz leap ;if year mod 400=0 then goto leap 19

mov eax,ecx xor edx,edx mov ebx,4 div ebx cmp edx,0 jnz next ;if year mod 4<>0 then goto next mov eax,ecx xor edx,edx mov ebx,100 div ebx cmp edx,0 jz next ;if year mod 100=0 then goto next leap: mov Lyear[esi*4],ecx inc esi mov eax,ecx call dispuid ;输出,用于验证。可以删掉 call dispcrlf ;输出,用于验证。可以删掉 next: inc ecx .endw mov Lcounter,esi mov eax,esi call dispuid ;输出,用于验证。可以删掉 call dispcrlf ;输出,用于验证。可以删掉 ret main endp ;end of main end main ;end of assembly 2. 编程写一个完整的程序,求出2~100之间的所有素数,并将它们存入Prime数组中,素数的个数存入变量Pcounter中。 ; Win32 Console Application ; 编程写一个完整的程序,求出2~100之间的所有素数, ;并将它们存入Prime数组中,素数的个数存入变量Pcounter中。 ; 目的:学习如何利用条件转移指令构造条件循环结构,多重循环的构造方法。 ; 算法描述 ; 0. Pcounter=0; ; 1. i=2 to 100 do ; 1.1 if i is prime number then Prime[Pcounter++]=i ; 细化 1.1 如下: ; 1.1 j=2 to i/2 do ; 1.1.1 if i mod j=0 then goto next i ; 1.1.2 Prime[Pcounter++]=i 20

; 合理分配寄存器,esi=0,esi素数个数计数器,兼做Prime下标; ; 采用带比例因子的相对寻址处理数组。 ; i=ebx,j=ecx,edxeax做被除数,ecx做除数。 include io32.inc .data Prime dword 100 dup(?) Pcounter dword ? .code main proc xor mov iLoop: jLoop: cmp ja mov shr esi,esi ;esi素数个数计数器,兼做Prime下标。 ebx,2 ebx,100 ;i循环入口 done ecx,ebx ecx,1 ;j=i/2 ecx,2 ;j循环入口 prime eax,ebx ;xor edx,edx cmp jb mov cdq div ecx ;被除数送edxeax,32位除法 or edx,edx ;cmp edx,0 jz nexti ;if i mod j=0 then goto next i dec ecx jmp jLoop prime: mov Prime[esi*4],ebx inc esi mov eax,ebx call dispuid ;输出,用于验证。可以删掉 call dispcrlf ;输出,用于验证。可以删掉 nexti: inc ebx ;i=i+1 jmp iLoop done: mov Pcounter,esi ret ;返回操作系统 main endp ;end of main end main ;end of assembly 3. 编程写一个完整的程序,将数组aray中的元素按逆序存放,要求程序中附加的变量最少。数据段的定义如下: .data aray dword 12,4, 168,122,-33,56,78,99,345, 66,-5 ; 逆置一个一维数组 ; 算法描述: 21

; left,right分别指向数组的第一个和最后一个元素,采用首尾交换。 ; 1. left=0,right=n-1 ; ; 2. while left

; 2. for i=1 to n-1 do ; 2.1 if maxa[i] then min=a[i] ; 合理分配寄存器:采用loop循环,ecx=lengthof array -1 ; max=eax=a[0],min=ebx=a[0]; ; esi=1,做下标,采用带比例因子的相对寻址处理数组。 .686 .model flat,stdcall option casemap:none includelib msvcrt.lib printf PROTO C : dword,:vararg .data array dword 12,4,-168,122,33,56,78,99,345,-66,-5 max dword ? min dword ? fmtStr byte ' max=%d min=%d',13,10,0 ;格式描述串 .code main proc mov ecx,lengthof array -1 mov eax,array[0] ;eax:max mov ebx,eax ;ebx:min mov esi,1 ;数组下标 again: cmp eax,array[esi*4] jge small ;if max= small: cmp ebx,array[esi*4] jle next mov ebx,array[esi*4] next: inc esi loop again mov max,eax mov min,ebx invoke printf,offset fmtStr,eax,ebx ret ;return to Windows main endp ;end of main end main ;end of assembly 5. 编程写一个完整的程序统计msg中的空格的个数与小写字母的个数,并分别将它们存入space单元与char单元中。数据段的定义如下: .data msg byte 'I love XUT !',13,10,0 space dword ? 23

; 算法描述: ; 1. scanP=tailP=sLen-2; 数组下标从0开始 ; 2. while (scanP>=0) do ; if sStr[scanP]==' ' then ; for moveP=scanP+1 to tailP do ; sStr[moveP-1]=sStr[moveP]; ; tailP--; ; else ; scanP++; ; 3. print sStr; ; 合理分配寄存器:tailP=edi,scanP=esi ,moveP=ebx ; 采用相对寻址处理数组。 ; Q:若将此算法改为子程序,如何修改? Include io32.inc .data sStr byte ' I Love XAUT ! ',0dh,0ah,0 .code main proc lea eax,sStr ; 显示处理前的字符串 call dispmsg mov mov .while cmp jnz edi,lengthof sStr-2 ;尾指针tailP esi,edi ;从右向左扫描工作指针scanP sdword ptr esi>=0 ;sdword ptr esi指示将esi按有符号数处理 sStr[esi],20h ; 检测是否是空格 next lea ebx,[esi+1] ;移动字符工作指针moveP=scanP+1 .while ebx<=edi ;循环移动开始 mov al,sStr[ebx] mov sStr[ebx-1],al ;字符向前移一个位置 inc ebx .endw dec edi ;尾指针tailP向前移一个位置 next:dec esi ;向左扫描工作指针scanP向前移一个位置 .endw mov byte ptr sStr[edi+1],0 ;串结束标志 lea eax,sStr ;显示处理后的字符串 call dispmsg ret ;return to Windows main endp ;end of main end main ;end of assembly 14. 编写一子程序,将一个32位二进制数用8位十六进制形式在屏幕上显示出来。采用堆栈方法传递这个32位二进制数,并写主程序验证它。显示一个字符的子程序为:dispc,入口参数:AL=要显示个字符的SACII码。 34

; Win32 Console Application ; 将一个32位二进制数转换为8位十六进制, ; 并在屏幕上显示出来的子程序。 ; 目的:学习子程序的构造与参数的传递方法。 include io32.inc .data dvar dword 1234abc8h ;table byte '0123456789abcdef' ;采用查表法进行转换 .code main proc push dvar ;堆栈传递参数 call btoh ret ;return to Windows main endp ;end of main btoh proc ; function: 将一个32位二进制数转换为8位十六进制, ; 并在屏幕上显示出来。 ; Receives: 堆栈中获取要转换为十六进制的32位数 ; Returns: 无。 ; 算法思想:采用循环左移,一次移动4位。 ; 利用最低4位的值查表,转换为十六进制的数ASCII码。 ; 算法描述: ; 1. ecx=8; ; 2. while ecx>0 ; { ror eax,4; ; ebx=eax; ; eax=eax and 0fh; ; al=table[eax]; ; print al; ; eax=ebx; ; ecx--;} push ebp mov ebp,esp ; 建立访问栈参数的指针基准 push ebx ; 保护子程序中要使用的寄存器 push ecx mov ecx,8 mov eax,[ebp+8] again: rol eax,4 ;eax的最高的4位移动到最低的4位 mov ebx,eax and eax,0fh ;保留eax的最低的4位 35

mov al,table[eax] call dispc mov eax,ebx loop again call dispcrlf restore: pop ecx ; 恢复子程序中使用过的寄存器 pop ebx pop ebp ret 1*4 table byte '0123456789abcdef' ;采用查表法进行转换 btoh endp ;end of Bubble end main ;end of assembly 15. 编程写一个名为Bubble的冒泡排序子程序,主子程序间的参数传递通过堆栈完成;并写主程序验证它。显示一个无符号数的子程序为:dispuid,入口参数:EAX=要显示无符号数的值。 ; Win32 Console Application ; 冒泡排序子程序。 ; 目的:学习子程序的构造与参数的传递方法。 include io32.inc .data array dword 12,4,168,122,-33,56,78,99,345,66,-5 count equ lengthof array .code main proc push offset array ;array的首地址进栈,传地址 push count ;数组元素的个数进栈,传值 call Bubble xor esi,esi ;以下的while循环用于验证。可以删掉 .while (esi

; 注意:[ebp+8]是最后一个压入栈中的参数! ; 以[ebp+8]为基准,从栈中获取其它的参数。 ; Bubble Sort的思想:从第一个元素开始, ; 相邻的两个元素依次进行比较,若关系不对则交换。 ; 这样较小的数就向上移动,而较大的数则向下移动, ; 这就是冒泡排序的由来。经过N-1次比较, ; 最大的数被移动到最后一个位置, ; 这个过程称之为一趟扫描。 ; 显然,经过N-1趟扫描,排序过程就结束了; ; 并且每趟扫描的比较次数比前一趟减少一次。 ; 算法描述: ; 1. ecx=n-1; ; 2. while ecx>0 ; { esi=array;数组的首地址 ; ebx=ecx; ; while ebx>0 ; { if [esi]>[esi+4] then ; swap [esi],[esi+4] ; ; esi=esi+4;ebx--; ; } ; ecx--;} ; push ebp mov ebp,esp ; 建立访问栈参数的指针基准 push eax ; 保护子程序中要使用的寄存器 push ebx push ecx push esi push edi mov esi,[ebp+12] ;array的首地址 mov edi,esi mov ecx,[ebp+8] ;数组元素的个数 dec ecx again: mov esi,edi ;esi=array的首地址 mov ebx,ecx .while (ebx>0) mov eax,[esi] cmp eax,[esi+4] ; 比较两个相邻的元素 jl next xchg eax,[esi+4] mov [esi],eax ; 交换两个相邻的元素next: add esi,4 ; esi指向下一个元素 37

dec ebx .endw loop again restore: pop edi ; 恢复子程序中使用过的寄存器 pop esi pop ecx pop ebx pop eax pop ret Bubble endp end main ebp 2*4 ;清理栈中的参数 ;end of Bubble ;end of assembly 38

本文来源:https://www.bwwdw.com/article/s9h2.html

Top