admin 管理员组

文章数量: 887021


2023年12月19日发(作者:框架滚动条颜色)

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

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

第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接口与主机连接。

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

〔习题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〕什么是摩尔定律?它能永久成立吗?

〔解答〕

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

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

〔习题1.10〕冯??诺依曼计算机的基本设计思想是什么?

〔解答〕

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

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

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

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

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

〔解答〕

最上层是用户层。

第5层是高级语言层。

第4层是汇编语言层。

第3层是操作系统层。

第2层是机器语言层。

第1层是控制层。

第0层是数字电路层。

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

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

〔解答〕

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

兼容机是指不同厂家生产的具有相同计算机结构(不同的组成和实现)的计算机。

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

④ 堆栈的存取原则是先进后出(也称为后进先出)操作方式存取数据。

⑤ 标志寄存器主要保存反映指令执行结果和控制指令执行形式的有关状态。

⑥ 执行了一条加法指令后,发现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做基地址指令,默认采用__________段寄存器指向的数据段;

如果采用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 10 9 8 7 6 5 4 3 2 1 0

SF ZF AF PF CF

„„ OF

〔习题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〕什么是平展存储模型、段式存储模型和实地址存储模型?

〔解答〕

平展存储模型下,对程序来说存储器是一个连续的地址空间,称为线性地址空间。程序需要的代码、数据和堆栈都包含在这个地址空间中。

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

实地址存储模型是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位通用寄存器之一; 变址寄存器 除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, OFFSET[ESI]”就错误?

(7)INC,DEC,NEG和NOT都是单操作数指令,这个操作数应该是源操作数还是目的操作数?

(8)大小写字母转换使用了什么规律?

(9)乘除法运算针对无符号数和有符号数,有两种不同的指令。只有一种指令的加减法如何区别无符号数和有符号数运算?

(10)逻辑与运算为什么也称为逻辑乘?

〔解答〕

① 没有。使用二进制8位表达无符号整数,257没有对应的编码。

② 字符“'F'”的ASCII码就是数值46H,所以没有区别。

③ 汇编程序在汇编过程中对数值表达式计算,得到一个确定的数值,故称数值表达式为常量。

④ 不能。数值500大于一个字节所能表达的数据量,所以不能为字节变量赋值。

⑤ 源、目标寄存器位数不同,不能用该指令进行数据交换。

⑥ 前者在指令执行时获得偏移地址,是正确的;但后者的OFFSET只能在汇编阶段获得偏移地址,但此时寄存器内容是不可知的,所以无法获得偏移地址。

⑦ INC,DEC,NEG和NOT指令的操作数既是源操作数也是目的操作数。

⑧ 大小写字母转换利用它们的ASCII码相差20H。

⑨ 加减法不区别无符号数和有符号数,但根据运算结果分别设置标志寄存器的CF和OF标志,可利用CF和OF进行区别。

⑩ 逻辑与运算规则类似二进制的乘法,所以称其为逻辑乘。

〔习题3.2〕判断题

(1)对一个正整数,它的原码、反码和补码都一样,也都与无符号数的编码一样。

(2)常用的BCD码为8421 BCD码,其中的8表示D3位的权重。

(3)IA-32处理器采用小端方式存储多字节数据。

(4)空操作NOP指令其实根本没有指令。

(5)堆栈的操作原则是“先进后出”,所以堆栈段的数据除PUSH和POP指令外,不允许其他方法读写。

(6)虽然ADD指令和SUB指令执行后会影响标志状态,但执行前的标志并不影响它们的执行结果。

(7)指令“INC ECX”和“ADD ECX,1”的实现功能完全一样,可以互相替换。

(8)无符号数在前面加零扩展,数值不变;有符号数前面进行符号扩展,位数加长一位、数值增加一倍。

(9)逻辑运算没有进位或溢出问题,此时CF和OF没有作用,所以逻辑运

算指令如AND、OR等将CF和OF设置为0。

(10)CMP指令是目的操作数减去源操作数,CMPS指令是源操作数减去目的操作数。

〔解答〕

① 对 ② 对 ③ 对 ④ 错 ⑤ 错

⑥ 对 ⑦ 错 ⑧ 错 ⑨ 对 ⑩ 对

〔习题3.3〕填空题

(1)定义字节变量的伪指令助记符是_____________,获取变量名所具有的偏移地址的操作符是_____________。

(2)计算机中有一个“01100001”编码。如果把它认为是无符号数,它是10进制数___________;如果认为它是BCD码,则表示真值_____________;又如果它是某个ASCII码,则代表字符__________。

(3)C语言用“n”表示让光标回到下一行首位,在汇编语言中需要输出两个控制字符:一个是回车,其ASCII码是_____________,它将光标移动到当前所在行的首位;另一个是换行,其ASCII码是_____________,它将光标移到下一行。

(4)数据段有语句“H8843 DWORD 99008843H”,代码段指令“MOV CX, WORD

PTR H8843”执行后,CX=_____________。

(5)用DWORD定义的一个变量XYZ,它的类型是_____________,用“TYPE

XYZ”会得到数值为_____________。如果将其以字量使用,应该用_____________说明。

(6)数据段有语句“ABC BYTE 1,2,3”,代码段指令“MOV CL, ABC+2”执

行后,CL=_____________。

(7)例题3-9的TAB定义如果是“1234567890”,则显示结果是__________。

(8)指令“XOR EAX, EAX”和“SUB EAX, EAX”执行后,EAX=__________,CF=OF=__________。而指令“MOV EAX, 0”执行后,EAX=__________,CF和OF没有变化。

(9)例题3-15程序执行结束,变量QVAR内容是__________;BCD内容是__________。

(10)欲将EDX内的无符号数除以16,使用指令“SHR EDX, __________”,其中后一个操作数是一个立即数。

〔解答〕

① BYTE,OFFSET

② 97,61,小写字母a

③ 0DH(13),0AH(10)

④ 8843H

⑤ DWORD,4,WORD PTR XYZ

⑥ 3

⑦ 78894111

⑧ 0,0,0

⑨ 01XXXXXXXXXX5432H,83H

⑩ 4

〔习题3.4〕

下列十六进制数表示无符号整数,请转换为十进制形式的真值:

① FFH ② 0H ③ 5EH ④ EFH

〔解答〕

① 255

② 0

③ 94

④ 239

〔习题3.5〕

将下列十进制数真值转换为压缩BCD码:

① 12 ② 24 ③ 68 ④ 99

〔解答〕

① 12H

② 24H

③ 68H

④ 99H

〔习题3.6〕

将下列压缩BCD码转换为十进制数:

① 10010001 ② 10001001 ③ 00110110

〔解答〕

① 91

② 89

③ 36

④ 90

④ 10010000

〔习题3.7〕

将下列十进制数用8位二进制补码表示:

① 0 ② 127 ③-127 ④ -57

〔解答〕

① 00000000

② 01111111

③ 10000001

④ 11000111

〔习题3.8〕

进行十六进制数据的加减运算,并说明是否有进位或借位:

① 1234H+7802H

② F034H+5AB0H

③ C051H-1234H

④ 9876H-ABCDH

〔解答〕

① 1234H+7802H=8A36H,无进位

② F034H+5AB0H=4AF4H,有进位

③ C051H-1234H=BE1DH,无借位

④ 9876H-ABCDH=ECA9H,有借位

〔习题3.9〕

数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII码0DH和0AH分别对应什么字符?

〔解答〕

数码0~9对应的ASCII码依次是30H~39H。

大写字母A~Z对应的ASCII码依次是:41H~5AH。

小写字母a~z对应的ASCII码依次是:61~7AH。

ASCII码0DH和0AH分别对应的是回车和换行字符。

〔习题3.10〕

设置一个数据段,按照如下要求定义变量或符号常量:

① my1b为字符串变量:Personal Computer

② my2b为用十进制数表示的字节变量:20

③ my3b为用十六进制数表示的字节变量:20

④ my4b为用二进制数表示的字节变量:20

⑤ my5w为20个未赋值的字变量

⑥ my6c为100的常量

⑦ my7c表示字符串:Personal Computer

〔解答〕

my1b byte 'Personal Computer'

my2b byte 20

my3b byte 14h

my4b byte 00010100b

my5w word 20 dup ?

my6c 100

my7c equ

〔习题3.11〕定义常量NUM,其值为5;数据段中定义字数组变量DATALIST,它的头5个字单元中依次存放-10,2,5和4,最后1个单元初值不定。

〔解答〕

num equ 5

datalist byte -10,2,5,4,?

〔习题3.12〕从低地址开始以字节为单位,用十六进制形式给出下列语句依次分配的数值:

byte 'ABC',10,10h,'EF',3 dup -1,?,3 dup 4

word 10h,-5,3 dup ?

〔解答〕

41 42 43 0A 10 45 46 FF 00 04 04 04 FF 00 04 04 04 FF 00 04 04 04

10 00 FB FF 00 00 00 00 00 00

〔习题3.13〕设在某个程序中有如下片段,请写出每条传送指令执行后寄存器EAX的内容:

; 数据段

org 100h

varw word 1234h,5678h

varb byte 3,4

vard dword 12345678h

buff byte 10 dup ?

mess byte 'hello'

; 代码段

mov eax,offset mess

mov eax,type buff+type mess+type vard

mov eax,sizeof varw+sizeof buff+sizeof mess

mov eax,lengthof varw+lengthof vard

〔解答〕

① EAX=0114H

② EAX=0006H

③ EAX=0013H

④ EAX=0003H

〔习题3.14〕按照如下输出格式,在屏幕上显示ASCII表:

| 0 1 2 3 4 5 6 7 8 9 A B C D E F

---+

20 | ! “ # ...

30 | 0 1 2 3 ...

40 | @ A B C ...

50 | P Q R S ...

60 | ‘ a b c ...

70 | p q r s ...

表格最上一行的数字是对应列ASCII代码值的低4位(用十六进制形式),而表格左边的数字对应行ASCII代码值的高4位(用十六进制形式)。编程在数据段直接构造这样的表格、填写相应ASCII代码值(不是字符本身),然后使用字符串显示子程序DISPMSG实现显示。

〔解答〕

include

.data

table byte ' |0 1 2 3 4 5 6 7 8 9 A B C D E F',13,10

byte '---+

byte '20

|',20h,20h,21h,20h,22h,20h,23h,20h,24h,20h,25h,20h,26h,20h,27h,20h,28h,20h,29h,20h

byte 2ah,20h,2bh,20h,2ch,20h,2dh,20h,2eh,20h,2fh,20h,13,10

byte '30

|',30h,20h,31h,20h,32h,20h,33h,20h,34h,20h,35h,20h,36h,20h,37h,20h,38h,20h,39h,20h

byte 3ah,20h,3bh,20h,3ch,20h,3dh,20h,3eh,20h,3fh,20h,13,10

byte '40

|',40h,20h,41h,20h,42h,20h,43h,20h,44h,20h,45h,20h,46h,20h,47h,20h,48h,20h,49h,20h

byte 4ah,20h,4bh,20h,4ch,20h,4dh,20h,4eh,20h,4fh,20h,13,10

byte '50

|',50h,20h,51h,20h,52h,20h,53h,20h,54h,20h,55h,20h,56h,20h,57h,20h,58h,20h,59h,20h

byte 5ah,20h,5bh,20h,5ch,20h,5dh,20h,5eh,20h,5fh,20h,13,10

byte '60

|',60h,20h,61h,20h,62h,20h,63h,20h,64h,20h,65h,20h,66h,20h,67h,20h,68h,20h,69h,20h

byte 6ah,20h,6bh,20h,6ch,20h,6dh,20h,6eh,20h,6fh,20h,13,10

byte '70

|',70h,20h,71h,20h,72h,20h,73h,20h,74h,20h,75h,20h,76h,20h,77h,20h,78h,20h,79h,20h

byte 7ah,20h,7bh,20h,7ch,20h,7dh,20h,7eh,20h,7fh,20h,13,10

byte 0

.code

start:

mov eax,offset table

call dispmsg

exit 0

end start

〔习题3.15〕数据段有如下定义,IA-32处理器将以小端方式保存在主存:

var dword 12345678h

现以字节为单位按地址从低到高的顺序,写出这个变量内容。并说明如下指令的执行结果:

mov eax,var ; EAX=__________

mov bx,var ; BX=__________

mov cx,var+2 ; CX=__________

mov dl,var ; DL=__________

mov dh,var+3 ; DH=__________

可以编程使用十六进制字节显示子程序DSIPHB顺序显示各个字节进行验证,还可以使用十六进制双字显示子程序DSIPHD显示该数据进行对比。

〔解答〕

小端方式采用“低对低、高对高”,即低字节数据存放在低地址存储单元、高字节数据存放在高地址存储单元。以字节为单位按地址从低到高的顺序,var变量的内容:78H、56H、34H、12H。

; EAX=12345678H

; BX=5678H

; CX=1234H

; DL=78H

; DH=12H

〔习题3.16〕

使用若干MOV指令实现交互指令“XCHG EBX,[EDI]”功能。

〔解答〕

push eax ; 可以没有

mov eax,ebx

mov ebx,[edi]

mov [edi],eax

pop eax ; 可以没有

〔习题3.17〕

假设当前ESP=0012FFB0H,说明下面每条指令后,ESP等于多少?

push eax

push dx

push dword ptr 0f79h

pop eax

pop word ptr [bx]

pop ebx

〔解答〕

ESP=0012FFACH

ESP=0012FFAAH

ESP=0012FFA6H

ESP=0012FFAAH

ESP=0012FFACH

ESP=0012FFB0H

〔习题3.18〕已知数字0~9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H;请为如下程序的每条指令加上注释,说明每条指令的功能和执行结果。

; 数据段

table byte 18h,34h,05h,06h,09h,0ah,0ch,11h,12h,14h

; 代码段

mov ebx,offset table

mov al,8

xlat

为了验证你的判断,不妨使用本书的I/O子程序库提供的子程序DISPHB显示换码后AL的值。如果不使用XLAT指令,应如何修改?

〔解答〕

; 数据段

table byte 18h,34h,05h,06h,09h,0ah,0ch,11h,12h,14h ; 定义格雷码表

; 代码段

mov ebx,offset table ; EBX=格雷码表首地址

mov al,8

xlat

; AL=8

; AL=12H(8的格雷码)

不使用XLAT指令:

mov ebx,offset table ; EBX=格雷码表首地址

mov eax,0

mov al,8 ; AL=8

; AL=12H(8的格雷码) mov al,[eax+ebx]

〔习题3.19〕请分别用一条汇编语言指令完成如下功能:

(1)把EBX寄存器和EDX寄存器的内容相加,结果存入EDX寄存器。

(2)用寄存器EBX和ESI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。

(3)用EBX和位移量0B2H的寄存器相对寻址方式把存储器中的一个双字和ECX寄存器的内容相加,并把结果送回存储器中。

(4)将32位变量VARD与数3412H相加,并把结果送回该存储单元中。

(5)把数0A0H与EAX寄存器的内容相加,并把结果送回EAX中。

〔解答〕

① add edx,ebx

② add al,[ebx+esi]

③ add [bx+0b2h],cx

④ add varw,3412h

⑤ add eax,0a0h

〔习题3.20〕分别执行如下程序片断,说明每条指令的执行结果:

(1)

mov eax,80h ; EAX=__________

add eax,3 ; EAX=__________,CF=__________,SF=__________

add eax,80h ; EAX=__________,CF=__________,OF=__________

adc eax,3 ; EAX=__________,CF=__________,ZF=__________

(2)

mov eax,100 ; EAX=__________

add ax,200 ; EAX=__________,CF=__________

(3)

mov eax,100 ; EAX=__________

add al,200 ; EAX=__________,CF=__________

(4)

mov al,7fh ; AL=__________

sub al,8 ; AL=__________,CF=__________,SF=__________

sub al,80h ; AL=__________,CF=__________,OF=__________

sbb al,3 ; AL=__________,CF=__________,ZF=__________

〔解答〕

(1)

; EAX=80H

; EAX=83H,CF=0,SF=0

; EAX=103H,CF=0,OF=0

; EAX=106H,CF=0,ZF=0

(2)

; EAX=100

; EAX=300,CF=0

(3)

; EAX=100

; EAX=44,CF=1(包含256的进位含义:256+44=300)

(4)

mov al,7fh ; AL=7FH

sub al,8 ; AL=77H,CF=0,SF=0

sub al,80h ; AL=F7H,CF=1,OF=1

sbb al,3 ; AL=F3H,CF=0,ZF=0

〔习题3.21〕

给出下列各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态:

mov al,89h

add al,al

add al,9dh

cmp al,0bch

sub al,al

dec al

inc al

〔解答〕

mov al,89h ; AL=89H CF ZF SF OF PF

add al,al ; AL=12H 1 0 0 1 1

add al,9dh ; AL=0AFH 0 0 1 0 1

cmp al,0bch ; AL=0AFH 1 0 1 0 1

sub al,al ; AL=00H 0 1 0 0 1

dec al ; AL=0FFH 0 0 1 0 1

inc al ; AL=00H 0 1 0 0 1

〔习题3.22〕有两个64位无符号整数存放在变量buffer1和buffer2中,定义数据、编写代码完成←buffer1-buffer2功能。

〔解答〕

; 数据段

qword 67883000h

qword 67762000h

buffer1

buffer2

; 代码段

mov eax,dword ptr buffer1

mov edx,dword ptr buffer1+4

sub eax,dword ptr buffer2

sbb edx,dword ptr buffer2+4

〔习题3.23〕分别执行如下程序片断,说明每条指令的执行结果:

(1)

mov esi,10011100b ; ESI=__________H

and esi,80h ; ESI=__________H

or esi,7fh ; ESI=__________H

xor esi,0feh ; ESI=__________H

(2)

mov eax,1010b ; EAX=__________B

shr eax,2 ; EAX=__________B,CF=__________

shl eax,1 ; EAX=__________B,CF=__________

and eax,3 ; EAX=__________B,CF=__________

(3)

mov eax,1011b ; EAX=__________B

rol eax,2 ; EAX=__________B,CF=__________

rcr eax,1 ; EAX=__________B,CF=__________

or eax,3 ; EAX=__________B,CF=__________

(4)

xor eax,eax

; EAX=__________,CF=__________,OF=__________

; ZF=__________,SF=__________,PF=__________

〔解答〕

(1)

; ESI=9CH

; ESI=80H

; ESI=FFH

; ESI=01H

(2)

; EAX=1010B(可以有前导0,下同)

; EAX=0010B,CF=1

; EAX=0100B,CF=0

; EAX=0000B,CF=0

(3)

; EAX=1011B(可以有前导0,下同)

; EAX=101100B,CF=0

; EAX=10110B,CF=0

; EAX=10111B,CF=0

(4)

; EAX=0,CF=0,OF=0

; ZF=1,SF=0,PF=1

〔习题3.24〕3.24 给出下列各条指令执行后AX的结果,以及状态标志CF、OF、SF、ZF、PF的状态。

mov ax,1470h

and ax,ax

or ax,ax

xor ax,ax

not ax

test ax,0f0f0h

〔解答〕

mov ax,1470h ; AX=1470H

and ax,ax ; AX=1470H

or ax,ax ; AX=1470H

xor ax,ax ; AX=0000H

not ax ; AX=FFFFH

test ax,0f0f0h

CF OF SF ZF PF

0 0 0 0 0

0 0 0 0 0

0 0 0 1 1

0 0 0 1 1

; AX=0F0F0H 0 0 1 0 1

〔习题3.25〕逻辑运算指令怎么实现复位、置位和求反功能?

〔解答〕

AND指令同“0”与实现复位,OR指令同“1”或实现置位,XOR同“1”异或实现求反。

〔习题3.26〕说明如下程序段的功能:

mov ecx,16

mov bx,ax

next: shr ax,1

rcr edx,1

shr bx,1

rcr edx,1

loop next

mov eax,edx

〔解答〕

将AX的每一位依次重复一次,所得的32位结果保存于EAX中。

〔习题3.27〕

编程将一个64位数据逻辑左移3位,假设这个数据已经保存在寄存器对中。

〔解答〕

; 代码段

mov ecx,3

again: shl eax,1

rcl edx,1

loop again

〔习题3.28〕编程将一个压缩BCD码变量(例如92H)转换为对应的ASCII码,然后调用DISPC子程序(在输入输出子程序库中)显示。

〔解答〕

; 数据段

byte 92h bcd

; 代码段

mov al,bcd

shr al,4

add al,30h

call dispc

mov al,bcd

and al,0fh

add al,30h

call dispc

〔习题3.29〕以MOVS指令为例,说明串操作指令的寻址特点,并用MOV和ADD等指令实现MOVSD的功能(假设DF=0)。

〔解答〕

MOVS指令的功能是:

ES:[EDI]←DS:[ESI];ESI←ESI±1/2/4,EDI←EDI±1/2/4

由此可看出串操作指令的寻址特点:

源操作数用寄存器ESI间接寻址,默认在DS指向的数据段,但可以改变;目的操作数用寄存器EDI间接寻址,只能在ES指向的附加数据段;每执行一次串操作,源指针ESI和目的指针EDI将自动修改:±1(字节),±2(字)或±4(双字)。指针的增量和减量控制由DF标志确定,DF=0,进行增量;DF=1,进行减量。

push eax

mov eax,[esi]

mov es:[edi],eax

add esi,4

add edi,4

〔习题3.30〕说明如下程序执行后的显示结果:

; 数据段

byte 'WELLDONE',0 msg

; 代码段

mov ecx, lengthof msg -1

mov ebx,offset msg

again: mov al,[ebx]

add al,20h

mov [ebx],al

add ebx,1

loop again

mov eax,offset msg

call dispmsg

如果将其中语句“mov ebx,offset msg”改为“xor ebx,ebx”,则利用EBX间接寻址的两个语句如何修改成EBX寄存器相对寻址,就可以实现同样功能?

〔解答〕

显示结果:welldone

EBX寄存器相对寻址:

mov al,msg[ebx]

mov msg[ebx],al

〔习题3.31〕下面程序的功能是将数组ARRAY1的每个元素加固定值(8000H),将和保存在数组ARRAY2。在空白处填入适当的语句或语句的一部分。

; 数据段

array1 dword 1,2,3,4,5,6,7,8,9,10

array2 dword 10 dup ?

; 代码段

mov ecx,lengthof array1

mov ebx,0

again: mov eax,array1[ebx*4]

add eax,8000h

mov ______________

add ebx,__________

loop again

〔解答〕

mov array2[ebx*4],eax

add ebx,1

〔习题3.32〕

上机实现本章的例题程序,编程实现本章的习题程序。

第4章 汇编语言程序设计

〔习题4.1〕简答题

(1)是什么特点决定了目标地址的相对寻址方式应用最多?

(2)什么是奇偶校验?

(3)为什么判断无符号数大小和有符号大小的条件转移指令不同?

(4)双分支结构中两个分支体之间的JMP指令有什么作用?

(5)为什么特别强调为子程序加上必要的注释?

(6)子程序采用堆栈传递参数,为什么要特别注意堆栈平衡问题?

(7)参数传递的“传值”和“传址”有什么区别?

(8)INCLUDE语句和INCLUDELIB有什么区别?

(9)混合编程有什么优势?

(10)运行Windows程序,有时为什么会提示某个DLL文件不存在?

〔解答〕

① 当同一个程序被操作系统安排到不同的存储区域执行时,指令间的位移没有改变,目标地址采用相对寻址可方便操作系统的灵活调度。

② 数据通信时,数据的某一位用做传输数据的奇偶校验位,数据中包括校验位在内的“1”的个数恒为奇数,就是奇校验;恒为偶数,就是偶校验。

③ 无符号数和有符号数的操作影响两组不同的标志状态位,故判断两个无符号数和有符号数的大小关系要利用不同的标志位组合,所以有对应的两组指令。

④ 双分支结构中两个分支体之间的JMP指令,用于实现结束前一个分支回到共同的出口作用。

⑤ 完整的子程序注释可方便程序员调用该子程序,子程序注释包括子程序名、子程序功能、入口参数和出口参数、调用注意事项和其他说明等。

⑥ 子程序保持堆栈平衡,才能保证执行RET指令时当前栈顶的内容是正确的返回地址。主程序也要保持堆栈平衡,这样才能释放传递参数占用的堆栈空间,否则多次调用该子程序可能就致使堆栈溢出。

⑦ “传值”是传递参数的一个拷贝,被调用程序改变这个参数不影响调用

程序;“传址”时,被调用程序可能修改通过地址引用的变量内容。

⑧ INCLUDE语句包含的是文本文件、是源程序文件的一部分;INCLUDELIB语句包含的是子程序库文件。

⑨ 取长补短。

⑩ Windows程序在运行时需要加载其配套的动态链接库DLL文件,当其没有被搜索到时就会提示不存在。

〔习题4.2〕判断题

(1)指令指针或者还包括代码段寄存器值的改变将引起程序流程的改变。

(2)JMP指令对应高级语言的GOTO语句,所以不能使用。

(3)因为条件转移指令Jcc要利用标志作为条件,所以也影响标志。

(4)JA和JG指令的条件都是“大于”,所以是同一个指令的两个助记符。

(5)控制循环是否结束只能在一次循环结束之后进行。

(6)介绍LOOP指令时,常说它相当于DEC ECX和JNZ两条指令。但考虑对状态标志的影响,它们有差别。LOOP指令不影响标志,而DEC指令却会影响除CF之外的其他状态标志。

(7)CALL指令用在调用程序中,如果被调用程序中也有CALL指令,说明出现了嵌套。

(8)子程序需要保护寄存器,包括保护传递入口参数和出口参数的通用寄存器。

(9)利用INCLUDE包含的源文件实际上只是源程序的一部分。

(10)导入库文件和静态子程序库文件的扩展名都是LIB,所以两者性质相同。

〔解答〕

① 对 ② 错 ③ 错 ④ 错 ⑤ 错

⑥ 对 ⑦ 对 ⑧ 错 ⑨ 对 ⑩ 错

〔习题4.3〕填空题

(1)JMP指令根据目标地址的转移范围和寻址方式,可以分成四种类型:段内转移、__________,段内转移、__________和段间转移、__________,段间转移、__________。

(2)假设在平展存储模型下,EBX=1256H,双字变量TABLE的偏移地址是20A1H,线性地址32F7H处存放3280H,执行指令“JMP EBX” 后EIP=__________,执行指令“JMP TABLE[EBX]”后EIP=__________。

(3)“CMP EAX,3721H”指令之后是JZ指令,发生转移的条件是EAX=__________,此时ZF=__________。

(4)小写字母“e”是英文当中出现频率最高的字母。如果某个英文文档利用例题4-11的异或方法进行简单加密,统计发现密文中字节数据“8FH”最多,你判断该程序采用的字节密码可能是__________。

(5)循环结构程序一般有三个部分组成,它们是__________,循环体和__________部分。

(6)例题4-14程序中的RET指令,如果用POP EBP指令和JMP EBP指令替换,此时EBP内容是__________。

(7)过程定义开始是“TEST PROC”语句,则过程定义结束的语句是__________。宏定义开始是“DISP MACRO”语句,则宏定义结束的语句是__________。

(8)利用堆栈传递子程序参数的方法是固定的,例如寻址堆栈段数据的寄存器是__________。

(9)MASM汇编语言中,声明一个共用的变量应使用__________伪指令;而使用外部变量要使用__________伪指令声明。

(10)调用ReadConsole函数时,用户在键盘上按下数字8,然后回车,则键盘缓冲区的内容依次是__________。

〔解答〕

① 相对寻址,间接寻址,直接寻址,间接寻址

② 1256H,3280H

③ 3721H,1

④ EAH

⑤ 循环初始,循环控制

⑥ REPT1标号的地址

⑦ TEST ENDP,ENDM

⑧ EBP

⑨ PUBLIC,EXTERN

⑩ 38H 0DH 0AH

〔习题4.4〕为了验证例题4-1程序的执行路径,可以在每个标号前后增加显示功能。例如使得程序运行后显示数码1234。

〔解答〕

jmp labl1 ; 相对寻址

nop

mov eax,'?'

call dispc

mov eax,'1' labl1:

call dispc

jmp near ptr labl2

nop

mov eax,'?'

call dispc

mov eax,'2'

; 相对近转移

labl2:

call dispc

mov eax,offset labl3

jmp eax

nop

mov eax,'?'

call dispc

mov eax,'3'

; 寄存器间接寻址

labl3:

call dispc

mov eax,offset labl4

mov nvar,eax

jmp nvar ; 存储器间接寻址

nop

mov eax,'?'

call dispc

mov eax,'4' labl4:

call dispc

〔习题4.5〕使用“SHR EAX,2”将EAX中的D1位移入CF标志,然后用JC/JNC指令替代JZ/JNZ指令完成例题4-3的功能。

〔解答〕

mov eax,56h ; 假设一个数据

shr eax,2 ; D1位移入CF标志

jnc nom ; D1=0条件成立,转移

... ; 余同原程序

〔习题4.6〕

执行如下程序片断后,CMP指令分别使得5个状态标志CF、ZF、SF、OF和PF为0还是为1?它会使得哪些条件转移指令指令Jcc的条件成立、发生转移?

mov eax,20h

cmp eax,80h

〔解答〕

CF=1 ZF=0 SF=1 OF=0 PF=1

可以使得条件成立、发生转移的指令有:JC JS JP JNZ JNO

〔习题4.7〕将例题4-4程序修改为实现偶校验。建议进一步增加显示有关提示信息的功能,使得程序具有更加良好的交互性。

〔解答〕

include


本文标签: 指令 执行 地址