12. IA-32处理器有8个32位通用寄存器,其中ESI,EDI,EBP和ESP,不可以分解成16位和8位操作。
13. IA-32处理器在保护模式MASM采用平展或段式存储模型,而在实地址模式下则采用实地址存储模型。
14. 除I/O指令外,具有双操作数的指令中,目的操作数只能采用寄存器寻址方式或存储器寻址方式。
15. 计算机存储信息的最小单位是byte,1个字节等于8个二进制位。 五.简答题
1. 举例说明CF和OF标志的差异。
进位标志CF表示无符号数运算结果是否超出范围,超出范围后加上进位或借位,运算结果仍然正确;溢出标志OF表示有符号数运算结果是否超出范围,如果超出范围,运算结果已经不正确。
2. IA-32处理器有哪三类基本段,各是什么用途?
代码段:存放程序的指令代码。程序的指令代码必须安排在代码段,否则将无法正常执行。
数据段:存放当前运行程序所用的数据。程序中的数据默认是存放在数据段,也可以存放在其他逻辑段中。
堆栈段:主存中堆栈所在的区域。程序使用的堆栈一定在堆栈段。
3. 什么是实地址方式、保护方式和虚拟8086方式?它们分别使用什么存储模型?
实地址方式:与8086具有相同的基本结构,只能寻址1MB物理存储器空间,逻辑段最大不超过64KB;但可以使用32位寄存器、32位操作数和32位寻址方式;相当于可以进行32位处理的快速8086。实地址工作方式只能支持实地址存储模型。
保护方式:具有强大的段页式存储管理和特权与保护能力,使用全部32条地址总线,可寻址4GB物理存储器。保护方式通过描述符实现分段存储管理,每个逻辑段可达4GB。处理器工作在保护方式时,可以使用平展或段式存储模型。
虚拟8086方式:在保护方式下运行的类似实方式的运行环境,只能在1MB存储空间下使用“16位段”。 处理器工作在虚拟8086方式时,只能使用实地址存储模型。
4. 什么是平展存储模型、段式存储模型和实地址存储模型?
平展存储模型下,对程序来说存储器是一个连续的地址空间,称为线性地址空间。程序需要的代码、数据和堆栈都包含在这个地址空间中。
段式存储模型下,对程序来说存储器由一组独立的地址空间组成,独立的地址空间称为段。通常,代码、数据和堆栈位于分开的段中。
实地址存储模型是8086处理器的存储模型。它是段式存储模型的特例,其线性地址空间最大为1MB容量,由最大为64KB的多个段组成。
5. 汇编语句有哪两种,每个语句由哪4个部分组成?
汇编语句有两种:执行性语句(处理器指令)、说明性语句(伪指令)。 每个语句有:标号、指令助记符、操作数或参数、注释4个部分组成。
6. 给出IA-32处理器的32位寻址方式的组成公式,并说明各部分作用。
32位存储器寻址方式的组成公式
32位有效地址 = 基址寄存器+(变址寄存器×比例)+位移量 其中的4个组成部分是:
·基址寄存器??任何8个32位通用寄存器之一;
·变址寄存器??除ESP之外的任何32位通用寄存器之一;
·比例??可以是1,2,4或8(因为操作数的长度可以是1,2,4或8字节); ·位移量??可以是8或32位有符号值。
7. Pentium的片上Cache采用统一结构还是分离结构?
Pentium芯片中有两个8KB容量的Cache,一个用于高速缓冲指令的指令Cache,另一个用于高速缓冲数据的数据Cache,即分离的Cache结构。
8. 为什么将查找操作数的方法称为数据寻“址”方式? 主存和外设在汇编语言中被抽象为存储器的地址或I/O地址,而寄存器虽然以名称表达,但机器代码中同样用地址编码区别寄存器,所以指令的操作数需要通过地址指示。这样,通过地址才能查到数据本身,这就是数据寻址方式。
六.应用题
第3章 数据处理 一.选择
1. BUF DWORD 10h DUP( 3 DUP( 2,5 ) ,3 ,4 ,5)语句为变量BUF分配的内存空间的字节数是( )。 A. 50h B. 90h C. 240h D. 120h 2. BUF DW 10H DUP(3 DUP(2,?),1,2 DUP(?),100)为变量BUF分配的内存空间的字节数是( )。 A. 160 B. 22 C. 80 D. 320 3. 类型操作符PTR用于( )。 A. 定义内存变量的类型 B. 重新指定内存变量的类型 C. 定义寄存器变量的类型 D. 重新指定寄存器变量的类型
4. 用来定义双字变量的伪指令是( )。 A. DB B. DW C. DD D. DQ 5. 用来定义字变量的伪指令是( )。 A. DB B. DW C. DD D. DQ 6. 用来定义字节变量的伪指令是( 。) A. BYTE B. WORD C. DWORD D. QWORD 7. 执行AND指令后,OF和CF标志位的值是( )。 A. OF=CF=0 B. OF=0,CF=1 C. OF=1,CF=0 D. OF=1,CF=1
8. 执行INC指令除对于SF、ZF有影响外,还要影响的标志位是( )。 A. AF,PF,CF B. OF,AF,CF C. OF,PF,CF D. OF,AF,PF
9. 执行DEC指令除对于SF、ZF有影响外,还要影响的标志位是( )。 A. AF,PF,CF B. OF,AF,CF C. OF,PF,CF D. OF,AF,PF 10. 执行指令 XOR EAX,EAX 后则 ( ) A.AL=1, ZF=1 B.AL=0, ZF=0 C.AL=1, ZF=0 D.AL=0, ZF=1 11. 下列指令执行后,不影响标志位的指令是( )。 。 A.ADD EAX,1 B.DEC DX C.XOR CX,AX D.LEA EDX,MSG
12. 能够表示指令存放地址的是( ) A 符号名 B 变量名 C 标号 D 常量名 13. 8位二进制无符号数所能表示的数值范围是( )。 A.0 ~ 255 B.0 ~ 256 C.0 ~ 128 D.0 ~ 127
14. 16位二进制补码所能表示的带符号数的数值范围是( )。 A.0 ~ 65535 B.0 ~ 65536 C.-32768 ~ +32767 D.-65536 ~ +66536 15. 8位二进制补码所能表示的带符号数的数值范围是( )。 A.0 ~ 255 B.0 ~ 256 C.-128 ~ +127 D.-128 ~ +128 二.名词解释
1. Two's Complement 二进制补码
2. Nested Procedure Calls 嵌套程序调用
3. Conditional Jump 条件转移
4. Extended ASCII
扩充美国信息交换标准码
5. Integer constants 整数常量
6. Jumps Based on Signed Comparisons 无符号数条件转移比较 7. Little Endian Order 小端方式命令
8. Intrinsic Data Types 内部数据类型 三.判断
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 四.填空
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=_____________。 5. 数据段有语句“XYZ DWORD ?”,则XYZ的类型是_DWORD,用“TYPE XYZ”会得到数值为__4。
6. 数据段有语句“ABC BYTE 3 DUP (1,2,3)”,代码段指令“MOV CL, ABC+3”执行后,CL =_4; “MOV CL, ABC+8”执行后,CL=_9。 7. 数据段有语句“ABC BYTE 3 DUP (1,2,3)”,代码段指令“MOV AX, WORD PTR ABC”执 行后,AX=_; “MOV EAX, DWORD PTR ABC”执行后,EAX=_________。
8. 顺序执行指令“XOR EAX, EAX”和“SUB EAX, EAX”后,EAX=_0,OF=_0。 9. 顺序执行指令“XOR EAX, EAX”和“DEC EAX”后,EAX=_0,CF=_0。 10. 欲将EDX内的无符号数除以16,使用指令“SHR EDX, _4”; 欲将EAX内的有符号数除以16,使用指令“____________________”。
11. 已知:X补=10101100B,Y补=11000110B,则:[X+Y]补= [1]01110010 , [X-Y]补= _01100110 。
12. 设字长为八位,有x= -1,y=124,则有:[x+y]补=__123, [x-y] 补=__-125。
13. 已知:寄存器AX=7836H,指令: ADD AX,9A5EH执行后,AX=__1295H CF=_1。 14. 已知:寄存器AX=7836H,指令: ADD AX,9A5EH执行后, OF=_0,SF=_1_。 15. \~\的ASCII码值是__30H~39H,\~\的ASCII码值是__41H~5AH。. 五.简答题
1. 使用二进制8位表达无符号整数,257有对应的编码吗? 没有。使用二进制8位表达无符号整数,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。 六.应用题
第4章 指令系统 一.选择
1. 11. 计算机内的“溢出”是指其运算的结果 ( )。 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 5. ADD 指令不能影响标志寄存器的( )位。 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. 计算机中( )不能直接表示有符号数。