1 / 28

第一部分预习题 1.CPU 由哪两部分组成?按照微命令产生的方式, CPU 控制器可分为哪两大类? 2. 试举出几种其它的 CPU 类型。什么是 CISC 和 RISC ?

第一部分预习题 1.CPU 由哪两部分组成?按照微命令产生的方式, CPU 控制器可分为哪两大类? 2. 试举出几种其它的 CPU 类型。什么是 CISC 和 RISC ? 3. 控制存储器是用来存放微程序的存储器,它应该比主存储器速度快,对不对? 4. 什么是控制流驱动方式? 5. 大多数微型机的总线由地址总线,数据总线和控制总线组成,因此,它们是三总线结构的 , 此说法对不对?。 6. 总线的时序控制方式大体有哪两种?什么是扩展同步方式? 7. 可运行于微机平台上的操作系统有哪些?. 第一部分课后复习题 1 . 80486 有几个物理空间?它们是如何区分的?

aria
Download Presentation

第一部分预习题 1.CPU 由哪两部分组成?按照微命令产生的方式, CPU 控制器可分为哪两大类? 2. 试举出几种其它的 CPU 类型。什么是 CISC 和 RISC ?

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第一部分预习题 1.CPU由哪两部分组成?按照微命令产生的方式,CPU控制器可分为哪两大类? 2.试举出几种其它的CPU类型。什么是CISC和RISC? 3.控制存储器是用来存放微程序的存储器,它应该比主存储器速度快,对不对? 4.什么是控制流驱动方式? 5.大多数微型机的总线由地址总线,数据总线和控制总线组成,因此,它们是三总线结构的,此说法对不对?。 6.总线的时序控制方式大体有哪两种?什么是扩展同步方式? 7.可运行于微机平台上的操作系统有哪些?

  2. 第一部分课后复习题 1. 80486有几个物理空间?它们是如何区分的? 2. 80486在实方式下,有两段物理存储空间需要保留, 试说明它们的范围和用途。 3. 试说明80486的环特权级保护方式的原理,特权规则及应用。 4. 80486有3个明确的存储地址空间,试说明它们之间的转换关系, 可绘图说明。 5. 试说明80486段式存储方式下,GDT,LDT,GDTR,LDTR的作用与相互关系。 6. 某系统中GDT段描述符的粒度位为0,则GDT的最大长度为多少? 能否推知该操作系统中运行的进程数量决不能超过多少? 7. 请说明CAHCE的作用。 8. 80486的4GB空间可以产生多少个页面?其中页目录和页表各是多少? 9. 请说明80486 的HOLD与HOLDA信号引脚的作用。猝发总线周期是什么? 10. 80486的EFLAG的IOPL,NT,VM标志起何作用?在实模式下,使用32位的寄存 器,为何有效地址不得超过FFFFH?

  3. 第二部分课后复习题 1.抢先式多工(preemptive multitasking )与合作型多工各 是什么含义?Windows95采用的是那种方式? 2. 简述WIN95操作系统的层次结构和组成。 3.解释VM,VMM,VXD以及它们的相互关系。

  4. 第三部分课后复习题1 1.外设为什么要通过接口电路和主机系统相连? 2.接口电路的作用是什么?I/O接口应具备那些功能? 3.什么是端口?端口有几类?在硬件设计上,CPU访问这些 端口时,应具备那些条件? 4.微机系统和输入输出设备交换信息的方式有几种?各有什么 特点。 5.定时/计数器各通道的CLK,GATE信号各有什么用? 6.定时/计数器的3个通道在微机中如何应用?

  5. 第三部分课后复习题2 课本8章作业1-7题。 第三部分课后复习题3 课本9章作业1,3,4,5题。 1.什么是USB?它有什么特点?USB的数据传输类型有哪些? 2.USB交换中的基本单位是什么?每次交换至少需要哪几个包? 第三部分课后复习题4 1. 教材10章第1题。 2. 教材11章第1题。

  6. 程序阅读

  7. 1.以下是PASCAL中用汇编写的子程序,子程序参数传递规范是前3个参数通过寄存器1.以下是PASCAL中用汇编写的子程序,子程序参数传递规范是前3个参数通过寄存器 EAX,EDX,ECX传递. 分析说明以下子程序的功能及返回值 1) function StrICOMP(const Str1, Str2: PChar): Integer; assembler; asm PUSH EDI PUSH ESI MOV EDI,EDX MOV ESI,EAX MOV ECX,0FFFFFFFFH XOR EAX,EAX REPNE SCASB NOT ECX MOV EDI,EDX XOR EDX,EDX @@1: REPE CMPSB JE @@4 MOV AL,[ESI-1] CMP AL,'a' JB @@2 CMP AL,'z' JA @@2 SUB AL,20H @@2: MOV DL,[EDI-1] CMP DL,'a' JB @@3 CMP DL,'z' JA @@3 SUB DL,20H @@3: SUB EAX,EDX JE @@1 @@4: POP ESI POP EDI end; {compare two strings without case sensitivity. StrIComp returns a value greater than 0 if Str1 > Str2, less than 0 if Str1 < Str2, and returns 0 if the strings are equal except for differences in case.}

  8. 2) function StrUPPER(Str: PChar): PChar; assembler; asm PUSH ESI MOV ESI,Str MOV EDX,Str @@1: LODSB OR AL,AL JE @@2 CMP AL,'a' JB @@1 CMP AL,'z' JA @@1 SUB AL,20H MOV [ESI-1],AL JMP @@1 @@2: XCHG EAX,EDX POP ESI end; 3)function StrLOWER(Str: PChar): PChar; assembler; asm PUSH ESI MOV ESI,Str MOV EDX,Str @@1: LODSB OR AL,AL JE @@2 CMP AL,'A' JB @@1 CMP AL,'Z' JA @@1 ADD AL,20H MOV [ESI-1],AL JMP @@1 @@2: XCHG EAX,EDX POP ESI end;

  9. 参考子程序 function StrLen(const Str: PChar): Cardinal; assembler;//返回字符串的长度 asm MOV EDX,EDI MOV EDI,EAX MOV ECX,0FFFFFFFFH XOR AL,AL REPNE SCASB MOV EAX,0FFFFFFFEH SUB EAX,ECX MOV EDI,EDX end; function StrEnd(const Str: PChar): PChar; assembler;//返回字符串尾的位置 asm MOV EDX,EDI MOV EDI,EAX MOV ECX,0FFFFFFFFH XOR AL,AL REPNE SCASB LEA EAX,[EDI-1] MOV EDI,EDX end;

  10. procedure MOV( const Source; var Dest; count : Integer ); asm PUSH ESI PUSH EDI MOV ESI,EAX MOV EDI,EDX MOV EAX,ECX CMP EDI,ESI JA @@down JE @@exit SAR ECX,2 JS @@exit REP MOVSD MOV ECX,EAX AND ECX,03H REP MOVSB JMP @@exit @@down: LEA ESI,[ESI+ECX-4] LEA EDI,[EDI+ECX-4] SAR ECX,2 JS @@exit STD REP MOVSD MOV ECX,EAX AND ECX,03H ADD ESI,4-1 ADD EDI,4-1 REP MOVSB CLD @@exit: POP EDI POP ESI end;

  11. function StrPos(const Str1, Str2: PChar): PChar; assembler; asm PUSH EDI PUSH ESI PUSH EBX OR EAX,EAX JE @@2 OR EDX,EDX JE @@2 MOV EBX,EAX MOV EDI,EDX XOR AL,AL MOV ECX,0FFFFFFFFH REPNE SCASB NOT ECX DEC ECX JE @@2 MOV ESI,ECX MOV EDI,EBX MOV ECX,0FFFFFFFFH REPNE SCASB NOT ECX SUB ECX,ESI JBE @@2 MOV EDI,EBX LEA EBX,[ESI-1] @@1: MOV ESI,EDX LODSB REPNE SCASB JNE @@2 MOV EAX,ECX PUSH EDI MOV ECX,EBX REPE CMPSB POP EDI MOV ECX,EAX JNE @@1 LEA EAX,[EDI-1] JMP @@3 @@2: XOR EAX,EAX @@3: POP EBX POP ESI POP EDI end; //Returns a pointer to the first occurrence of STR2 in STR1.

  12. function StrChDeletePrimZ (P : PAnsiChar; Pos : Cardinal) : PAnsiChar; register; asm push edi push esi push ebx mov ebx, eax mov edi, eax xor al, al or ecx, -1 repne scasb not ecx dec ecx or ecx, ecx jz @@ExitPoint sub ecx, edx jb @@ExitPoint mov edi, ebx add edi, edx mov esi, edi inc esi inc ecx rep movsb @@ExitPoint: mov eax, ebx pop ebx pop esi pop edi end;

  13. procedure ExchangeLongInts(var I, J : LongInt); {$IFDEF WIN32} register; asm {$ELSE} asm mov eax,i mov edx,j {$ENDIF} mov ecx, [eax] push ecx mov ecx, [edx] mov [eax], ecx pop ecx mov [edx], ecx end; procedure ExchangeWords(var I, J : Word); {$IFDEF WIN32} register; asm {$ELSE} asm mov eax,i mov edx,j {$ENDIF} mov cx, [eax] push ecx mov cx, [edx] mov [eax], cx pop ecx mov [edx], cx end;

  14. procedure FillWord(var Dest; Count : Cardinal; Filler : Word); asm {$IFDEF WIN32} push edi {$ENDIF} mov edi,Dest mov ax,Filler mov ecx,Count cld rep stosw {$IFDEF WIN32} pop edi {$ENDIF} end;

  15. procedure FillStruct(var Dest; Count : Cardinal; var Filler; FillerSize : Cardinal); {$IFDEF WIN32} register; asm {$ELSE} asm mov eax,Dest mov edx,Count mov ecx,Filler {$ENDIF} or edx, edx jz @@Exit push edi push esi push ebx mov edi, eax mov ebx, ecx @@NextStruct: mov esi, ebx mov ecx, FillerSize shr ecx, 1 rep movsw adc ecx, ecx rep movsb dec edx jnz @@NextStruct pop ebx pop esi pop edi @@Exit: end;

  16. pop ecx and ecx, $3 jz @@Done mov bl, [eax] mov bh, [edx] mov [edx], bl mov [eax], bh inc eax inc edx dec ecx jz @@Done mov bl, [eax] mov bh, [edx] mov [edx], bl mov [eax], bh inc eax inc edx dec ecx jz @@Done mov bl, [eax] mov bh, [edx] mov [edx], bl mov [eax], bh @@Done: pop ebx pop edi end; procedure ExchangeStructs(var I, J; Size : Cardinal); {$IFDEF WIN32} register; asm {$ELSE} asm mov eax,i mov edx,j mov ecx,Size {$ENDIF} push edi push ebx push ecx shr ecx, 2 jz @@LessThanFour @@AgainDWords: mov ebx, [eax] mov edi, [edx] mov [edx], ebx mov [eax], edi add eax, 4 add edx, 4 dec ecx jnz @@AgainDWords @@LessThanFour:

  17. function StrLCopy(Dest: PChar; const Source: PChar; MaxLen: Cardinal): PChar; assembler; asm PUSH EDI PUSH ESI PUSH EBX MOV ESI,EAX MOV EDI,EDX MOV EBX,ECX XOR AL,AL TEST ECX,ECX JZ @@1 REPNE SCASB JNE @@1 INC ECX @@1: SUB EBX,ECX MOV EDI,ESI MOV ESI,EDX MOV EDX,EDI MOV ECX,EBX SHR ECX,2 REP MOVSD MOV ECX,EBX AND ECX,3 REP MOVSB STOSB MOV EAX,EDX POP EBX POP ESI POP EDI end;

  18. function StrLCat(Dest: PChar; const Source: PChar; MaxLen: Cardinal): PChar; assembler; asm PUSH EDI PUSH ESI PUSH EBX MOV EDI,Dest MOV ESI,Source MOV EBX,MaxLen CALL StrEnd MOV ECX,EDI ADD ECX,EBX SUB ECX,EAX JBE @@1 MOV EDX,ESI CALL StrLCopy @@1: MOV EAX,EDI POP EBX POP ESI POP EDI end; {trLCat appends at most MaxLen - StrLen(Dest) characters from Source to the end of Dest and returns Dest. That is, MaxLen indicates the maximum length that is allowed in the result string. }

  19. function GetCPUSpeed_M3: Double; const DelayTime = 100; var TimerHi, TimerLo: DWORD; PriorityClass, Priority: Integer; begin PriorityClass:=GetPriorityClass(GetCurrentProcess); Priority:=GetThreadPriority(GetCurrentThread); SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS); SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL); Sleep(10);

  20. asm dw 310Fh // rdtsc mov TimerLo, eax mov TimerHi, edx end; Sleep(DelayTime); asm dw 310Fh sub eax, TimerLo sbb edx, TimerHi mov TimerLo, eax mov TimerHi, edx end; SetThreadPriority(GetCurrentThread, Priority); SetPriorityClass(GetCurrentProcess, PriorityClass); Result:=TimerLo/(1000.0*DelayTime); end;

  21. function IsCPUIDAvailable : Boolean; register; asm PUSHFD // {} POP EAX // {} MOV EDX,EAX //{} XOR EAX,ID_BIT // {} PUSH EAX //{} POPFD //{} PUSHFD //{} POP EAX //{} XOR EAX,EDX // {} JZ @exit //{} MOV AL,True //{} @exit: end; const ID_BIT = $200000; // EFLAGS ID bit

  22. type TCPUID = array[1..4] of Longint; TVendor = array [0..11] of char; function GetCPUID : TCPUID; assembler; register; asm PUSH EBX {Save affected register} PUSH EDI MOV EDI,EAX {@Resukt} MOV EAX,1 DW $A20F {CPUID Command} STOSD {CPUID[1]} MOV EAX,EBX STOSD {CPUID[2]} MOV EAX,ECX STOSD {CPUID[3]} MOV EAX,EDX STOSD {CPUID[4]} POP EDI {Restore registers} POP EBX end;

  23. function GetCPUVendor : TVendor; assembler; register; asm PUSH EBX {Save affected register} PUSH EDI MOV EDI,EAX {@Result (TVendor)} MOV EAX,0 DW $A20F {CPUID Command} MOV EAX,EBX XCHG EBX,ECX {save ECX result} MOV ECX,4 @1: STOSB SHR EAX,8 LOOP @1 MOV EAX,EDX MOV ECX,4 @2: STOSB SHR EAX,8 LOOP @2 MOV EAX,EBX MOV ECX,4 @3: STOSB SHR EAX,8 LOOP @3 POP EDI {Restore registers} POP EBX end;

  24. procedure Move36(const ASource; var ADest; ACount: Integer); asm fild qword ptr [eax] fild qword ptr [eax + 8] fild qword ptr [eax + 16] fild qword ptr [eax + 24] mov ecx, [eax + 32] mov [edx + 32], ecx fistp qword ptr [edx + 24] fistp qword ptr [edx + 16] fistp qword ptr [edx + 8] fistp qword ptr [edx] end; procedure Move28(const ASource; var ADest; ACount: Integer); asm mov ecx, [eax] mov [edx], ecx mov ecx, [eax + 4] mov [edx + 4], ecx mov ecx, [eax + 8] mov [edx + 8], ecx mov ecx, [eax + 12] mov [edx + 12], ecx mov ecx, [eax + 16] mov [edx + 16], ecx mov ecx, [eax + 20] mov eax, [eax + 24] mov [edx + 20], ecx mov [edx + 24], eax end;

  25. procedure FillDWord(var AAddress; AByteCount: integer; ADWordFillValue: Cardinal); asm {On Entry: eax = AAddress edx = AByteCount ecx = ADWordFillValue} add eax, edx neg edx jns @Done @FillLoop: mov [eax + edx], ecx add edx, 4 js @FillLoop @Done: end; function SumCardinals(AStartValue: Cardinal; APointer: PCardinal; ACount: Cardinal): Cardinal; asm {On entry: eax = AStartValue, edx = APointer; ecx = ACount} add edx, ecx neg ecx @AddLoop: add eax, [edx + ecx] add ecx, 4 js @AddLoop end;

  26. STOS/STOSB/STOSW/STOSD Store string data variations bytes 8088 186 286 386 486 Pentium stosb 1 11 10 3 4 5 3 NP stosw 1 15 10 3 4 5 3 NP stosd 1 - - - 4 5 3 NP rep stosb 2 9+10n 6+9n 4+3n 5+5n 7+4n* 3+n NP rep stosw 2 9+14n 6+9n 4+3n 5+5n 7+4n* 3+n NP rep stosd 2 - - - 5+5n 7+4n* 3+n NP * = 5 if n=0, 13 if n=1 (n = count of bytes, words or dwords) Example: rep stosd

  27. MOV Move data operands bytes 8088 186 286 386 486 Pentium reg, reg 2 2 2 2 2 1 1 UV mem, reg 2+d(0-2) 13+EA 9 3 2 1 1 UV reg, mem 2+d(0-2) 12+EA 12 5 4 1 1 UV mem, imm 2+d(0-2) 14+EA 12-13 3 2 1 1 UV* +i(1,2) reg, imm 2+i(1,2) 4 3-4 2 2 1 1 UV acc, mem 3 14 8 5 4 1 1 UV mem, acc 3 14 9 3 2 1 1 UV * = not pairable if there is a displacement and immediate Example: mov eax, ebx

  28. LEA Load effective address operands bytes 8088 186 286 386 486 Pentium r16, mem 2+d(2) 2+EA 6 3 2 1-2 1 UV r32, mem 2+d(2) - - - 2 1-2 1 UV Example: lea eax, [eax+ebx*2+3]

More Related