1、是指通常用于控制领域的微处理器芯片,其内部除CPU外还集成了计算机的其他一些主要部件,只需配上少量的外部电路和设备,就可以构成具体的应用系统。DSP芯片:称数字信号处理器,也是一种微控制器,其更适合处理高速的数字信号,内部集成有高速乘法器,能够进行快速乘法和加法运算。嵌入式系统:利用微控制器、数字信号处理器或通用微处理器,结合具体应用构成的控制系统。习题1.7区别如下概念:助记符、汇编语言、汇编语言程序和汇编程序。助记符:人们采用便于记忆、并能描述指令功能的符号来表示机器指令操作码,该符号称为指令助记符。汇编语言:用助记符表示的指令以及使用它们编写程序的规则就形成汇编语言。汇编语言程序:用汇编
2、语言书写的程序就是汇编语言程序,或称汇编语言源程序。汇编程序:汇编语言源程序要翻译成机器语言程序才可以由处理器执行。这个翻译的过程称为“汇编”,完成汇编工作的程序就是汇编程序(Assembler)。习题1.8区别如下概念:路径、绝对路径、相对路径、当前目录。系统磁盘上存在某个可执行文件,但在DOS环境输入其文件名却提示没有这个文件,是什么原因?路径:操作系统以目录形式管理磁盘上的文件,文件所在的分区和目录就是该文件的路径。绝对路径:从根目录到文件所在目录的完整路径称为“绝对路径”。是保证文件唯一性的标示方法。相对路径:从系统当前目录到文件所在目录的路径称为相对路径。当前目录:用户当前所在的目录
3、就是当前目录。指明的路径不正确,或者执行了另外一个同名的文件。习题1.10冯诺依曼计算机的基本设计思想是什么?采用二进制形式表示数据和指令。指令由操作码和地址码组成。将程序和数据存放在存储器中,计算机在工作时从存储器取出指令加以执行,自动完成计算任务。这就是“存储程序”和“程序控制”(简称存储程序控制)的概念。指令的执行是顺序的,即一般按照指令在存储器中存放的顺序执行,程序分支由转移指令实现。计算机由存储器、运算器、控制器、输入设备和输出设备五大基本部件组成,并规定了5部分的基本功能。习题1.11计算机系统通常划分为哪几个层次?普通计算机用户和软件开发人员对计算机系统的认识一样吗? 最上层是用
4、户层。第5层是高级语言层。第4层是汇编语言层。第3层是操作系统层。第2层是机器语言层。第1层是控制层。第0层是数字电路层。普通计算机用户和软件人员对计算机系统的认识并不一样。普通计算机用户看到的计算机,也就是我们最熟悉的计算机,属于用户层,而软件人员看到的属于高级语言层或是汇编语言层。第2章 处理器结构习题2.1简答题 ALU是算术逻辑运算单元,负责处理器所能进行的各种运算,主要是算术运算和逻辑运算。 取指是指从主存取出指令代码通过总线传输到处理器内部指令寄存器的过程。8086分成总线接口单元和指令执行单元,可以独立操作。在执行单元执行一条指令的同时,总线接口单元可以读取下一条指令,等到执行时
5、不需要进行取指了,所以称为预取。 Pentium采用分离的Cache结构,一个用做指令Cache,一个用做数据Cache。 堆栈的存取原则是先进后出(也称为后进先出)操作方式存取数据。 标志寄存器主要保存反映指令执行结果和控制指令执行形式的有关状态。 执行了一条加法指令后,发现ZF1,表明运算结果为0。 没有。 汇编语言的标识符大小写不敏感,即表示字母大小写不同、但表示同一个符号。 不会。 指令的操作数需要通过存储器地址或I/O地址,才能查找到数据本身,故称数据寻址方式。习题2.3填空题 32,DX,DH 16 段地址,偏移地址,EIP,IP 00100110,0 73C00H,73800H
6、EBX,ECX,ESI,EDI,EBP,ESP 实地址,64KB ASM,目标模块,FLAT 立即数寻址、寄存器寻址和存储器寻址 DS,SS习题2.4处理器内部具有哪3个基本部分?8086分为哪两大功能部件?其各自的主要功能是什么?处理器内部有ALU、寄存器和指令处理三个基本单元。8086有两大功能部件:总线接口单元和执行单元。总线接口单元:管理着8086与系统总线的接口,负责处理器对存储器和外设进行访问。8086所有对外操作必须通过BIU和这些总线进行。执行单元EU:负责指令译码、数据运算和指令执行。习题2.6什么是标志?什么是IA-32处理器的状态标志、控制标志和系统标志?说明状态标志在标
7、志寄存器EFLAGS的位置和含义。标志:用于反映指令执行结果或控制指令执行形式的一个或多个二进制数位。例如,有些指令执行后会影响有关标志位;有些指令的执行要利用相关标志。状态标志:用来记录程序运行结果的状态信息。控制标志:DF标志,控制字符串操作的地址方向。系统标志:用于控制处理器执行指令的方式。状态标志在标志寄存器EFLAGS中的位置和含义如下:311110987654321OFSFZFAFPFCF习题2.8什么是8086中的逻辑地址和物理地址?逻辑地址如何转换成物理地址?请将如下逻辑地址用物理地址表达(均为十六进制形式): FFFF0 4017 20004500 B8214567物理地址:
8、在处理器地址总线上输出的地址称为物理地址。每个存储单元有一个唯一的物理地址。逻辑地址:在处理器内部、程序员编程时采用逻辑地址,采用“段地址:偏移地址“形式。某个存储单元可以有多个逻辑地址,即处于不同起点的逻辑段中,但其物理地址是唯一的。逻辑地址转换成物理地址:逻辑地址由处理器在输出之前转换为物理地址。将逻辑地址中的段地址左移二进制4位(对应16进制是一位,即乘以16),加上偏移地址就得到20位物理地址。 FFFFH:0FFFF0H 40H:17H00417H 2000H:4500H24500H B821H:4567HBC777H习题2.9IA-32处理器有哪三类基本段,各是什么用途?IA-32
9、处理器有代码段、数据段、堆栈段三类基本段。代码段:存放程序的指令代码。程序的指令代码必须安排在代码段,否则将无法正常执行。数据段:存放当前运行程序所用的数据。程序中的数据默认是存放在数据段,也可以存放在其他逻辑段中。堆栈段:主存中堆栈所在的区域。程序使用的堆栈一定在堆栈段。习题2.11什么是实地址方式、保护方式和虚拟8086方式?它们分别使用什么存储模型?实地址方式:与8086具有相同的基本结构,只能寻址1MB物理存储器空间,逻辑段最大不超过64KB;但可以使用32位寄存器、32位操作数和32位寻址方式;相当于可以进行32位处理的快速8086。实地址工作方式只能支持实地址存储模型。保护方式:具
10、有强大的段页式存储管理和特权与保护能力,使用全部32条地址总线,可寻址4GB物理存储器。保护方式通过描述符实现分段存储管理,每个逻辑段可达4GB。处理器工作在保护方式时,可以使用平展或段式存储模型。虚拟8086方式:在保护方式下运行的类似实方式的运行环境,只能在1MB存储空间下使用“16位段”。 处理器工作在虚拟8086方式时,只能使用实地址存储模型。习题2.12汇编语句有哪两种,每个语句由哪4个部分组成?汇编语句有两种:执行性语句(处理器指令)、说明性语句(伪指令)。每个语句有:标号、指令助记符、操作数或参数、注释4个部分组成。习题2.16说明下列指令中源操作数的寻址方式?假设VARD是一个
11、双字变量。(1)mov edx,1234h(2)mov edx,vard(3)mov edx,ebx(4)mov edx,ebx(5)mov edx,ebx+1234h(6)mov edx,vardebx(7)mov edx,ebx+edi(8)mov edx,ebx+edi+1234h(9)mov edx,vardesi+edi(10)mov edx,ebp*4 立即数 直接 寄存器 寄存器间接 寄存器相对 寄存器相对 基址变址 相对基址变址 相对基址变址 带比例寻址第3章 数据处理习题3.1简答题(1)使用二进制8位表达无符号整数,257有对应的编码吗?(2)字符“F”和数值46H作为MO
12、V指令的源操作数有区别吗?(3)为什么可以把指令“MOV AX, (3467H)*3”中的数值表达式看成是常量?(4)数值500,能够作为字节变量的初值吗?(5)为什么说“XCHG EDX,CX”是一条错误的指令?(6)都是获取偏移地址,为什么指令“LEA EBX, ESI”正确,而指令“MOV EBX, OFFSETESI”就错误?(7)INC,DEC,NEG和NOT都是单操作数指令,这个操作数应该是源操作数还是目的操作数?(8)大小写字母转换使用了什么规律?(9)乘除法运算针对无符号数和有符号数,有两种不同的指令。只有一种指令的加减法如何区别无符号数和有符号数运算?(10)逻辑与运算为什么
13、也称为逻辑乘? 没有。使用二进制8位表达无符号整数,257没有对应的编码。 字符“”的ASCII码就是数值46H,所以没有区别。 汇编程序在汇编过程中对数值表达式计算,得到一个确定的数值,故称数值表达式为常量。 不能。数值500大于一个字节所能表达的数据量,所以不能为字节变量赋值。 源、目标寄存器位数不同,不能用该指令进行数据交换。 前者在指令执行时获得偏移地址,是正确的;但后者的OFFSET只能在汇编阶段获得偏移地址,但此时寄存器内容是不可知的,所以无法获得偏移地址。 INC,DEC,NEG和NOT指令的操作数既是源操作数也是目的操作数。 大小写字母转换利用它们的ASCII码相差20H。 加
14、减法不区别无符号数和有符号数,但根据运算结果分别设置标志寄存器的CF和OF标志,可利用CF和OF进行区别。 逻辑与运算规则类似二进制的乘法,所以称其为逻辑乘。习题3.3填空题(1)定义字节变量的伪指令助记符是_,获取变量名所具有的偏移地址的操作符是_。(2)计算机中有一个“01100001”编码。如果把它认为是无符号数,它是10进制数_;如果认为它是BCD码,则表示真值_;又如果它是某个ASCII码,则代表字符_。(3)C语言用“n”表示让光标回到下一行首位,在汇编语言中需要输出两个控制字符:一个是回车,其ASCII码是_,它将光标移动到当前所在行的首位;另一个是换行,其ASCII码是_,它将
15、光标移到下一行。(4)数据段有语句“H8843 DWORD 99008843H”,代码段指令“MOV CX, WORD PTR H8843”执行后,CX_。(5)用DWORD定义的一个变量XYZ,它的类型是_,用“TYPE XYZ”会得到数值为_。如果将其以字量使用,应该用_说明。(6)数据段有语句“ABC BYTE 1,2,3”,代码段指令“MOV CL, ABC+2”执行后,CL_。(7)例题3-9的TAB定义如果是“1234567890”,则显示结果是_。(8)指令“XOR EAX, EAX”和“SUB EAX, EAX”执行后,EAX_,CFOF_。而指令“MOV EAX, 0”执行后
16、,EAX_,CF和OF没有变化。(9)例题3-15程序执行结束,变量QVAR内容是_;BCD内容是_。(10)欲将EDX内的无符号数除以16,使用指令“SHR EDX, _”,其中后一个操作数是一个立即数。 BYTE,OFFSET 97,61,小写字母a 0DH(13),0AH(10) 8843H DWORD,4,WORD PTR XYZ 3 78894111 0,0,0 0123456788765432H,83H 4习题3.4下列十六进制数表示无符号整数,请转换为十进制形式的真值: FFH 0H 5EH EFH 255 0 94 239习题3.7将下列十进制数用8位二进制补码表示: 0 12
17、7 127 57 00000000 01111111 10000001 11000111习题3.8进行十六进制数据的加减运算,并说明是否有进位或借位: 1234H7802H F034H5AB0H C051H1234H 9876HABCDH 1234H7802H8A36H,无进位 F034H5AB0H4AF4H,有进位 C051H1234HBE1DH,无借位 9876HABCDHECA9H,有借位习题3.9数码09、大写字母AZ、小写字母az对应的ASCII码分别是多少?ASCII码0DH和0AH分别对应什么字符?数码09对应的ASCII码依次是30H39H。大写字母AZ对应的ASCII码依次是
18、:41H5AH。小写字母az对应的ASCII码依次是:617AH。ASCII码0DH和0AH分别对应的是回车和换行字符。习题3.10设置一个数据段,按照如下要求定义变量或符号常量: my1b为字符串变量:Personal Computer my2b为用十进制数表示的字节变量:20 my3b为用十六进制数表示的字节变量: my4b为用二进制数表示的字节变量: my5w为20个未赋值的字变量 my6c为100的常量 my7c表示字符串:my1b byte Personal Computermy2b byte 20my3b byte 14hmy4b byte 00010100bmy5w word 2
19、0 dup(?)my6c = 100my7c equ 习题3.16使用若干MOV指令实现交互指令“XCHG EBX,EDI”功能。 push eax ; 可以没有 mov eax,ebx mov ebx,edi mov edi,eax pop eax ;习题3.17假设当前ESP0012FFB0H,说明下面每条指令后,ESP等于多少? push eax push dx push dword ptr 0f79h pop eax pop word ptr bx pop ebxESP0012FFACHESP0012FFAAHESP0012FFA6HESP0012FFB0H习题3.19请分别用一条汇编
20、语言指令完成如下功能:(1)把EBX寄存器和EDX寄存器的内容相加,结果存入EDX寄存器。(2)用寄存器EBX和ESI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。(3)用EBX和位移量0B2H的寄存器相对寻址方式把存储器中的一个双字和ECX寄存器的内容相加,并把结果送回存储器中。(4)将32位变量VARD与数3412H相加,并把结果送回该存储单元中。(5)把数0A0H与EAX寄存器的内容相加,并把结果送回EAX中。 add edx,ebx add al,ebx+esi add bx+0b2h,cx add varw,3412h add eax,0a0h习题3
21、.21给出下列各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态: mov al,89h add al,al add al,9dh cmp al,0bch sub al,al dec al inc al mov al,89h ; AL89H CF ZF SF OF PF add al,al ; AL12H 1 0 0 1 1 add al,9dh ; AL0AFH 0 0 1 0 1 cmp al,0bch ; AL0AFH 1 0 1 0 1 sub al,al ; AL00H 0 1 0 0 1 dec al ; AL0FFH 0 0 1 0 1 inc al ;习题3.28编程
22、将一个压缩BCD码变量(例如92H)转换为对应的ASCII码,然后调用DISPC子程序(在输入输出子程序库中)显示。 ; 数据段bcd byte 92h 代码段 mov al,bcd shr al,4 add al,30h call dispc and al,0fh第4章 汇编语言程序设计习题4.1简答题(1)是什么特点决定了目标地址的相对寻址方式应用最多?(2)什么是奇偶校验?(3)为什么判断无符号数大小和有符号大小的条件转移指令不同?(4)双分支结构中两个分支体之间的JMP指令有什么作用?(5)为什么特别强调为子程序加上必要的注释?(6)子程序采用堆栈传递参数,为什么要特别注意堆栈平衡问题
23、?(7)参数传递的“传值”和“传址”有什么区别?(8)INCLUDE语句和INCLUDELIB有什么区别?(9)混合编程有什么优势?(10)运行Windows程序,有时为什么会提示某个DLL文件不存在? 当同一个程序被操作系统安排到不同的存储区域执行时,指令间的位移没有改变,目标地址采用相对寻址可方便操作系统的灵活调度。 数据通信时,数据的某一位用做传输数据的奇偶校验位,数据中包括校验位在内的“1”的个数恒为奇数,就是奇校验;恒为偶数,就是偶校验。 无符号数和有符号数的操作影响两组不同的标志状态位,故判断两个无符号数和有符号数的大小关系要利用不同的标志位组合,所以有对应的两组指令。 双分支结构
24、中两个分支体之间的JMP指令,用于实现结束前一个分支回到共同的出口作用。 完整的子程序注释可方便程序员调用该子程序,子程序注释包括子程序名、子程序功能、入口参数和出口参数、调用注意事项和其他说明等。 子程序保持堆栈平衡,才能保证执行RET指令时当前栈顶的内容是正确的返回地址。主程序也要保持堆栈平衡,这样才能释放传递参数占用的堆栈空间,否则多次调用该子程序可能就致使堆栈溢出。 “传值”是传递参数的一个拷贝,被调用程序改变这个参数不影响调用程序;“传址”时,被调用程序可能修改通过地址引用的变量内容。 INCLUDE语句包含的是文本文件、是源程序文件的一部分;INCLUDELIB语句包含的是子程序库文件。 取长补短。 Windows程序在运行时需要加载其配套的动态链接库DLL文件,当其没有被搜索到时就会提示不存在。习题4.3填空题(1)JMP指令根据目标地址的转移范围和寻址方式,可以分成四种类型:段内转移、_,段内转移、_和段间转移、_,段间转移、_。(2)假设在平展存储模型下,EBX1256H,双字变量TABLE的偏移地址是20A1H,线性地址32F7H处存放3280H,执行指令“JMP EBX” 后EIP_,执行指令“JMP TABLEEBX”后EIP_。 (3)“CMP EAX,3721H”指令之后是JZ指令,发生转移的条件是EAX_,此时ZF_。(4)小写字母“e”是英文当中
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1