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 mov al,'=' call dispc mov eax,ebx call dispsid call dispcrlf
- -37
〔习题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〕
区别如下概念:宏定义、宏调用、宏指令、宏展开、宏汇编。
〔解答〕
宏定义:就是对宏进行说明,由一对宏汇编伪指令MACRO和ENDM来完成。 宏调用:宏定义之后的使用。在使用宏指令的位置写下宏名,后跟实体参数。 宏指令:使用宏时,其形式很像指令,所以称为宏指令。 宏展开:在汇编时,汇编程序用对应的代码序列替代宏指令。 宏汇编:指使用宏的方法进行汇编语言程序设计。
mov eax,offset msg2 call dispmsg call readc cmp al,20h je start exit 0 end start
- -38
〔习题4. 32〕
直接使用控制台输入和输出函数实现例题4-21的功能(不使用READMSG和DISPMSG子程序)。 〔解答〕
〔习题4. 33〕
直接使用控制台输出函数实现某个主存区域内容的显示(习题4.29的功能)。可以改进显示形式,例如每行显示16个字节(128位),每行开始先显示首个主存单元的偏移地址,然后用冒号分隔主存内容。 〔解答〕
〔习题4. 34〕
如何进行很简单的修改,使得例题4-22程序的消息窗有“OK”和“Cancel”两个按钮。 〔解答〕
将MB_OK常量定义为1,即: MB_OK equ 1 〔习题4. 35〕
上机实践例题4-23和例题4-24,并在创建可执行文件的过程中生成汇编语言列表文件。 〔习题4.36〕
Pentium处理器含有一个64位的时间标记计数器(Time-Stamp Counter)。该计数器每个时钟周期递增(加1);在上电和复位后,该计数器清0。指令“RDTSC”执行后将在EDX(高32位)和EAX(低32位)返回当前的64位时间标记计数器值。利用RDTSC指令在某个函数运行前获得时间标记计数器值,然后运行该函数后,立即再次执行RDTSC指令,并将再次获得的时间标记计数器值与之前的计数值相减,得到的差值就是运行该函数需要的时钟周期数(乘以时钟周期,等于运行时间)。请利用混合编程方法显示某个函数的运行时钟周期数。 〔解答〕
第5章 微机总线
〔习题5.1〕简答题
(1)为什么称处理器的数据总线是双向的?
(2)8086的地址和数据总线为什么要分时复用? (3)具有三态能力的引脚输出高阻意味着什么? (4)总线周期中的等待状态是个什么工作状态? (5)猝发传送是一种什么传送?
(6)总线数据传输为什么要进行总线仲裁? (7)异步时序为什么可以没有总线时钟信号?
(8)32位PC机为什么采用多级总线结构,而不是单总线结构? (9)USB总线有几个导线组成?
(10)什么是微软宣称的即插即用PnP(Plug-and-Play)技术?
〔解答〕
① 数据总线承担着处理器与存储器、外设之间的数据交换,既可以输入也可以输出,故其是双向的。 ② 为减少引脚个数,8086采用了地址总线和数据总线分时复用。即数据总线在不同时刻还具有地址总线的功能。
③ 具有三态能力的引脚当输出呈现高阻状态时,相当于连接了一个阻抗很高的外部器件,信号无法正常输出;即放弃对该引脚的控制,与其他部件断开连接。
④ 处理器的运行速度远远快于存储器和I/O端口。处理器检测到存储器或I/O端口不能按基本的总线周期进行数据交换时,插入一个等待状态Tw。等待状态实际上是一个保持总线信号状态不变的时钟周期。
⑤ 猝发传送是处理器只提供首地址、但可以从后续连续的存储单元中读写多个数据。
- -39
⑥ 总线上可能连接多个需要控制总线的主设备,需要确定当前需要控制总线的主设备,所以需要总线仲裁。
⑦ 异步时序是由总线握手(Handshake)联络(应答)信号控制,不是由总线时钟控制。故总线时钟信号可有可无。
⑧ 单总线结构限制了许多需要高速传输速度的部件。32位PC机采用多种总线并存的系统结构。各种专用局部总线源于处理器芯片总线,以接近处理器芯片引脚的速度传输数据,它为高速外设提供速度快、性能高的共用通道。
⑨ 4个。
⑩ 即插即用技术是指32位PC机的主板、操作系统和总线设备配合,实现自动配置功能。 〔习题5.2〕判断题
(1)低电平有效是指信号为低电平时候表示信号的功能。
(2)处理器读取存储器操作数时和读取代码时,都发生存储器读的总线操作。
(3)8086准备好READY引脚输出给存储器或外设有效信号,表明处理器准备好交换数据了。 (4)8086总线周期的T1状态发出地址,属于总线操作的寻址阶段。
(5)存储器单元以一个字节为基本单元,所以Pentium对应每8个数据总线引脚有一个奇偶校验信号。
(6)PCI总线和USB接口都支持热插拔。
(7)ISA总线仅支持8位和16位数据传输,PCI总线还支持32位和64位数据传输。 (8)PCI总线独立于处理器,所以其引脚信号多数并不与IA-32处理器对应。 (9)USB总线结构中主机包含有根集线器。
(10)支持USB 2.0版本的USB设备一定能够以高速(480Mb/s)传输数据。 〔解答〕
① 对 ⑥ 错
② 对 ⑦ 对
③ 错 ⑧ 对
④ 对 ⑨ 对
⑤ 对 ⑩ 错
〔习题5.3〕填空题
(1)某个处理器具有16个地址总线,通常可以用A__________表达最低位地址信号,用A15表达最高地址信号。
(2)8086有3个最基本的读写控制信号,它们是M/IO,__________和__________。
(3)8086预取指令时,在其引脚上将产生__________总线操作;执行指令“MOV AX, [BX]”时,在其引脚上将产生__________总线操作;执行指令“MOV [BX], AX”时,在其引脚上将产生__________总线操作。
(4)8086无等待的总线周期由__________个T状态组成,Pentium无等待的总线周期由__________个T状态组成。如果处理器的时钟频率为100MHz,则每个T状态的持续时间为__________。
(5)8086处理器进行I/O读操作时,其引脚M/IO为低,引脚RD为__________;ISA总线的__________引脚低有效说明进行I/O读操作。PCI总线用C/BE[3::0]#引脚编码为__________表示I/O读总线周期。
(6)占用总线进行数据传输,一般需要经过总线请求和仲裁、__________、__________和结束4个阶段。
(7)USB总线理论上最多能够连接__________个USB设备,USB 2.0支持低速__________、全速__________和高速480Mb/s三种速率。
(8)PCI总线共用数据和地址信号,所以数据传输需要两个阶段:第一个阶段(一个时钟)提供__________(地址,数据),第二个阶段(最少一个时钟)交换__________(地址,数据)。
(9)Pentium的3个最基本的读写控制引脚是M/IO,__________和__________。
(10)用于要求处理器插入等待状态的信号在8086上是引脚READY,在Pentium上是__________引脚,对应ISA总线是__________信号。 〔解答〕
① 0
② 读RD,写WR
③ 存储器读,存储器读,存储器写
- -40