8086 总汇编语言子程序程序设计
8086指令系统及汇编语言程序设计
![8086指令系统及汇编语言程序设计](https://img.taocdn.com/s3/m/48054c6e0166f5335a8102d276a20029bc64634f.png)
8086指令系统及汇编语言程序设计8086指令系统是指Intel 8086微处理器所支持的一套机器指令。
8086微处理器是Intel于1978年推出的一款16位微处理器,其指令系统设计清晰简洁,具有良好的可编程性和灵活性。
汇编语言程序设计则是使用汇编语言编写程序,通过汇编器将汇编语言转化为可执行文件的过程。
8086指令系统共有十六个16位的通用寄存器,包括AX、BX、CX和DX四个通用寄存器,在实模式下这些寄存器也可以拆分为两个8位的寄存器AH、AL、BH、BL、CH、CL、DH和DL。
另外,还有SP、BP、SI和DI四个指针寄存器,以及CS、DS、ES和SS四个段寄存器等。
这些寄存器提供了程序在内存中存储和访问数据的能力。
8086指令系统中的指令可以分为数据传输指令、算术指令、逻辑指令和控制指令等几个类别。
数据传输指令可以将数据从寄存器传输到寄存器、从存储器传输到寄存器,或者从寄存器传输到存储器等。
算术指令包括加法、减法、乘法、除法等运算指令。
逻辑指令可以执行与、或、非、异或等逻辑运算。
控制指令可以控制程序的执行流程,例如条件跳转、循环等。
汇编语言程序设计是通过使用汇编语言编写程序来实现特定功能。
汇编语言程序由一系列指令组成,每条指令由操作码和操作数组成。
操作码表示需要执行的操作,操作数则是参与操作的数据。
编写汇编语言程序需要熟悉8086指令系统的指令格式和功能,以及寄存器的使用方法。
汇编语言程序设计的开发流程包括分析问题、编写算法、编写程序、汇编和调试等步骤。
在开始编写程序之前,需要先分析问题,并根据问题需求设计算法。
然后根据算法编写汇编语言程序,并通过汇编器将其转化为机器码。
最后,通过调试工具进行程序的调试和测试,确保程序的正确性和可靠性。
总之,8086指令系统及汇编语言程序设计是一门用于编写底层程序的技术。
通过学习和掌握8086指令系统和汇编语言程序设计,可以编写高效、优化的程序,并深入了解计算机系统的底层运行原理。
8086 总汇编语言子程序程序设计
![8086 总汇编语言子程序程序设计](https://img.taocdn.com/s3/m/a13968bf5901020206409c92.png)
汇编语言程序设计实验报告学院:计算机科学与技术专业:计算机科学与技术班级:计科131POP SIPOP CXPOP AXRETPROADD ENDPARY DW 1,2,3,4,5,6,7,8,9,10COUNT DW 10SUM DW ?TABLE DW 3 DUP(?)CODE ENDSEND MAIN使用相应的文本编辑器建立文件LAB5.asm,容如上所示。
二. 生成可执行文件:1.汇编:C:\masm> masm lab5;2.连接:C:\masm> link lab5;三. 请写出此程序中的变量ary,count,sum 的EA,并判断此程序的功能:四. 用debug 调试此程序时,第一条指令的段EA 是多少?此程序数据段偏移地址为0 的字单元数据为多少?其对应的机器指令是什么?-L ;加载程序文件lab5.exe-R ;查看IP 与CS 寄存器的容-D DS:0 ;查看当前数据段偏移地址为0 的字单元数据-U ;查看机器指令实验二:编写一个子程序,实现在屏幕的指定位置,用指定颜色,显示一个用0 结尾的字符串源程序如下data segmentstr db 'display string',0data endscode segmentassume cs:code,ds:datastart:mov ax,datapush ax ; 结果的商,也就是最后要放在dx中的mov ax, bx ; dx为 rem(H/N) * 65536, 为高16位,ax为低16位,再进行一次除法运算div cx ; ax 为商——最后结果的低16位,dx为余数——为最后结果,应赋给cxmov cx, dxpop dxretcode endsend start实验结果实验一:变量ary,count,sum 的EA分别是00140,00154,00156此程序的功能是数列求和实验二:实验三:实验总结这次实验,感觉难度最大的就是做2个子程序的设计,在网上向好友请教了N回!还犯了一些低级的错误,如将16位的寄存器的容传送到字符型数字串里去,这很明显是不对的,在逆序时寄存器的高16位会直接把正常的数字字符冲掉,还有就是将当我直接将字型单元的容传送字型单元时,编译器会报错,不过提示是它后面的指令错误。
8086汇编语言程序设计——第一个程序
![8086汇编语言程序设计——第一个程序](https://img.taocdn.com/s3/m/b442f032492fb4daa58da0116c175f0e7cd11978.png)
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,这就是断点(所谓断点,就是程序执⾏到该处停下来不再继续)。
8086语言顺序程序设计
![8086语言顺序程序设计](https://img.taocdn.com/s3/m/146d47fcf021dd36a32d7375a417866fb84ac0dc.png)
8086语言顺序程序设计8086是Intel8086微处理器的型号,它采用x86命令集,是早期个人计算机的重要组成部分。
8086语言顺序程序设计是使用8086汇编语言进行程序设计的过程,它是一种低级编程语言,通过直接控制计算机硬件来完成特定任务。
1.寻址方式在8086语言顺序程序设计中,可以使用多种寻址方式来访问内存数据,例如直接寻址、寄存器间接寻址、寄存器相对寻址等。
其中,直接寻址和寄存器间接寻址是使用最为广泛的,直接寻址通过给出内存地址来访问数据,寄存器间接寻址通过给出寄存器中存放的地址来访问数据。
2.数据传送数据传送是编程中最基本的操作之一、8086提供了多条数据传送指令,可以将数据从一个地方传送到另一个地方。
常用的数据传送指令有MOV、XCHG等。
MOV指令可以将一个数据从源操作数传送到目的操作数,XCHG指令可以交换两个操作数的值。
3.算术运算8086提供了多条算术运算指令,可以进行加法、减法、乘法和除法等运算。
例如,ADD指令可以用于两个操作数的加法运算,SUB指令可以用于两个操作数的减法运算,MUL指令可以用于两个操作数的乘法运算,DIV指令可以用于两个操作数的除法运算。
4.逻辑运算8086还提供了多条逻辑运算指令,可以进行与、或、非、异或等逻辑运算。
例如,AND指令可以用于两个操作数的与运算,OR指令可以用于两个操作数的或运算,NOT指令可以用于对一个操作数进行非运算,XOR指令可以用于两个操作数的异或运算。
5.循环循环是程序中常用的结构之一,8086提供了多条循环指令,可以根据特定条件来重复执行一些程序片段。
常用的循环指令有LOOP、LOOPE/LOOPZ、LOOPNE/LOOPNZ等。
其中,LOOP指令可以根据CX寄存器的值来自动减1并跳转到指定的标号处。
6.过程过程是一组有关联的指令的集合,适用于在程序中被反复调用的任务。
8086提供了CALL和RET指令,可以实现过程的调用和返回。
第4章8086,8088微机汇编语言程序设计
![第4章8086,8088微机汇编语言程序设计](https://img.taocdn.com/s3/m/43d916cc0508763231121275.png)
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
8086汇编语言程序设计的基本方法 共24页
![8086汇编语言程序设计的基本方法 共24页](https://img.taocdn.com/s3/m/8621c524a8114431b90dd869.png)
–
MOV CX,AX
;计算X*Y
;用CX存储结果低 位
IDIV W MOV AH,4CH INT 21H CODE ENDS END START
–
MOV BX,DX
;用BX存储结果高位
–
MOV AX,Z
;计算X*Y+Z
第5章 汇编语言程序设计
• 例3 把非压缩十进制数DAT1转换为压缩十进制数。
第5章 汇编语言程序设计
例题
• 例7 把从BUF单元开始的80个16位无符号数按从大到小的顺 序排列。
第5章 汇编语言程序设计
例题
• 例4-26 把从BUF单元开始的80个16位无符号数按从大到小的
顺序排列。
LOOP2:MOV AX,[SI]
DSEG SEGMENT
BUF DW 80 DUP(?)
SSEG SEGMENT STACK STK DB 20 DUP (0) SSEG ENDS
第5章 汇编语言程序设计
DSEG SEGMENT ARG DW 7138H,84A6H,29EH MAX DW ? DESG ENDS CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,SS:SSEG FMAX:MOV AX,DSEG
AL←X
AL≥0? Y N
Y←-1
AL=0 Y N
Y←1
Y←0
结束
实现符号函数程序的流程图
第5章 汇编语言程序设计
编写程序如下: DSEG SEGMENT
VARX DB -25 VARY DB ? DSEG ENDS CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG START: MOV AX, DSEG
第九讲 8086汇编语言程序设计(3)
![第九讲 8086汇编语言程序设计(3)](https://img.taocdn.com/s3/m/dd7a4e047cd184254b353572.png)
•第四章 8086/8088汇编语言程序设计
• 图 4 . 1 顺 序 运 算 程 序 流 程 图
•第四章 8086/8088汇编语言程序设计 源程序如下: DATA SEGMENT X DW 200
EXIT: MOV AH,4CH
END
START
•第四章 8086/8088汇编语言程序设计
例4.4:试编一程序,求三个带符号字数据中的最大值,并 将最大值存入MAX字单元中。 设三个带符号数分别在三个字变量X、Y、Z中存储。 程序流程图如下图所示
例4.4程 序流程图
•第四章 8086/8088汇编语言程序设计
Y
Z V
DW
DW DW
100
3000 10000
W DW
2 DUP(?)
DATA ENDS STACK SEGMENT PARA STACK ’STACK’ DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACK
•第四章 8086/8088汇编语言程序设计 START:MOV AX,DATA MOV MOV DS,AX AX,X ;DATA→AX
•第四章 8086/8088汇编语言程序设计 程序如下: DATA SEGMENT DATA1 DB 80 DUP(?);学生成绩 DATA2 DB 5 DUP(0);为统计结果留出存储单元 DATA ENDS ; CODE SEGMENT ASSUME DS:DATA,CS:CODE START:MOV AX,DATA MOV DS,AX MOV CX,80 LEA SI,DATA1 LEA DI,DATA2
8086 汇编语言顺序程序设计
![8086 汇编语言顺序程序设计](https://img.taocdn.com/s3/m/7450d0b1856a561252d36fca.png)
汇编语言程序设计实验报告学院: 计算机科学与技术学院专业: 计算机科学与技术班级:计科131MOV AX,WORD PTR N1MOV DX,WORD PTR N1+2MOV CX,WORD PTR N2MOV BX,WORD PTR N2+2ADD AX,CXADC DX,BXMOV WORD PTR N3,AXMOV WORD PTR N3+2,DXMOV AH,4CHINT 21HCODE ENDSEND START使用相应的文本编辑器建立文件two、asm,内容如上所示。
二、生成可执行文件:1、汇编:C:\masm> masm two;2、连接:C:\masm> link two;三、运行及调试:1、运行:C:\masm>debug two、exe-U0 ;通过反汇编查找程序的断点-T=0 2 ;加载数据段-D0 ;查瞧原始数据就是否正确-G=0 1F ;运行程序至断点1F 处-D0 ;查瞧程序运行结果2、调试:若要判断此程序对于其它32 位数相加就是否正确,则需要使用DEBUG 进行程序调试。
实验二:编程实现:将从2000H 单元开始的连续128 个单元的内容进行清零一. 编程CODE SEGMENTASSUME CS:CODE,DS:CODESTART:MOV BX,2000HMOV CX,128MOV AL,00HL1:MOV [BX],ALINC BXLOOP L1MOV AH,4CHINT 21HCODE ENDSEND START二.使用编辑器建立源程序文件four、asm。
三.生成可执行文件:1、汇编:C:\masm> masm four;2、连接:C:\masm> link four;四、运行及调试:1、运行:C:\masm>debug four、exe-D2000;-R;-D CS:2000;-G;-D2000;实验三:编程实现:将3000H 单元的一个字节的内容进行拆分,高半字节放进3001H 单元的低半部分,其低半字节放进3002H 单元的低半部分一、编程源程序:DATA SEGMENTN0 DW 3000HN1 DW 3001HN2 DW 3002HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV BX,N0AND BX,0FHMOV AX,N2MOV AX,[BX]MOV BX,N0MOV CL,4SHR AX,CLMOV AX,N1MOV AX,[BX]MOV AH,4CHINT 21HCODE ENDSEND START二.使用编辑器建立源程序文件five、asm。
第4章 8086汇编语言程序设计
![第4章 8086汇编语言程序设计](https://img.taocdn.com/s3/m/bb8e463d964bcf84b9d57bec.png)
汇编语言源程序的特点(续)
每个汇编源程序需要一个启动标号
汇编语言源程序需要一个启动标号作为程序开 始执行时目标代码的入口地址。启动标号可以 按照汇编语言的标号命名规则由程序员自己定 义。常用的启动标号有START、BEGIN等。
加入适当注释,可以提高程序的可读性
为了提高程序的可读性,可以在汇编语句后以 分号“;”为起始标志,加入注释。
第4章 8086汇编语言程序设计
本章主要内容
1 汇编语言基础知识 汇编语言的伪指令 系统功能调用
2 3
4.1 汇编语言基础知识
4.1.1概述 4.1.2汇编源程序的结构 4.1.3汇编语言的语句 4.1.4汇编语言的数据 4.1.5汇编语言的操作符与表达式
4.1.1概述
汇编语言(Assembly Language)是介于机器语 言和高级语言之间的计算机语言,是一种用符号 表示的面向机器的程序设计语言。 它比机器语言易于阅读、编写和修改,又比高级 语言运行速度快,能充分利用计算机的硬件资源 ,占用内存空间少。 汇编语言常用于计算机控制系统的开发和高级语 言编译程序的编制等应用场合。采用不同CPU的 计算机有不同的汇编语言。
3.移位操作符
移位操作符有两个:SHL和SHR,按位操作 ,只适用于数值表达式。 移位操作符的用法如下: 数值表达式 SHL 移动位数n 数值表达式 SHR 移动位数n 汇编程序将把数字表达式的值左移(SHL) 或右移(SHR)n位。当n>15时,结果为0。
(2)用DOS功能调用4CH返回
在用户程序中不定义过程段,删除上述程 序的第7行、第9行~第11行和第18行指令 ,把原第17行的RET指令换成下面两条指令 : MOV AH,4CH INT 21H INT 21H指令是DOS向用户提供服务程序的 窗口。
8086 汇编语言分支程序设计
![8086 汇编语言分支程序设计](https://img.taocdn.com/s3/m/99f115cb76a20029bd642d8c.png)
汇编语言程序设计实验报告学院:计算机科学与技术专业:计算机科学与技术班级:计科131MOV AH,2INT 21H ;显示高位ASCII 码MOV DL,BLAND DL,0FHCMP DL,9JBE NEXT2ADD DL,7NEXT2: ADD DL,30HMOV AH,2INT 21H ;显示低位ASCII 码MOV AH,4CHINT 21HCODE ENDS ;返回DOSEND START使用相应的文本编辑器建立文件three.asm,内容如上所示。
2.生成可执行文件:1>.汇编:C:\masm> masm three;2>.连接:C:\masm> link three;3.运行及调试:1>. 运行:C:\masm>debug three.exe-U0 ;通过反汇编查找程序的断点-T=0 2 ;加载数据段-D0 ;查看原始数据是否正确-G=0 XX ;运行程序至断点XX 处-R ;查看程序运行结果以上命令执行的细节可参照实验二中的说明。
4.调试:修改AL 的内容,判断此程序是否能正确显示其中的内容的方法。
例:修改AL 内容为9AH:-L ;重新加载可执行文件-A0 ;重新修改MOV AL,3EH 指令361E:0000 MOV AL,9A361E:0002-G=0 xx;带断点运行-R ;查看程序运行结果实验二:编写一个数据区移动程序,要考虑源数据区与目的数据区有重叠的情况。
1.源程序如下所示,编辑下面的源程序到文件lab.asm 中:使用相应的文本编辑器建立文件lab.asm,内容如上所示。
2.生成可执行文件:1>.汇编:C:\masm> masm lab;2>.连接:C:\masm> link lab;N1:INC NUMBERJMP NUMBERJMP AGAINN2:INC CHARJMP AGAINEXIT:LEA DX,STR1MOV AH,09HINT 21HMOV DL,NUMBERADD DL,30HMOV AH,2INT 21HLEA DX,STR2MOV AH,09HINT 21HMOV DL,CHARADD DL,30HMOV AH,2INT 21HLEA DX,STR3MOV AH,09HINT 21HMOV DL,RESTADD DL,30HMOV AH,2INT 21HMOV AH,4CHINT 21HCODE ENDSEND START使用相应的文本编辑器建立文件lab1.asm,内容如上所示。
第四章:8086汇编语言程序设计
![第四章:8086汇编语言程序设计](https://img.taocdn.com/s3/m/b7991e36f111f18583d05a24.png)
第 4章
汇编语言程序设计
汇编语言程序设计
(2)尽量采用循环结构和子程序 (2)尽量采用循环结构和子程序 采用循环结构和子程序可以使程序的长度减少、 采用循环结构和子程序可以使程序的长度减少、 占用内存空间减少。 占用内存空间减少。 多重循环,注意各重循环的初值和循环结束条件, 多重循环,注意各重循环的初值和循环结束条件, 死循环”现象; 避免出现 “死循环”现象; 通用的子程序, 通用的子程序,除了用于存放子程序入口参数的寄 存器外, 存器外,子程序中用到的其它寄存器的内容应压入堆栈 进行现场保护, 进行现场保护,并要特别注意堆栈操作的压入和弹出的 平衡; 平衡; 中断处理子程序除了要保护程序中用到的寄存器外, 中断处理子程序除了要保护程序中用到的寄存器外, 还应保护标志寄存器。 还应保护标志寄存器。
1、汇编语言的语句格式
汇编语言源程序是由汇编语句(即指令)组成的。 汇编语言源程序是由汇编语句(即指令)组成的。 汇编语言一般由四部分组成。 汇编语言一般由四部分组成。
其典型的汇编语句格式: 其典型的汇编语句格式: 标号: 标号:操作码
例如: 例如: START: START:MOV AL,30H AL,30H ;(AL)=30H (AL)=30H 30
第 4章
汇编语言程序设计
汇编语言程序设计
经过任务分析、算法优化后, 经过任务分析、算法优化后, 在微型机上使用编 首先, 首先,要对单片机应用 就可以进行程序的总体构思, 就可以进行程序的总体构思, 辑软件编写源程序, 辑软件编写源程序, 系统预完成的任务进行 确定程序的结构和数据形式, 确定程序的结构和数据形式, 在使用交叉汇编的 深入的分析, 深入的分析,明确系统 并考虑资源的分配和参数的 方法对源程序进行 的设计任务、 的设计任务、功能要求 计算等。 计算等。然后根据程序运行 汇编, 汇编,然后采用串 和技术指标。其次, 和技术指标。其次,要 的过程, 的过程,勾画出程序执行的 算法是解决具体问题 行通信的方法, 行通信的方法,把 对系统的硬件资源和工 逻辑顺序, 。同一个问题 逻辑顺序,用图形符号将总 的方法。 的方法 汇编得到的目标程 作环境进行分析。 ,, 作环境进行分析。这是 体设计思路及程序流向绘制 的算法可以有多种, 的算法可以有多种 序传送到单片机内, 序传送到单片机内 单片机应用系统程序设 在平面图上, 在平面图上,从而使程序的 结果也可能不尽相同, 结果也可能不尽相同, 并进行程序运行和 计的基础和条件 结构关系直观明了, 结构关系直观明了,便于检 所以, 调试 所以,应对各种算法 查和修改。 查和修改。 进行分析比较,并进 进行分析比较, 行合理的优化
第5章8086汇编语言程序设计
![第5章8086汇编语言程序设计](https://img.taocdn.com/s3/m/239809ff195f312b3169a5ab.png)
DO
SUM=SUM+I I=I+1 WHILE I>10
第5章 分支与循环程序设计
循环程序结构
第5章 分支与循环程序设计
设计循环结构程序时,要注意的问题: 选用计数循环还是条件循环? 采用直到型循环结构还是当型循环结构? 要综合考虑循环执行的条件和循环退出的条 件: 可以用循环次数、计数器、标志位、变量 值等多种方式来作为循环的控制条件 特别注意: 不要把初始化部分放到循环体中。 循环体中要有能改变循环条件的语句。
第5章 分支与循环程序设计
【例5-4】(续)
MOV AX,-3 CMP AX,0 JGE ISNN LEA DX,N MOV AH,9 INT 21H JMP FINISH
第5章 分支与循环程序设计
【例5-4】(续)
ISNN: LEA DX,NN MOV AH,9 INT 21H MOV AH,4CH INT 21H ENDS END START
第5章 分支与循环程序设计
ISPN: ISZN:
【例5-5】(续)
FINISH: MOV AH,4CH INT 21H CODE ENDS END START 本例实现的是多分支结构。 设计多分支结构程序时,应注意:
要为每个分支安排出口; 各分支的公共部分尽量集中,以减少程序代码; 无条件转移没有范围的限制,但条件转移指令只能在 -128~+127字节范围内转移; 调试程序时,要对每个分支进行调试。
第5章 分支与循环程序设计
第5章 分支与循环程序设计
【例5-7】(续)
CODE SEGMENT ASSUME CS:CODE START: MOV AX,DATA MOV DS,AX MOV BX,20 MOV CX,16 ; 计数器CX,置初值16 NEXTCHAR: ROL BX,1 ;显示顺序是从左往右, MOV DL,BL ;要显示的值仅占最低位D0 AND DL,1 ;清除D7~D1 OR DL,30H MOV AH,2 INT 21H ;利用2号DOS调用显示 LOOP NEXTCHAR ;循环执行16次 FINISH: MOV DL,'B' MOV AH,2 INT 21H ;利用2号DOS调用,显示'B‘ MOV AH,4CH INT 21H ; 返回操作系统 CODE ENDS END START
8086-汇编语言分支程序设计
![8086-汇编语言分支程序设计](https://img.taocdn.com/s3/m/14888066a1c7aa00b42acba4.png)
汇编语言程序设计实验报告学院:计算机科学与技术专业:计算机科学与技术班级:计科131MOV AH,2INT 21H ;显示高位ASCII 码MOV DL,BLAND DL,0FHCMP DL,9JBE NEXT2ADD DL,7NEXT2: ADD DL,30HMOV AH,2INT 21H ;显示低位ASCII 码MOV AH,4CHINT 21HCODE ENDS ;返回DOSEND START使用相应的文本编辑器建立文件three.asm,内容如上所示。
2.生成可执行文件:1>.汇编:C:\masm> masm three;2>.连接:C:\masm> link three;3.运行及调试:1>. 运行:C:\masm>debug three.exe-U0 ;通过反汇编查找程序的断点-T=0 2 ;加载数据段-D0 ;查看原始数据是否正确-G=0 XX ;运行程序至断点XX 处-R ;查看程序运行结果以上命令执行的细节可参照实验二中的说明。
4.调试:修改AL 的内容,判断此程序是否能正确显示其中的内容的方法。
例:修改AL 内容为9AH:-L ;重新加载可执行文件-A0 ;重新修改MOV AL,3EH 指令361E:0000 MOV AL,9A361E:0002-G=0 xx;带断点运行-R ;查看程序运行结果实验二:编写一个数据区移动程序,要考虑源数据区与目的数据区有重叠的情况。
1.源程序如下所示,编辑下面的源程序到文件lab.asm 中:使用相应的文本编辑器建立文件lab.asm,内容如上所示。
2.生成可执行文件:1>.汇编:C:\masm> masm lab;2>.连接:C:\masm> link lab;。
8086指令系统及汇编语言程序设计
![8086指令系统及汇编语言程序设计](https://img.taocdn.com/s3/m/a8244acb690203d8ce2f0066f5335a8103d26657.png)
8086指令系统及汇编语言程序设计8086指令系统是指8086微处理器能够支持和执行的一系列指令。
8086微处理器是Intel公司于1978年推出的一款16位微处理器,是一个革命性的产品,为个人计算机的发展奠定了基础。
8086微处理器采用的是复杂指令集(CISC)架构,其指令系统非常丰富,共有近1000条指令,能够完成各种复杂的计算和操作。
8086指令系统主要分为数据传输指令、算术运算指令、逻辑运算指令、移位指令、控制转移指令等几类。
数据传输指令主要用于数据在寄存器和存储器之间的传输,其中包括直接传输和间接传输两种方式。
算术运算指令用于执行各种加减乘除运算,包括有符号数和无符号数的运算。
逻辑运算指令用于执行逻辑操作,如与、或、异或等。
移位指令用于对数据进行位移操作,包括左移、右移等。
控制转移指令用于改变程序的执行顺序,包括无条件跳转、条件跳转等。
在汇编语言程序设计中,我们使用汇编语言来编写针对8086微处理器的程序。
汇编语言是一种低级编程语言,与机器语言直接对应,使用助记符代表机器指令。
汇编语言程序通过汇编器进行编译,生成可执行的机器码文件。
编写汇编语言程序的过程一般包括以下几个步骤:设计程序的逻辑结构、确定程序的算法、编写汇编语言源程序、进行程序调试、优化程序性能。
汇编语言程序设计可以用于解决各种计算机软件和硬件问题。
它可以用来编写底层驱动程序、操作系统、嵌入式系统等,也可以用来进行系统调试和性能优化。
总而言之,8086指令系统及汇编语言程序设计是计算机科学领域中重要的内容。
了解8086指令系统和掌握汇编语言程序设计对于理解计算机底层原理和解决一些底层问题非常有帮助。
同时,汇编语言程序设计也是一门艺术,通过编写高效的汇编语言程序,可以提高计算机的性能和响应速度。
8086汇编语言程序设计的基本方法
![8086汇编语言程序设计的基本方法](https://img.taocdn.com/s3/m/3350947411661ed9ad51f01dc281e53a58025191.png)
8086汇编语言程序设计的基本方法8086汇编语言程序设计是一种低级编程语言,广泛应用于计算机系统的底层硬件控制与操作。
其基本方法包括程序结构设计、数据传输与处理、条件和循环控制以及输入输出等方面。
下面将对这些基本方法进行详细描述,以便更好地理解8086汇编语言程序设计。
1.程序结构设计:在8086汇编语言程序的设计中,程序结构是基本的骨架。
程序的结构应根据具体应用的需求来设计,一般包括程序的初始化、主程序(或主循环)、子程序(过程或函数)以及程序的结束等部分。
通过嵌套使用循环和条件控制语句,可以灵活地控制程序的流程,实现复杂的逻辑功能。
2.数据传输与处理:8086汇编语言提供了多种数据传输和处理指令,用于在寄存器和内存之间传输数据,以及对数据进行各种运算和处理。
常用的数据传输指令包括MOV(将数据从一个位置复制到另一个位置)、LEA(加载有效地址)、PUSH(将数据压入栈中)以及POP(将数据从栈中弹出)等。
数据处理的指令包括运算指令(如ADD、SUB、MUL、DIV等)和逻辑指令(AND、OR、NOT、XOR等),可以对数据进行加减乘除、位运算以及逻辑运算等操作。
3.条件和循环控制:条件和循环控制是在程序中实现有选择地执行一些代码块或多次执行一些代码块的关键部分。
8086汇编语言提供了多种条件和循环控制指令,如CMP(比较操作数)、JE(等于则跳转)、JNE(不等于则跳转)、JG(大于则跳转)、JL(小于则跳转)等。
通过这些指令的灵活运用,可以实现条件判断和循环控制的功能,从而实现复杂的逻辑操作。
4.输入输出:在8086汇编语言程序设计中,输入输出是与外部设备进行交互的重要环节。
输入输出可以通过中断机制来实现,其中INT21H是最常用的中断类型,可用于键盘输入、屏幕输出、磁盘文件读写等。
通过相应的系统调用,可以从用户获取输入数据,并将结果输出到屏幕或其他设备上。
此外,还可以使用IN和OUT指令直接与输入输出端口进行数据传输,实现与设备的硬件交互。
8086汇编语言程序设计
![8086汇编语言程序设计](https://img.taocdn.com/s3/m/d1c11d5554270722192e453610661ed9ac515557.png)
8086汇编语言程序设计
(1)汇编语言介绍
汇编语言(简称汇编)是一种低级语言,它能够与计算机硬件的指令
指令很好地接轨,是一种可靠的,有效的,灵活的编程语言。
主要用于编
写微型机,微处理器,单片机及PC机的程序。
汇编器是汇编语言的翻译器,它将高级语言(如C、C++等)翻译为机器语言指令,以达到执行程
序源代码的目的。
汇编语言程序设计(Assembly Language Programming)是以汇编语
言编写程序以满足特定应用的过程。
它主要用于写微机、微处理器等的控
制程序和系统程序,具有立即计算,快速反应,低耗能,成本低廉的优点。
(2)汇编语言编程
汇编语言编程主要是为了让CPU以机器语言运行,编程时可使用指令
集合或者标准指令。
根据指令可以让CPU执行计算机的功能,原理上看,
汇编语言编程是一种字节操作。
汇编程序编程需要使用CPU的指令集,这些指令可以被用来控制CPU
执行。
指令集又可分为实指令集和抽象指令集。
对于不同的CPU,他们的
指令集也是不一样的,因此需要根据CPU的不同选择合适的指令集。
在汇编语言编程中,常见的指令有加法,减法,乘法,除法,移位,
现行,条件转移等等。
第04章8086汇编语言程序设计
![第04章8086汇编语言程序设计](https://img.taocdn.com/s3/m/d1063523bd64783e09122bab.png)
4.2.5 结束语句
格式:END 常数或表达式
功能:该语句标志整个程序的结束,是源程序的 最后一条语句。
4.3 8086汇编语言中的运算符
4.3.1 常用运算符和操作符
+(加)、-(减)、*(乘)、/(除)、 MOD(求余)。
1、算术运算符
2、逻辑运算符 AND、OR、XOR、NOT
3、关系运算符 EQ(相等)、NE(不等、)、 LT(小于)、GT(大于)、 LE(小于等于)、GE(大于等于)。 关系成立,全1 关系不成立,全0 例: MOV DL , 10H LT 16 ; MOV DL,0 例: AND AX , 555 GT 222 ; AND AX,0FFFFH
存储器操作数的三种属性: 段值属性(SEGMENT):存储器操作数的段起始地 址,此值必须在一个段寄存器中,而标号的段则总 是在CS寄存器中。 段内偏移量属性(OFFSET):代表从段起始地址到该 操作数所在位置之间的字节数。等于当前地址计数 器(可用$表示)的值。 类型属性(Type):表示变量占用存储单元的字节 数。用DB定义的变量类型属性为字节;用DW定义 的变量类型属性为字(2B);用DD定义的变量类 型属性为双字(4B)。指出标号在本段内还是在其 他段中引用,段内称NEAR,指针长度为2字节;段 间FAR,4字节。
4、复制操作 复制操作符DUP(Duplication)可预置重复的数值 n DUP (表达式) 例4:ALL_ZERO DB 0,0,0,0,0 用复制操作可改为: ALL_ZERO DB 5 DUP(0) 为若干重复数据单元分配存储单元。
4.2.3 段定义语句 1、段定义语句格式:
段名 段名 SEGMENT …… ENDS [定位类型] [组合类型] [‘类别’]
微机原理8086汇编语言程序设计
![微机原理8086汇编语言程序设计](https://img.taocdn.com/s3/m/5eac1028700abb68a882fb87.png)
;这是一个乘10子程序
;使用寄存器AX
;入口:AX,出口:AX
proc far
push bx
;保护现场
pushf
add ax,ax
;2ax
功
mov bx,ax
;2ax ?bx
能
add ax,ax
;4ax
程
add ax,ax
;8ax
序
add ax,bx
;10ax
段
popf
;恢复现场
pop bx
ret
endp
第四章 8086汇编语言程序设计
? 几个概念 ? 8086汇编语言的语句 ? 8086汇编中的伪指令 ? 8086汇编中的运算符 ? 汇编语言程序设计 ? 宏定义与宏调用 ? 系统调用
几个概念
? 汇编语言 ? 汇编语言源程序 ? 汇编 ? 汇编程序
4.1 8086汇编语言的语句
汇编语言由指令性语句和指令性语句组成 ? 一、指令性语句格式
CODE SEGMENT
;定义代码段
ASSUME DS:DATA , CS: CODE
START: MOV AX , DATA
;初始化DS
MOV DS , AX
……
MOV AX , 4C00H ;返回DOS
INT 21H
CODE ENDS
;代码段结束
END START
;源程序结束
;段属性说明
? 特点 ? 程序分段 ? 语句由指令性和指示性语句组成 ? 两种程序框架
? 3、 ORG伪指令、地址计数器 $
ORG伪指令格式: ORG <表达式>
? 4、END 表示源代码结束 格式为: END 常数或表达式.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言程序设计实验报告
学院:计算机科学与技术专业:计算机科学与技术班级:计科131
二. 生成可执行文件:
1.汇编:
C:\masm> masm lab5;
2.连接:
C:\masm> link lab5;
三. 请写出此程序中的变量ary,count,sum 的EA,并判断此程序的功能:
四. 用debug 调试此程序时,第一条指令的段EA 是多少?此程序数据段偏移地址为0 的字单
元数据为多少?其对应的机器指令是什么?
-L ;加载程序文件lab5.exe
-R ;查看IP 与CS 寄存器的容
-D DS:0 ;查看当前数据段偏移地址为0 的字单元数据
-U ;查看机器指令
实验二:编写一个子程序,实现在屏幕的指定位置,用指定颜色,显示一个用0 结尾的字符串
源程序如下
data segment
str db 'display string',0
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov dh,8
mov dl,21
mov cl,3
; 参数:(ax) = 被除数dword型的低16位
; (dx) = 被除数dword型的高16位
; (cx) = 除数
; 返回:(dx) = 结果的高16位
; (ax) = 结果的低16位
; (cx) = 余数
divdw:
mov bx, ax ; 缓存ax——被除数的低16位
mov ax, dx ; ax = H,被除数的高16位
mov dx, 0
div cx ; ax 为商,dx为余数= rem(H/N) * 65536
push ax ; 结果的商,也就是最后要放在dx中的
mov ax, bx ; dx为rem(H/N) * 65536, 为高16位,ax为低16位,再进行一次除法运算 div cx ; ax 为商——最后结果的低16位,dx为余数——为最后结果,应赋给cx
mov cx, dx
pop dx
ret
code ends
end start
实验结果实验一:变量ary,count,sum 的EA分别是00140,00154,00156此程序的功能是数列求和
实验二:
实验三:
实
验
总
结
这次实验,感觉难度最大的就是做2个子程序的设计,在网上向好友请教了N回!
还犯了一些低级的错误,如将16位的寄存器的容传送到字符型数字串里去,这很明显是不对的,在逆序时寄存器的高16位会直接把正常的数字字符冲掉,还有就是将当我直接将字型单元的容传送字型单元时,编译器会报错,不过提示是它后面的指令错误。
转换后的数字串的末尾如果不是0的话,在调用输出子程序时会出现BUG,于是又在转换子程序里加了条指令,在第一次转换出来后,在数字串的末尾添加一个终止标志0。
指
导
教。