8088汇编语言程序设计
汇编语言程序设计(第四版)【课后答案】
汇编语言程序设计第四版【课后习题答案】第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〕汇编语言与高级语言相比有什么优缺点?〔解答〕汇编语言与高级语言相比的优点:由于汇编语言本质就是机器语言,它可以直接地、有效地控制计算机硬件,因而容易产生运行速度快,指令序列短小的高效目标程序,可以直接控制计算机硬件部件,可以编写在“时间”和“空间”两方面最有效的程序。
80X86汇编语言程序设计教程+课后习题答案(清华大学版)
第二章答案Tarzan 版题2.1 8086/8088通用寄存器的通用性表现在何处?8个通用寄存器各自有何专门用途?哪些寄存器可作为存储器寻址方式的指针寄存器?答:8086/8088通用寄存器的通用性表现在:这些寄存器除了各自规定的专门用途外,他们均可以用于传送和暂存数据,可以保存算术逻辑运算中的操作数和运算结果;8个通用寄存器的专门用途如下:AX 字乘法,字除法,字I/OBX 存储器指针CX 串操作或循环控制中的计数器DX 字乘法,字除法,间接I/OSI 存储器指针(串操作中的源指针)DI 存储器指针(串操作中的目的指针)BP 存储器指针(存取堆栈的指针)SP 堆栈指针其中BX,SI,DI,BP可作为存储器寻址方式的指针寄存器题2.2 从程序员的角度看,8086/8088有多少个可访问的16位寄存器?有多少个可访问的8位寄存器?答:从程序员的角度看,8086/8088有14个可访问的16位寄存器;有8个可访问的8位寄存器;题2.3 寄存器AX与寄存器AH和AL的关系如何?请写出如下程序片段中每条指令执行后寄存器AX的内容:MOV AX,1234HMOV AL,98HMOV AH,76HADD AL,81HSUB AL,35HADD AL,AHADC AH,ALADD AX,0D2HSUB AX,0FFH答: MOV AX,1234H AX=1234HMOV AL,98H AX=1298HMOV AH,76H AX=7698HADD AL,81H AX=7619HSUB AL,35H AX=76E4HADD AL,AH AX=765AHADC AH,AL AX=D15AHADD AX,0D2H AX=D22CHSUB AX,0FFH AX=D12DH题2.4 8086/8088标志寄存器中定义了哪些标志?这些标志可分为哪两类?如何改变这些标志的状态?答: 8086/8088标志寄存器中定义了9个标志,如下:CF: Carry FlagZF: Zero FlagSF: Sign FlagOF: Overflow FlagPF: Parity FlagAF: Auxiliary Carry FlagDF: Direction FlagIF: Interrupt-enable FlagTF: Trap Flag这些标志可分为两类,分别为:1、运算结果标志;2、状态控制标志;采用指令SAHF可把AH中的指定位送至标志寄存器低8位SF、ZF、AF、PF、CF;采用CLC可清除CF,置CF到0采用STC可置CF到1采用CLD可置DF到0采用sTD可置DF到1采用CLI可置IF到0采用STI可置IF到1另外,在某些指令执行过程中会改变部分标志的状态;题2.5 请说说标志CF和标志OF的差异。
第4章8086,8088微机汇编语言程序设计
2)段内偏移量(Offset) 它是标号与段起始地址之间相距的字节数,为一16位 无符号数。 3)类型(Type) 类型表示该标号所代表的指令的转移范围,分NEA R(近)与FAR(远)两种。NEAR类型的标号仅在 同一段内使用,用2字节指针给出转移的偏移量属性(即 只改变IP值,不改变CS值);而FAR类型的标号无此限 制,必须用4字节指针指出转移的段地址与段内偏移量。 当标号用作JMP或CALL等指令的目标操作数时,若 为段内转移或调用则采用NEAR类型;若为段间转移或 调用则应当采用FAR类型。 JMP FAR PTR LINE
第4章 8086/8088汇编语言程序设计
汇编语言程序设计是开发微机系统软件的基本 功,在程序设计中占有十分重要的地位。
由于汇编语言具有执行速度快和易于实现对硬件的控 制等独特的优点,所以至今它仍然是用户使用得较多的程 序设计语言。特别是在对于程序的空间和时间要求很高的 场合,以及需要直接控制设备的应用场合,汇编语言更是必 不可少了。 由于汇编语言本身的特点,本章将选择目前国内广泛 使用的IBM PC机作为基础机型,着重讨论8086/8088汇编 语言的基本语法规则和程序设计的基本方法,以掌握一般 汇编语言程序设计的初步技术。
(1)立即操作数 立即操作数在指令中直接给出,不需要使用 寄存器,也不涉及访问数据区的操作,只能作为 源操作数。立即操作数是整数,可以是1字节或 2字节。在汇编语言中,立即操作数用常量(包 括数值常量和符号常量)以及由常量与有关运算 符组成的数值表达式表示。 如:MOV BX,1000+5*3 (2)寄存器操作数 通用寄存器AX、BX、CX、DX、BP、 SP、DI、SI以及段寄存器CS、SS、D S、ES都可以作为操作数。如:MOV BX,AX
汇编语言程序设计复习题答案
《汇编语言程序设计》复习题一、填空题1、8086CPU内部结构按功能分为两部分,即 BU(执行部件)和 BIU(总线接口部件)。
2、CPU中的总线接口部件BIU,根据执行部件EU的要求,完成CPU与主存储器或I/0端口之间的数据传送。
3、8086中的BIU由四个 16 位段寄存器、一个 16 位指令指针、 6 字节指令队列、 20 位地址加法器和总线控制电路组成。
4、8086/8088的执行部件EU由 8 个通用寄存器、 1 个专用寄存器、一个标志寄存器和 ALU 等构成。
5、根据功能不同,8086的标志位可分为状态标志和控制标志。
6、8086/8088构成的微机中,每个主存单元对应两种地址:段基值和偏移量。
7、8086CPU具有 20 根地址线,直接寻址能力可达 1M 。
8、逻辑地址由段基值和偏移量组成,其中的段基值是由段寄存器存储。
9、计算机的指令由操作码和地址码两部分组成。
10. 零地址指令是不带地址码的机器指令,其操作数是由隐含指定提供的。
11. 8088CPU中共有 14 个寄存器,这些寄存器为 16 位。
12. F标志寄存器共有9个标志位,除OF、SF、AF和CF外,还有 DF 、 IF 、 TF 、▁ ZF 和 PF ,其中用于记录是否产生进位的标志位是 CF 。
13. 标号和变量所具有的三种属性分别为段属性、偏移量属性和类型属性。
14. 操作数有三种类型,分别为常数操作数、寄存器操作数和存储器操作数。
15. 一个源程序中可以包含代码段、数据段堆栈段及附加段。
其中代码段是源程序中必不可少的,其它的段可有可无。
16. SEGMENT/ENDS称为段定义伪指令;ASSUME称为段寻址伪指令;NAME/END称为模块定义伪指令;源程序结束伪指令为 END ;过程定义伪指令为 PROC/ENDP 。
数据定义伪指令为 DB 、 DW 、DD 。
17. 一般DOS系统功能调用的步骤为:(1) 送入口参数到指定寄存器;(2)送功能号至AH ;(3)软中断指令INT 。
微机原理与接口技术实验报告1- 汇编语言程序设计
西安交通大学实验报告成绩第页共页课程微机原理与接口技术实验系别生物医学工程实验日期年月日专业班级组别交报告日期年月日姓名学号报告退发 (订正、重做) 同组者教师审批签字实验名称汇编语言程序设计一、实验目的1.掌握Lab6000p实验教学系统基本操作;2.掌握8088/8086汇编语言的基本语法结构;3.熟悉8088/8086汇编语言程序设计基本方法。
二、实验设备b6000p实验教学系统;2.IBM-PC机三、实验内容1.有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。
编程并显示结果:1)如果数组是无符号数,求出最大值,并显示;2)如果数组是有符号数,求出最大值,并显示。
2.将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:”3.将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII是:”4.两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。
在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子程序)5.键盘输入一个小写字母(a~z),转换成大写字母显示:请输入一个小写字母(a~z):转换后的大写字母是:6.实现4字节无符号数加法程序,并显示结果,如99223344H + 99223344H= xxxxxxxxH四、实验结果1.有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。
编程并显示结果:(1)如果数组是无符号数,求出最大值,并显示;(2)如果数组是有符号数,求出最大值,并显示。
程序:(1)无符号数#make_COM#; COM file is loaded at CS:0100hORG 100hJMP STARTABC DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8HMAIN PROC FARSTART: MOV SI,0MOV AL,ABC[SI]A1: INC SICMP SI,9JNC EXITMOV BL,ABC[SI]CMP AL,BLJC A2JMP A1A2: XCHG BL,ALJMP A1EXIT: MOV CL,16DIV CLMOV DX,AXMOV CL,9CMP DL,CLJA E1ADD DL,30HMOV AH,2INT 21HE1: ADD DL,37HMOV AH,2INT 21HMOV DL,DHCMP DL,9JA E2ADD DL,30HMOV AH,2INT 21HE2: ADD DL,37HMOV AH,2INT 21HMOV DL,'H'MOV AH,2INT 21HRETMAIN ENDPEND START结果:(2)有符号数#make_COM#; COM file is loaded at CS:0100hORG 100hJMP STARTSHUZU DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H MAIN PROC FARSTART: MOV SI,0MOV AL,SHUZU[SI]L1: INC SICMP SI,9JNC NEXTMOV BL,SHUZU[SI]CMP AL,BLJL L2 ;带符号数比较 JMP L1L2: XCHG BL,ALJMP L1NEXT: MOV CL,16DIV CLMOV DX,AXMOV CL,9CMP DL,CLJA L3 ;无符号数比较 ADD DL,30HMOV AH,2INT 21HJMP L4L3: ADD DL,37HMOV AH,2INT 21HL4: MOV DL,DH ;ASCII码转换 CMP DL,9JA L5ADD DL,30HMOV AH,2INT 21HJMP L5L5: ADD DL,37HMOV AH,2INT 21HL6: MOV DL,'H'MOV AH,2INT 21HHLTMAIN ENDPEND START2.将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:”程序:#make_COM#; COM file is loaded at CS:0100hORG 100hJMP START;DATA SEGMENTSHUCHU DB 'BCD IS $'ABC DB 15 DUP(?);DATA ENDSMAIN PROC FARSTART: MOV DX,OFFSET SHUCHUMOV AH,9INT 21HMOV AX,OFFSET ABCMOV DX,AXMOV AX,500H ;分离出各位数,分别进行BCD码转换SUB DX,DXMOV CX,1000DIV CXXCHG DX,AX ;商在DX中,余数在AX中MOV BX,AXADD DL,30HMOV AH,2INT 21H ;千位转换并输出MOV AX,BXMOV CL,100DIV CLMOV DX,AXADD DL,30HMOV AH,2INT 21H ;百位转换并输出MOV AL,DHSUB AH,AHMOV CL,10DIV CLMOV BX,AXMOV DL,BLADD DL,30HMOV AH,2INT 21H ;个位转换并输出MOV DL,BHADD DL,30HMOV AH,2INT 21HRETMAIN ENDPEND START结果:3.将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII 是:”程序:#make_COM#; COM file is loaded at CS:0100hORG 100hJMP START;DATA SEGMENTSHUCHU DB 'ASCII IS $'ABC DB 20 DUP(?);DATA ENDSMAIN PROC FARSTART: MOV DX,OFFSET SHUCHUMOV AH,9INT 21HMOV CH,4MOV AX,OFFSET ABCMOV DX,AXMOV BX,7693HEXIT: MOV CL,4ROL BX,CLMOV AL,BLAND AL,0FH ;与运算分离出最高位MOV AH,0ADD AL,30HMOV CL,16DIV CL ;分离出高位和低位MOV DH,AHMOV DL,ALADD DL,30HMOV AH,2INT 21HMOV DL,DHADD DL,30HMOV AH,2INT 21H ;分别输出高低位DEC CHJNZ EXIT ;进行循环HLTMAIN ENDPEND START结果:4.两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。
《汇编语言程序设计》复习资料
《汇编语言程序设计》复习资料一、基本概念1、8088/8086CPU内部寄存器有__14____个,其中的AX、BX、CX、DX是通用寄存器,SP、BP、DI、SI 是基址和变址寄存器,CS、DS、ES、SS、是段寄存器,此外还有指令指针寄存器 IP 和标志位寄存器 FLAGS 两个控制寄存器,所有寄存器都是 16 _位寄存器,每个寄存器可以存放 16 位二进制数。
2、8088/8086CPU的标志位寄存器中有9个标志位,其中的DF、IF、TF是控制标志,OF、SF、ZF、CF、AF、PF 是状态标志。
3、8088/8086CPU有三组总线,它们是数据总线、控制总线和地址总线;地址总线是 20 条,因此它可以寻址的范围是 1M 字节。
通常将 1024 字节称为1K,将 1024K 字节称为1M。
4、8088/8086CPU的存储器采用分段方式管理,每个段最多可以有 64K 字节,全部存储空间可以分成 16 个大小为64K且互相不重叠的段。
5、采用分段方式管理的存储单元的地址分成物理地址和逻辑地址两种,逻辑地址由段地址和偏移地址两部分构成,段地址是每个存储器段的起始地址;偏移地址则是相对于每个段第一个存储单元的偏移值。
段地址存放在段寄存器中,由于8088/8086CPU的段寄存器是16位寄存器,因此在段寄存器中存放的是段地址的 16 位;而CPU对数据的存取是按物理地址进行的,物理地址和逻辑地址间的关系是__ 物理地址=段地址 16D(或10H)+ 偏移地址___。
6、存储器中,数据是以字节为单位存放的,它是一个 8位二进制数,16位二进制数是 2个字节,又称为字;每个存储单元可以存放一个字节;一个字则占用两个存储单元,存放时要将低字节放在地址较小的存储单元中。
7、计算机的指令由操作码字段和操作数字段构成,它们分别给出计算机所要执行的操作和执行操作所要的操作数。
8、指令操作数通常可以存放在指令中,也可以存放在CPU的寄存器中,大多数存放在存储器中,它们分别称为立即数、寄存器操作数和存储器操作数。
排序
实验一、用8086/8088汇编语言进行数据排序一、实验目的:1、熟悉EMU8086集成开发环境的使用。
2、通过编程、上机调试,进一步理解汇编语言的设计思路与执行过程。
3、熟悉INT 21H中断调用。
4、掌握数据排序的常用算法,利用汇编语言实现数据排序。
5、巩固理论知识,锻炼动手编程。
二、实验内容:1、在TABLE1开始的内存单元中,预先存储100个有符号字类型的数值。
2、编写代码、将TABLE1中的100个数值,按照从大到小的排序,放在TABLE2开始的内存单元中。
3、将TABLE2中的数字,顺序输出在屏幕上。
4、查看TABLE1开始的内存的100个数值。
5、查看TABLE2开始的内存的100个数值。
三、设计思路:1、自定义一个display函数,用来往屏幕上显示特定的字符。
2、定义一个data段,用来存储固定的字符。
3、定义一个code段,当做主程序。
4、所用的方法是冒泡排序法5、主程序中第一步先获取键盘输入。
6、主程序中第二步将键盘输入的数存储到内存中。
7、主程序中第三步用[基址+变址]方法进行冒泡排序。
8、主程序中第四步将排序好后新的数组从内存中取出,并回显到屏幕上。
四、排序算法:1、冒泡排序:(1)比较相邻的两个元素,如果第二个比第一个大,则交换这两个值。
(2)对每一对相邻元素做相同的工作,从开始第一对到结尾的最后一对,这样最后的元素应该会是最大的数。
(3)针对所有的元素重复以上的步骤,除去最后一个。
(实际过程中是最后一个值和后面的一个空值进行比较)(4)重复(1)~(3),直至排序完成。
2、选择排序:(1)首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
(2)再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
(3)重复(1)~(2)过程,直至排序完成。
3、插入排序:(1)构建有序数列。
(2)对于未排序的数据,在已排序的数列中从后向前扫描。
(3)找到相对应的位置后插入。
《汇编语言》作业和主要例题
*教材:机械工业出版社主编《80x86汇编语言程序设计》第2版•马力妮CH1思考题:1-2、7-8、12、14【1.1】填空题(1)把汇编语言源程序转换为相应的目标程序的翻译程序称为(),这个翻译过程称为()。
(2)汇编语言源程序经()后,形成目标文件,再经()后,形成可执行文件。
(3)()是计算机中表示信息的最小单位,8位二进制数为一个(),而()是在操作中作为一个单元处理的一组数据。
(4)BCD码有两种存储方式:()和()。
(5)8位二进制的无符号数可表示的最大范围为()。
8位二进制的带符号数可表示的最大范围为()。
【1.2】选择题(1)下面各8位二进制数的补码中,绝对值对小的是()A. 01111111B. 10000001C. 01101101D.11111111(2)补码11001000表示的十进制真值是( )A. 200B. –200C. –56D. -184(3)16位带符号数所能表示的范围是( )A.–32767~+32768B.0~65535C.-65535~+65536D.-32768~+32767(4)与100.5不相等的数据是()A. 64.8HB. 1100100.1BC. 64.5HD. 144.4Q(5)将目标程序转换为可执行程序的是()A. 编辑程序B. 汇编程序C. 连接程序D.调试程序【1.7】将下列二进制数转换为十六进制数和十进制数。
(1)101011 B(2)11010011B (3)10110101B (4)1101100B【1.8】将下列十六进制数转换为二进制数和十进制数。
(1)2DH (2)1512H (3)1C5H (4)21F0H【1.12】将下列十进制数分别用组合型BCD码和非组合型BCD码表示。
(1)35 (2)74 (3)98 (4)14【1.14】有一个8位的数值00110101,回答问题:(1)如果它是一个二进制数,它表示的十进制数是多少?(2)如果它是BCD码,它表示的数是什么?(3)如果它是ASCII码,它表示的字符是什么?CH2思考题:1-3、6--9、11-12、16书面题:10、13-15【2.1】填空题(1)微型计算机硬件系统结构主要是由三部分组成,它们是()、()、()。
《汇编语言程序设计(1)》模拟试题一和答案
《汇编语言程序设计(1)》模拟试题一一、单项选择题(本大题共20个小题,每小题2分,共计40分)1、为了便于实现多级中断,保存现场信息最有效的方式是采用( )。
A、通用寄存器B、堆栈C、存储器D、寄存器2、8086CPU中有4个数据寄存器,其中AX除用作通用寄存器外,还可用作( )。
A、累加器B、计数器C、基址寄存器D、段寄存器3、如果(AL)=11111111B,执行INC AL指令后,CF= ( )。
A、1B、0C、2D、和执行INC AL指令之前的取值保持一致4、以下指令中,执行后要影响标志位的指令为( )。
A、MOV AL,BLB、LAHFC、CLCD、PUSHF5、在机器内部操作中,CPU与存储器之间的任何信息交换使用的都是( )。
A、逻辑地址B、物理地址C、有效地址D、相对地址6、用来表示堆栈指针的寄存器是( )。
A、IPB、BPC、SPD、SS7、8086CPU在基址加变址的寻址方式中,变址寄存器可以为()。
A、BX或CXB、CX或SIC、DX或SID、SI或DI8、如果当前(SP)=0058H,执行POP AX指令后,(SP)=( )。
A、60HB、56HC、59HD、5AH9、设DS=27FCH,某一数据存储单元的偏移地址为8640H,则数据存储单元的物理地址正确的是( )。
A、27FCHB、27FC0HC、8640HD、30600H10、PSW寄存器中共有( )位条件状态位,有( )位控制状态位。
A、6、3B、3、6C、8、4D、4、811、“与非”门中的某一个输入值为“0”,那么它的输出值( )。
A、为“0”B、为“1”C、取决于正逻辑还是负逻辑D、取决于其他输入端的值12、在段内寻址时,可以提供偏移地址的寄存器组是( )。
A、AX、BX、CX、DXB、BP、SS、IP、SIC、BX、BP、SI、DID、CS、DS、ES、SS13、为了便于实现多级中断,保存现场信息最有效的方式是采用( )。
(汇编语言教程)5_80868088汇编语言-2
104H DUP(11H 104H DUP(11H)
DUP( DUP(0)
ENDS
ENDS DATA2 DATA2 SEGMENT PARA DB COMMON ‘DATA2’ DATA2 DATA N2 DATA2 DATA2 105H DUP( 105H DUP(0)
DATA2 DATA2 N1 DATA2 DATA2 END
默认值为: 默认值为:PARA
III、 III、组合类型
段名 SEGMENT [定位类型] [组合类型] [使用类型] [‘类别’] 定位类型] 组合类型] 使用类型] [‘类别 类别’ …… …… ; 语句序列 段名 ENDS
PRIVATE:私有段,不进行组合。 PUBLIC:
– 不同模块中的同为public属性的同名段连接组合成一个逻辑段。
3、过程定义伪指令
格式: 格式:过程名 [类型 类型] PROC [类型] … 过程体语句 RET 段名 ENDP PROC和ENDP是成对出现的 是成对出现的。 PROC和ENDP是成对出现的。 类型有近(NEAR)和远(FAR)两种, 类型有近(NEAR)和远(FAR)两种,若过程缺省 NEAR缺省 则属默认值。若为远过程, FAR不 缺省, 或NEAR缺省,则属默认值。若为远过程,则FAR不 能省略。 能省略。 过程名具有段地址、 过程名具有段地址、段内偏移量和类型三个属 性。
2、源程序开始和结束伪指令
程序开始伪指令
– NAME伪指令 NAME伪指令 – TITLE伪指令 TITLE伪指令
程序结束伪指令
– END
(1)程序开始伪指令NAME 程序开始伪指令NAME
NAME伪指令 NAME伪指令 格式: 格式:NAME 模块名 含义:表示一个模块的开始, 含义:表示一个模块的开始,并给出该模 块名。 块名。
第4章. 8086 8088汇编语言程序设计_软件调试技术
4.4 软件调试技术
例10:将利用DOS功能2 显示字符a的一段小程序汇编到 2180: 100H开始的内存中。
由于A命令不支持字符方式,当在0102地址后输入指令 MOV DL, ’a’ 后,显示出错信息,然后仍然提示当前汇编地址 2180: 0102,此时可重新输入指令 MOV DL,61,其中61H为a的 ASCII码。
1上海交通大学网络学院2theprincipleapplicationofmicrocomputer微机原理与应用王春香副教授wangcxsjtueducn3主要内容41程序设计语言概述4280868088汇编语言的基本语法4380868088汇编语言程序设计基本方法44软件调试技术章第四章汇编语言程序设计4掌握软件技术不仅应具有很强的抽象能力分析能力与综合能力还应具有较强的调试能力及排错能力
标志寄存器各标志位的显示字符
标志位 溢出位 方向位 中断位 符号位 零值位 辅助进位位 奇偶位 进位位 置位 OV DN EI NG ZR AC PE CY 复位 NV UP DI PL NZ NA PO NC
OF DF IF SF ZF AF PF CF
18
4.4 软件调试技术
例5:-r ;显示CPU内所有寄存器内容和标志位状态
30
4.4 软件调试技术
4.4.1 调试软件
常用的DEBUG命令。 8. 指定文件名命令 格式:N文件名及扩展名 指出即将调入内存或从内存中存盘的文件名。 这条命令要配合L或W命令一起使用。
31
4.4 软件调试技术
4.4.1 调试软件
常用的DEBUG命令。 9. 装入命令 格式1:L起始地址 驱动器号 起始扇区 扇区数
4.4.1 调试软件
常用的DEBUG命令。 10. 写磁盘命令 格式1:W起始地址 驱动器号 起始扇区 扇区数
汇编语言程序设计教程(第二版)习题参考答案
汇编语言程序设计教程(第二版)习题参考答案第1章计算机基础知识1.计算机的应用分哪几个方面,请举例说明书中未提到的领域的计算机应用。
科学计算、数据处理、计算机控制、计算机辅助设计、人工智能、企业管理、家用电器、网络应用。
书中未提及的如:远程教育、住宅小区控制、飞行系统控制与管理等。
2.简述计算机的发展过程,请查阅相关资料,列出微机的发展过程。
电子管、晶体管、集成电路、大规模集成电路以IBM为例,微机的发展:4004、8008、8080、8086/8088、80286、80386、80486、Pentium 系列3.计算机的字长是怎么定义的,试举例说明。
计算机能同时处理二进制信息的位宽定义为计算机的字长。
如8086能同时进行16位二进制数据的运算、存储和传输等操作,该机器的字长为16位。
4.汇编语言中的基本数据类型有哪些?数值型数据和非数值型数据。
非数值数据如字符、字符串、逻辑值等。
(1)7BCH=011110111100B=1980D(2)562Q=101110010B=370D(3)90D=01011010B=5AH(4)1110100.111B=164.7Q=74.EH30H~39H 41H~5AH 61H~7AH9.在汇编语言中,如何表示二进制、八进制、十进制和十六进制的数值?用相应进制的数值加上进制标记即可。
二进制用B,如10101010B八进制用Q,如437Q。
十进制用D或不用,如54D,或54。
十六进制用H,如27A8H10.完成下列二进制数的加减运算。
(1)10101010 + 11110000 (2)11001100 + 01010100=110011010 =100100000(3)11011010 - 01010010 (4)11101110 - 01001101=10001000 =1010000111.完成下列十六进制数的加减运算。
(1)0FEA9 - 8888=7621H (2)0FFFF - 1234=EDCBH(3)0EAC0 + 0028=EAE8H (4)3ABC + 1678=5134H12.完成下列BCD码的运算。
讲解汇编语法的书
讲解汇编语法的书
介绍汇编语法的书籍有很多,以下是一些经典的书籍:
《汇编语言》(王爽著):这本书从最基本的指令开始讲起,逐步深入到各种指令和寻址方式,同时还介绍了汇编语言的开发过程。
书中的示例代码简洁明了,易于理解,是一本很好的入门书籍。
《8086/8088 汇编语言程序设计》(吴艳平等著):这本书详细介绍了8086/8088 汇编语言的指令集和程序设计方法,包括各种指令的用法、寻址方式、程序结构等,同时也通过丰富的示例程序来帮助读者加深对汇编语言的理解。
《Intel 汇编语言程序设计》(王元珍等著):这本书主要介绍 Intel 系列微处理器的汇编语言程序设计,包括各种指令的用法、寻址方式、程序结构等,同时也介绍了与汇编语言编程相关的系统知识。
此外,还有《汇编语言基础教程》、《汇编语言与计算机体系结构》、《汇编语言程序设计实验教程》等书籍也是介绍汇编语言的经典之作。
以上书籍都是比较全面和系统的汇编语言教程,适合初学者和进阶学习者阅读和学习。
当然,学习汇编语言还需要多加练习和实践,只有不断地练习和实践才能真正掌握汇编语言的精髓。
汇编语言程序设计 第1篇 汇编语言基础知识
汇编 语言实现 汇编后的目 标文件只有 208字节
2019/1/23
11
计算机科学与技术系
《汇编语言程序设计》
1.1
汇编语言概述
1.1.2 汇编语言的特点
建议: ●充分注意“汇编”课实践性强的特点, ●多读程序,多写程序,多上机调试程序, ●熟悉PC机的编程结构, ●掌握汇编语言及其程序设计的基本概念、
2019/1/23
第 1章
汇编语言基础知识
19
计算机科学与技术系
《汇编语言程序设计》
1.2
进位计数制及其转换
1.2.2 不同数制之间的转换
(3)一般的十进制数转换成二进制数 为了将一个既有整数又有小数部分的十进制数转换成二进制 数,可以将其整数部分和小数部分分别进行转换,然后再组合 起来。 例:117.8125D = 1110101.1101B
1.1.2 汇编语言的特点
经常与高级语言配合使用,应用十分广泛。
2019/1/23
第 1章
汇编语言基础知识
9
计算机科学与技术系
《汇编语言程序设计》
1.1
汇编语言概述
1.1.2 汇编语言的特点
编程实现 c =a+b,并在屏幕上显示出结果。 #include "stdafx.h" #include "stdio.h" int main(int argc, char* argv[]) { int a,b,c; a=1; b=2; c=a+b; printf(“c=%d\n",c); return 0; }
计算机科学与技术系
《汇编语言程序设计》
1.2
进位计数制及其转换
1.2.2 不同数制之间的转换
汇编语言程序设计-教学大纲
汇编语言程序设计教学大纲近年来,随着嵌入式系统和物联网的发展,汇编语言在行业中的地位不断提升。
2017年1月,在TIOBE排行榜上汇编语言再次进入前十。
它是理解计算机系统核心知识的桥梁,在人才培养中亦起着关键作用。
在当今“工业4.0”和“中国制造2025”大背景下,它可以为国家智能化制造发展战略提供技术上的重要支撑。
课程概述汇编语言程序设计是计算机及相关专业的专业基础课程,它是计算机组成原理、操作系统、微机原理与接口等核心课程的必要先修课,并且对于训练学生掌握汇编语言程序设计的基本方法,熟悉汇编语言程序上机操作和程序调试技术有着重要作用。
汇编语言是计算机提供给用户最快也最有效的语言,也是利用计算机所有硬件特性并能直接控制硬件的唯一语言,因此在对程序的空间和时间要求很高的场合,汇编语言是必不可少的。
而在很多需要直接控制硬件的应用场合,汇编语言也是不可或缺的。
汇编语言作为计算机专业的一门必修课程,是了解计算机体系结构和操作系统的最佳切入点。
通过汇编语言课程的学习,对计算机理论中包括CPU体系结构、指令调度方式、存储器管理、基本输入输出接口的理解都会有一个比较本质而且直观的认识。
在对汇编语言实际运用的基础上,还能增加对高级程序设计语言的体会,包括变量的组织,地址的访问,循环与分支在机器码中的处理,调用函数时参数的传递等。
所以汇编语言在本专业中是一门核心课程,通过对本课程的学习,可以加深对后续课程的认识。
授课目标通过本课程的学习,使学生熟悉微型计算机指令系统和寻址方式;掌握汇编语言程序的基本格式;具有编写顺序程序、分支程序、循环程序和子程序等基本结构程序的能力;掌握常用的汇编语言应用程序的设计方法;掌握机器级的程序调试和分析方法。
课程大纲第1章基础知识1.1 汇编语言的一般概念1.2 学习和使用汇编语言的目的1.3 进位计数制及其相互转换1.4 带符号数的表示1.5 字符的表示1.6 基本逻辑运算第1章基础知识课后作业第2章IBM-PC微机的功能结构2.1 IBM-PC微机基本结构2.2 CPU寄存器结构及其用途2.3 存储器组织结构2.4 堆栈及其操作方法第2章IBM-PC微机的功能结构课后作业第3章寻址方式与指令系统3.1 寻址方式3.2 指令系统3.3 指令编码第3章寻址方式与指令系统课后作业第4章汇编语言程序格式4.1 汇编语言语句种类及其格式4.2 汇编语言数据4.3 符号定义语句4.4 表达式与运算符4.5 程序的段结构4.6 过程定义伪指令4.7 当前位置计数器与定位伪指令4.8 标题伪指令TITLE4.9 从程序返回操作系统在方法第4章汇编语言程序格式课后作业第5章程序控制结构及其设计技术5.1 顺序程序设计5.2 分支程序结构5.3 循环程序设计第5章程序控制结构及其设计技术课后作业第6章子程序设计6.1 调用与返回指令6.2 编制子程序的基本要求6.3 子程序设计举例6.4 DOS功能子程序调用第6章子程序设计课后作业第7章汇编语言简单应用程序设计7.1 算数运算调整指令及其应用7.2 串和表的处理7.3 代码转换及其应用第8章高级宏汇编语言8.1 结构8.2 记录8.3 宏指令8.4 重复汇编8.5 条件汇编预备知识数字逻辑设计及应用,计算机导论。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
类型0~3的中断称为内部中断。
类型0 :指令系统没有INT0这条指令
除数为0中断 除数为0 :它既不是外部中断 也不是软件中断。
是由 CPU自身产生的,所以无对应中断指令。
有符号数进行除法所得的商超出规定范围 有符号数进行除法运算,所得的商超出规定范围,
CPU自动产生类型为0的中断,转入响应的中断处理程序。
程序结束语句 END 表达式 表达式为程序的第一条指令的地址
汇编语言的基本语法
常量 数值常量, 01000101B, 32, 0F1D4H 符号常量(用EQU或=定义) 变量 内存单元的名字,由DB/DW/DD/DQ/DT定义 标号 指令存放单元的符号地址,是转移/调用/循环 指令的操作数
指令语句 执行性的语句,汇编时汇编程序将其转换成 机器目标代码 标号: 指令助记符 操作数 ;注释 伪指令语句 说明性的语句,为汇编程序提供进行汇编所 需要的有关信息,如定义符号、分配存储单 元等,不生成目标代码 名字 伪操作命令 操作数 ;注释
分类
• 符号定义伪指令 • 数据定义伪指令
助记符
第四章 8086/8088汇编语言程序设计
4.1 概述 4.2 汇编语言的基本语法 4.3 汇编语言程序设计的基本方法 4.4 DOS/BIOS中断调用
4.1 概述
汇编语言程序的上机处理过程
主要的汇编程序:MASM、TASM
例:求从 1开始连续 50个奇数之和,并将结果存放在名字为 SUM的 字存储单元中.其汇编源程序如下: DATA SEGMENT SUM DW 0 DATA ENDS ;定义数据段, DATA为段名 ;由符号(叫变量名) SUM 指定的内 存单元类型,定义一个字,初值为0 ; 定义数据段结束 ;定义堆栈段,这是组合类型伪 指令,它规定在伪指令 后须跟STACK变量名 ;定义堆残段为 200 个字节的连 续存储区,且每个字节的值为0 ;定义堆栈段结束
子程序设计
过程定义 过程名 PROC …… RET 过程名 ENDP [类型]
;指令序列 ;过程返回指令
类型: NEAR——与主程序在同一个段 FAR ——可以与主程序不在同一个段
子程序设计
过程调用
近程调用
CALL 过程名 •将当前IP寄存器内容进栈(保存CALL下一 条指令的偏移地址) •将被调用过程的偏移地址送IP寄存器,控制 程序转移到该过程
变量名 DB/DW/DD/DQ/DT 操作数,…,操作数 操作数可以是:数值表达式或表、字符串、?、 N DUP表达式
VAR DW ? ARRAY DB 100 DUP(0);DUP为重复符号 ARR2 DB 100 DUP(0,2DUP(3,2)) 定义500个字节并设初始值
段定义语句
过程定义语句(子程序定义)
•
• • • • • •
•
EQU,=,LABEL DB,DW,DD,DQ*,DT*,RECORD*, STRUC* 段定义伪指令 SEGMENT, ENDS, GROUP*, ASSUME, ORG 过程定义伪指令 PROC, ENDP 模块定义与通信伪指令 EXTRN*,PUBLIC*,NAME,END 宏处理伪指令* MACRO*, ENDM*, LOCALA*, REPT*, IRPC *, IRP*,PURGE* 条件汇编伪指令* IF,ENDIF,IFI,IFZ,IFB,IFNB,IFE, IFDIF,IFDEF,IFNDEF, IFIDN,EISE 列表伪指令 PAGE, TITLE, SUBTTL*, LIST, XLIST, % OUT* 其他伪指令 COMMENT*, RADIX*, INCLUDE, EVEN*
第九讲 第四章 8086/8088汇编语言程序设计 2006.11.14(星期二)
主要内容: 1. 青帝 /read/0/296/
介绍几条指令:INT n,IRET
格式:INT n ;
执行操作:
n—常数或表达式,n=0—255或INTO
STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS
CODE SEGMENT ;定义代码段 ASSUME DS: DATA, SS: STACK, CS:CODE ;由ASSUM伪指令定义各段寄存器
START:MOV AX,DATA MOV DS,AX MOV CX,50 MOV AX,0 MOV BX,l NEXT: ADD AX,BX INC BX INC BX DEC CX JNE NEXT MOV SUM,AX; MOV AH,4CH
(SP)←(SP)-2, (SP)) ←(PSW) (SP)←(SP)-2,(SP)) ← (CS) (SP)←(SP)-2,← (IP)
(IP) ←(N×4)
(CS) ←(N×4+2) 清除IF、TF,避免进入中断以后不被外面其它中断所打断 及进入中断以后按单步执行。 例:.某中断程序入口地址为3375H:1234H,放置矢量表位置为 0000H:0180H。问此中断类型号为___,写出入口地址在矢量表 中放置顺序(由低到高)____________________。
(二)其他处理机控制指令
1、NOP(No operation ) 2、 HLT(Halt ) 3、 WAIT (Wait while TEST pin not asserted ) 4、 ESC(Escape ) 5、 LOCK(Lock bus ) 空操作 CPU暂停状态 CPU等待状态 交权 总线锁定
数值常量、符号常量(用EQU或=定义)
变量 内存单元的名字,由DB/DW/DD/DQ/DT定义 BUF DB ? MOV BUF,AL 变量的三种属性: 段值 SEG 偏移量 OFFSET 类型 BYTE/WORD/...
标号 指令存放单元的符号地址,是转移/调用/循环 指令的操作数 标号的三种属性: 段值 SEG 偏移量 OFFSET 类型 NEAR/FAR
INT 21H CODE:ENDS END START
;代码段结束 ;整个程序汇编结束
4.2 汇编语言的基本语法
1. 常量、变量和表达式 常量 二进制 八进制 十进制 十六进制 字符串 xxxxxxxxB xxxO 或xxxQ xxxx或xxxxD xxxxH ‘xxx’或“xxx” 01000101B 721O或721Q 1991或1991D 0F1D4H ‘AB’ 以ASCII编码
2. 指令语句 标号: 指令助记符
START:MOV
操作数
;注释
AX,DATA ;将DS初始化为数据段首
3. 伪指令语句 名字 伪操作命令 符号定义语句 定义符号常量 PRICE EQU 281 PORT = 6 PORT = PORT +1 操作数 ;注释
数据定义语句 定义变量、分配存储单元等
实模式汇编语言源程序的结构——完整的段定义
DATA SEGMENT …... DATA ENDS STACK SEGMENT STACK …... STACK ENDS CODE SEGMENT ASSUME DS:DATA, SS:STACK, CS:CODE START: ……
CODE
ENDS END START
表达式 由操作数和运算符组成的序列 操作数可以是寄存器、常量(数值常量、符 号常量)、存储器操作数(标号、变量) 运算符包括:算术运算符、逻辑运算符、关 系运算符、数值返回运算符和属性运算符
数值返回运算符(分析运算符)
SEG 变量/标号 OFFSET 变量/标号 TYPE 变量/标号 变量返回类型:1字节、2字、4双字 标号返回类型:-1NEAR、-2FAR LENGTH 变量:返回变量的个数 SIZE 变量:返回变量所占地字节数
段寄存器定义伪指令 ASSUME 段寄存器:段名 [,段寄存器:段名,...]
•ASSUME语句习惯上作为代码段的第一条指令 •ASSUME语句是非执行性的伪指令,段寄存器 的初值必须在程序中用指令设置。
CSEG SEGMENT ASSUME CS:CSEG, DS:DSEG MOV AX, DSEG MOV DS, AX …...
;将DS初始化为数据段首 初 ;地址DATA ;CX置入循环计数值 始 ;清AX累加器 化 ;BX置常量1 ;累加奇数和,计50次 ;求下一个奇数 ;循环计数器作减1计数 ;未计完50次时,转至 NEXT循环 累加和送存SUM单元 ; DOS 功 能 调 用 语 句 , 机 器 将结束本程序的运行,并返 回DOS状态(4CH为DOS 程序的入口地址)
。
内存0:0000H~0:03FFH区域中,构成中断向量表,存放中断处理程序入口地 址。每4个单元对应1个中断源。关系如下表: 中断处理程序入口地址的地址
00000H~00001H 00002H~00003H 类型 类型0(IP) 类型0(CS)
00004H~00005H
00006H~00007H 00008H~00009H 0000AH~0000BH 0000CH~0000DH 0000EH~0000FH 00010H~00011H 00012H~00013H
类型1(IP)
类型1(CS) 类型2(IP) 类型2(CS) 类型3(IP) 类型3(CS) 类型4(IP) 类型4(CS)
……
003FCH~003FDH
003FEH~003FFH
……
类型255(IP)
类型255(CS)
∴ INTO跟在有符号数+、-后面:
* 这条指令可以写在一条算术指令后面。
若产生溢出,OF=1,则启动中断过程,不进行任何操作。
循环控制: 计数控制 LOOP/... 条件控制 JZ/... 例:计算1+2+3+…+100 MOV AX, 0 MOV BX, 0 MOV CX, 64H INC BX ADD AX, BX LOOP SUM