精华内容
下载资源
问答
  • 合肥工业大学汇编语言上机实验报告(全,完成版)2019版,含完整实现代码。 合肥工业大学汇编语言上机实验报告(全,完成版)2019版,含完整实现代码。 合肥工业大学汇编语言上机实验报告(全,完成版)2019版,含...
  • 合肥工业大学汇编语言实验报告一 一. 实验目的 1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。 2、掌握8086/8088的寻址方式及多字节数据的处理方法。 二. 实验内容 1、利用DEBUG程序中的“E”...
  • 1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。 2、掌握8086/8088的寻址方式及多字节数据的处理方法。 二. 实验内容 实验内容: 1、利用 DEBUG 程序中的“E”命令,将两个多字节数“12345678H”...
  •   感觉最困难的就是写汇编代码了,当时成功完美运行的时候兴奋的像当年第一次“Hello World”一样。且几乎所有关键之处都有注释。   需要的朋友自取: 链接:https://pan.baidu.com/s/1q4nVJ7aK4JEPQ-F6PH45RA ...

      感觉最困难的就是写汇编代码了,当时成功完美运行的时候兴奋的像当年第一次“Hello World”一样。且几乎所有关键之处都有注释。
      需要的朋友自取:

    链接:https://pan.baidu.com/s/1q4nVJ7aK4JEPQ-F6PH45RA
    提取码:n97j

    展开全文
  • 合肥工业大学汇编语言程序设计实验报告 内含实验内容和实验代码
  • 有关于微机原理及接口技术中的最重要部分之一的汇编语言程序设计,合肥工业大学上课课件
  • 合工大汇编语言考试复习.docx合工大汇编语言考试复习
  • 汇编语言实验总结合肥工业大学 计算机与信息学院 实验报告 课程:汇编语言程序设计 专业班级:计算机科学与技术13-1班 学号:XX 姓名:樊娇 实验一Debug程序的使用 一.实验目的 1、熟悉DEBUG程序中的命令,...

    汇编语言实验总结

    合肥工业大学  计算机与信息学院  实验报告  课程:汇编语言程序设计  专业班级:计算机科学与技术13-1班  学号:XX  姓名:樊娇  实验一Debug程序的使用  一.实验目的  1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。  2、掌握8086/8088的寻址方式及多字节数据的处理方法。  二.实验内容  1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。  2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。要求:  本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。  三.实验过程和程序  1、启动DOS操作系统  2、运行程序  C:>DEBUG↙  –;(“–”为DEBUG提示符,仅当屏幕出现该提示符后,才可输入DEBUG命令)  4、用“A”命令编辑和汇编源程序  –A↙  186E:0100MOVAX,[0200]↙  186E:0103MOVBX,[0202]↙  186E:0107ADDAX,[0204]↙  186E:010BADCBX,[0206]↙  186E:010FMOV[0208],AX↙  186E:0112MOV[020A],BX↙  186E:0116↙  5、用“U”命令反汇编验证源程序  –UCS:0100↙  186E:0100A10002MOVAX,[0200]  186E:01038B1E0202MOVBX,[0202]  186E:2ADDAX,[0204]  186E:010B131E0602ADCBX,[0206]  186E:010FA30802MOV[0208],AX  186E:E0A02MOV[020A],BX  186E:0116  –  6、程序未执行前,用“R”命令观察,相关寄存器的内容。  –R↙  如:=0000H,=0000H,=0000H,  ,=。  7、在程序未执行前,用“D”命令观察DS:0200H,DS:0204H、DS:0208H单元的内容  –DXX0B↙  8、用“G”命令运行源程序  –G=↙  9、再用“D”命令观察DS:0200H~DS:020BH字节单元中的内容–DXX0B↙  10、用“T”单步操作命令对源程序单步执行,观察AX、BX、CS、IP寄存  器内容的变化,并与预计的结果相比较。  实验结果分析  1、程序运行结果:=,DS:0208H四字节单元的内容:2、试用寄存器间接寻址方式编写程序段,完成上述程序段的功能。  一  二  实验一熟悉汇编语言程序调试环境及顺序程序设计  一、实验目的及要求:  1.学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。  2.学会使用EDIT、MASM、LINK、DEBUG等软件工具。  3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。  二、熟悉汇编语言程序调试环境  1.汇编语言源程序的建立  本例中给出的程序是要求从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。设定源程序的文件名为ABC。  DATASEGMENT  BUFDB23H,16H,08H,20H,64H,8AH,91H,35H,2BH,7FH  CNEQU$-BUF  DATAENDS  CODESEGMENT  ASSUMECS:CODE,DS:DATA  START:PUSHDS  XORAX,AX  PUSHAX  MOVAX,DATA  MOVDS,AX  MOVBX,OFFSETBUF  MOVCX,CN  DECCX  MOVAL,[BX]  INCBX  LP:CMPAL,[BX]  JBENEXT  MOVAL,[BX]  NEXT:INCBX  DECCX  JNZLP  MOVAH,4CH  INT21H  CODEENDS  ENDSTART  键入以下命令:  C:\>EDIT  此时屏幕的显示状态如图1所示。  1  图1用EDIT编辑程序窗口  程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。  2.将源程序文件汇编成目标程序文件  一般情况

    展开全文
  • 汇编语言程序设计

    2013-05-29 16:59:14
    汇编语言程序设计课后答案。主编:王庆生,合肥工业大学出版社
  • .,1,微型计算机原理及其应用——第四章:汇编语言程序设计,合肥工业大学计算机与信息学院,.,2,第四章:汇编语言程序设计,汇编语言的基本要素伪指令汇编语言程序设计,.,3,第四章:汇编语言程序设计,汇编语言的基本...

    .,1,微型计算机原理及其应用——第四章:汇编语言程序设计,合肥工业大学计算机与信息学院,.,2,第四章:汇编语言程序设计,汇编语言的基本要素伪指令汇编语言程序设计,.,3,第四章:汇编语言程序设计,汇编语言的基本要素伪指令汇编语言程序设计,.,4,第四章:汇编语言程序设计——汇编语言的基本要素,汇编语言的格式汇编语言中的常数汇编语言中的运算符和表达式,.,5,第四章:汇编语言程序设计——汇编语言的基本要素,汇编语言的格式汇编语言中的常数汇编语言中的运算符和表达式,.,6,第四章:汇编语言程序设计——汇编语言的基本要素,汇编语言的格式由汇编语言编写的源程序是由许多语句(也可称为汇编指令)组成的。每个语句由1~4个部分组成,其格式是:[标号]指令助记符[操作数][;注解]标识符:给指令或某一存储单元地址所起的名字。可由下列字符组成:字母:A~z;数字:0~9;特殊字符:?、、@、一、$。数字不能作标识符的第一个字符,而圆点仅能用作第一个字符。标识符最长为31个字符。当标识符后跟冒号时,表示是标号。它代表该行指令的起始地址;当标识符后不带冒号时,表示变量;伪指令前的标识符不加冒号。指令助记符:表示不同操作的指令,可以是8086的指令助记符,也可以是伪指令。操作数:指令执行的对象。依指令的要求,可能有一个、两个或者没有。注解:该项可有可无,是为源程序所加的注解,用于提高程序的可读性。,.,7,第四章:汇编语言程序设计——汇编语言的基本要素,汇编语言的格式汇编语言中的常数汇编语言中的运算符和表达式,.,8,第四章:汇编语言程序设计——汇编语言的基本要素,汇编语言中的常数汇编语言中的常数可以分数值常数和字符串常数两类。数值常数按其基数的不同,可有二进制数、八进制数、十进制数、十六进制数等几种不同的表示形式,汇编语言中采用不同的后缀加以区分。B:表示二进制数。例如,10100101B。D:表示十进制数。例如,278D或278。Q:表示八进制数。例如,567Q,263Q。H:表示十六进制数。例如,9AH,5678H。字符串常数是由单引号括起来的一串字符。例如:‘THISISASTUDENT!’‘12345’要指出的是,此处的’12345’其值并非是十进制数12345,而是代表它们所对应的ASCII码,即31H,32H,33H,34H,35H。,.,9,第四章:汇编语言程序设计——汇编语言的基本要素,汇编语言中的运算符和表达式在表达式中,运算符充当着重要的角色。8086宏汇编有算术运算符、逻辑运算符、关系运算符、数值回送操作符和属性操作符共5种。数值回送(Value_returning)操作符可以把一些特征或存储器地址的一部分作为数值回送。共有5个:SEG(求段基值)、OFFSET(求偏移量)、TYPE(求变量类型)、LENGTH(求字节数)和SIZE(求字节数)。其中LENGTH和SIZE只对数据存储器地址操作数有效。属性操作符可以用来建立和临时改变变量或标号的类型以及存储器操作数的存储单元类型,而忽略当前的属性。共有6个:PTR、段属性前缀、SHORT、THIS、HIGH和LOW。,.,10,第四章:汇编语言程序设计——汇编语言的基本要素,汇编语言中的运算符和表达式,.,11,第四章:汇编语言程序设计——汇编语言的基本要素,汇编语言中的运算符和表达式——数值回送操作符SEG运算符:利用运算符SEG可以得到一个标号或变量的段基址格式:SEG变量名或标号名例如:已知数据段DATA从存储器实际地址03000H开始,作如下定义后,用SEG运算符求变量所在的段基址。DATASEGMENT;定义数据段VAR1DB10H,18H,25H,34H;定义字节数据VAR2DW2300H,1200H;定义字数据VAR3DD11002200H,33004400H;定义双字数据DATAENDS;数据段结束MOVBX,SEGVAR1汇编成:MOVBX,0300HMOVCX,SEGVAR2汇编成:MOVCX,0300HMOVDX,SEGVAR3汇编成;MOVDX,0300H,.,12,第四章:汇编语言程序设计——汇编语言的基本要素,汇编语言中的运算符和表达式——数值回送操作符OFFSET运算符:利用运算符OFFSET可以得到一个标号或变量的偏移量。使用格式:OFFSET变量名或标号名DATASEGMENT;定义数据段VAR1DB10H,18H,25H,34H;定义字节数据VAR2DW2300H,1200H;定义字数据VAR3DD11002200H,33004400H;定义双字数据DATAENDS;数据段结束MOVBX,OFFSETVAR1汇编成:MOVBX,0000HMOVCX,OFFSETVAR2汇编成:MOVCX,0004HMOVDX,OFFSETVAR3汇编成:MOVDX,0008H,.,13,汇编语言中的运算符和表达式——数值回送操作符TYPE运算符:TYPE运算符可加在变量、结构或标号的前面,所求出的是这些存储器操作数的类型部分。运算符TYPE的运算结果是一个数值,这个数值与存储器操作数类型属性的对应关系。MOVBX,TYPEVAR1汇编成:MOVBX,1MOVCX,TYPEVAR2汇编成:MOVCX,2MOVDX,TYPEVAR3汇编成:MOVDX,4,第四章:汇编语言程序设计——汇编语言的基本要素,.,14,第四章:汇编语言程序设计——汇编语言的基本要素,汇编语言中的运算符和表达式——数值回送操作符LENGTH运算符:LENGTH运算符放在数组变量的前面,可以求出该数组中所包含的变量的个数。ARRAY1DB100DUP(?)ARRAY2DW10DUP(?)ARRAY3DD10DUP(?)下列指令:MOVBX,LENGTHARRAY1汇编后:MOVBX,100MOVCX,LENGTHARRAY2汇编后:MOVCX,10MOVDX,LENGTHARRAY3汇编后:MOVDX,10,.,15,第四章:汇编语言程序设计——汇编语言的基本要素,汇编语言中的运算符和表达式——数值回送操作符SIZE运算符:如果一个变量已经用重复操作符DUP加以说明,则利用SIZE运算符可以得到分配给该变量的字节总数。ARRAY1DB100DUP(?)ARRAY2DW10DUP(?)ARRAY3DD10DUP(?)下列指令:MOVBX,SIZEARRAY1汇编后:MOVBX,100MOVCX,SIZEARRAY2汇编后:MOVCX,20MOVDX,SIZEARRAY3汇编后:MOVDX,40,.,16,第四章:汇编语言程序设计——汇编语言的基本要素,汇编语言中的运算符和表达式——属性操作符PTR运算符:用来建立一个符号地址。其本身并不分配存储器,只是用来给已分配的存储器地址赋予另一种属性,使该地址具有另一种类型。VAR1DB10H,18H,25H,34HVAR2DW1223H,1200HMOVAX,WORDPTRVAR1执行后:AX=1810HMOVBL,BYTEPTRVAR2执行后:BL=23H,.,17,第四章:汇编语言程序设计,汇编语言的基本要素伪指令汇编语言程序设计,.,18,第四章:汇编语言程序设计——伪指令,伪指令用来对汇编程序进行控制,对程序中的数据实现条件转移、列表、存储空间分配等处理,其格式和汇编指令一样,但一般不产生目的代码,即不直接命令CPU去执行什么操作。亦即它不像机器指令那样是在程序运行期间由计算机来执行的,而是在汇编程序对源程序汇编期间由汇编程序处理的操作。,.,19,第四章:汇编语言程序设计——伪指令,定义数据伪指令符号定义伪指令段定义伪指令设定段寄存器伪指令定义过程的伪指令宏指令ORG伪指令汇编结束伪指令END,.,20,第四章:汇编语言程序设计——伪指令,定义数据伪指令符号定义伪指令段定义伪指令设定段寄存器伪指令定义过程的伪指令宏指令ORG伪指令汇编结束伪指令END,.,21,第四章:汇编语言程序设计——伪指令,定义数据伪指令该类伪指令用来定义存贮空间及其所存数据的长度。DB:定义字节,即每个数据是1个字节。DW:定义字,即每个数据占1个字(2个字节)。DD:定义双字,即每个数据占2个字。低字部分在低地址,高字部分在高地址。DQ:定义4字长,即每个数据占4个字。DT:定义10个字节长,用于压缩式十进制数据。例如:DATA1DB10H,6,78H,100表示从DATA1单元开始连续存放10H,6,78H,100,共占4个字节地址。,.,22,第四章:汇编语言程序设计——伪指令,定义数据伪指令DATA1DB20HDATA2DW0240H,1000HDATA3DB(-1*3),(15/5)DATA4DD12345HDATA5DB0123DATA6DWAB,C,DDATA7DB?DATA8DD?DATA9DB5DUP(00)DATA10DW3DUP(?),.,23,第四章:汇编语言程序设计——伪指令,定义数据伪指令符号定义伪指令段定义伪指令设定段寄存器伪指令定义过程的伪指令宏指令ORG伪指令汇编结束伪指令END,.,24,第四章:汇编语言程序设计——伪指令,符号定义伪指令EQU伪指令给符号定义一个值。在程序中,凡是出现该符号的地方,汇编时均用其值代替,如:COUNTEQU100;COUNT代替常数100SUMEQU30*25;SUM代替数值表达式CEQUCX;C代替寄存器CXMEQUMOV;M代替指令助记符MOV需要注意的是,一个符号一经EQU伪指令赋值后,在整个程序中,不允许再对同一符号重新赋值。,.,25,第四章:汇编语言程序设计——伪指令,定义数据伪指令符号定义伪指令段定义伪指令设定段寄存器伪指令定义过程的伪指令宏指令ORG伪指令汇编结束伪指令END,.,26,第四章:汇编语言程序设计——伪指令,段定义伪指令段定义伪指令的用途是在汇编语言程序中定义逻辑段,用它来指定段的名称和范围,并指明段的定位类型、组合类型及类别。常用的段定义为指令有SEGMENT和ENDS。段名SEGMENT[定位类型][组合类型][类别]…(段内语句系列)段名ENDS,.,27,第四章:汇编语言程序设计——伪指令,段定义伪指令DATA1SEGMENT┇DATA1ENDSSTACK1SEGMENTSTACK┇STACK1ENDSCODE1SEGMENTASSUMECS:CODE1,DS:DATA1,SS:STACK1MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AX┇CODE1ENDS,.,28,第四章:汇编语言程序设计——伪指令,定义数据伪指令符号定义伪指令段定义伪指令设定段寄存器伪指令定义过程的伪指令宏指令ORG伪指令汇编结束伪指令END,.,29,第四章:汇编语言程序设计——伪指令,设定段寄存器伪指令设定段寄存器伪指令用来通知汇编程序哪一个段寄存器是该段的段寄存器,以便对使用变量或标号的指令汇编出正确的目的代码。常用的段定义为指令有ASSUME。ASSUME段寄存器:段名[,段寄存器:段名,……]注意:由于ASSUME伪指令只指明某一个段地址应存于哪一个段寄存器中,并没有包含将段地址送入该寄存器的操作。因此要将真实段地址装入段寄存器还需用汇编指令来实现。这一步是不可缺少的。,.,30,第四章:汇编语言程序设计——伪指令,设定段寄存器伪指令DATA1SEGMENT┇DATA1ENDSSTACK1SEGMENTSTACK┇STACK1ENDSCODE1SEGMENTASSUMECS:CODE1,DS:DATA1,SS:STACK1MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AX┇CODE1ENDS,.,31,第四章:汇编语言程序设计——伪指令,定义数据伪指令符号定义伪指令段定义伪指令设定段寄存器伪指令定义过程的伪指令宏指令ORG伪指令汇编结束伪指令END,.,32,第四章:汇编语言程序设计——伪指令,定义过程伪指令在程序设计中,可将具有一定功能的程序段看成为一个过程(相当于一个子程序),它可以被别的程序调用。一个过程由伪指令PROC和ENDP来定义。过程名PROC[类型]过程体RET过程名ENDP其中过程名是为过程所起的名称,不能省略,过程的类型由FAR(远过程,为段间调用)和NEAR(近过程,在本段内调用)来确定,如果缺省类型,则该过程就默认为近过程。ENDP表示过程结束。过程体内至少应有一条RET指令,以便返回被调用处。过程可以嵌套,也可以递归使用。,.,33,第四章:汇编语言程序设计——伪指令,定义过程伪指令DELAYPROCMOVBL,10DELY:MOVCX,2801WAIT:LOOPWAITDECBLJNZDELYRETDELAYENDP,.,34,第四章:汇编语言程序设计——伪指令,定义数据伪指令符号定义伪指令段定义伪指令设定段寄存器伪指令定义过程的伪指令宏指令ORG伪指令汇编结束伪指令END,.,35,第四章:汇编语言程序设计——伪指令,宏指令在汇编语言书写的源程序中,若有的程序段要多次使用,为了简化程序书写,该程序段可以用一条宏指令来代替,而汇编程序汇编到该宏指令时,仍会产生源程序所需的代码。宏指令的一般格式为:宏指令名MACRO[形式参量表]宏体ENDM例如:SHIFTMACROMOVCL,4SALAL,ClENDM,.,36,第四章:汇编语言程序设计——伪指令,定义数据伪指令符号定义伪指令段定义伪指令设定段寄存器伪指令定义过程的伪指令宏指令ORG伪指令汇编结束伪指令END,.,37,第四章:汇编语言程序设计——伪指令,ORG伪指令ORG伪指令规定了在某一段内,程序或数据代码存放的起始偏移地址。一般格式:ORG例如:DATASEGMENTBUFF1DB23,56H,‘EOF’ORG2000HBUFF2DB‘STRING’DATAENDS,.,38,第四章:汇编语言程序设计——伪指令,定义数据伪指令符号定义伪指令段定义伪指令设定段寄存器伪指令定义过程的伪指令宏指令ORG伪指令汇编结束伪指令END,.,39,第四章:汇编语言程序设计——伪指令,汇编结束伪指令END该伪指令表示源程序的结束.令汇编程序停止汇编。因此,任何一个完整的源程序均应有END指令。一般格式:END[表达式]其中表达式表示该汇编程序的启动地址。例如:ENDSTART;表明该程序的启动地址为START。,.,40,第四章:汇编语言程序设计,汇编语言的基本要素伪指令汇编语言程序设计,.,41,第四章:汇编语言程序设计——汇编语言程序设计,汇编语言程序设计概述顺序程序设计选择程序设计循环程序设计子程序设计,.,42,第四章:汇编语言程序设计——汇编语言程序设计,汇编语言程序设计概述顺序程序设计选择程序设计循环程序设计子程序设计,.,43,第四章:汇编语言程序设计——汇编语言程序设计,汇编语言程序设计概述1.编写源程序在弄清问题的要求,确定方案后,汇编语言程序设计者便可依据前面的指令系统和汇编语言的规定,逐个模块地编写汇编语言源程序。2.源程序输入微型机在编辑软件EDIT.EXE或其他编辑软件的支持下,将源程序输入到计算机中。通常,汇编语言源程序的扩展名为ASM。3.汇编利用汇编程序(或宏汇编程序)(ASM或MASM)对汇编语言源程序进行汇编,产生扩展名为OBJ的可重定位的目的代码。4.连接利用连接程序(LINK)可将一个或多个扩展名为OBJ文件进行连接,生成扩展名为扩展名为EXE的可执行文件。5.调试对于稍大一些的程序来说,经过上述步骤所获得的.EXE可执行文件,在运行过程中难免无错。调试汇编程序最常用的工具是动态调试程序DEBUG。,.,44,第四章:汇编语言程序设计——汇编语言程序设计,汇编语言程序设计概述,.,45,第四章:汇编语言程序设计——汇编语言程序设计,汇编语言程序设计概述顺序程序设计选择程序设计循环程序设计子程序设计,.,46,第四章:汇编语言程序设计——汇编语言程序设计,顺序程序设计对于一些简单的数据处理,只要把完成处理的各个步骤用汇编语言描述清楚,让计算机按指令编写的次序从头到尾一条条执行即可,这样的程序结构称为顺序结构。【例4-1】已知X和Y是数据段中的两个无符号字节单元,用程序完成表达式Z=(X2+Y2)/2的计算。,.,47,第四章:汇编语言程序设计——汇编语言程序设计,顺序程序设计DATASEGMENTXDB15YDB34ZDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX;初始化数据段MOVAL,X;X中的内容送ALMULAL;计算XXMOVBX,AX;XX乘积送BXMOVAL,Y;Y中的内容送ALMULAL;计算YYADDAX,BX;计算X2+Y2SHRAX,1;计算(X2+Y2)/2MOVZ,AX;结果送Z单元MOVAH,4CHINT21H;返回DOSCODEENDSENDSTART;汇编结束,.,48,第四章:汇编语言程序设计——汇编语言程序设计,顺序程序设计【例4-2】从键盘读入两个一位数(按键时保证按下的是数字键),显示它们的积。先后从键盘上读取两个按键,分别减去30H得到它们对应的数值,然后相乘分解成十位数字与个位数字,转换成ASCⅡ码后依次输出即可。为了输入输出效果的直观,有必要在每次按键后回车换行。CODESEGMENTASSUMECS:CODEMAIN:MOVAH,1INT21H;读入第1个数字MOVBL,AL;保存在BL中MOVAH,2MOVDL,13INT21H;回车MOVDL,10INT21H;换行MOVAH,1INT21H;读入第2个数字SUBAL,30H;第2个数字转换成十进制数SUBBL,30H;第1个数字转换成十进制数MULBL;两个数相乘,积在AX中,.,49,第四章:汇编语言程序设计——汇编语言程序设计,顺序程序设计MOVBL,10;DIVBL;积除以10取商送AL,余数在AH中ADDAX,3030H;转换成相应的ASCⅡ码MOVBX,AX;保存在BX中MOVAH,2MOVDL,13INT21H;回车MOVDL,10INT21H;换行MOVDL,BLMOVAH,2INT21H;输出十位数MOVDL,BHINT21H;输出个位数MOVAH,4CHINT21H;返回DOSCODEENDSENDMAIN;程序结束,.,50,第四章:汇编语言程序设计——汇编语言程序设计,汇编语言程序设计概述顺序程序设计选择程序设计循环程序设计子程序设计,.,51,第四章:汇编语言程序设计——汇编语言程序设计,选择程序设计选择程序是利用条件转移指令,使程序执行到某一指令后,根据条件是否满足,来改变程序执行的次序。在程序设计中经常会遇到各种判断和比较,例如“相等”和“不相等”;“正”和“负”;“大于”和“小于”;“满足条件”和“不满足条件”等等,这些判断和比较在程序中都可以组成各种不同的逻辑框,并产生相应的分支程序。,.,52,第四章:汇编语言程序设计——汇编语言程序设计,选择程序设计1当X>0【例4-3】符号函数Y=0当X=0(-128≤X≤+127)-1当X<0设任意给定的X存放在XX单元,计算出函数Y值要求存放在YY单元。,,.,53,第四章:汇编语言程序设计——汇编语言程序设计,选择程序设计,.,54,第四章:汇编语言程序设计——汇编语言程序设计,汇编语言程序设计概述顺序程序设计选择程序设计循环程序设计子程序设计,.,55,第四章:汇编语言程序设计——汇编语言程序设计,循环程序设计循环程序是强制CPU重复执行某一指令系列的一种程序结构形式,它可以使许多重复工作的程序大为简化,而且减少内存空间。被重复执行的部分称作循环体,要想把循环体多次执行,就必须在循环体的前后有相应的指令实现循环控制。循环程序一般由4部分组成:初始化、循环体、循环控制和循环结束处理。,.,56,第四章:汇编语言程序设计——汇编语言程序设计,循环程序设计【例4-4】现将以AREA1为首地址的100个字节数据搬移到以AREA2为首地址的内存中去。,.,57,第四章:汇编语言程序设计——汇编语言程序设计,循环程序设计【例4-5】若有一串无符号数,放在NUM开始的单元中,要求编制汇编语言程序,将其中的最大值找出来,且放到存储单元MAX中,这串数的长度已存放在COUNT单元。DATASEGMENTCOUNTDW20NUMDW7,9,12,14,1,3,28,55,121,44,15,45,34,67,87,90,32,43,59,60MAXDW?DATAENDSSTACKSEGMENTPARASTACK‘STACK’DB20DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKMAINPROCFARPUSHDSMOVAX,0PUSHAX,.,58,第四章:汇编语言程序设计——汇编语言程序设计,循环程序设计MOVAX,DATAMOVDS,AXMOVBX,OFFSETNUMMOVCX,COUNTMOVAX,[BX]INCBXINCBXLOOP1:CMPAX,[BX]JAELOOP2MOVAX,[BX]LOOP2:INCBXINCBXDECCXJNZLOOP1MOV[MAX],AXRETMAINENDPCODEENDSENDMAIN,.,59,第四章:汇编语言程序设计——汇编语言程序设计,循环程序设计【例4-6】设计一个100ms的软件延时程序。采用多重循环程序,内循环完成10ms的延时,外层循环10次即可。,CODESENGMETASSUMECS:CODESTART:MOVDL,10DELAY1:MOVCX,2800HDELAY2:LOOPDELAY2DECDLJNZDELAY1MOVAH,4CHINT21HCODEENDSENDSTART,.,60,第四章:汇编语言程序设计——汇编语言程序设计,汇编语言程序设计概述顺序程序设计选择程序设计循环程序设计子程序设计,.,61,第四章:汇编语言程序设计——汇编语言程序设计,子程序设计——格式和调用子程序名PROC类型指令序列子程序名ENDP子程序调用与子程序返回由CALL和RET指令实现。子程序调用方式有近程调用、远程调用、直接调用和间接调用。,.,62,第四章:汇编语言程序设计——汇编语言程序设计,子程序设计——保护现场和恢复现场利用指令PUSH保护现场,利用指令POP恢复现场。例如:SUB1PROCNEARPUSHAX保护现场PUSHBXPUSHCXPUSHDX┇┇POPDX恢复现场POPCXPOPBXPOPAXRETSUB1ENDP,.,63,第四章:汇编语言程序设计——汇编语言程序设计,子程序设计——参数传递方法利用寄存器:这是一种最常见方法,把所需传递的参数直接放在主程序的寄存器中传递给子程序。利用存储单元:这种参数传递方法,把所需传递的参数直接放在子程序调用指令代码之后。利用堆栈:这种方法将参数压入堆栈,在子程序运行时从堆栈中取参数。,.,64,第四章:汇编语言程序设计——汇编语言程序设计,子程序设计【例4-7】编制程序两个6字节数相加。将一个字节相加的程序段设计为子程序。主程序分3次调用该子程序,但每次调用的参数不同。DATASEGMENTMYADD1DB0FEH,86H,7CH,35H,68H,77HMYADD2DB45H,0BCH,7DH,6AH,87H,90HSUMDB6DUP(0)COUNTDB6DATAENDSSTACKSEGMENTDB100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKMADD:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVSI,OFFSETMYADD1MOVDI,OFFSETMYADD2MOVBX,OFFSETSUM,.,65,第四章:汇编语言程序设计——汇编语言程序设计,子程序设计MOVCX,COUNT;循环初值为6CLCAGAIN:CALLSUBADD;调用子程序LOOPAGAIN;循环调用6次MOVAX,4C00HINT21H;子程序入口参数:SI,DI,BX出口参数:SI,DI,BXSUBADDPROC;完成一个字节相加PUSHAX;保护AX的值MOVAL,[SI];SI是一个源操作数指针ADCAL,[DI];DI是另一个源操作数指针MOV[BX],AL;BX是结果操作数指针INCSIINCDIINCBXPOPAX;恢复AX的值RETSUBADDENDPCODEENDSENDMADD,.,66,第四章:汇编语言程序设计——总结,了解汇编的概念及其方法,掌握汇编程序的基本格式,常用运算符的使用方法,汇编的步骤。,

    展开阅读全文

    展开全文
  • Debug程序的使用;汇编语言程序设计(顺序、循环);汇编语言子程序设计(分支、子程序);汇编语言高级编程专题
  • 2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。 二. 实验内容 1、X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。试编写汇编语言程序完成以下功能: ①计算表达式值...
  • 实验二 汇编语言程序设计(顺序、多分支、循环) 一.实验目的 二.实验内容 三.实验过程和程序 四.实验结果(包括必要的截图) 五.实验体会 注:模仿是最深的爱慕 实验二 汇编语言程序设计(顺序、多分支、循环)...

                   

    目录

                     实验二  汇编语言程序设计(顺序、多分支、循环)

    一. 实验目的

    二. 实验内容

    三. 实验过程和程序

    四. 实验结果(包括必要的截图)

    五.实验体会

    注:模仿是最深的爱慕


     实验二  汇编语言程序设计(顺序、多分支、循环)

     

    一. 实验目的

      1、掌握顺序和循环程序结构和设计方法;

      2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。

    二. 实验内容

      1、X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。试编写汇编语言程序完成以下功能:

      ①计算表达式值(V–(X*Y+Z-720))/X;

      ②将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。

      2、使用地址表实现如下功能:根据输入的数字1-7,分别显示相应的英文星期名,如果输入其他字符,则重新输入。

      3、求一个班50名学生成绩的平均值、最大值和最小值,并将结果显示出来。

      4、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串;查找中间是否有‘masm’子串。如果有,输出‘Yes’;否则,输出‘No’)。 

    三. 实验过程和程序

    ;the source code of the Exp 2.1
    stack   segment stack
            db 512 dup(?)
    stack   ends
    
    data    segment
            inputX db "input x:",0ah,0dh,'$'
            inputY db "input y:",0ah,0dh,'$'
            inputZ db "input z:",0ah,0dh,'$'
            inputV db "input v:",0ah,0dh,'$'
        
            x dw 0
            y dw 0
            z dw 0
            v dw 0
            sum1 dw 0
            sum2 dw 0
        
            input db 8
            db 1 dup(?)
            db 8 dup(?)
            sign db 0
            outputSum1 db "sum1:",0ah,0dh,'$'
            outputSum2 db "sum2:",0ah,0dh,'$'
    data    ends
    
    code    segment 'code'
            assume cs: code, ds: data, ss: stack
    start:
            mov ax, data
            mov ds, ax
            mov ax, stack
            mov ss, ax
    	
            mov ah, 09h
            lea dx, inputX
            int 21h
            call readInt
            mov word ptr [x], ax
    	
            mov ah, 09h
            lea dx, inputY
            int 21h
            call readInt
            mov word ptr [y], ax
    	
            mov ah, 09h
            lea dx, inputZ
            int 21h
            call readInt
            mov word ptr [z], ax
    	
            mov ah, 09h
            lea dx, inputV
            int 21h
            call readInt
            mov word ptr [v], ax
    	
            mov ax, [x]
            mov bx, [y]
            imul bx         ; x*y
            add ax, [z]     ; x*y+z
            sub ax, 720     ; x*y+z-720
            mov bx, [v]
            sub bx, ax      ; v-(x*y+z-720)
            mov ax, bx      
            cwd
            mov bx, [x]     
            idiv bx          ; (v-(x*y+z-720))/x
            mov [sum1], ax
            mov [sum2], dx
    	
            lea dx, outputSum1
            mov ah, 09h
            int 21h
    	
            mov ax, [sum1]
            call prinIint
    	
            mov dl, 0ah
            mov ah, 02h
            int 21h
    	
            mov dl, 0dh
            mov ah, 02h
            int 21h
    	
            lea dx, outputSum2
            mov ah, 09h
            int 21h
    	
            mov ax, [sum2]
            call prinIint
    	
            mov ah, 4ch
            int 21h
    readInt:
            pushf
            push bx
            push cx
            push dx
            push si
    	
            lea dx, input
            mov ah, 0ah
            int 21h
    	
            mov dl, 0ah
            mov ah, 02h
            int 21h
    	
            mov dl, 0dh
            mov ah, 02h
            int 21h
    	
            mov ax, 0
            xor cx, cx
            mov cl, [input+1]
            lea si, [input+2]
            mov byte ptr [sign], 0
            cmp byte ptr[si], '-'
            jnz next1
            inc si
            dec cx
            mov byte ptr [sign], 1
    next1:
            mov ax, 0
    loop1:
            mov bx, 10
            mul bx
            xor bx, bx
            mov bl, [si]
            sub bl, '0'
            add ax, bx
            inc si
            loop loop1
    	
            cmp byte ptr [sign], 1
            jnz next2
            xor bx, bx
            sub bx, ax
            mov ax, bx
    	
    next2:
            pop si
            pop dx
            pop cx
            pop bx
            popf
            ret
    prinIint:
            pushf
            push bx
            push cx
            push dx
            push si
    	
            mov si, ax
            cmp ax, 0
            jge skip2
            mov dl, '-'
            mov ah, 02h
            int 21h
            mov ax, 0
            sub ax, si
    skip2:
            cmp ax, 0
            jne skip1
            push ax
            mov cx, 1
            jmp next3_end
    skip1:
            mov cx, 0
    next3:
            cmp ax, 0
            je next3_end
            mov dl, 10
            div dl
            xor bx, bx
            mov bl,ah
            push bx
            mov ah, 0
            inc cx
            jmp next3
    	
    next3_end:
            xor dx, dx
            pop dx
            add dl, 48
            mov ah, 02h
            int 21h
            loop next3_end
            pop si
            pop dx
            pop cx
            pop bx
            popf
            ret
    	
    code ends
            end start

     

    ;the source code of the Exp 2.2
    stack   segment stack
            db 512 dup(?)
    stack   ends
    
    data    segment
            address dw l1, l2, l3, l4, l5, l6, l7
            s1 db 'Monday $'
            s2 db 'Tuesday $'
            s3 db 'Wednesday $'
            s4 db 'Thursday$'
            s5 db 'Friday$'
            s6 db 'Startday$'
            s7 db 'Sunday$'
            input db 'Please input a number between 1 to 7:',0ah,0dh,'$'
    data    ends
            
    code    segment 'code'
            assume cs: code, ds: data, ss: stack
    start:  
            mov ax, data
            mov ds, ax
            mov ax, stack
            mov ss, ax
    start1: 
            lea dx, input
            mov ah, 09h
            int 21h
    	
            mov ah, 01h
            int 21h
    	
            mov bl, al
    	
            mov dl, 0ah
            mov ah, 02h
            int 21h
    	
            mov dl, 0dh
            mov ah, 02h
            int 21h
    	
            mov al, bl
            sub al, '0'
            cmp al, 1
    	
    	
            jb start1
            cmp al,7
            ja start1
    	
            dec al
            mov ah, 0
            mov bx,ax
            shl bx, 1
            jmp address[bx]
    
    l1:
            lea dx,s1
            jmp s
    l2:
            lea dx, s2
            jmp s
    l3:
            lea dx, s3    
            jmp s
    l4:
            lea dx, s4
            jmp s
    l5:
            lea dx, s5
            jmp s
    l6:
            lea dx, s6
            jmp s
    l7:
            lea dx, s7
    s:
            mov ah, 09h
            int 21h
    	
            mov dl, 0ah
            mov ah, 02h
            int 21h
    	
            mov dl, 0dh
            mov ah, 02h
            int 21h
       
            mov ah, 4ch
            int 21h
    
    code ends
            end start

     

    ;the source code of the Exp 2.3
    stack   segment stack
            db 512 dup(?)
    stack   ends
    
    data    segment
            inputMSG db "input:", 0ah, 0dh, '$'
            max dw 0
            min dw 100
            average dw 0
            input db 8
            db 1 dup(?)
            db 8 dup(?)
            sign db 0
            output1 db "average:", 0ah, 0dh, '$'
            output2 db "max:", 0ah, 0dh, '$'
            output3 db "min:", 0ah, 0dh, '$'
    data    ends
    
    code    segment 'code'
            assume cs: code, ds: data, ss: stack
    start:
            mov ax, data
            mov ds, ax
    	
            mov cx, 50
    L1:
            lea dx, inputMSG
            mov ah, 09h
            int 21h
            call readInt
            cmp ax, [max]
            jg max1
            jmp skip11
    max1:
            mov [max], ax
    skip11:
            cmp [min], ax
            jg min1
            jmp skip22
    min1:
            mov [min], ax
    skip22:
            add [average], ax
            loop L1
    	
            mov ax, [average]
            cwd
            mov bx, 50
            idiv bx
            mov [average], ax
    	
            lea dx, output1
            mov ah, 09h
            int 21h
    	
            mov ax, [average]
            call printInt
    	
            mov dl, 0ah
            mov ah, 02h
            int 21h
    	
            mov dl, 0dh
            mov ah, 02h
            int 21h
    	
            lea dx, output2
            mov ah, 09h
            int 21h
    	
            mov ax, [max]
            call printInt
    	
            mov dl, 0ah
            mov ah, 02h
            int 21h
    	
            mov dl, 0dh
            mov ah, 02h
            int 21h
    	
            lea dx, output3
            mov ah, 09h
            int 21h
    	
            mov ax, [min]
            call printInt
    	
            mov ah, 4ch
            int 21h
    readInt:
            pushf
            push bx
            push cx
            push dx
            push si
    	
            lea dx, input
            mov ah, 0ah
            int 21h
    	
            mov dl, 0ah
            mov ah, 02h
            int 21h
    	
            mov dl, 0dh
            mov ah, 02h
            int 21h
    	
            mov ax, 0
            xor cx, cx
            mov cl, [input+1]
            lea si, [input+2]
            mov byte ptr [sign], 0
            cmp byte ptr[si], '-'
            jnz next1
            inc si
            dec cx
            mov byte ptr [sign], 1
    next1:
            mov ax, 0
    loop1:
            mov bx, 10
            mul bx
            xor bx, bx
            mov bl, [si]
            sub bl, '0'
            add ax, bx
            inc si
            loop loop1
    	
            cmp byte ptr [sign], 1
            jnz next2
            xor bx, bx
            sub bx, ax
            mov ax, bx
    	
    next2:
            pop si
            pop dx
            pop cx
            pop bx
            popf
            ret
    	
    printInt:
            pushf
            push bx
            push cx
            push dx
            push si
    	
            mov si, ax
            cmp ax, 0
            jge skip2
            mov dl, '-'
            mov ah, 02h
            int 21h
            mov ax, 0
            sub ax, si
    skip2:
            cmp ax, 0
            jne skip1
            push ax
            mov cx, 1
            jmp next3_end
    skip1:
            mov cx, 0
    next3:
            cmp ax, 0
            je next3_end
            mov dl, 10
            div dl
            xor bx, bx
            mov bl,ah
            push bx
            mov ah, 0
            inc cx
            jmp next3
    	
    next3_end:
            xor dx, dx
            pop dx
            add dl, 48
            mov ah, 02h
            int 21h
            loop next3_end
            pop si
            pop dx
            pop cx
            pop bx
            popf
            ret
    	
    code ends
            end start

     

    ;the source code of the Exp 2.4
    stack   segment stack
            db 512 dup(?)
    stack   ends
    
    data    segment
            data2 db 50, ?, 50 dup('$')
            string db 'yes', 0ah, 0dh, '$'
            string1 db 'no', 0ah, 0dh, '$'
    data    ends
    
    
    code segment 
            assume cs: code, ds: data, ss: stack
    start: 
            mov ax, data
            mov ds, ax
            mov ax, stack
            mov ss, ax
    	
            mov ah, 0ah
            mov dx, offset data2
            int 21h
    	
            mov ah, 02h
            mov dl, 0ah
            int 21h
    	
            mov ah, 02h
            mov dl, 0dh
            int 21h	
    	
    
            mov dx, offset data2+2
            mov ah, 09h
            int 21h
    	
            mov ah, 02h
            mov dl, 0ah
            int 21h
    	
            mov ah, 02h
            mov dl, 0dh
            int 21h	
    	
            mov al, 0h
            mov cx, 47
            mov di, 0
    again: 
            mov al, [ di + 2 ]
    	    cmp al, 61h
    		jnz next
    		mov al, [ di + 3] 
    		cmp al, 73h
    		jnz next
    		mov al, [ di + 4 ]
            cmp al, 6dh
            jnz next
    		jmp yes
    
    	
    next: 
            add di, 1
    	    loop again
    		mov dx, offset string1
    	    mov ah, 09h
    	    int 21h
    		jmp endcode
    yes:		
            mov dx, offset string
    	    mov ah, 09h
    	    int 21h
    endcode:   
            mov ax, 4c00h
            int 21h
    	   
    code ends
            end start

     

    四. 实验结果(包括必要的截图)

     

    图 1 题2.1运行截图①

     

    图 2 题2.1运行截图②

     

    图 3 题2.2运行截图①

     

    图 4 题2.2运行截图②

     

    图 5 题2.3运行截图①

     

    图 6 题2.3运行截图②

     

    图 7 题2.4运行截图①

     

    图 8 题2.4运行截图②

     

      五.实验体会

       汇编太难了,这四个题目如果不查资料一个都弄不出来。上课听得很过瘾,下课啥也不会做。

           

     注:模仿是最深的爱慕

    展开全文
  • 内容有点多,我慢慢码。 实验一 流水线相关与指令调度 1 实验内容 1.1 流水线相关 a.... 用MIPS64汇编语言编写代码文件*.s,程序中应包括结构相关。用WinMIPS64模拟器运行你编写的程序,通过模拟:
  • 合肥工业大学计算机与信息学院导师教师师资介绍简介-☆郑利平本站小编 Free考研考试/2021-04-24个人信息姓 名 郑利平 性 别 男出生年月 1978 最终学位博士毕业学校 合肥工业大学从事专业 可视化、计算机图形学 职务 ...
  •  (2)熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。   2. 实验内容  (1)编写一个子程序计算z=f(x,y)=x/y+x-y(x,y,z有符号数内存字数)。要求通过堆栈传送输入参数,输出参数...
  • insert into course values(97,'汇编语言',3,94); insert into course values(96,'微机原理与接口技术',4,97); insert into course values(112,'政法基础',3,null); insert into course values(111,'法律素养',3,...
  • 合肥工业大学微型计算机原理课件,一共八章,包括汇编语言,存储,接口等。很全面了。
  • 取材自合肥工业大学使用多年、反应良好的院级平台课程“数宇电路与数字系统实践”的讲义,并特别注意体现技术领域的新趋势和新动向。书中包含37项数字电路与系统的实验,41个课程设计综合选题,非常贴近工程实际。该...
  • 合肥工业大学,单片机课程设计,电子密码锁,汇编程序
  • 计算机科学与技术专业大学...还比较权威,供大家参考:1、计算机科学与技术专业大学排名排名学校名称1清华大学2国防科学技术大学3北京大学4北京航空航天大学5哈尔滨工业大学6上海交通大学7浙江大学8南京大学9中国...
  • 2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。 二. 实验内容 1. 从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串(查找中间是否有‘asm’子串。如果有,输出...
  • 电子琴课程设计.doc

    2020-01-21 23:07:42
    微机原理课程设计,电子琴课程设计,合肥工业大学宣城校区课程设计,里面包含实验步骤,原理图,代码,各类细节,需要的同学可以借鉴
  • 信息安全关乎国家重大利,也跟我们的生活密切相关,是现在的热门专业,而且是本科毕业生薪资最高的专业。那么,我国有哪些院校开设信息安全专业呢,他们的...二类:北京航空航天大学、北京邮电大学、哈尔滨工业大学、...
  • 山西大同大学 太原师范学院 安徽 黄山学院 巢湖学院 铜陵学院 合肥工业大学 安徽大学 安徽师范大学 安徽农业大学 安徽工业大学 安徽理工大学 安徽财经大学 淮北煤炭师范学院 安徽工程科技学院 阜阳师范学院 安徽中医...
  • 考试科目:控制系统综合(微机原理与接口技术、直流调速自动控制系统、传感器与检测技术)适用专业:控制理论与控制工程、检测技术与自动化装置、模式...汇编语言程序设计(分支程序、循环程序、中断程序的阅读与编写,...
  • 基于先修课程,根据系统设计思想,使用硬件描述语言设计实现一款兼容MIPS32指令集子集的处理器(CPU),完成单周期CPU设计,或多周期CPU设计,或5级流水线CPU设计(递进式、难度依次提升。必须至少完成单周期CPU的...
  • ACM 国际大学生程序设计竞赛简介

    万次阅读 2019-06-18 15:36:49
    ACM简介 ACM(国际计算机学会)是一家科教性质的协会,旨在联合全球计算 IBM的承诺 机领域的教学人员、研究人员和从业人员,开展行业交流活动、共享资源和解决业界难题。...国际大学生程序设计...

空空如也

空空如也

1 2 3 4 5
收藏数 81
精华内容 32
关键字:

合肥工业大学汇编语言