我是靠谱客的博主 和谐小馒头,最近开发中收集的这篇文章主要介绍汇编学习笔记3 - 习题1-3章,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.1、汇编语言的主要特点有哪些?

(1)机器相关性。它是一种面向机器的低级语言,跟CPU、硬件联系紧密,通常是为特定的计算机或系列计算机专门设计的。
(2)高速度和高效率。它能直接和简捷的访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等,且占用内存少,执行速度快,是高效的程序设计语言。
(3)编写和调试的复杂性。由于它是直接控制硬件,且简单的任务也需要很多汇编语言语句,因此在程序调试时,一旦程序的运行出了问题,就很难发现。

1.2、汇编语言适用于哪些领域,在哪些领域使用不太方便?

适用的领域

要求执行效率高、反应快的领域,如:操作系统内核,工业控制,实时系统等;

系统性能的瓶颈,或频繁被使用子程序或程序段,如操作系统的核心部分;

与硬件资源密切相关的软件开发,如:设备驱动程序等;

受存储容量限制的应用领域,如:家用电器的计算机控制功能等;

没有适当的高级语言开发环境。

不宜使用的领域

大型软件的整体开发;

没有特殊要求的一般应用系统的开发等。

1.3、在汇编语言中,如何表示二进制、八进制、十进制和十六进制的数值?

      二进制,后面加B    : 10011010010B
      八进制,后面加Q    : 2322Q
      十进制,后面加D    : 1234D
      十六进制,后面加H  :  4D2H

1.4、在计算机中,如何表示正、负数?在保持数值大小不变的情况下,如何把位数少的二进制数值扩展成位数较多的二进制数值?

正负数表示:最高位为符号位,0表示正,1表示负;正数为数值本身,负数为负数绝对值按位取反,末位加一。
正数位数扩展:高位用0补充,如:00001010->00000000 00001010
负数位数扩展:高位用1补充,如:10010101->11111111 10010101

1.5、在ASCII表,字符'0'~'9'与数值0~9之间编码规律是什么?大写字母和小写字母之间的编码规律是什么?

字符'0'~'9'是连续编码的,其编码的高三位为011,低4位就是该字符在十进制中的数值;

小写字母的编码比大写字母的编码大,对应字母的编码之间相差20H

1.6、汇编语言中的基本数据类型有哪些?它与高级程序设计语言(如:C语言)中的数据类型的对应关系是什么?

基本数据类型有: 字节、字、双字、四字,字符串

一个字节八位二进制组成,一个字包含两个字节,字符串由若干个字节组成的。

2.1、在16位CPU中,有哪些8位寄存器、16位寄存器?哪些16位寄存器可分为二个8位寄存器来使用?

    a、八位寄存器:AL,AH,BL,BH,CL,CH,DL,DH
    b、十六位寄存器:AX,BX,CX,DX,CS,DS,ES,SS,SP,BP,SI,DI,IP,Flags
    c、AX,BX,CX,DX

2.2、和16位CPU相比,在32位CPU中,扩展了哪些寄存器?哪些寄存器的位数没变?所增加的寄存器是什么?

 扩展的寄存器:EAX,EBX,ECX,EDX,EIP,ESI,EDI,ESP,EBP,EFlags
 寄存器的位数没变:CS,ES,DS,SS
增加的寄存器:FS,GS

2.3、简述各通用寄存器的主要功能?

寄存器的分类寄存器

主 要 用 途

数据

 

寄存器

AX

乘、除运算,字的输入输出,中间结果的缓存

AL

字节的乘、除运算,字节的输入输出,十进制算术运算

AH

字节的乘、除运算,存放中断的功能号

BX

存储器指针

CX

串操作、循环控制的计数器

CL

移位操作的计数器

DX

字的乘、除运算,间接的输入输出

变址
寄存器
SI

存储器指针、串指令中的源操作数指针

DI

存储器指针、串指令中的目的操作数指针

变址
寄存器
BP

存储器指针、存取堆栈的指针

SP

堆栈的栈顶指针

指令指针

IP/EIP存放当前偏移地址
标志位寄存器Flag/EFlag用于反映处理器的状态和ALU运算结果的某些特征及控制指令的执行。
32位

CPU的

段寄存器

16位CPU的

段寄存器

ES 附加段寄存器
CS 代码段寄存器
SS 堆栈段寄存器
DS 数据段寄存器
新增加的
段寄存器
FS 附加段寄存器
GS 附加段寄存器

 
2.4、简述各段寄存器所指段的含义。

CS:代码段,DS:数据段,ES:附加段,SS:堆栈段

2.5、IP/EIP寄存器的用途是什么?它是《计算机组成原理》中的什么概念在CPU中的具体体现?

 存放下一条执行指令. 

2.6、在标志寄存器中,用于反映运算结果属性的标志位有哪些?它们每一位所表示的含义是什么?在Debug环境下,用什么符号来表示之?

1514131211109876543210
    OFDFIFTFSFZF AF PF CF
3117161514131211109876543210
VMRF NTIOPLOFDFIFTFSFZF AF PF CF

                                                                         图2.2 16位/32位标志寄存器的示意图

(1)运算结果标志位

运算结果标志位  
进位标志(carry flag)CF高有效位产生进位时为1,否则为0
奇偶标志(parity flag)PF运算结果操作数位为1的个数为偶数个时为1,否则为0.
辅助进位标志(auxiliary carry flag)AF运算时,第3位向第4位产生进位时为1,否则为0.
零标志(zero flag)ZF运算结果等于0时为1,否则为0
符号标志(sign flag)SF记录运算结果的符号,结果负时为1,否则为0
溢出标志(overflow flag)OF操作数超出机器能表示的范围表示溢出,溢出时为1,否则为0
状态控制标志位  
中断标志(interrupt flag)IFIF=1时,允许CPU响应可屏蔽中断,否则关闭中断
追踪标志(trap flag)TF用于调试单步操作.
方向标志 (direcion flag)DF用于串处理.DF=1时,每次操作后使SI和DI减小.DF=0时则增大.
32位标志寄存器增加的标志位  
I/O特权标志(I/O Privilege Level)IOPL该字段指定了要求执行I/O指令的特权级。如果当前的特权级别在数值上小于等于IOPL的值,那么,该I/O指令可执行,否则将发生一个保护异常。
嵌套任务标志(Nested Task)NT

用来控制中断返回指令IRET的执行。当NT=0,用堆栈中保存的值恢复EFLAGS、CS和EIP,执行常规的中断返回操作;当NT=1,通过任务转换实现中断返回。

重启动标志(Restart Flag)RF用来控制是否接受调试故障。规定:RF=0时,表示“接受”调试故障,否则拒绝之。在成功执行完一条指令后,处理机把RF置为0,当接受到一个非调试故障时,处理机就把它置为1。
虚拟8086方式标志(Virtual 8086 Mode)VM如果该标志的值为1,则表示处理机处于虚拟的8086方式下的工作状态,否则,处理机处于一般保护方式下的工作状态。

在Debug环境下,表示的符号如下表

标志位OFDFIFSFZFAFPFCF
状态0/10/10/10/10/10/10/10/1
显示OV / NVDN / UPEI / DING / PLZR / NZAC / NAPE / POCY / NC

2.7、在标志寄存器中,用于反映CPU状态控制的标志位有哪些?它们每一位所表示的含义是什么?在Debug环境下,用什么符号来表示之?

 有CF,OF,ZF,PF,SF,AF个标志位。分别是进位标志位,益处标志位,零标志位,奇偶辅助进位标志位,符号标志位,
有TF,IF,DF3个控制标志,分别是陷阱标志,中断允许标志,方向标志

2.8、填空

1)、16位/32位CPU在取指令时,分别需要用到的寄存器有  CS        IP       CS      EIP  

2)、访问堆栈段栈顶单元要由  SS 段寄存器和  SP  寄存器组合来寻址,访问堆栈段中的单元要由  SS  段寄存器和  BP   寄存器组合来寻址;串操作的目标操作数所用的段寄存器和偏移量一定是 ES DI ;

3)、用基指针(BP)寻址存储器,则其用到的段寄存器是  SS  

4)、访问数据段中的单元要由  DS  段寄存器和  DX  寄存器组合来寻址;

5)、在16位/32位微机系统中,程序最多能同时使用 65536 数据段和 1M 数据段;

2.9、假设用以下寄存器组合来访问存储单元,试求出它们所访问单元的物理地址。

 1)、DS=1000H和DI=2000H

物理地址 = DS * 16 + DI = (1000H) *16 + 2000H = 12000H

 2)、DS=2000H和SI=1002H

物理地址 =  DS * 16 + SI = (2000H)*16 + 1002H = 21002H

 3)、SS=2300H和BP=3200H

物理地址 =  SS * 16 + BP = (2300H) * 16 + 3200H = 26200H

 4)、DS=A000H和BX=1000H 

物理地址 =  DS * 16 + BX = (A000H) * 16 + 1000H = A1000H

 5)、SS=2900H和SP=3A00H

物理地址 =  SS * 16 + SP = (2900H) * 16 + 3A00H = 2CA00H

2.10、在实方式下,一个20位的物理地址最多可有 65536 个段值和偏移量来表示。

2.11、在默认情况下,哪些寄存器可用于读取堆栈段的数据?

BP,SP

2.12、按组画出下列数值在内存中的存储形式(假设同组分配在连续存储单元中)

1)、字节值:1、2、'1'、'A'、'a'和0;

物理地址

0

1

2

3

4

5

内容

1

2

‘1’

‘A’

‘a’

0

1H

2H

31H

41H

61H

0H

2)、字值:12H、6502H、-1和0;

物理地址

0

1

2

3

4

5

6

7

内容

12H

6502H

-1

0

 

12H

0H

02H

65H

0FEH

0FFH

0H

0H

3)、双字值:-765H、12345678H和0;

物理地址

0

1

2

3

4

5

6

7

8

9

10

11

内容

-765H

12345678H

0

F8H

9BH

FFH

FFH

56H

78H

12H

34H

0H

0H

0H

0H

 
3.1、访问内存单元的寻址方式有几种?它们具体是哪些?

微机系统有八种基本的寻址方式:
 (1)立即数寻址方式           操作数地址/变量内存地址
 (2)寄存器寻址方式           寄存器
 (3)直接寻址方式             [偏移地址]
 (4)寄存器间接寻址方式       [基址寄存器/变址寄存器]
 (5)寄存器相对寻址方式       [基址寄存器/变址寄存器+偏移量值]
 (6)基址加变址寻址方式       [基址寄存器+变址寄存器]
 (7)相对基址加变址寻址方式   [基址寄存器+变址寄存器+偏移量值]
 (8)32位地址的寻址方式       32位基址寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP) + 
                                    32位变址寄存器(EAX、EBX、ECX、EDX、ESI、EDI和EBP(除ESP之外)) * 比例因子(1/2/4/8) + 偏移常量

3.2、指出下列各种操作数的寻址方式。

1)、[BX]                        寄存器间接寻址方式
2)、SI                          寄存器寻址方式
3)、435H                        立即数寻址方式
4)、[BP+DI+123]                 相对基址加变址寻址方式  
5)、[23]                        直接寻址方式
6)、data (data是一个内存变量名) 直接寻址方式
7)、[DI+32]                     寄存器相对寻址方式
8)、[BX+SI]                     基址加变址寻址方式
9)、[EAX+90]                    32位地址寻址
10)、[BP+4]                     寄存器相对寻址方式

3.3、哪些寄存器的值可用于表示内存单元的偏移量?

  BX SI DI BP SP EAX EBX ECX EDX ESI EDI EBP ESP

3.4、判断下列操作数的寻址方式的正确性,对正确的,指出其寻址方式,对错误的,说明其错误原因。

 说明:计算机只容许使用BX、SI、DI、bp寄存器做间接和相对寻址,其中BX为基址存储器,SI、DI为变址存储器。
 
1)、[AX]          错误, 16位寄存器AX不能用于访问内存单元
2)、[EAX]         寄存器间接寻址
3)、BP            寄存器寻址
4)、[SI+DI]       错误, 两个都属于变址寄存器,不能同时用于内存单元的有效地址,请参考习题 3.1 中的寻址方式
5)、DS            寄存器寻址方式
6)、BH            寄存器寻址方式
7)、[BX+BP+32]    错误, 两个寄存器都是基址寄存器,不能这样使用。,请参考习题 3.1 中的寻址方式
8)、[BL+44]       错误, 16位寄存器BL不能用于访问内存单元
9)、[CX+90]       错误, CX不能用于表示内存单元的有效地址
10)、EDX          寄存器寻址
11)、BX+90H       错误, 没有这样的寻址方式
12)、[DX]         错误, DX不能用于表示内存单元的有效地址
13)、SI[100h]     错误, 书写方式不对,应该写成100H[SI]
14)、[BX*4]       错误, 16位寄存器不能乘以比例因子
15)、[EAX+EBX*6]  错误, 比例因子(1/2/4/8),没有6
16)、[DX+90H]     错误, DX不能用于表示内存单元的有效地址

3.5、已知寄存器EBX、DI和BP的值分别为12345H、0FFF0H和42H,试分别计算出下列各操作数的有效地址。

1)、[BX] :2345H  (EBX 低16位)
2)、[DI+123H] :10113H
3)、[BP+DI] :10032H
4)、[BX+DI+200H] :12535H
5)、[1234H] :1234H
6)、[EBX*2+345H] :249CFH

3.6、指出下列各寻址方式所使用的段寄存器。

说明:
接寻址方式:
    默认使用DS
寄存器间接寻址方式:
    操作数的有效地址用SI、DI、BX和BP等四个寄存器之一来指定,称这种寻址方式为寄存器间接寻址方式。
    若有效地址用SI、DI和BX来指定,则其缺省的段寄存器为DS;
    若有效地址用BP来指定,则其缺省的段寄存器为SS(即:堆栈段)。
32位地址的寻址方式:
    基址寄存器是EBP或ESP时,默认的段寄存器是SS,否则,默认的段寄存器是DS
 
1)、[SI+34h] :DS
2)、[456H] :DS
3)、ES:[BP+DI] :ES
4)、[BX+DI+200H] :ES
5)、[BP+1234H] :SS
6)、FS:[EBX*2+345H] :FS 

 

最后

以上就是和谐小馒头为你收集整理的汇编学习笔记3 - 习题1-3章的全部内容,希望文章能够帮你解决汇编学习笔记3 - 习题1-3章所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部