第6章 8086 8088汇编语言程序设计
8086汇编语言程序设计——第一个程序
8086汇编语⾔程序设计——第⼀个程序本系列以80X86系列微型计算机为基础,以MASM5.0为汇编上机实验环境,重点介绍Intel8086指令系统。
Intel8086指令系统中有100多条指令,利⽤这些指令可以编写出复杂的程序实现更多功能。
汇编语⾔是直接控制计算机硬件⼯作的最简便的语⾔。
学习了汇编语⾔可具有在CPU寄存器级上进⾏控制和操作的能⼒,可获得直接对计算机硬件底层编程的经验。
⼀个计算的例⼦例 *编写⼀个汇编语⾔程序,实现下列公式计算。
假设X=4,Y=5汇编指令如下:如果在DEBUG下⽤A命令输⼊这些指令,必须把X、Y换成具体的数值;Z、Z1是存储单元地址,最后两条指令可写为MOV [0],AL和MOV [1],AH,这样才能⽤T命令执⾏。
D:\dos〉DEBUG-AMOV AL,4ADD AL,5MOV BL,8IMUL BLMOV BL,4MOV BH,0SUB AX,BXMOV BL,2IDIV BLMOV [0],ALMOV [1],AH采⽤DEBUG的A命令输⼊程序的做法明显不⽅便,⼀是⽆法给出变量名即符号地址,⼆是调试修改程序不便。
1. 编写⼀个完整的汇编语⾔源程序需要增加段定义伪指令和定义数据存储单元伪指令等必须有的伪指令。
伪指令与C语⾔等⾼级语⾔中的说明性语句的含义类似,起到说明作⽤。
⽤记事本gedit或者vi编写,保存到dos⽬录下注释符号为;号2. 汇编、链接、执⾏汇编语⾔源程序既可以⽤⼤写字母也可以⽤⼩写字母书写。
汇编语⾔程序建⽴及汇编过程如图所⽰。
⽤户编写的源程序要经汇编程序MASM汇编(翻译)后⽣成⼆进制⽬标程序,⽂件名默认与源程序同名、扩展名为.OBJ;再经过LINK连接⽣成可执⾏程序,⽂件名默认与源程序同名、扩展名为.EXE。
注意:源程序⼀定要和MASM和LINK⽂件放在同⼀个⽂件夹中。
执⾏MASM和LINK命令时需要按多次回车。
3. 在DEBUG下执⾏程序MOV AH,4C指令对应的偏移地址是0023,这就是断点(所谓断点,就是程序执⾏到该处停下来不再继续)。
80868088汇编语言上机调试与实验指导
2、DEBUG的常用命令
1)显示、修改寄存器命令 R
格式:R[寄存器名]
功能:若给出寄存器名,则显示该寄存器的内容并可进行修改。缺省寄存器名,则按以下格式显示所有寄存器的内容及当前值(不能修改)。
AX=0000 BX=0004 CX=0020 DX=0000 SP=0080 BP=0000 SI=0000
8)指定文件命令 N
格式:N<文件名或扩展名>
功能:指定即将调入内存或从内存写入磁盘的文件名。该命令应该用在L命令和W命令之前。
9)装入命令 L
格式1:L[起始地址][盘符号][扇区号][扇区数]
1、编辑软件
行编辑软件:
全屏编辑软件:WPS、、、WORD、PE等。
当输入、建立和修改源程序时,可任选一种编辑软件,不要用格式控制符,要求编辑完成的文件扩展名一定是.ASM。
2、汇编程序
有汇编ASM.EXE、宏汇编MASM.EXE及TASM等,一般使用宏汇编MASM.EXE,因它比ASM.EXE功能强。TASM适用于8086/8088~Pentium系列指令系统所编写的汇编语言程序,是比较先进的汇编工具。
Microsoft(R) Macro assemble Version 5.00
Copyright(C) Microsoft Corp 1981-1985,1987 ALL rights reserved
Run file [<file>.EXE]:
List File [nul.map]:
4)汇编命令 A
格式:A[起始地址]
功能:将输入源程序的指令汇编成目标代码并从指定地址单元开始存放。若缺省起始地址,则从当前CS:100地址开始存放。A命令按行汇编,主要是用于小段程序的汇编或对目标程序的修改。
微机原理总目录
※
14.2 PC/XT硬件结构 14.3 总线技术
※
◆实验指南
※
15.1 《微机原理与接口技术》课程上机简介
15.2 汇编语言上机指导
※
4.4
4.5 4.6
程序的段结构
地址表达式 宏定义与宏调用
※
※
◆汇编语言程序设计
※ 5.1
汇编语言软件开发步骤及输入/输出问题 顺序程序设计 分支程序设计
※ 5.2
※ 5.3
※ 5.4
循环程序设计
专题应用程序设计
※ 5.5
◆8086微处理器结构
※
6.1 6.2 6.3
8086微处理器工作模式与引脚功能 系统组成 8086的总线操作与时序
※
※
※
◆ 并行接口芯片8255A
※
10.1
10.2 10.3 10.4
8255A概述
8255A的控制字 8255A的工作方式 8255A的编程
※
※
※
◆串行通信
※
11.1
11.2 11.3
串行通信概述
RS-232C串行接口标准 异步通信接口芯片8250
※
※
◆ DMA 控 制 器 8237A
※
12.1 12.2 12.3
1微机原理与接口技术王丰王兴宝编著目录第一章基础知识第二章微型机算机的组成机工作原理第三章指令系统第四章masm伪指令系统第五章汇编语言程序设计第六章8086微处理器结构第七章半导体存储器第八章输入输出技术第九章中断第十章并行接口芯片8255a第十一章串行通信第十二章dma控制器8237a第十三章其他常用接口第十四章pc机系统结构及总线技术第十五章实验指南基础知识11数制12码制13常用数字逻辑器件微型机算机的组成机工作原理21微型机算机的组成机工作原理22pc机的编程结构指令系统
第6章 8086指令系统与汇编基础
第13页
2013年8月1日星期四
第6章
8086指令系统与汇编基础 3.段地址寄存器
有 CS、DS、ES、SS 四 个 , 分 别 表 示 程 序 码 ( code segment register)、 数 据 ( data segment register)、附加(extra segment register)、堆栈 (stack segment register)段地址用。在 DOS 系统 中,每一个段地址容量只有 64KBytes。 当数据段地址不够用时,就可以用附加数据段地址 来补足,例如想要将一个段地址的某些内容复制到 另一段地址中,就可以同时指定 DS、ES 分别表示 这两个段地址。
第17页 2013年8月1日星期四
第6章
6.2.4
8086指令系统与汇编基础
寄存器间接寻址(Register Indirect Addressing) 寄存器间接寻址方式中,操作数存放在存储器 中,但操作数的有效地址EA在基址寄存器BX、BP或 变址寄存器SI、DI中。操作数的物理地址为: 物理地址=16(段寄存器)+(寄存器)
执行结果为:(AX)=8060H 指令中也可指定段跨越前缀以取得其它段中的 数据。如:MOV AX,ES:[BX]指令,则从附加段中 取得数据。
操作码
DS 3000 0 BX + 200 0
代 码
段
30000 32000 AH AL
60 80
3200 0
数 据
段
图 6- 2- 2
例 6 - 5 的执行过程
第3页 2013年8月1日星期四
第6章
8086指令系统与汇编基础
计算机只能识别二进制代码,因此计算机能执行 的指令必须以二进制代码的形式表示,这种以二进制 代码形式表示的指令称为指令的机器码(Machine Code)。 2.汇编指令格式 一条指令一般包含操作码和操作数两部分。
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 。
汇编语言程序设计
段寄存器赋值
在DOS环境下运行程序时,DOS的装载程序对寄 存器CS:IP、SS:SP作正确的初始化,而将段寄存 器DS、ES初始化为程序段前缀PSP的起点,而不是用 户所需的地址。因此段寄存器DS、ES的赋值还要有程 序本身来完成。如 MOV AX,DATA MOV DS,AX 注意这里的MOV 指令,其源操作数是段名,它是把 段名对应段的基地址送给目的操作数,这是传送指令 中的一个特殊情况。
汇编语言程序语句的格式
注释域以分号打头,注释部分是编程者对指令的作 用所作的言简意赅的说明。汇编语言不对这部分汇编。
• 汇编语言中的标号或名字或其他变量名(统称标识符)
必须是由字母或特殊字符打头的字母数字串,中间不能 有空格。合法的字符包括:字母 A~Z 或 a~z ;数字 0~9 ; 特殊字符有问号(?)、圆点(.)、@、下横线(_) 和美元符号($),圆点只能作为第一个字符。 标号和名字的长度不超过31个字符,超过部分均被删 去。 标识符不能和保留字重名
MASM.EXE是用于8088/8086、80286、80386等CPU的微机上的一种宏汇编 程序。它支持多模块的程序设计,由它生成的目标程序可直接和其他模块的汇编 语言程序的目标程序相连接,也可直接和其它高级语言程序的目标程序模块相连 接。
8088/8086汇编语言程序的上机操作过程:
1)根据任务要求,应用指令系统给定的指令编制程序; 2)利用编辑软件如EDIT等将程序输入计算机,程序名后缀*.asm; 3)应用MASM.EXE对.asm程序进行汇编,得到*.obj和*.lst文件; 4)应用LINK.EXE程序对.obj文件进行连接定位,得到*. exe文件; 5)执行*. exe文件,应用文件进行调试、查看文件执行情 况。
《汇编语言程序设计》复习资料
《汇编语言程序设计》复习资料一、基本概念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的寄存器中,大多数存放在存储器中,它们分别称为立即数、寄存器操作数和存储器操作数。
汇编语言程序设计课后习题答案(第二版_沈美明)(无删减)
汇编语言程序设计课后习题答案(第二版_沈美明)(无删减)第一章1.1 用降幂法和除法将下列十进制数转换为二进制数和十六进制数: (1) 369 (2) 10000 (3) 4095 (4) 32767 答:(1) 369=1 0111 0001B=171H(2) 10000=10 0111 0001 0000B=2710H (3) 4095=1111 1111 1111B=FFFH(4) 32767=111 1111 1111 1111B=7FFFH1.2 将下列二进制数转换为十六进制数和十进制数:(1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111 答:(1) 10 1101B=2DH=45 (2) 1000 0000B=80H=128(3) 1111 1111 1111 1111B=FFFFH=65535 (4) 1111 1111B=FFH=2551.3 将下列十六进制数转换为二进制数和十进制数: (1) FA (2) 5B (3) FFFE (4) 1234 答:(1) FAH=1111 1010B=250 (2) 5BH=101 1011B=91(3) FFFEH=1111 1111 1111 1110B=65534 (4) 1234H=1 0010 0011 0100B=46601.4 完成下列十六进制数的运算,并转换为十进制数进行校核: (1) 3A+B7 (2)1234+AF (3) ABCD-FE (4) 7AB×6F 答:(1) 3A+B7H=F1H=241 (2) 1234+AFH=12E3H=4835 (3) ABCD-FEH=AACFH=43727 (4) 7AB×6FH=35325H=2178931.5 下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。
汇编语言、微机原理及接口技术(第3版)郑初华_课后题解答
第1章进制及码元1.进制转换129= 81H= 10000001B=201Q298= 12AH= 100101010B=452Q1000= 3E8H= 1111101000B= 1750Q5DH= 1011101 B= 135 Q= 93 D3E8H= 1111101000 B= 1750Q= 1000 D;357Q=11101111 B= 0EF H= 239 D3.数据表示范围:一字节的无符号数表示范围为0~255,有符号数(补码)表示范围为-l28—+127。
一个字的无符号数表示范围为0~65535,有符号数(补码)表示范围为—32768~+32767。
N位二进制数的无符号数表示范围为0~(2N-1),有符号数(补码)表示范围为-2N-1~(2N-1-1).4.35H代表的ASCII字符为'5',代表十六进制数时等价的十进制值为53 ,代表压缩8421BCD码等价的十进制值为35 ,代表非压缩8421BCD码等价的十进制值为5。
5.FFH代表无符号数时等价的十进制值为255 ,代表补码有符号数时等价的十进制值为一1 ,代表反码有符号数时等价的十进制值为一0 ,代表原码有符号数时等价的十进制值为一l27。
6.--20的8位二进制补码为ECH ,原码为94H ,反码为EBH 。
158的16位二进制补码为009EH,原码为009EH ,反码为009EH 。
第2章微机硬件基础1.计算机系统硬件的五大功能部件及其主要功能?答:硬件系统按功能模块分为运算器、控制器、存储器、输入设备、输出设备。
运算器主要完成算术运算、逻辑运算及移位运算,其中主要包括算术逻辑运算单元Arithmetic Logic Unit,ALU)和暂存数据(原始、中间、结果)的寄存器(Register,R)。
控制器实现对计算机部件的协调调度完成指令的分析执行,其中主要有程序计数器Program Counter,PC)或叫指令指针(Instruction Pointer,IP)、指令寄存器(Instruction register,IR)、指令译码器(Instruction Decoder,ID)、微操作命令发生器、时序发生器等。
汇编语言第六章
三.中断向量表
3. 设置或取出中断向量指令 (1) 设置中断向量指令 功能:把由AL指定的中断类型的中断向量DS:DX放入中
断向量表中。
(AH)= 25H
(AL)= 中断类型号
DS:DX = 中断向量 INT 21H
三.中断向量表
(2) 取出中断向量指令
功能:把AL中指定的中断类型的中断向量从中断
一、 WIN32编程基础
(2) 循环控制伪指令
格式:.WHILE 条件表达式 循环体 .ENDW 格式:.REPEAT 循环体 .UNTIL 条件表达式 格式:.CONTINUE 功能:终止本次循环, 开始下一次循环 格式:.BREAK 功能:退出当前循环
功能:实现循环结构
一、 WIN32编程基础
内中断的处理特点: ①中断类型号一般在指令中; ② 不受中断允许标志位IF的影响。
二、 中断源
2. 外中断 由外设控制器、协处理器等CPU以外的事件引起的中断, 称为外中断。 外中断的处理特点: ① 中断类型号由8259A提供,或由自制电路来提供;
② 受中断允许标志位IF的影响(IF=1,响应中断)。
个字节。
三.中断向量表
如:INT 4AH
中断向量地址 = 4AH*4 = 128H
DEBUG执行后, 用D命令查看: ―D0:0↙ … 执行INT 4AH时: IP=1805H CS=F000H IP F000: 1805 中断处理
0:128H
0:129H
05 18
0:12AH
0:12BH
00
F0 …
外设
二、 外设与主机传送的接口与信息
接口的组成:设备状态寄存器、设备控制寄存 器、数据寄存器。 I/O端口的地址空间:允许设置64K个8位端口 或32K个16位端口。 如:40H~43H时钟/定时器,60H~63H为 8255通讯芯片的接口。
(汇编语言教程)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章 第2章 第3章 第4章 第5章 第6章 第7章 汇编语言基础知识 8086的指令系统 汇编语言程序格式 基本汇编语言程序设计 高级汇编语言程序设计 32位指令及其编程 汇编语言与C/C++的混合编程
教学特点
采用汇编程序MASM 6.15 采用简化段定义源程序格式 强调对基本指令的理解和掌握 介绍汇编系统和伪指令的基本内容 新增32位指令、Windows编程 引出与Visual C++的混合编程 强调上机实践,要求熟练进行编程和调试 运用多媒体教学手段
BCD码很直观
BCD码:0100 1001 0111 1000.0001 0100 1001 十进制真值: 4978.149 BCD码便于输入输出,表达数值准确
第1章
ASCII码(美国标准信息交换码)
标准ASCII码用7位二进制编码,有128个 不可显示的控制字符
前32个和最后一个编码 回车CR:0DH 换行LF:0AH 响铃BEL:07H
汇编语言程序员看到的是端口(I/O地址)
第1章
寄存器(Register)
寄存器是CPU内部的高速存储单元 它们为处理器提供各种操作所需要的数据或 地址等信息 汇编语言程序采用它们各自的符号名
16位Intel 8086/80286 CPU中有 AX BX CX DX SI DI BP SP 32位80386/80486/Pentium系列 CPU中有 EAX EBX ECX EDX ESI EDI EBP ESP
第1章
端口(Port)
I/O接口电路由接口寄存器组成,需要用编 号区别各个寄存器:编号=地址 I/O地址是接口电路中寄存器的编号 端口是I/O地址的通俗说法 系统通过这些端口与外设进行通信 采用十六进制数来表达端口
汇编语言程序设计教程(第二版)习题参考答案
汇编语言程序设计教程(第二版)习题参考答案第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码的运算。
《80x86汇编语言程序设计》(第2版)习题答案
习题参考答案1第1章1-1汇编的主要功能:输入:汇编语言源文件输出:目标文件处理:对源文件进行语法检查;将符号指令翻译为机器指令。
连接的主要功能:输入:1个或多个目标文件与库文件输出:可执行文件处理:浮动地址的重定位;多模块的连接。
1-2 (1)2EH (2)0D2H (3)0FFH(4)80H (5)7FH (6)0FEH1-3 (1)7FH (2)0FF80H (3)0FFFFH285286(4)0FFD2H (5)8000H (6)0FFH1-4 无符号数范围:0~2n-1;带符号数范围:-2n−1~2n−1-11-5 (1)压缩BCD码:58H;非压缩BCD码:x5x8H。
(2)压缩BCD码:1624H;非压缩BCD码:x1x6x2x4H。
1-6 (1)字符'1'的ASCII码;十进制数31的压缩BCD码;十进制数1的非压缩BCD码;十进制数49的十六进制表示。
(2)十进制数-1的8位二进制补码表示;带符号数255的16位二进制补码表示;无符号数255的8位二进制形式。
(3)十进制数-1的16位二进制补码表示;带符号数65535的32位二进制补码表示;无符号数65535的16位二进制形式。
1-7 (1)作为无符号数为159,等值的16位和32位形式均为9FH;作为带符号数为-97,等值的16位和32位形式分别为0FF9FH与0FFFFFF9FH。
(2)作为无符号数和带符号数均为104,等值的16位和32位形式均为68H。
(3)作为无符号数为192,等值的16位和32位形式均为0C0H;作为带符号数为-64,等值的16位和32位形式分别为0FFC0H与0FFFFFFC0H。
1-8 (1)AND 0FH (2)OR 30H(3)右移4位可得高位的值;将原值AND 0FH可得低位的值。
(4)XOR 00101010B(5)AND 8000H,若结果为0,则是正数,否则为负数。
第2章2-1 系统总线是CPU与内存和I/O子系统之间进行数据交换的通道,包括数据总线、地址总线和控制总线,分别负责在CPU与内存和I/O子系统之间传送数据、地址和控制信息。
8086_8088汇编语言中的进位和溢出
进位与溢出无符号数运算主要考虑进位/借位问题,而有符号数的运算主要考虑溢出问题。
两个有符号数进行加减运算时,如果运算结果超出了该符号数可表示的范围,就会发生溢出,使计算出错。
1.无符号数运算时的借位当最高位向更高位有进位(或借位)时,即CF=1时,运算结果会超出该无符号数字长所表示的范围。
11111100+ 00000111+ 1 000000118位无符号数的表示范围为0~255,上例中,被加数为252,加上7就超出了8位无符号数的表示范围,向更高位有进位,运算的结果导致CF=1,8位数据不能反映两数相加的和。
2.有符号数运算时的溢出最高位进位状态⊕次高位进位状态=1,则溢出。
怎么理解呢?首先要知道⊕(异或)是什么:相同为0,相异为1;然后是“状态”一词,状态指的是有没有进位。
这句话的意思就是:若最高位和次高位中,一个有进位而另一个没有进位,则异或结果为1,表示有符号的运算结果有溢出,此时OF置1。
来看一下微机原理里面判断OF位的经典例题:将10011100和11100101相加后,标志寄存器中OF为何值?首先,我们都知道OF为溢出标志位(有溢出为1,无溢出为0);然后,他的定义就是判断补码运算时的溢出情况,既然是补码,那就一定是有符号数。
那就用判断有符号数溢出的方法判断,先进行运算:10011100+ 11100101+ 1 10000001由此看出,最高位有进位,次高位也有进位,则没有溢出,所以OF=0。
总之,要始终牢记一点:CF是无符号数溢出标志(暂且也称为溢出),OF 是有符号数溢出标志。
通俗一点说就是,即使有符号数相加/相减导致了CF=1,不能说明结果的正确与否。
此时,若OF=1,则说明结果溢出,出现错误;OF=0,说明结果正确。
这个判断过程根本和CF没关系,CF=1/0,都不会影响。
同理也可以得出OF对无符号数的运算结果判断也无影响。
《汇编语言程序设计》作业习题
《汇编语言程序设计》作业习题第1章汇编语言基础知识习题1.1 什么是汇编语言?汇编语言的特点是什么?1.2 把下列十进制数转换成二进制数、八进制数、十六进制数。
① 127 ② 1021 ③ 0.875 ④ 6.251.3把下列二进制数转换成十进制数。
① 1001.11 ② 101011.10011 ③ 111.011 ④ 1011.11.4 把下列八进制数转换成十进制数。
① 573.06 ② 75.23 ③ 431.7 ④ 123.451.5 把下列十六进制数转换成十进制数。
① 0D5.F4 ② 8BA.7C ③ 0B2E.3A ④ 6EC.2D1.6 把下列英文单词转换成ASCII编码的字符串。
① Upper ② Blow ③ Computer ④ What1.7 求下列带符号十进制数的8位基2码补码。
① +127 ②−2 ③−128 ④ +21.8 求下列带符号十进制数的16位基2码补码。
① +628 ②−9 ③−1234 ④ +32491.9 下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。
①68+(―53)②68―53 ③68―(―53)④(―68)―531.10 汉字在输入、存储、输出过程中所使用的汉字编码是否一样?使用的是什么编码?第2章 IBM-PC系统结构习题2.1什么是微型计算机?微型计算机主要由哪几部分组成?其主要功能是什么?2.2 8086/8088CPU由哪两部分组成?它们的主要功能是什么?2.3 8086/8088CPU有哪些寄存器?各有什么用途?2.4 8086/8088CPU哪些寄存器可以用来指示存储器地址?2.5标志寄存器中有哪些状态标志和控制标志?它们每一位所表示的含义是什么?2.6有两个16位数3A4BH和10EFH分别存放在2000H和2004H存储单元中,请用图表示出它们在存储器里的存放情况。
2.7一个存储单元的物理地址、段地址、偏移地址三者之间有何关系?2.8在DEBUG程序中,一条指令语句表示为2000:0030 MOV AL,8。
汇编语言程序设计-教学大纲
汇编语言程序设计教学大纲近年来,随着嵌入式系统和物联网的发展,汇编语言在行业中的地位不断提升。
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)。
8086/8088汇编语言程序设计
6.1.1汇编语言的语句格式
汇编语句分为指令语句和汇编命令语句。
指令语句的格式如下:
(标号:)(前缀指令)助记符(操作数);(注释)
其中()中的内容是可以省略的,多个操作数间是以逗号隔开的。
汇编命令语句不汇编成机器代码,它仅仅在汇编过程中告诉汇编程序应如何编译汇编命令式为汇编程序在编译时用的。
汇编命令语句用四个字段组成,格式如下:
(名字)助记符(操作数);(注释)
当伪指令是数据定义的伪指令时,它称为变量。
6.1.2 标号、变量及表达式
标号是用符号表示的地址。
标号有3个属性:段地址、偏移地址和类型。
标号的段地址和偏移地址是指标号对应的指令首字节所在的段地址和段内的偏移地址。
标号的类型属性有两种:NEAR和FAR类型。
在转移和调用指令中常将标号作为转移目标地址使用。
变量是与一个数据项的第一字节相对应的标识符。
它表示该数据项第一字节在现行段中的偏移量。
变量有3个属性:段地址(SEG)、偏移地址(OFFSET)、类型(TYPE)。
表达式由运算符和运算对象组成。
运算符有算术、逻辑、关系运算符和汇编语言特定的运算符(分析、合成等)运算对象可以是常数、变量和标号,也可以是操作数,还可以是构成程序的段、偏移量或圆括号内的偏移量。
6.1.3 伪指令
伪指令共有20条,常用有以下几条:
(1)赋值伪指令EQU, 利用EQU指令可用标号来代表数据、数据地址或程序地址。
伪指令EQU有两种格式,即
A. 名称EQU 表达式
B. 名称EQU 被定义过的名称或标号
(2)定义变量(分配存储单元)伪指令,就是给变量分配内存的伪指令。
这些伪指令是DB, DW, DD, DQ, DT。
A. 当用DW定义地址表达式时,地址表达式中的变量名称表示该变量的第一个存储单元的偏移地址。
B. 当用DD定义地址表达式时,低字节用预置偏移地址,高位字用于预置段地址。
C. 地址表达式中的变量或标号可与常数值相加减。
对于变量来说运算结果的
类型不变;对标号来说,运算结果仍表示原标号段中的偏移地址。
D. 变量或标号不能相加,但可相减,结果是没有属性的纯数值。
(3)定义存储单元类型伪指令(PTR)。
这类指令不单独使用,而是和指令结合起来使用。
利用这些伪指令,对存储单元指定数据类型。
(4)段定义伪指令
A. 段定义伪指令SEGMENT/ENDS主要是用来定义段的名称和范围,还可指明段的定位类型、组合类型和分类名。
段定义伪指令的格式是:
段名1 SEGMENT [定位类型][组合类型][分类名]
┆
段名1 ENDS
当定义数据段、附加数据和堆栈段时,在SEGMENT/ENDS伪指令中间的语句,只能包括伪指令语句,不能包括指令语句。
只有当SEGMENT/ENDS定义代码段时,中间的语句才能为指令语句以及与指令有关的伪指令语句。
由SEGMENT/ENDS所定义的段小于64KB。
B. OGR伪指令。
该指令用来规定目标程序存放单元的偏移量。
它的格式如下:
ORG 表达式
该指令前面不能带标识符。
C. ASSUME 伪指令。
该指令语句用来告诉汇编程序在指令执行期间内存的哪一段是数据段,哪一段是堆栈段,哪一段是代码段。
该指令的格式为:ASSUME 段寄存器名:段名符[,段寄存器名:段名符,…] ASSUME语句只能安排在代码段内,一般应排在代码段作为首指令。
(5)定义过程的伪指令有PROC, ENDP, NEAR和FAR。
一个过程可以被其他程序所调用,它的最后一条指令总是返回指令,返回到主程序。
定义过程的伪指令总是成对出现的,在这两条伪指令间的内容就作为一个过程,即一个子程序。
(6)定义结构的伪指令STRUC/ENDS。
定义结构伪指令的格式如下:
结构名称STRUC
┆由DB, DW, DD伪指令所组成的语句序列字段
标识符
结构名称ENDS
结构定义并不保留任何存储空间,也不为任何存储单元赋值,它仅仅是一种模式。
因而在引用结构和其字段之前,必须为结构分配空间或赋值。
要给结构分配存储空间或赋值,必须有一个引用该结构的语句,其格式如下:变量结构名称<赋值说明>
访问结构的方法是:变量名,字段名
(7)源程序结束伪指令END。
该指令表明了源程序的终结,其格式如下:
END 表达式(表达式通常就是程序第一条指令的语句标号)
6.1.4 分支程序设计
程序的分支主要是靠条件转移指令来实现。
这里需要注意的是条件转移语句都是近程跳转。
若程序所要转移的地址超出其范围时,需利用一条无条件转移语句作为中转。
6.1.5 循环程序设计
循环程序设计主要用于某些需要重复进行的操作,主要使用循环指令LOOP,LOOPZ或LOOPNZ或条件转移指令。
循环程序的设计可分为设置循环初始状态、循环体和循环控制条件三部分。
(1)设置循环初始状态主要是指设置次数的计数初值,以及其他为能使循环体正常工作而设置的初始状态等。
(2)循环体是循环操作(重复执行)的部分,包括循环的工作部分及修改部分。
循环的工作部分是实现程序功能的主要程序段;循环的修改部分是指当程序循环执行时,对一些参数如地址、变量的有规律的修正。
(3)循环控制部分是循环程序设计的关键。
每个循环程序必须选择一个控制循环程序运行和结束的条件。
6.1.6 子程序设计
子程序可以被调用,且该子程序完成确定的功能后便返回调用程序处。
(1)过程的定义和调用,过程的定义格式为:
过程名PROC属性
┆
RET
过程名ENDP
调用过程时只要在CALL指令后写上该过程名即可。
属性字段用来指明过程的类型属性是NEAR还是FAR。
RET指令总是放在过程体的末尾,用来返回主程序。
(2)寄存器内容的保护和恢复。
即保护现场和恢复现场,通常是用堆栈压入指令和弹出指令来实现。
必须注意:并不是过程中用的所有寄存器内容都要保护(只有那些子程序和主程序都要用的寄存器才予以保护)。
例如,若用寄存器在主程序和过程间传递参数就不需要保护。
(3)主程序和过程间的参数传递。
主程序调用过程时,必须先把过程所需的初始数据(即入口参数)设置好,过程执行完毕返回主程序时也必须将过程运行所得的结果(即出口参数)送给主程序。
过程入口参数传入和出口参数的送出称为主程序和过程间的参数传送。
参数传送的方法主要有以下4种:
A. 用CPU内部的寄存器传送参数。
B. 当过程和主程序同在一个代码段时,过程可以直接访问该代码段中的变量(即参数)。
C. 通过地址表传送变量地址。
该方法是将所有变量的偏移地址顺序存放在一张地址表中,然后通过寄存器将地址表的地址传送给过程,进入过程后可用寄存器间接寻址方式从地址表中取出变量地址,以便访问所需变量。
D. 通过堆栈传送参数或参数地址。
该方法是:调用过程前在主程序中用PUSH指令将参数地址压入堆栈;进入过程后再用基址寄存器BP从堆栈中取出这些参数地址,并送寄存器,以便寄存器间接寻址方式访问所需变量。
4. 过程的重入。
保证子程序可重入性的方法,通常也是将每次调用子程序时所用到的参数和中间结果逐层压入堆栈,以达到每次调用的结果都能正确保存的目的。
5. 过程的嵌套、递归的调用。
过程嵌套的层次是没有限制的,只要堆栈空间允许即可,但当嵌套层次较多时,应特别注意寄存器内容的保护和恢复,以免发生冲突。
6.1.7 宏指令、宏定义、宏调用
宏定义的格式为:
宏指令名 MACRO(形式参数)
┆
ENDM
其调用的格式为:宏指令名(实际参数)
当具有宏指令调用的源程序被汇编时,每个宏调用将被MASM进行宏展开。
宏展开实际上是用宏定义时设计的宏体去代替相应的宏指令名,并且用实际参数一一取代形式参数。