概述
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环境下,用什么符号来表示之?
图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) | IF | IF=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环境下,表示的符号如下表
标志位 | OF | DF | IF | SF | ZF | AF | PF | CF |
状态 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 |
显示 | OV / NV | DN / UP | EI / DI | NG / PL | ZR / NZ | AC / NA | PE / PO | CY / 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章所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复