微机原理8086汇编语言
- 格式:docx
- 大小:37.34 KB
- 文档页数:3
据寄存器分为:AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据.BH&BL=BX(base):基址寄存器,常用于地址索引;CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器.DH&DL=DX(data):数据寄存器,常用于数据传递。
他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。
这2组8位寄存器可以分别寻址,并单独使用。
另一组是指针寄存器和变址寄存器,包括:SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置;BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。
指令指针IP(Instruction Pointer)标志寄存器FR(Flag Register)OF(overflow flag)DF(direction flag)CF(carrier flag)PF(parity flag)AF(auxiliary flag)ZF(zero flag)SF(sign flag)IF(interrupt flag)TF(trap flag)段寄存器(Segment Register)为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。
微机原理实验报告实验一 8086CPU系统寻址方式和汇编语言程序设计一、实验目的1. 掌握 8086CPU 系统的逻辑地址和寻址方式;2. 掌握 8086CPU 系统中机器数的表示方式;3. 掌握指令的机器码表示方法;4. 掌握 TPC-USB 集成开发环境程序设计和调试方法;5. 掌握汇编语言实现具体算法的方式,区分汇编语言与高级语言的编程风格二、实验内容1. 写出在 TPC-USB 环境下汇编语言程序设计步骤;①点击工具栏中“新建”按钮,在编辑框输入程序代码,保存为一个以“.asm”结尾的汇编源文件。
②点击工具栏“编译+链接”按钮,若程序有错则返回修改代码,若没有错误,则编译链接成功,形成两个以“.obj”结尾的目标文件和以“.exe”结尾的可执行文件。
③点击工具栏“调试”按钮,在弹出的框中选择“Continue and don’t ask again”,执行“连续运行”或“单步运行”或“跳过”,在执行此步骤前可设置断点。
通过寄存器窗口、反汇编窗口、内存窗口查看相应内容。
2. 汇编语言程序设计和调试实验1)源程序:CODE SEGMENTASSUME CS:CODESTART:MOV AX,8086HMOV BX,6808HADD AX,BXMOV CX,AXPUSH CXPOP DXL1:JMP L1CODE ENDSEND START2)反汇编结果:3)单步执行每条指令后对应寄存器的变化值:START:MOV AX,8086H ; AX:0×00000FE6 ——>0×00008086IP: 0×00000000 ——>0×00000003MOV BX,6808H ;BX: 0×000008FEA——>0×00006808IP: 0×00000003 ——>0×00000006ADD AX,BX ; AX:0×00008086 ——>0×0000E88EIP: 0×00000006 ——>0×00000008FLAGS: 0×00007202——>0×00007286MOV CX,AX ; C X: 0×000C0000 ——>0×000CE88EIP: 0×00000008 ——>0×00000000PUSH CX ; SP:0×0000FFFE ——>0×0000FFFCIP: 0×00000000 ——>0×0000000BPOP DX ; SP:0×0000FFFC ——>0×0000FFFED X: 0×00002002 ——>0×0000E88EIP: 0×0000000B ——>0×0000000C3. 编程设计实验(一)内存中现有 X 和 Y 两个存储单元,分别存有 42 和-43,利用汇编语言编程计算这两个数之和,并将结果放入 SUM 单元;1) 程序流程图:开始X=42Y=-43将数据段DATA的首地址送到DSAL=XAL=AL+YSUM=AL结束2)源程序:DATA SEGMENTX DB42Y DB -43SUM DB ? ;?用来占位DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX;DATA的数据送到DSMOV AL,XADD AL,YMOV SUM,ALLOOP:JMP LOOPCODE ENDSEND START3)内存结果(DS)4)反汇编结果:4. 编程设计实验(二)数据段中的一个存储单元 X 中存放的数据为 10H,编程实现将该存储单元中的数据循环左移四位后存放到数据段的另一个存储单元 Y 中。
8086指令系统分为以下6组:⒈数据传送指令⒉算术指令⒊逻辑指令⒋串处理指令⒌控制转移指令⒍处理机控制指令数据传送指令数据传送指令的功能是把数据、地址传送到寄存器或存储器单元中。
它分为4类。
⑴通用数据传送指令⑵累加器专用传送指令MOV 传送IN 输入PUSH进栈OUT 输出POP 出栈XLAT换码XCHG交换⑶地址传送指令⑷标志寄存器传送指令LEA有效地址送寄存器LAHF标志送AHLDS指针送寄存器和DS SAHF AH送标志寄存器LES 指针送寄存器和ES PUSHF 标志进栈POPF标志出栈1 通用数据传送指令MOV dst, src;传送指令(move)执行操作:(dst) ← (src)功能:将源操作数(字节或字)传送到目的地址。
注意:●目的操作数dst和源操作数src不能同时用存储器寻址方式,这个限制适用于所有指令;● 目的操作数dst不能是CS,也不能用立即数方式;● 目的操作数dst和源操作数src不允许同时为段寄存器;● MOV指令不影响标志位。
PUSH src ; 进栈指令(push onto the stack)执行操作:(SP) ← (SP)-2((SP)) ← (src)POP dst ; 出栈指令(pop from the stack)执行操作:(dst) ← ((SP))(SP) ← (SP)+2PUSH和POP指令分别将数据存入堆栈或把堆栈中的数据取出。
堆栈是以LIFO(后进先出)方式工作的一个存储区,程序中定义的堆栈段就是这样一个LIFO存储区。
数据存入堆栈单元或从堆栈单元中取出都由堆栈指针SP指示,而SP总是指向栈顶,所以进栈和出栈指令都会自动修改SP。
PUSH指令执行时,SP的内容先减2,然后将数据压入SP所指示的字单元,存储的方法同样是高8位存入高地址字节,低8位存入低地址字节。
POP指令执行时,将SP所指示的栈顶地址的内容取出放入目的地址,然后SP增2,指向新的栈顶地址。
8086汇编语言8086汇编语言是一种用于编写Intel 8086微处理器的程序的低级语言。
它是x86指令集的最早版本,是现代PC上使用的汇编语言的基础。
本文将介绍8086汇编语言的基本概念、指令系统、程序格式、程序设计方法和应用实例,以帮助读者掌握这门古老而强大的语言。
什么是8086汇编语言8086汇编语言是一种用助记符表示机器指令的语言,它可以直接操作CPU、寄存器、内存和端口等硬件资源。
8086汇编语言的优点是执行速度快、占用空间少、控制能力强,缺点是可读性差、可移植性差、编程难度大。
8086汇编语言的程序由三个部分组成:伪指令、指令和数据。
伪指令是用来告诉汇编程序如何处理源程序的命令,如定义变量、分配内存、设置段属性等。
指令是用来控制CPU执行操作的命令,如数据传送、算术运算、逻辑运算、控制转移等。
数据是用来存储或操作的信息,如常数、变量、字符串等。
8086汇编语言的程序需要经过汇编程序(如MASM)将源代码转换为机器代码,然后再由链接程序(如LINK)将多个目标模块连接成可执行文件,最后由加载程序(如DOS)将可执行文件加载到内存中运行。
8086微处理器8086微处理器是Intel公司于1978年推出的一款16位微处理器,它是x86系列微处理器的第一代产品,也是IBM PC机的原始CPU。
它具有以下特点:工作频率为5MHz~10MHz,每秒可执行约33万条指令内部结构由总线接口单元(BIU)和执行单元(EU)组成,实现了取指和执行的并行操作寄存器由四个16位通用寄存器(AX, BX, CX, DX)、四个16位段寄存器(CS, DS, SS, ES)、一个16位标志寄存器(FLAGS)和一个16位指令指针(IP)组成指令系统由100多条指令组成,分为数据传送类、算术运算类、位操作类、控制转移类和处理机控制类五大类存储器管理采用了分段机制,每个段最大为64KB,总容量为1MB支持两种工作模式:实地址模式和保护模式,实地址模式下可以直接访问物理地址,保护模式下可以实现多任务和内存保护8086汇编语言程序格式8086汇编语言程序一般采用以下格式:[段名] segment [段属性][伪指令][数据][子程序][段名] ends其中:段名是用来标识一个段的名称,可以自定义,但不能与伪指令或寄存器重名段属性是用来设置一个段的类型和特征,如代码段(code)、数据段(data)、堆栈段(stack)等伪指令是用来定义变量、分配内存、设置偏移量等功能的命令,如DB, DW, DD, ORG, ASSUME等数据是用来存储或操作的信息,如常数、变量、字符串等子程序是用来实现特定功能的代码段,如输入输出、排序、查找等一个典型的8086汇编语言程序由以下三个段组成:数据段(data segment):用来存放程序中用到的数据,如变量、常量、字符串等代码段(code segment):用来存放程序中的指令,如数据传送、算术运算、控制转移等堆栈段(stack segment):用来存放程序中的临时数据,如函数调用时的参数、返回地址、局部变量等一个简单的8086汇编语言程序示例如下:data segmentmsg db 'Hello, world!', '$' ;定义一个字符串变量data endscode segmentassume cs:code, ds:data ;告诉汇编程序代码段和数据段的名称start: ;程序入口标号mov ax, data ;将数据段地址加载到ax寄存器mov ds, ax ;将ax寄存器的值传送到ds寄存器,设置数据段寄存器mov dx, offset msg ;将字符串变量的偏移地址加载到dx寄存器mov ah, 9 ;设置ah寄存器为9,表示调用DOS中断的输出字符串功能int 21h ;调用DOS中断21h,输出字符串mov ah, 4ch ;设置ah寄存器为4ch,表示调用DOS中断的退出程序功能int 21h ;调用DOS中断21h,退出程序code endsend start ;告诉汇编程序程序结束的位置8086汇编语言指令系统8086汇编语言指令系统由100多条指令组成,分为五大类:数据传送类:用来实现数据在寄存器、内存和端口之间的传送,如MOV, PUSH, POP, XCHG等算术运算类:用来实现数据的加减乘除等运算,如ADD, SUB, MUL, DIV等位操作类:用来实现数据的位移、旋转、逻辑和测试等操作,如SHL, SHR, ROL, ROR, AND, OR, XOR, NOT, TEST等控制转移类:用来实现程序的顺序、条件和无条件跳转,如JMP, JZ, JNZ, JCXZ, CALL, RET等处理机控制类:用来实现处理机状态的设置和查询,如CLC, STC, CMC, CLD, STD, CLI, STI等每条指令由助记符和操作数组成,助记符表示指令的功能,操作数表示指令的对象。
第一章1.微机采用总线结构有什么好处?总线一般分为哪三组信号?使用总线的特点是什么?好处:组态灵活,扩展方便三组信号线:数据总线,地址总线,控制总线特点:在某一时刻,只能有一个总线主控设备来控制系统总线,只能有一个发送者向总线发送信号;但可以有多个设备从总线上同时获得信号。
第二章1.8086/8088CPU两大组成模块EU、BIU,功能及相互关系总线接口部件(BIU)功能:负责从存储器预取指令和数据以及所有EU需要的总线操作,实现CPU与存储器和外设之间信息传递。
BIU根据执行单元EU的请求完成CPU与存储器或IO设备之间的数据传送;执行部件(EU)功能:控制和执行指令,从指令队列中取出指令,对指令进行译码。
发出相应的传送数据或算术的控制信号接受由总线接口部件传送来的数据或把数据传送到总线接口部件进行算术运算。
2.8086/8088CPU 寄存器及用法8086/8088CPU 共有14 个十六位寄存器,分别为:通用寄存器8 个,控制寄存器2个,段寄存器4 个。
通用寄存器有:数据寄存器:AX、BX、CX、DX ;用来存放计算的结果和操作数变址寄存器:SI、DI ;用于存储器变址寻址方式时提供地址指针寄存器:BP、SP;用于指向堆栈段中的数据单元指令指针寄存器:IP;用来指示当前指令在代码段的偏移位置标志寄存器:FLAGS ;用于反映指令执行结果或控制指令执行形式3.标志寄存器中各标志位的功能状态标志CF――进位标志:当运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,即CF=1;否则CF=0ZF――零标志:若运算结果为0,则ZF=1;否则ZF=0 SF――符号标志:运算结果的最高有效位就是符号标志的状态。
即,运算结果最高位为1,则SF=1;否则SF=0PF――奇偶标志:当运算结果最低字节中“ 1 ”的个数为零或偶数时,PF=1; 否则PF=0(PF只反映最低8位)OF――溢出标志:若算术运算的结果有溢出,则OF=1;否则OF=0 AF 辅助进位标志控制标志DF――方向标志:如果设置DF=O每次串操作后的存储器地址就自动增加,若为0则每次串操作后的存储器地址就自动减少IF --- 中断允许标志:IF=1则允许中断;若为0则禁止中断TF --- 陷阱标志(单步标志):TF=1处理器单步执行指令:即处理器在每条指令执行结束时,产生一个编号为1 的内部中断。
微机原理8086汇编语言
微机原理和8086汇编语言是计算机科学与技术领域中的重要基础知识,对于理解计算机的运行原理和编程开发具有关键作用。
本文将全面介绍微机原理和8086汇编语言的基本概念、功能特点以及应用实践。
一、微机原理概述
微机原理是指微型计算机的构成、工作原理、体系结构和外围设备等的基本原理。
微机由中央处理器(CPU)、存储器和输入输出设备等组成,其内部实现了数据的存储和处理,并能够与外部环境进行交互。
微机原理的研究与应用对于计算机硬件的设计和控制至关重要。
二、8086汇编语言介绍
8086汇编语言是在微机原理基础上发展起来的一种低级程序设计语言。
它以机器指令的形式直接对CPU发出控制命令,实现数据处理和操作。
8086汇编语言具有直观、高效的特点,可以对计算机内部各种硬件资源进行精细控制,实现复杂的算法和功能。
三、8086汇编语言的基本语法
8086汇编语言的基本语法包括指令、寻址方式和操作数等。
指令通常由操作码和操作数组成,用于执行特定的操作。
寻址方式指定操作数在内存中的位置,可以是直接寻址、寄存器间接寻址、立即数寻址等多种方式。
操作数表示要进行操作的数据,可以是寄存器、内存单元或立即数。
四、8086汇编语言的常用指令
8086汇编语言提供了丰富的指令集,包括数据传输指令、算术运算指令、逻辑运算指令、条件转移指令、无条件转移指令等。
通过这些指令的组合和调用,可以实现各种复杂的功能和处理需求。
五、8086汇编语言的应用实践
8086汇编语言广泛应用于嵌入式系统设计、驱动程序开发、操作系统编程以及性能优化等领域。
在嵌入式领域,汇编语言可以直接操作硬件资源,实现高效的数据处理和控制;在操作系统编程中,汇编语言可以直接访问操作系统内核,实现底层功能的扩展和优化。
六、8086汇编语言的优势与不足
8086汇编语言具有高效、灵活的优势,可以直接操作硬件资源和内存,实现高性能的程序。
然而,汇编语言的开发和调试困难,可读性低,维护成本高,对程序员的要求较高。
七、8086汇编语言的未来发展趋势
随着计算机科学与技术的不断发展,汇编语言作为低级别的编程语言,逐渐被高级语言所取代。
然而,在嵌入式系统和底层优化领域,汇编语言仍然具有重要地位和应用前景。
结论
微机原理8086汇编语言是近代计算机科学与技术的基础之一,对于理解计算机的运行原理和实现高效的编程开发具有关键作用。
通过
本文的介绍,读者可以对微机原理和8086汇编语言有一个初步的认识,并对其应用实践和未来发展趋势有一定了解。
在今后的学习和工作中,我们应该深入掌握这些知识,不断提升自己的技术水平。