微机原理与接口技术-课后习题答案

更新时间:2024-05-12 00:26:01 阅读量: 综合文库 文档下载

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

“微机原理与接口技术”习题解答

第1章 微型计算机系统

〔习题1.1〕简答题

(1)计算机字长(Word)指的是什么? (2)总线信号分成哪三组信号?

(3)PC机主存采用DRAM组成还是SRAM组成? (4)Cache是什么意思? (5)ROM-BIOS是什么? (6)中断是什么?

(7)32位PC机主板的芯片组是什么? (8)教材中MASM是指什么?

(9)处理器的“取指-译码-执行周期”是指什么?

(10)本课程的主要内容属于计算机系统层次结构中哪个层次? 〔解答〕

① 处理器每个单位时间可以处理的二进制数据位数称计算机字长。 ② 总线信号分成三组,分别是数据总线、地址总线和控制总线。 ③ PC机主存采用DRAM组成。

④ 高速缓冲存储器Cache是处理器与主存之间速度很快但容量较小的存储器。

⑤ ROM-BIOS是“基本输入输出系统”,操作系统通过对BIOS的调用驱动各硬件设备,用户也可以在应用程序中调用BIOS中的许多功能。

⑥ 中断是CPU正常执行程序的流程被某种原因打断、并暂时停止,转向执行事先安排好的一段处理程序,待该处理程序结束后仍返回被中断的指令继续执行的过程。

⑦ 主板芯片组是主板的核心部件,它提供主板上的关键逻辑电路。 ⑧ MASM是微软开发的宏汇编程序。

⑨ 指令的处理过程。处理器的“取指—译码—执行周期” 是指处理器从主存储器读取指令(简称取指),翻译指令代码的功能(简称译码),然后执行指令所规定的操作(简称执行)的过程。

⑩ 机器语言层,即指令集结构。

(学生很多认为是:汇编语言层。前4章主要涉及汇编语言,但本书还有很多处理器原理等内容) 〔习题1.2〕判断题

(1)软件与硬件的等价性原理说明软硬件在功能、性能和成本等方面是等价的。 (2)IA-64结构是IA-32结构的64位扩展,也就是Intel 64结构。

(3)8086的数据总线为16位,也就是说8086的数据总线的个数、或说条数、位数是16。

(4)微机主存只要使用RAM芯片就可以了。

(5)处理器并不直接连接外设,而是通过I/O接口电路与外设连接。 (6)处理器是微机的控制中心,内部只包括5大功能部件的控制器。 (7)Windows的模拟DOS环境与控制台环境是一样的。 (8)16位IBM PC/AT机采用ISA系统总线。

(9)IA-32处理器吸取了RISC技术特长。RISC是指复杂指令集计算机。

(10)处理器进行读操作,就是把数据从处理器内部读出传送给主存或外设。 〔解答〕

① 错 ② 错 ③ 对 ④ 错 ⑤ 对 ⑥ 错 ⑦ 错 ⑧ 对 ⑨ 错 ⑩ 错 〔习题1.3〕填空题

(1)CPU是英文___________的缩写,中文译为___________,微型机采用___________芯片构成CPU。

(2)Intel 8086支持___________容量主存空间,80486支持___________容量主存空间。 (3)二进制16位共有___________个编码组合,如果一位对应处理器一个地址信号,16位地址信号共能寻址___________容量主存空间。

(4) DOS主要支持两种可执行文件,它们的扩展名分别是___________和___________。

(5)英文缩写ISA常表示PC机工业标准结构(Industry Standard Architecture)总线,也表示指令集结构,后者的英文原文是___________。

(6)Windows的文件夹对应的专业术语是___________。

(7)Pentium系列处理器的多媒体指令有___________,SSE,SSE2和___________类指令。

(8)Pentium处理器采用___________位数据总线与主存相连。

(9)最初由___________公司采用Intel 8088处理器和___________操作系统推出PC机。

(10)当前32位PC机主要采用___________总线连接I/O接口电路卡。 〔解答〕

① Central Processing Unit,中央处理单元,处理器 ② 1MB,4GB ③ 216,64KB ④ EXE,COM

⑤ Instruction Set Architecture ⑥ 目录

⑦ MMX,SSE3 ⑧ 64

⑨ IBM,DOS ⑩ PCI 〔习题1.4〕

说明微型计算机系统的硬件组成及各部分作用。 〔解答〕

CPU:CPU也称处理器,是微机的核心。它采用大规模集成电路芯片,芯片内集成了控制器、运算器和若干高速存储单元(即寄存器)。处理器及其支持电路构成了微机系统的控制中心,对系统的各个部件进行统一的协调和控制。

存储器:存储器是存放程序和数据的部件。

外部设备:外部设备是指可与微机进行交互的输入(Input)设备和输出(Output)设备,也称I/O设备。I/O设备通过I/O接口与主机连接。

总线:互连各个部件的共用通道,主要含数据总线、地址总线和控制总线信号。

- -2

〔习题1.5〕

什么是通用微处理器、单片机(微控制器)、DSP芯片、嵌入式系统? 〔解答〕

通用微处理器:适合较广的应用领域的微处理器,例如装在PC机、笔记本电脑、工作站、服务器上的微处理器。

单片机:是指通常用于控制领域的微处理器芯片,其内部除CPU外还集成了计算机的其他一些主要部件,只需配上少量的外部电路和设备,就可以构成具体的应用系统。

DSP芯片:称数字信号处理器,也是一种微控制器,其更适合处理高速的数字信号,内部集成有高速乘法器,能够进行快速乘法和加法运算。

嵌入式系统:利用微控制器、数字信号处理器或通用微处理器,结合具体应用构成的控制系统。 〔习题1.6〕

综述Intel 80x86系列处理器在指令集方面的发展。 〔解答〕

8086奠定了基本的16位指令集,80286提供了保护方式的各种指令,80386将指令集全面提升为32位,80486融入了浮点数据处理指令,奔腾系列陆续增加了多媒体指令MMX、SSE、SSE2和SSE3,最新的奔腾4处理器还支持64位指令集。

题外话:大家可以通过阅读相关资料、查询互联网获得更加详细的发展情况。可以考虑组织成一篇或多篇论文。 〔习题1.7〕

区别如下概念:助记符、汇编语言、汇编语言程序和汇编程序。 〔解答〕

助记符:人们采用便于记忆、并能描述指令功能的符号来表示机器指令操作码,该符号称为指令助记符。

汇编语言:用助记符表示的指令以及使用它们编写程序的规则就形成汇编语言。 汇编语言程序:用汇编语言书写的程序就是汇编语言程序,或称汇编语言源程序。 汇编程序:汇编语言源程序要翻译成机器语言程序才可以由处理器执行。这个翻译的过程称为“汇编”,完成汇编工作的程序就是汇编程序(Assembler)。 〔习题1.8〕

区别如下概念:路径、绝对路径、相对路径、当前目录。系统磁盘上存在某个可执行文件,但在DOS环境输入其文件名却提示没有这个文件,是什么原因? 〔解答〕

路径:操作系统以目录形式管理磁盘上的文件,文件所在的分区和目录就是该文件的路径。

绝对路径:从根目录到文件所在目录的完整路径称为“绝对路径”。是保证文件唯一性的标示方法。

相对路径:从系统当前目录到文件所在目录的路径称为相对路径。 当前目录:用户当前所在的目录就是当前目录。

指明的路径不正确,或者执行了另外一个同名的文件。 〔习题1.9〕

什么是摩尔定律?它能永久成立吗?

- -3

〔解答〕

每18个月,集成电路的性能将提高一倍,而其价格将降低一半。(1965年,Intel公司的创始人之一摩尔预言:集成电路上的晶体管密度每年将翻倍。现在这个预言通常表达为:每隔18个月硅片密度(晶体管容量)将翻倍;也常被表达为:每18个月,集成电路的性能将提高一倍,而其价格将降低一半。)

不能。由于电子器件的物理极限在悄然逼近,摩尔定律不会永远持续。 〔习题1.10〕

冯·诺依曼计算机的基本设计思想是什么? 〔解答〕

采用二进制形式表示数据和指令。指令由操作码和地址码组成。

将程序和数据存放在存储器中,计算机在工作时从存储器取出指令加以执行,自动完成计算任务。这就是“存储程序”和“程序控制”(简称存储程序控制)的概念。

指令的执行是顺序的,即一般按照指令在存储器中存放的顺序执行,程序分支由转移指令实现。

计算机由存储器、运算器、控制器、输入设备和输出设备五大基本部件组成,并规定了5部分的基本功能。 〔习题1.11〕

计算机系统通常划分为哪几个层次?普通计算机用户和软件开发人员对计算机系统的认识一样吗? 〔解答〕

最上层是用户层。

第5层是高级语言层。 第4层是汇编语言层。 第3层是操作系统层。 第2层是机器语言层。 第1层是控制层。

第0层是数字电路层。

普通计算机用户和软件人员对计算机系统的认识并不一样。普通计算机用户看到的计算机,也就是我们最熟悉的计算机,属于用户层,而软件人员看到的属于高级语言层或是汇编语言层。 〔习题1.12〕

什么是系列机和兼容机?你怎样理解计算机中的“兼容”特性?例如,你可以用PC机为例,谈谈你对软件兼容(或兼容性)的认识,说明为什么PC机具有如此强大的生命力?

〔解答〕

系列机是指在一个厂家生产的具有相同计算机结构,但具有不同组成和实现的一系列(Family)不同档次、不同型号的机器。

兼容机是指不同厂家生产的具有相同计算机结构(不同的组成和实现)的计算机。 兼容是一个广泛的概念,包括软件兼容、硬件兼容、系统兼容等。其中软件兼容是指同一个软件可以不加修改地运行于体系结构相同的各档机器,结果一样但运行时间可能不同。软件兼容可从机器性能和推出时间分成向上(向下)和向前(向后)兼容。例如32位PC机就陆续增加了对浮点处理指令、多媒体指令等的支持。在保证向后兼容的前提下,不

- -4

断改进其组成和实现,延续计算机结构的生命,才使得PC机具有如此强大的生命力。 〔习题1.13〕

英特尔公司最新Intel 80x86处理器是什么?请通过查阅相关资料(如英特尔公司网站),说明其主要特点和采用的新技术。 〔解答〕

酷睿2多核处理器。 〔习题1.14〕

说明高级语言、汇编语言、机器语言三者的区别,谈谈你对汇编语言的认识。 〔解答〕

高级语言与具体的计算机硬件无关,其表达方式接近于所描述的问题,易为人们接受和掌握,用高级语言编写程序要比低级语言容易得多,并大大简化了程序的编制和调试,使编程效率得到大幅度的提高。而汇编语言是为了便于理解与记忆,将机器指令用助记符代替而形成的一种语言。汇编语言的语句通常与机器指令对应,因此,汇编语言与具体的计算机有关,属于低级语言。它比机器语言直观,容易理解和记忆,用汇编语言编写的程序也比机器语言易阅读、易排错。机器语言的每一条机器指令都是二进制形式的指令代码,计算机硬件可以直接识别。高级语言程序通常也需要翻译成汇编语言程序,再进一步翻译成机器语言代码。 〔习题1.15〕

为了更好地进行编程实践,请进入Windows操作系统下的控制台环境(或MS-DOS模拟环境),练习常用命令。

第2章 处理器结构

〔习题2.1〕简答题

(1)ALU是什么?

(2)8086的取指为什么可以被称为指令预取?

(3)Pentium的片上Cache采用统一结构还是分离结构? (4)堆栈的存取原则是什么?

(5)标志寄存器主要保存哪方面的信息?

(6)执行了一条加法指令后,发现ZF=1,说明结果是什么?

(7)汇编语言中的标识符与高级语言的变量和常量名的组成原则有本质的区别吗? (8)汇编语言的标识符大小写不敏感意味着什么?

(9)汇编语言源程序文件中,END语句后的语句会被汇编吗? (10)为什么将查找操作数的方法称为数据寻“址”方式? 〔解答〕

① ALU是算术逻辑运算单元,负责处理器所能进行的各种运算,主要是算术运算和逻辑运算。

② 取指是指从主存取出指令代码通过总线传输到处理器内部指令寄存器的过程。8086分成总线接口单元和指令执行单元,可以独立操作。在执行单元执行一条指令的同时,总线接口单元可以读取下一条指令,等到执行时不需要进行取指了,所以称为预取。

③ Pentium采用分离的Cache结构,一个用做指令Cache,一个用做数据Cache。 ④ 堆栈的存取原则是先进后出(也称为后进先出)操作方式存取数据。 ⑤ 标志寄存器主要保存反映指令执行结果和控制指令执行形式的有关状态。

- -5

⑥ 执行了一条加法指令后,发现ZF=1,表明运算结果为0。 ⑦ 没有。

⑧ 汇编语言的标识符大小写不敏感,即表示字母大小写不同、但表示同一个符号。 ⑨ 不会。

⑩ 指令的操作数需要通过存储器地址或I/O地址,才能查找到数据本身,故称数据寻址方式。

〔习题2.2〕判断题

(1)程序计数器PC或指令指针EIP寄存器属于通用寄存器。

(2)处理器的指令译码是将指令代码翻译成它代表的功能的过程,与数字电路的译码器是不同的概念。

(3)EAX也被称为累加器,因为它使用最频繁。

(4)处理器的传送指令MOV属于汇编语言的执行性语句。

(5)汇编语言的语句由明显的4部分组成,不需要分隔符区别。

(6)80减90(80-90)需要借位,所以执行结束后,进位标志CF=1。 (7)MASM汇编语言的注释用分号开始,但不能用中文分号。 (8)IA-32处理器在实地址方式下,不能使用32位寄存器。 (9)存储器寻址方式的操作数当然在主存了。

(10)保护方式下,段基地址加偏移地址就是线性地址或物理地址。 〔解答〕

① 错 ② 对 ③ 对 ④ 对 ⑤ 错 ⑥ 对 ⑦ 对 ⑧ 错 ⑨ 对 ⑩ 对 〔习题2.3〕填空题

(1)寄存器EDX是__________位的,其中低16位的名称是__________,还可以分成两个8位的寄存器,其中D8~D15部分可以用名称__________表示。

(2)IA-32处理器在保护方式下,段寄存器是__________位的。

(3)逻辑地址由__________和__________两部分组成。代码段中下一条要执行的指令由CS和__________寄存器指示,后者在实地址模型中起作用的仅有__________寄存器部分。

(4)进行8位二进制数加法:10111010+01101100,8位结果是__________,标志PF=__________。

(5)在实地址工作方式下,逻辑地址“7380H∶400H”表示的物理地址是__________,并且该段起始于__________物理地址。

(6)IA-32处理器有8个32位通用寄存器,其中EAX,__________,__________和EDX,可以分成16位和8位操作;还有另外4个是__________,__________,__________,和__________。

(7)IA-32处理器复位后,首先进入是__________工作方式。该工作方式分段最大不超过__________。

(8)MASM要求汇编语言源程序文件的扩展名是_____________,汇编产生扩展名为OBJ的文件被称为_____________文件,编写32位Windows应用程序应选择_____________存储模型。

(9)除外设数据外的数据寻址方式有3类,分别被称为_____________、_____________和_____________。

(10)用EBX做基地址指令,默认采用__________段寄存器指向的数据段;如果采用

- -6

BP,EBP或SP,ESP作为基地址指针,默认使用__________段寄存器指向堆栈段。 〔解答〕

① 32,DX,DH ② 16

③ 段地址,偏移地址,EIP,IP ④ 00100110,0

⑤ 73C00H,73800H

⑥ EBX,ECX,ESI,EDI,EBP,ESP ⑦ 实地址,64KB

⑧ ASM,目标模块,FLAT

⑨ 立即数寻址、寄存器寻址和存储器寻址 ⑩ DS,SS 〔习题2.4〕

处理器内部具有哪3个基本部分?8086分为哪两大功能部件?其各自的主要功能是什么?

〔解答〕

处理器内部有ALU、寄存器和指令处理三个基本单元。 8086有两大功能部件:总线接口单元和执行单元。 总线接口单元:管理着8086与系统总线的接口,负责处理器对存储器和外设进行访问。8086所有对外操作必须通过BIU和这些总线进行。

执行单元EU:负责指令译码、数据运算和指令执行。 〔习题2.5〕

8086怎样实现了最简单的指令流水线? 〔解答〕

8086中,指令的读取是在BIU单元,而指令的执行是在EU单元。因为BIU和EU两个单元相互独立、分别完成各自操作,所以可以并行操作。也就是说,在EU单元对一个指令进行译码执行时,BIU单元可以同时对后续指令进行读取;这就是最简单的指令流水线技术。 〔习题2.6〕

什么是标志?什么是IA-32处理器的状态标志、控制标志和系统标志?说明状态标志在标志寄存器EFLAGS的位置和含义。 〔解答〕

标志:用于反映指令执行结果或控制指令执行形式的一个或多个二进制数位。例如,有些指令执行后会影响有关标志位;有些指令的执行要利用相关标志。

状态标志:用来记录程序运行结果的状态信息。 控制标志:DF标志,控制字符串操作的地址方向。 系统标志:用于控制处理器执行指令的方式。

状态标志在标志寄存器EFLAGS中的位置和含义如下:

31 …… 11 OF 10 9 8 7 SF 6 ZF 5 4 AF 3 2 PF 1 0 CF

- -7

〔习题2.7〕

举例说明CF和OF标志的差异。 〔解答〕

进位标志CF表示无符号数运算结果是否超出范围,超出范围后加上进位或借位,运算结果仍然正确;溢出标志OF表示有符号数运算结果是否超出范围,如果超出范围,运算结果已经不正确。

例1:3AH + 7CH=B6H

无符号数运算:58+124=182,范围内,无进位。 有符号数运算:58+124=182,范围外,有溢出。 例2:AAH + 7CH=①26H

无符号数运算:170+124=294,范围外,有进位。 有符号数运算:-86+124=28 ,范围内,无溢出。 〔习题2.8〕

什么是8086中的逻辑地址和物理地址?逻辑地址如何转换成物理地址?请将如下逻辑地址用物理地址表达(均为十六进制形式):

① FFFF∶0 ② 40∶17 ③ 2000∶4500 ④ B821∶4567 〔解答〕

物理地址:在处理器地址总线上输出的地址称为物理地址。每个存储单元有一个唯一的物理地址。

逻辑地址:在处理器内部、程序员编程时采用逻辑地址,采用“段地址:偏移地址“形式。某个存储单元可以有多个逻辑地址,即处于不同起点的逻辑段中,但其物理地址是唯一的。

逻辑地址转换成物理地址:逻辑地址由处理器在输出之前转换为物理地址。将逻辑地址中的段地址左移二进制4位(对应16进制是一位,即乘以16),加上偏移地址就得到20位物理地址。

① FFFFH:0=FFFF0H ② 40H:17H=00417H

③ 2000H:4500H=24500H ④ B821H:4567H=BC777H 〔习题2.9〕

IA-32处理器有哪三类基本段,各是什么用途? 〔解答〕

IA-32处理器有代码段、数据段、堆栈段三类基本段。

代码段:存放程序的指令代码。程序的指令代码必须安排在代码段,否则将无法正常执行。

数据段:存放当前运行程序所用的数据。程序中的数据默认是存放在数据段,也可以存放在其他逻辑段中。

堆栈段:主存中堆栈所在的区域。程序使用的堆栈一定在堆栈段。 〔习题2.10〕

什么是平展存储模型、段式存储模型和实地址存储模型? 〔解答〕

平展存储模型下,对程序来说存储器是一个连续的地址空间,称为线性地址空间。程

- -8

序需要的代码、数据和堆栈都包含在这个地址空间中。

段式存储模型下,对程序来说存储器由一组独立的地址空间组成,独立的地址空间称为段。通常,代码、数据和堆栈位于分开的段中。

实地址存储模型是8086处理器的存储模型。它是段式存储模型的特例,其线性地址空间最大为1MB容量,由最大为64KB的多个段组成。 〔习题2.11〕

什么是实地址方式、保护方式和虚拟8086方式?它们分别使用什么存储模型? 〔解答〕

实地址方式:与8086具有相同的基本结构,只能寻址1MB物理存储器空间,逻辑段最大不超过64KB;但可以使用32位寄存器、32位操作数和32位寻址方式;相当于可以进行32位处理的快速8086。实地址工作方式只能支持实地址存储模型。

保护方式:具有强大的段页式存储管理和特权与保护能力,使用全部32条地址总线,可寻址4GB物理存储器。保护方式通过描述符实现分段存储管理,每个逻辑段可达4GB。处理器工作在保护方式时,可以使用平展或段式存储模型。

虚拟8086方式:在保护方式下运行的类似实方式的运行环境,只能在1MB存储空间下使用“16位段”。 处理器工作在虚拟8086方式时,只能使用实地址存储模型。 〔习题2.12〕

汇编语句有哪两种,每个语句由哪4个部分组成? 〔解答〕

汇编语句有两种:执行性语句(处理器指令)、说明性语句(伪指令)。 每个语句有:标号、指令助记符、操作数或参数、注释4个部分组成。 〔习题2.13〕

汇编语言程序的开发有哪4个步骤,分别利用什么程序完成、产生什么输出文件。 〔解答〕

汇编语言程序的开发有4个步骤:

编辑:用文本编辑器形成一个以ASM为扩展名的源程序文件。 汇编:用汇编程序将ASM文件转换为OBJ模块文件。

连接:用连接程序将一个或多个目标文件链接成一个EXE或COM可执行文件。 调试:用调试程序排除错误,生成正确的可执行文件。 〔习题2.14〕

MASM汇编语言中,下面哪些是程序员可以使用的正确的标识符。 FFH,DS,0xvab,Again,next,@data,h_ascii,6364b,.exit,small 〔解答〕

FFH,Again,next,h_ascii 〔习题2.15〕

给出IA-32处理器的32位寻址方式和16位寻址方式的组成公式,并说明各部分作用。 〔解答〕

① 32位存储器寻址方式的组成公式

32位有效地址 = 基址寄存器+(变址寄存器×比例)+位移量 其中的4个组成部分是:

·基址寄存器??任何8个32位通用寄存器之一;

- -9

·变址寄存器??除ESP之外的任何32位通用寄存器之一;

·比例??可以是1,2,4或8(因为操作数的长度可以是1,2,4或8字节); ·位移量??可以是8或32位有符号值。 ② 16位存储器寻址方式的组成公式

16位有效地址 = 基址寄存器+变址寄存器+位移量

其中基址寄存器只能是BX或BP,变址寄存器只能是SI或DI,位移量是8或16位有符号值。 〔习题2.16〕

说明下列指令中源操作数的寻址方式?假设VARD是一个双字变量。 (1)mov edx,1234h (2)mov edx,vard (3)mov edx,ebx (4)mov edx,[ebx]

(5)mov edx,[ebx+1234h] (6)mov edx,vard[ebx] (7)mov edx,[ebx+edi]

(8)mov edx,[ebx+edi+1234h] (9)mov edx,vard[esi+edi] (10)mov edx,[ebp*4] 〔解答〕

① 立即数 ② 直接 ③ 寄存器

④ 寄存器间接 ⑤ 寄存器相对 ⑥ 寄存器相对 ⑦ 基址变址

⑧ 相对基址变址 ⑨ 相对基址变址 ⑩ 带比例寻址 〔习题2.17〕

使用本书配套的软件包(或者按照本书说明)创建MASM开发环境,通过编辑例题2-1和例题2-2程序、汇编连接生成可执行程序和列表文件,掌握汇编语言的开发。

第3章 数据处理

〔习题3.1〕简答题

(1)使用二进制8位表达无符号整数,257有对应的编码吗?

(2)字符“'F'”和数值46H作为MOV指令的源操作数有区别吗?

(3)为什么可以把指令“MOV AX, (34+67H)*3”中的数值表达式看成是常量? (4)数值500,能够作为字节变量的初值吗?

(5)为什么说“XCHG EDX,CX”是一条错误的指令?

(6)都是获取偏移地址,为什么指令“LEA EBX, [ESI]”正确,而指令“MOV EBX,

- -10

〔习题4.26〕

编制3个子程序把一个32位二进制数用8位十六进制形式在屏幕上显示出来,分别运用如下3种参数传递方法,并配合3个主程序验证它。

(1)采用EAX寄存器传递这个32位二进制数 (2)采用temp变量传递这个32位二进制数 (3)采用堆栈方法传递这个32位二进制数 〔解答〕

(1)

; 数据段

wvar word 307281AFH ; 代码段,主程序 mov eax,wvar call disp mov al,'H' call dispc

; 代码段,子程序 disp proc

push ebx push ecx

mov ecx,8 dhw1: rol eax,4 mov ebx,eax and al,0fh add al,30h cmp al,'9' jbe dhw2

add al,7 dhw2: call dispc mov eax,ebx loop dhw1 pop ecx pop ebx

ret disp

endp

(2)

; 数据段

wvar word 307281AFH temp word ?

; 代码段,主程序 mov eax,wvar mov temp,eax call disp mov al,'H' call dispc

; 代码段,子程序 disp proc

push ebx

push ecx

位 转换为ASCII码 -36

- ; 8;

dhw1:

dhw2: mov ecx,8 ; 8位 mov eax,temp rol eax,4 mov ebx,eax and al,0fh ; 转换为ASCII码 add al,30h cmp al,'9' jbe dhw2 add al,7

call dispc ; 显示一个字符 mov eax,ebx loop dhw1 pop ecx pop ebx

ret disp endp

(3)

; 数据段

wvar word 307281AFH ; 代码段,主程序 push wvar call disp add esp,4 mov al,'H' call dispc

; 代码段,子程序 disp proc

push ebp mov ebp,esp push ebx push ecx mov ecx,8

mov eax,[ebp+8] dhw1: rol eax,4 mov ebx,eax and al,0fh add al,30h cmp al,'9' jbe dhw2

add al,7 dhw2: call dispc mov eax,ebx loop dhw1 pop ecx pop ebx pop ebp

ret disp

endp

; 8位 ; 转换为ASCII码 -37

- 〔习题4.27〕

配合例题4-11的简单加密解密程序,设计一个输入密码的程序,将输入的若干字符经过适当算法得到一个字节量密码。 〔解答〕

;ex0427.asm include io32.inc .data key byte ? msg0 byte 'Enter your password:',0 passw byte 50 dup(0)

errormsg byte 'Password error, input again!',13,10,0 bufnum = 255

buffer byte bufnum+1 dup(0) ; 定义键盘输入需要的缓冲区 msg1 byte 'Enter messge: ',0 msg2 byte 'Encrypted message: ',0 msg3 byte 'Original messge: ',0 .code start: mov eax,offset msg0 ; 提示输入加密密码 call dispmsg mov eax,offset passw ; 设置入口参数EAX call readmsg ; 调用输入字符串子程序输入密码 mov ecx,eax dec ecx xor ebx,ebx mov al,passw[ebx] again0: inc ebx xor al,passw[ebx] ;使用简单的异或方法得到加密关键字 loop again0 mov key,al ; 保存加密关键字 mov eax,offset msg1 ; 提示输入字符串 call dispmsg mov eax,offset buffer ; 设置入口参数EAX call readmsg ; 调用输入字符串子程序 push eax ; 字符个数保存进入堆栈 mov ecx,eax ; ECX=实际输入的字符个数,作为循环的次数 xor ebx,ebx ; EBX指向输入字符 encrypt: mov al,key ; AL=加密关键字 xor buffer[ebx],al ; 异或加密 inc ebx dec ecx ; 等同于指令:loop encrypt jnz encrypt ; 处理下一个字符 mov eax,offset msg2 call dispmsg mov eax,offset buffer ; 显示加密后的密文 call dispmsg call dispcrlf ;

- -38

again: mov eax,offset msg0 ; 提示输入解密密码 call dispmsg mov eax,offset passw ; 设置入口参数EAX call readmsg ; 调用输入字符串子程序输入密码 mov ecx,eax dec ecx xor ebx,ebx mov al,passw[ebx] again1: inc ebx xor al,passw[ebx] ;使用简单的异或方法得到加密关键字 loop again1 cmp key,al ; 与原加密关键字比较 jz next ; 密码相同,则进行解密 mov eax,offset errormsg ; 提示输入解密密码错误 call dispmsg jmp again

next: pop ecx ; 从堆栈弹出字符个数,作为循环的次数 xor ebx,ebx ; EBX指向输入字符 decrypt: mov al,key ; AL=解密关键字 xor buffer[ebx],al ; 异或解密 inc ebx dec ecx jnz decrypt ; 处理下一个字符 mov eax,offset msg3 call dispmsg mov eax,offset buffer ; 显示解密后的明文 call dispmsg

〔习题4.28〕

设计一个简单的两个整数的加法器程序。 〔解答〕

;ex0428.asm include io32.inc .data msg1 byte 'Enter the integers:',13,10,0 msg2 byte 13,10,'Enter space to continue! Enter any other key to exit!',13,10,0 .code start: mov eax,offset msg1 call dispmsg call readsid mov ebx,eax mov al,'+' call dispc call dispcrlf call readsid add ebx,eax

- -39

mov al,'=' call dispc mov eax,ebx call dispsid call dispcrlf mov eax,offset msg2 call dispmsg call readc cmp al,20h je start exit 0 end start

〔习题4.29〕

利用十六进制字节显示子程序DISPHB设计一个从低地址到高地址逐个字节显示某个主存区域内容的子程序DISPMEM。其入口参数:EAX=主存偏移地址,ECX=字节个数(主存区域的长度)。同时编写一个主程序进行验证。 〔解答〕

;ex0429.asm in Windows Console include io32.inc .data var byte 'This is a test!' .code start: ; 主程序 mov eax,offset var mov ecx,sizeof var call dispmem exit 0 ; 子程序 dispmem proc push ebx mov ebx,eax dispm1: mov al,[ebx] call disphb mov al,' ' call dispc inc ebx loop dispm1 pop ebx ret dispmem endp end start

〔习题4.30〕

将例题4-19分别使用子程序模块、子程序库和子程序库包含方法生成最终可执行文件。 〔习题4. 31〕

区别如下概念:宏定义、宏调用、宏指令、宏展开、宏汇编。

- -40

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

Top