扬州大学汇编语言课后习题
- 格式:doc
- 大小:112.50 KB
- 文档页数:7
第1章汇编语言基础知识〔习题1.1〕简述计算机系统的硬件组成及各部分作用。
〔解答〕CPU:包括运算器、控制器和寄存器组。
运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为处理单元提供所需要的数据。
存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。
外部设备:实现人机交换和机间的通信。
〔习题1.2〕明确下列概念或符号:主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB。
〔解答〕主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。
辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速度慢。
RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电后能保存信息。
存储器由大量存储单元组成。
为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常称做I/O端口。
KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。
〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序?〔解答〕用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编译通过的程序就是目标程序。
〔习题1.4〕汇编语言与高级语言相比有什么优缺点?〔解答〕汇编语言与高级语言相比的优点:由于汇编语言本质就是机器语言,它可以直接地、有效地控制计算机硬件,因而容易产生运行速度快,指令序列短小的高效目标程序,可以直接控制计算机硬件部件,可以编写在“时间”和“空间”两方面最有效的程序。
.第1章基础知识检测点1.1(第9页)(1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为13位。
(2)1KB的存储器有1024个存储单元,存储单元的编号从0到1023。
(3)1KB的存储器可以存储8192(2^13)个bit,1024个Byte。
(4)1GB是1073741824(2^30)个Byte、1MB是1048576(2^20)个Byte、1KB是1024(2^10)个Byte。
(5)8080、8088、80296、80386的地址总线宽度分别为16根、20根、24根、32根,则它们的寻址能力分别为: 64(KB)、1(MB)、16(MB)、4(GB)。
(6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。
则它们一次可以传送的数据为: 1(B)、1(B)、2(B)、2(B)、4(B)。
(7)从内存中读取1024字节的数据,8086至少要读512次,80386至少要读256次。
(8)在存储器中,数据和程序以二进制形式存放。
..解题过程:(1)1KB=1024B,8KB=1024B*8=2^N,N=13。
(2)存储器的容量是以字节为最小单位来计算的,1KB=1024B。
(3)8Bit=1Byte,1024Byte=1KB(1KB=1024B=1024B*8Bit)。
(4)1GB=1073741824B(即2^30)1MB=1048576B(即2^20)1KB=1024B(即2^10)。
(5)一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。
这样的CPU最多可以寻找2的N次方个内存单元。
(一个内存单元=1Byte)。
(6)8根数据总线一次可以传送8位二进制数据(即一个字节)。
(7)8086的数据总线宽度为16根(即一次传送的数据为2B)1024B/2B=512,同理1024B/4B=256。
(8)在存储器中指令和数据没有任何区别,都是二进制信息。
汇编语言程序设计教案及习题答案教案章节:一、汇编语言简介1. 汇编语言的概念2. 汇编语言的特点3. 汇编语言的应用领域二、汇编语言的基本语法1. 数据类型及表示2. 指令格式及分类3. 寄存器使用规则三、汇编语言程序设计步骤1. 分析需求,确定程序功能2. 选择合适的汇编语言及开发环境3. 编写汇编代码,调试程序4. 优化程序性能四、常用汇编指令及功能1. 数据传输指令2. 算术运算指令3. 逻辑运算指令4. 控制流指令5. 字符串操作指令6. 中断指令五、汇编语言与C语言的接口编程1. extern声明汇编函数2. 调用汇编函数的方法3. 汇编函数与C函数的数据交换4. 实例分析:汇编语言实现字符串排序习题答案:一、汇编语言简介1. 汇编语言是一种低级编程语言,用于编写计算机程序。
(正确)2. 汇编语言可以直接操作计算机硬件资源。
(正确)3. 汇编语言程序可读性差,不易维护。
(正确)二、汇编语言的基本语法1. 数据类型及表示a. 字节:8位(正确)b. 字:16位(正确)c. 双字:32位(正确)d. 四字:64位(正确)2. 指令格式及分类a. 操作码(正确)b. 操作数(正确)c. 寄存器(正确)d. 标志位(正确)3. 寄存器使用规则a. 通用寄存器:AX, BX, CX, DX(正确)b. 段寄存器:CS, DS, ES, SS(正确)c. 指令指针:IP(正确)d. 状态寄存器:FLAGS(正确)三、汇编语言程序设计步骤1. 分析需求,确定程序功能(正确)2. 选择合适的汇编语言及开发环境(正确)3. 编写汇编代码,调试程序(正确)4. 优化程序性能(正确)四、常用汇编指令及功能1. 数据传输指令a. MOV:数据传送(正确)b. PUSH:压栈(正确)c. POP:出栈(正确)d. XCHG:交换数据(正确)2. 算术运算指令a. ADD:加法(正确)b. SUB:减法(正确)c. MUL:无符号乘法(正确)d. IMUL:有符号乘法(正确)3. 逻辑运算指令a. AND:逻辑与(正确)b. OR:逻辑或(正确)c. XOR:逻辑异或(正确)d. NOT:逻辑非(正确)4. 控制流指令a. JMP:无条件跳转(正确)b. JE:相等跳转(正确)c. JNE:不相等跳转(正确)5. 字符串操作指令a. MOVS:字符串移动(正确)b. CMPS:字符串比较(正确)c. SCAS:字符串扫描(正确)d. LODS:字符串装载(正确)6. 中断指令a. INT:软件中断(正确)b. INTO:中断向量表(正确)五、汇编语言与C语言的接口编程1. extern声明汇编函数(正确)2. 调用汇编函数的方法(正确)3. 汇编函数与C函数的数据交换(正确)4. 实例分析:汇编语言实现字符串排序(正确)汇编语言程序设计教案及习题答案教案章节:六、汇编语言的输入与输出1. 输入输出指令2. 字符串操作指令3. 实例分析:编写一个简单的输入输出程序七、汇编语言的杂项指令1. 杂项指令的概念2. 常用杂项指令及其功能3. 实例分析:杂项指令的应用八、汇编语言的子程序调用1. 子程序调用的概念2. 子程序的定义与调用3. 子程序的返回4. 实例分析:子程序在汇编语言中的应用九、汇编语言的程序举例1. 实例一:计算两个数的和2. 实例二:字符串的复制3. 实例三:数制的转换4. 实例四:文件的读写十、汇编语言程序的调试与优化1. 调试工具的使用2. 调试方法与技巧3. 程序优化的概念4. 程序优化的方法与技巧习题答案:六、汇编语言的输入与输出1. 输入输出指令a. IN:输入指令(正确)b. OUT:输出指令(正确)c. INPUT:输入函数(正确)d. PRINT:输出函数(正确)2. 字符串操作指令a. MOVS:字符串移动(正确)b. CMPS:字符串比较(正确)c. SCAS:字符串扫描(正确)d. LODS:字符串装载(正确)3. 实例分析:编写一个简单的输入输出程序(正确)七、汇编语言的杂项指令1. 杂项指令的概念(正确)2. 常用杂项指令及其功能a. NOP:无操作(正确)b. HLT:停止CPU运行(正确)c. CMC:翻转标志位(正确)d. ARPL:寄存器之间交换(正确)3. 实例分析:杂项指令的应用(正确)八、汇编语言的子程序调用1. 子程序调用的概念(正确)2. 子程序的定义与调用a. 定义子程序(正确)b. 调用子程序(正确)3. 子程序的返回(正确)4. 实例分析:子程序在汇编语言中的应用(正确)九、汇编语言的程序举例1. 实例一:计算两个数的和(正确)2. 实例二:字符串的复制(正确)3. 实例三:数制的转换(正确)4. 实例四:文件的读写(正确)十、汇编语言程序的调试与优化1. 调试工具的使用(正确)2. 调试方法与技巧(正确)3. 程序优化的概念(正确)4. 程序优化的方法与技巧(正确)汇编语言程序设计教案及习题答案教案章节:十一、汇编语言与操作系统1. 操作系统的概念2. 汇编语言在操作系统中的应用3. 实例分析:汇编语言编写简单的操作系统十二、汇编语言与设备驱动程序1. 设备驱动程序的概念2. 汇编语言在设备驱动程序开发中的应用3. 实例分析:汇编语言编写简单的设备驱动程序十三、汇编语言与嵌入式系统1. 嵌入式系统的概念2. 汇编语言在嵌入式系统中的应用3. 实例分析:汇编语言编写简单的嵌入式系统十四、汇编语言与汇编器的使用1. 汇编器的概念2. 汇编器的使用方法3. 实例分析:使用汇编器编写和调试汇编程序十五、汇编语言与汇编语言的未来发展1. 汇编语言的发展趋势2. 汇编语言在未来的应用领域3. 汇编语言学习的方法与建议习题答案:十一、汇编语言与操作系统1. 操作系统的概念(正确)2. 汇编语言在操作系统中的应用(正确)3. 实例分析:汇编语言编写简单的操作系统(正确)十二、汇编语言与设备驱动程序1. 设备驱动程序的概念(正确)2. 汇编语言在设备驱动程序开发中的应用(正确)3. 实例分析:汇编语言编写简单的设备驱动程序(正确)十三、汇编语言与嵌入式系统1. 嵌入式系统的概念(正确)2. 汇编语言在嵌入式系统中的应用(正确)3. 实例分析:汇编语言编写简单的嵌入式系统(正确)十四、汇编语言与汇编器的使用1. 汇编器的概念(正确)2. 汇编器的使用方法(正确)3. 实例分析:使用汇编器编写和调试汇编程序(正确)十五、汇编语言与汇编语言的未来发展1. 汇编语言的发展趋势(正确)2. 汇编语言在未来的应用领域(正确)3. 汇编语言学习的方法与建议(正确)重点和难点解析本文主要介绍了汇编语言程序设计的基础知识和应用领域,通过详细的章节安排,从汇编语言的基本概念、语法规则、程序设计步骤、常用指令及其功能、输入输出操作、杂项指令、子程序调用、程序举例、调试与优化等方面进行了深入讲解。
汇编语言程序设计第四版【课后习题答案】第1章汇编语言基础知识〔习题1.1〕简述计算机系统的硬件组成及各部分作用。
〔解答〕CPU:包括运算器、控制器和寄存器组。
运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为处理单元提供所需要的数据。
存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。
外部设备:实现人机交换和机间的通信。
〔习题1.2〕明确下列概念或符号:主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB。
〔解答〕主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。
辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速度慢。
RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电后能保存信息。
存储器由大量存储单元组成。
为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常称做I/O端口。
KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。
〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序?〔解答〕用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编译通过的程序就是目标程序。
〔习题1.4〕汇编语言与高级语言相比有什么优缺点?〔解答〕汇编语言与高级语言相比的优点:由于汇编语言本质就是机器语言,它可以直接地、有效地控制计算机硬件,因而容易产生运行速度快,指令序列短小的高效目标程序,可以直接控制计算机硬件部件,可以编写在“时间”和“空间”两方面最有效的程序。
练习一1.在计算机内部,计算机能够直接执行的程序语言是。
A. 汇编语言B o C++语言C.机器语言D。
高级语言2. 在堆栈段中,存放栈顶地址的寄存器是oA. IPB. SPC. BXD. BP3. 指令指针寄存器IP用来存放代码段中的偏移地址。
在程序运行的过程中,它始终指向。
A. 下一条指令的首地址B.下一条指令的地址C.当前指令的首地址D.当前指令的地址4. 编译程序的功能是oA.检查源程序中的语法错误和逻辑错误B.将源程序编译成目标程序C.改正源程序中的语法错误D.将高级语言源程序翻译成汇编语言源程序5. 用户为了解决自己的问题,用汇编语言所编写的程序,称为oA.目标程序B.源程序C.可执行程序D.汇编程序6. 计算机中用来存储程序、数据等信息的记忆装置是oA.控制器B.运算器C.CPUD.存储器7. 在宏汇编中,源程序必须通过____________ 生成目标代码,然后用连接程序将其转化为可执行文件,该文件可在系统中运行。
8 当SS =3000H,SP =0100H 时,执行PUSH AX 指令后,堆栈顶部的物理地址是( )A. 30100HB. 30098HC. 30102HD. 300FEH9 设10000010B 分别以原码、补码及反码表示时,则对应的十进制数依次是( )A. -82 、-126、-2B. -2 、-125 、126C. -2 、-126 、-125D. -82 、-125 、12510若寄存器AX、BX、CX DX的内容分别为18, 19, 20, 21时,依次执行PUSH AX PUSH BXPOP CX POP DX后,寄存器CX的内容为 ____________________ o11若物理地址为2D8C0H偏移量为B6A0H则段地址为 ______________ o练习二1. 8086 在基址变址的寻址方式中,基址、变址寄存器分别是( )oA. AX或CX BX或CX B . BX或BP、SI 或DIC. SI 或BX、DX或DI D . CX或DI、CX或SI2. 设(SS)=338AH , (SP)=0450H,执行PUSHBX和PUSHF两条指令后,堆栈顶部的物理地址是()A. 33CECHB. 33CF2HC. 33CF4HD. 33CE8H3. 设(AX)=0C544H,在执行指令ADD AH, AL后,相应的状态为( )。
汇编语言程序设计(第二版)课后习题答案第二章1.解答:有256个2.解答:如下图.第一个络子为000B0H字单元,注意,是字单元,第五个格子为000B3H字单元E51E3C2A3.解答:30022H字节单元内容:ABH30024H字节单元内容:EFH30021H字单元内容:AB34H30022H字单元内容:CDABH4.解答:这三个物理地址都是3017AH,说明了不同的段地址和偏移地址对应同一物理地址5.解答:CS+IP第一个字的物理地址为:0AAA40H6.解答:条件标志OF,SF,ZF,CF,的值依次为:0,0,0,07.下列操作可使用那些寄存器?(1)加法和减法AX,BX,CX,DX,当然,还有这几个通用寄存器的高低位了,如AH,AL等(2)循环计数CX(3)乘法和除法DX,AX,AH,AL(4)保存段地址CS,DS,ES,SS(5)表示运算结果为O FLAGS(6)将要执行的指令地址IP(7)将要从堆栈取出数据的地址BP,SP,SS8.可以用来指示存储器地址的寄存器有:BX,SP,BP,DI,CS,DS,SI,ES,SS,IP9.一一对应;5--A4--B2--C3--D12--E9--F11--G10--H13--I8--J7--K6---L1--M15--N14--O第三章1.(1)立即寻址没有(2)直接寻址7237H(3)使用BX的寄存器寻址没有(4)使用BX的间接寻址637DH(5)使用BX的寄存器相对寻址0D5B4H(6)基址变址寻址8E18H(7)相对基址变址004FH2.根据下列要求,写出相应的汇编指令。
(1)ADD DX,BX(2)ADD AL,[BX][SI](3)ADD[BX][0B2H],CX(4)MOV AX,2A59H ADD[0524H],AX(5)ADD AL,0B5H3.(1)寄存器间接寻址MOV BX,OFFSET[BLOCK][0AH]MOV DX,[BX](2)寄存器相对寻址MOV SI,OAHMOV DX,[BLOCK][SI](3)基址变址寻址MOV BX,BLOCKMOV SI,OAHMOV DX,[BX][SI]4.现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(2 1200)=2AH,(20201)=4CH,(21202)=B7H,(21203)=65H,试说明下列各条指令执行完后,AX寄存器的内容。
汇编语言各章习题答案习题一答案:1.1无符号数: 11010011=211=D3H,01110111=119=77H,10000011=131=83H,00101111=47=2FH,10101010=170=AAH带符号数:11010011= -45=D3H,01110111=+119=77H,10000011= -125=83H,00101111=+47=2FH,10101010= -86=AAH1.2 5E8AH,0BE6H,3DEH,4940H1.3 00011101+00110101=01010010=52H=8201001001+11101000=00110001=31H=4910111110+01010010=00010000=10H=1610011010+11110001=10001011=8BH= -1171.4 00101001+01010011=01111100+00000110=10000010=82H=8201110011-00100100=01001111-00000110=01001001=49H=4901100110+00011000=01111110+00000110=10000100=84H=840000000100110010+01110101=0000000110100111+00000110=0000001000000111=0207H=2071.5 000020A3H,FF94H,00003456H,007FH,FFFFEC00H1.6无符号数:0~65535,0000H~FFFFH;带符号数:-32768~+32767,8000H~7FFFH 1.7 (1) 38H等于十进制数56,是十进制数56的补码,数字8的ASCII码,十进制数38的压缩BCD码(2) FFH等于十进制数-1,是带符号数-1的补码,无符号数为255(3) 5AH等于十进制数90,是十进制数90的补码,大写字母Z的ASCII码(4) 0DH等于十进制数13,是十进制数13的补码,回车符的ASCII码1.8(1) 108=01101100B=6CH,补码01101100B,压缩BCD码0000000100001000,ASCII码313038H(2) 46=00101110B=2EH,补码00101110B,压缩BCD码01000110,ASCII码3436H(3) –15=11110001B=F1H,补码11110001B,ASCII码2D3135H(4) 254=0000000011111110B=00FEH,补码0000000011111110B,压缩BCD码0000001001010100,ASCII码323534H1.9(1) 56+63=01110111B,CF=0,SF=0,ZF=0,OF=0(2) 83-45=00100110B,CF=0,SF=0,ZF=0,OF=0(3) -74+29=11010011B,CF=0,SF=1,ZF=0,OF=0(4) -92-37=01111111B,CF=1,SF=0,ZF=0,OF=11.10回车、换行、响铃、ESC键、空格键、@、P、p习题二答案:2.9最少划分为16个逻辑段,最多划分为65536个逻辑段(每段16个字节)2.10CS:IP,DS:BX、SI、DI,ES:BX、SI、DI,SS:SP、BP2.11字节单元保存8位数,字单元保存16位数。
汇编语言程序设计习题及参考答案习题一1.1把下列2、8、16进制数转换成为十进制数(1)(1011011)2(2)(0.10110)2(3)(111111.01)2(4)(1000001.11)2(5)(377)8(6)(0.24)8(7)(3FF)16(8)(2A.4)16解:(1)(1011011)2=64+16+8+2+1=91另解:原式=(5B)16=5×16+11=91(2)(0.10110)2=0.5+0.125+0.0625=0.6875(3)(111111.01)2=32+16+8+4+2+1+0.25=63.25另解:原式=(1000000-1+0.01)2=64-1+0.25=63.25(4)(1000001.11)2=64+1+0.5+0.25=65.75(5)(377)8=3×64+7×8+7=255另解:原式=(400-1)8=4×64-1=255(6)(0.24)8=2×0.125+4×0.015625=0.3125(7)(3FF)16=3×256+15×16+15=1023另解:原式=(400-1)16=4×256-1=1023(8)(2A.4)16=2×16+10+4×0.0625=42.25另解:原式=2×16+10+4÷16=42.251.2 把下列十进制数转换为2、16进制数(1)(127)10(2)(33)10(3)(0.3)10(4)(0.625)10(5)(1023.5)10(6)(377)10(7)(1/1024)10(8)(377/32)10解:(1)(127)10 =64+32+16+8+4+2+1= (111 1111)2=(7F)16另解:原式=(128-1)10=(1000 0000-1)2=(111 1111)2=(7F)16(2)(33)10=32+1= (10 0001)2=(21)16(3)(0.3)10 = (0.0100 1100 1……)2=(0.4CCC……)16(4)(0.625)10= 0.5+0.125=(0.101)2=(0.A)16(5)(1023.5)10 = 512+256+128+64+32+16+8+4+2+1+0.5=(11 1111 1111.1)2=(3FF.8)16(6)(377)10 =256+64+32+16+8+1=(1 0111 1001)2=(179)16(7)(1/1024)10=(0.0000 0000 01)2=(0.004)16(8)(377/32)10=(256+64+32+16+8+1)÷(32)= (101111001)2÷(100000)2=(1011.11001)2=(0B.C1)161.3 把下列二进制数转换为十六进制数(1)(100011)2(2)(0.11101)2(3)(11111.11)2(4)(0.00101)2解:(1)(100011)2=(10‟0011)2=23H(2)(0.11101)2=(0.1110‟1000)2=0.E8H(3)(11111.11)2=(1‟1111.1100)2=1F.CH(4)(0.00101)2=(0.0010‟1000)2=0.28H1.4 把下列十六进制数转换为二进制数(1)(3B6)16(2)(100)16(3)(80.2)16(4)(2FF.A)16解:(1)(3B6)16=(0011 1011 0110)2(2)(100)16=(0001 0000 0000)2(3)(80.2)16=(1000 0000.0010)2(4)(2FF.A)16 =(0010 1111 1111.1010)21.5 如果用24b储存一个无符号数,这个数的范围是什么?如果储存的是一个补码表示的有符号数,那么这个数的范围又是什么?答:如果用24b储存一个无符号数,这个数的范围应为:0~224-1如果用24b储存一个补码表示的有符号数,这个数的范围应为:-223~+223-11.6 两个无符号数,它们的大小等于十进制数210和303,用N位二进制存储时,相加产生了进位,用N+1位二进制存储时,相加没有产生进位。
1-1(1)传统计算机:①控制器;②运算器;③存储器;④输入设备;⑤输出设备。
现代计算机:①处理器;②存储系统;③输入输出系统。
(2) 直接控制硬件,易产生运行速度快,目标代码小的程序。
(3) 处理器中数量多,使用频率改,多种用途的一组寄存器。
(4) 后进先出。
(5) 6个状态标志:CF、AF、ZF、SF、PF、OF;3个控制标志位:DF、IF、TF。
(6) 左边最高位。
(7) 无。
(8) 字母大小写不同,但是表示同一个符号。
(9) 不被汇编。
(10) 源程序和目标代码,各种标识符的说明。
1-2(1) √(2) ×,属于专用寄存器(3) ×,8个16位通用寄存器(4) √(5) ×,不一样,原因见P25(6) √(7) ×,4部分需要分隔符区别(8) √(9) ×,程序终止代表程序执行结束,不意味汇编结束。
汇编是将源程序翻译成目标模块代码的过程,源程序的最后必须有一条END伪指令表明汇编结束,END指令之后的任何内容不被汇编程序处理。
(10) √1-3(1) 1M=220BYTE(2) 8(3) BX,CX,SI,DI,BP,SP(4) 16,DL,DH(5) 4,16(6) 低4位地址全为0,64KB(7) 段地址,偏移地址,IP(8) 目录(9) 操作码,地址码/操作数(10) .ASM,目标模块,.EXE1-4见P21-5见P101-6(1) 0FFF0H(2) 417H(3) 24500H(4) 0BC777H1-7代码段:主要存放程序中的指令代码。
数据段:主要存放当前运行程序所用的数据。
堆栈段:指明当前运行程序所使用的堆栈区域。
1-8见P4-P51-9见课件1-10见P25-P271-11见P16或者课件1-12见P17或者课件1-13FFH,Again,next,h_asscii1-14见P27或者课件2-1(1) 没有,因为8位字节表示的范围:0~255(2) 没有,都是46H(3) 因为(34+67H)*3是常数(4) 以避免与不能以数字开头的标识符混淆(5) 不能,因为8位字节表示的范围:0~255(6) 防止发生非法操作(7) 寻找操作数存储的地址(8) 有效地址直接包含在指令中(9) DS(10) 不正确,因为类型不匹配2-2(1) √(2) ×,小写字母排在大写字母之后(3) √(4) ×,不一样多(5) √(6) √(7) ×,没有对齐,因为0403H是奇数地址,不是偶数地址(8) √(9) √(10) √2-3(1) 97,61,a(2) 0DH,0AH(3) DB,OFFSET(4) 8843H(5) DWORD,4,WORD PTR(6) 3(7) 立即数寻址,寄存器寻址,存储器寻址(8) 寄存器寻址,立即数(9) 4028H(10) DS,SS2-4(1) 255(2) 0(3) 94(4) 2392-5(1) 00010010B(2) 00100100B(3) 01101000B(4) 10011001B2-6(1) 91(2) 89(3) 36(4) 902-7(1) 0B(2) 01111111B (3) 10000001B (4) 11000111B2-8(1) 8A36H ,CF=0 (2) 4AE4H ,CF=1 (3) 0AE10H ,CF=0 (4) 0ECA9H ,CF=12-9数码0~9:30H ~39H大写字母A ~Z :41H ~5AH 小写字母 a ~z :61H ~7AH0DH :回车符CR ,0AH :换行符LF2-10Data segmentmy1b DB ‘Personal Computer ’ my2b DB 20 my3b DB 14hmy4b DB 00010100B my5w DW 20 DUP(?) my6c EQU 100my7c EQU < Personal Computer > Data ends2-11Data segment NUM=5DATALIST DW -10, 2, 5, 4, ? Data ends2-13mov ax, offset mess;AX=114Hmov ax, type buff+type mess+type vard;AX=1+1+4=6mov ax, sizeof varw+sizeof buff+sizeof mess;AX=2*2+10*1+5*1=19mov ax, lengthof varw+ lengthof vard;AX=2+1=3118 H117 H116 H115 H mess 114 H113 H112 H111 H110 H10F H10E H10D H10C H10B Hbuff 10A H109 H108 H107 Hvard 106 H105Hvarb 104H103H102H101Hvarw 100H2-14略2-15var DD 12345678Hmov bx, word ptr var ;BX=5678Hmov cx, word ptr var+2 ;CX=1234Hmov dl, byte ptr var ;DL=78Hmov dh, byte ptr var+3 ;DH=12H var2-16P56 图2-10和图2-112-17(1) 立即数寻址(2) 直接寻址(3) 寄存器寻址(4) 寄存器间接寻址(5) 寄存器相对(6) 寄存器相对寻址(7) 基址变址寻址(8) 相对基址变址寻址3-1(1) MOV SI, BYTE PTR 250 或者MOV AL, BYTE PTR 250(2) DX与CL类型不匹配(3) 堆栈的操作“后进先出”(4) MOV BX, OFFSET[SI]汇编时并不知道指令在执行时SI等于什么,所以是错误的(5) 结果是0(6) 目的操作数(7) 大写=小写AND DFH ;D5位清0小写=大写OR 20H ;D5位置1大/小写=小/大写XOR 20H ;D5位求反(8) 利用CF和OF结果判断(9) DX.AX(10) 逻辑与运算规则类似于二进制的乘法。
练习一1.在计算机内部,计算机能够直接执行的程序语言是 CA.汇编语言B.C++语言 C.机器语言 D.高级语言2.在堆栈段中,存放栈顶地址的寄存器是 BA.IPB.SPC.BXD.BP3.指令指针寄存器IP用来存放代码段中的偏移地址,在程序运行的过程中,它始终指向AA.下一条指令的首地址 B.下一条指令的地址 C.当前指令的首地址 D.当前指令的地址4.编译程序的功能是 BA.检查源程序中的语法错误和逻辑错误B.将源程序编译成目标程序C.改正源程序中的语法错误D.将高级语言源程序翻译成汇编语言源程序5.用户为了解决自己的问题,用汇编语言所编写的程序,称为 BA.目标程序 B.源程序 C.可执行程序 D.汇编程序6.计算机中用来存储程序、数据等信息的记忆装置是 DA.控制器B.运算器C.CPUD.存储器7.在宏汇编中,源程序必须通过__编译__生成目标代码,然后用连接程序将其转化为可执行文件, 该文件可在系统中运行。
8.当SS=3000H,SP=0100H时,执行PUSH AX 指令后,堆栈顶部的物理地址是 DA.30100HB.30098HC.30102HD.300FEH9.设10000010B分别以原码、补码及反码表示时,则对应的十进制数依次是 CA.-82、-126、-2 B.-2、-125、126 C.-2、-126、-125 D.-82、-125、12510 若寄存器AX、BX、CX、DX的内容分别为18,19,20,21时,依次执行PUSH AX,PUSH BX,POP CX,POP DX后,寄存器CX的内容为__19__11.若物理地址为2D8C0H,偏移量为B6A0H,则段地址为 __2222H__12.设(AL)=70H,分析在SUB AL,9AH后,标志寄存器中CF、OF、ZF、PF、SF的状态.(CF)=1、(OF)=1、(ZF)=0、(PF)=0、(SF)=1练习二1. 8086在基址变址的寻址方式中,基址、变址寄存器分别是 BA.AX或CX、BX或CX B.BX或BP、SI或DIC.SI或BX、DX或DI D.CX或DI、CX或SI2. 设(SS)=338AH,(SP)=0450H,执行PUSH BX和PUSHF两条指令后,堆栈顶部的物理地址是 A A.33CECH B.33CF2H C.33CF4H D.33CE8H3.设(AX)=0C544H,在执行指令ADD AH,AL后,相应的状态为 CA.CF=0、OF=0 B.CF=0、OF=1C.CF=1、OF=0 D.CF=1、OF=14.设DS=2000H,SS=1500H,(ES)=3000H,(SI)=00B0H,(BX)=1000H,(BP)=0020H,指出下列指令的源操作数的寻址方式是什么?若该操作数为存储器操作数,请计算其物理地址。
(1) MOV AX,DS:[0100H] 直接寻址 (PA)=20100H(2) MOV BX,0100H 立即寻址(3) MOV AX,ES:[SI] 直接寻址 (PA)=300B0H(4) MOV CL,[BP]寄存器间接寻址 (PA)=15020H(5) MOV AX,[BX][SI] 基址变址寻址 (PA)=210B0H(6) MOV CX,BX 寄存器寻址(7) MOV AL,3[BX][SI] 基址变址寻址 (PA)=210B3H(8) MOV AL,[BX+20]变址寻址 (PA)=21014H练习三1.假设V1和V2是用DW定义的变量,下列指令中正确的是 BA.MOV V1,V2B.MOV V1,20HC.MOV 2000H,V2D.MOV AL,V12.执行下面的程序段后,AX = BNUM = 100MOV AX, NUM EQ 100A.50B.0FFFFHC.1D.03.数据定义BUF DB ‘1234’,执行指令MOV CL,LENGTH BUF后,CL寄存器的内容是 AA.1B.2C.3D.44.若定义DATA DW 1234H ,执行MOV BL,BYTE PTR DATA指令后,BL= 15、对于下面的数据定义,各条MOV指令单独执行后,请填充有关寄存器的内容:TABLE1 DB ?TABLE2 DW 20 DUP(?)TABLE3 DB ‘ABCD’MOV AX,TYPE TABLE1 ; AX=1MOV BX,TYPE TABLE2 ; BX=2MOV CX,LENGTH TABLE2 ; CX=20MOV DX,SIZE ABLE2 ; DX=40MOV SI,LENGTH TABLE3 ; SI=1练习四1.设(SS)=338AH,(SP)=0450H,执行PUSH BX和PUSHF两条指令后,堆栈顶部的物理地址是 A A.33CECH B.33CF2H C.33CF4H D.33CE8H2.若(AX )=-15,要得到(AX) =15应执行的指令是 AA.NEG AX B.NOT AX C.INC AX D.DEC AX3.将累加器AX 内容清零的错误指令是 DA.AND AX,0 B.XOR AX,AX C.SUB AX,AX D.CMP AX,AX4.填写执行下列程序段后的结果MOV DX,8F70HMOV AX,54EAHOR AX,DXAND AX,DXNOT AXXOR AX,DXTEST AX,DX(AX)=FFFFH (DX)=8F70H SF=1 OF=0 CF=0 PF=0 ZF=05.DAT1 DW 12H,23H,34H,46H,57HDAT2 DW 03HLEA BX, DAT1ADD BX, DAT2MOV DX,[BX]MOV AX,4[BX]SUB AX,DX执行上列程序段后,AX的内容为 2300H练习五1. 将变量BUF的偏移地址送入SI的正确指令是 CA.MOV [SI],BUF B.MOV SI,BUF C.LEA SI,BUF D.MOV OFFSET BUF,SI 2. 假设VAR为变量,则指令MOV SI,OFFSET VAR的源操作数的寻址方式是 DA.间接寻址B.存储器寻址C.寄存器寻址D.立即寻址3. 指令“MOV BX,AL”错误的原因是字节类型不匹配4.设(AX)=2011H,执行CMP AX,2011H 后(AX)= 2011H5.写出将字数据56H、78、45H、209AH放在变量DATA起的存储单元中的伪指令DATA DW 56H,78,45H,209AH设数据段定义如下:(6~8题均采用该数据段)DATA SEGMENTNA EQU 15NB EQU 10NC DB 2 DUP (4,2 DUP (5,2))CNT DB $-NCCWT DW $-CNTND DW NCDATA ENDS6.从DS:0000开始至CNT单元之前存放的数据依次是 DA.15,10,4,5,2,5,2,4,5,2,5,2 B.15,10,4,2,5,2,4,2,5,2C.0FH,0AH,4,5,2,5,2 D.4,5,2,5,2,4,5,2,5,27.ND单元中的值是 AA.0000H B.0200H C.0003H D.0002H8.CWT单元中的值是 BA.2 B.1 C.11 D.12练习六1.如果用调试程序DEBUG的R命令在终端上显示当前各寄存器的内容如下,请说明当前堆栈段段基址是多少?栈顶的物理地址是多少?21FOH 31EEEHC>DEBUG-RAX=0000 BX=0000 CX=0079 DX=0000 SP=FFEE BP=0000 SI=0000DI=0000 DS=10E4 ES=10F4 SS=21F0 CS=31FF IP=0100 NV UP DI PLNZ NA PO NC2.有指令 JMP DX ,在执行前,DX=1234H ,IP =5678H,执行该指令后,寄存器变化正确的是BA.DX=1234H IP =5678HB.DX=1234H IP =1234HC.DX=5678H IP =5678HD.DX=5678H IP =1234H3.若要检测AL中的最高位是否为1,若为1,则转移到标号NEXT处,否则顺序执行,请用两条指令完成之。
TEST AL,80H JNE NEXT4.试用一条指令将一字节的立即数5AH与符号地址为NUM的存储器字节单元内容相比较CMP BTYE PTR NUM,5AH5.试分析下列程序段,说明它完成什么操作?程序执行后,HEXNUM字节单元中的内容是什么?ASCNUM DB 38HHEXNUM DB ?MOV AL,ASCNUMCMP AL,39HJBE NEXTSUB AL,7NEXT:SUB AL,30HMOV HEXNUM,ALHLT将ASCNUM中的所便是的十六进制数的ASCII码转换成十六进制数,并放入字节单元中HEXNUM=08H练习七1. 已知AX=0FFFFH,DX=0001HMOV CX,2LOP:SHL AX,1RCL DX,1LOOP LOP上述程序段执行后,DX=0007H AX= 0FFFCH2.已知AX=78H,BX=0804HSHR BX,1AND BX,0F0FHMOV CX,4LOP:XCHG BH,BLDIV BLSAL AX,1LOOP LOP上述程序段执行后,AX=001EH BX=0402H3. CODE SEGMENTASSUME CS: CODEORG 100HBEGIN:MOV AX, 01HMOV BX, 02HMOV DX, 03HMOV CX, 04HL20:INC AXADD BX, AXSHR DX, 1JNZ L20MOV AH,4CHINT 21HCODE ENDSEND BEGIN当执行以上程序后,AX、BX、CX、DX中的值分别是多少?:AX= 03H BX= 07H CX= 04H DX= 04.已定义了两个字变量A和B,补充下列程序段使之完成下列功能:A.若两个数中有一个是奇数,则将奇数存入A中,偶数存入B中。
B.若两个数均为奇数,则将两数均加1后存回原变量。
C.若两个数均为偶数,则两个变量均不改变。
MOV AX,ATEST AX,__0001H____JZ A_EVENMOV BX,BTEST BX,0001HJZ B_EVENINC___AX__________MOV A,AXINC___BX_________MOV B,BXB_EVEN: JMP___EXIT__________A_EVEN: MOV BX,BTEST BX,0001HJZ EXITXCHG__AX,BX_________MOV A,AXMOV B,BXEXIT:练习八1.CALL DWORD PTR [BX]指令是段间调用还是段内调用。