清华自动化罗予频计原实验二报告

时间:2024.4.13

实验二 四则运算 实验报告

2011011429 自16 马嘉利

一、实验目的  

1. 巩固DEBUG及宏汇编的使用。

2. 加深对运算指令的理解。

3. 注意标志寄存器的变化。

二、实验内容

(一) 加减运算

1. 在数据区中定义两个16位的二进制数(16位的二进制数在内存中存放时占2个字节,低位字节数据存在较低地址单元;高位字节数据存在高地址单元。这一原则简称为“低字节在前、高字节在后”)。用8位加减运算指令分别计算这这两个数的和、差(计算时应先算低字节、后算高字节,计算高字节时还应考虑低字节的进位),并将结果也存入数据区原始数据的后面。程序结束后返回DOS。

为了使程序便于改成BCD码运算,要求在程序中不要直接用16位运算指令。

NAME MY_PROG

DATA SEGMENT

STRING1 DB 0B1H,0DAH

STRING2 DB 4AH,81H

SUM DB 10H DUP(0)

DATA ENDS

STACK SEGMENT PARA STACK

      DB 100 DUP(?)

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

     

START:  MOV AX,DATA

        MOV DS,AX

        MOV ES,AX

        LEA SI,STRING1;获取地址

        LEA DI,STRING2

        LEA BX,SUM         

        MOV CX,2;循环次数

        CLC;请标志位

NEXT1:  MOV AL,[SI]

        ADC AL,[DI];带进位加法

        MOV [BX],AL

        INC SI

        INC DI

        INC BX

        DEC CX

        JNZ NEXT1;循环

        RCL [BX],1;循环移位,将最高位进位移入[BX]

        INC BX

        SUB SI,2;还原SI指向地址

        SUB DI,2

        MOV CX,2

        CLC

NEXT2:  MOV AL,[SI];减法开始

SBB AL,[DI];带进位减法

        MOV [BX],AL

        INC SI

        INC DI

        INC BX

        DEC CX

        JNZ NEXT2  

        RCL [BX],1;循环移位,将最高位进位移入[BX]

        INT 3

CODE    ENDS

END     START

2. 修改程序实现16位的压缩BCD码的加减运算。         

NAME MY_PROG

DATA SEGMENT

STRING1 DB 00H,01H

STRING2 DB 00H,10H

SUM DB 10H DUP(0)

DATA ENDS

STACK SEGMENT PARA STACK

      DB 100 DUP(?)

STACK ENDS

CODE SEGMENT

     ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

     

START:  MOV AX,DATA

        MOV DS,AX

        MOV ES,AX

        LEA SI,STRING1

        LEA DI,STRING2

        LEA BX,SUM         

        MOV CX,2

        CLC

NEXT1:  MOV AL,[SI]

        ADC AL,[DI]

        DAA;修改,压缩BCD码加法调整

        MOV [BX],AL

        INC SI

        INC DI

        INC BX

        DEC CX

        JNZ NEXT1

        RCL [BX],1

        INC BX

        SUB SI,2

        SUB DI,2

        MOV CX,2

        CLC

NEXT2:  MOV AL,[SI]

        SBB AL,[DI]

        DAS;修改,压缩BCD码减法调整

        MOV [BX],AL

        INC SI

        INC DI

        INC BX

        DEC CX

        JNZ NEXT2      

        JNC IFN1;修改,如果是正数就不调整

        RCL [BX],1

        MOV AX,9999H

        SUB AX,[BX-2];修改,求负数补码

        ADD AL,01H;修改,求负数原码

        DAA    

        MOV [BX-2],AL

        MOV AL,AH

        ADC AL,0

        DAA

        MOV [BX-1],AL

IFN1:   INT 3

CODE    ENDS

END     START

(二) 乘法运算

1. 用重复累加的方法计算两位BCD码数乘以两位BCD码数的积(参看流程图1)。被乘数和乘数都用压缩的BCD码形式存放于数据区,各占一单元。乘积顺序存放在后两个单元中(低位在前,高位在后)。

NAME MY_PROG

DATA SEGMENT

STRING1 DB 99H

STRING2 DB 99H

SUM DB 10H DUP(0)

DATA ENDS

STACK SEGMENT PARA STACK

      DB 100 DUP(?)

STACK ENDS

CODE SEGMENT

     ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

     

START:  MOV AX,DATA

        MOV DS,AX

        MOV ES,AX

        MOV BL,STRING1[0];取内容

        MOV BH,STRING2[0]

        LEA SI,SUM 

        CLC

        MOV CX,0000;CX置零

        CMP BL,0;BL==0?

        JZ  SUCCESS;=0跳转

NEXT1:  CMP BH,0;BH==0?

        JZ  SUCCESS;=0跳转

        ADC CL,BL;带进位加法求低位

        MOV AL,CL      

        DAA;压缩BCD码加法调整

        MOV CL,AL

        ADC CH,0;高位加低位进位

        MOV AL,CH      

        DAA;压缩BCD码加法调整

        MOV CH,AL

        DEC BH;BH-1

        MOV AL,BH

        DAS;压缩BCD码减法调整

        MOV BH,AL

        JMP NEXT1      

SUCCESS:MOV [SI],CL;输出低位

        MOV [SI+1],CH;输出高位     

        INT 3

CODE    ENDS

END     START

2. (选作内容)用乘法指令计算十进制数乘法2754×3。被乘数和乘数都用ASCⅡ码形式存放在内存中(低位在前),乘积以ASCⅡ码存入后续单元(低位在前)。

NAME MY_PROG

DATA SEGMENT

STRING1 DB 33H

STRING2 DB 34H,35H,37H,32H

SUM DB 10H DUP(0)

DATA ENDS

STACK SEGMENT PARA STACK

      DB 100 DUP(?)

STACK ENDS

CODE SEGMENT

     ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

     

START:  MOV AX,DATA

        MOV DS,AX

        MOV ES,AX

        MOV BL,STRING1[0]

        SUB BL,30H;减30H得数值

        LEA SI,STRING2

        LEA DI,SUM         

        MOV CX,4;被乘数位数

        CLC

NEXT1:  MOV AL,BL

        MOV AH,00H;清零

        MOV DL,[SI]

        SUB DL,30H;减30H得数值

        MUL DL;DL乘以AL,结果存AX

        AAM;压缩BCD码乘法调整

        INC SI

        ADD AL,[DI];本位积和前次进位相加

        AAA;不压缩BCD码加法调整

        ADD AL,30H;加30H得ASCII码

        MOV [DI],AL;保存结果

        INC DI

        MOV [DI],AH;保存进位于[DI+1]       

        DEC CX

        JNZ NEXT1

        ADD [DI],30H;加30H得ASCII码

        INT 3

CODE    ENDS

END     START

四、实验收获

1. 巩固DEBUG及宏汇编的使用。

2. 加深对运算指令的理解,尤其是DAA,AAA,DAS,AAM等ASCII调整指令的使用

3. 学会了-e指令的使用


第二篇:计组实验二报告


实验五  微程序控制器部件教学实验

一、实验目的:

1、全面掌握计算机各部件组成及相互联接关系。

2、深入理解计算机微程序控制器的功能、组成知识。

3、深入地学习计算机各类典型指令的执行流程。

4、对指令格式、寻址方式、指令系统、指令分类等建立具体的总体概念。

5、学习微程序控制器的设计过程和相关技术。

二、实验设备与器材:

TEC-XP16机

三、实验内容:

1、完成控制器部件的教学实验,主要内容是自己设计几条指令的功能、格式和执行流程,并在教学计算机上实现、调试正确。

2、首先是看懂TEC-XP教学计算机的功能部件组成和线路逻辑关系,然后分析教学计算机中已经设计好并正常运行的几条典型指令(例如,ADD、MVRR、OUT、MVRD、JRC、CALA、

RET等指令)的功能、格式和执行流程,注意各操作功能所对应的控制信号的作用。

3、设计几条指令的功能、格式和执行流程,并在教学计算机上实现、调试正确。例如ADC、

JRS、JRNS、LDRA、STAR、CALR等指令,可以从给出的19条扩展指令中任意选择,当然

也可以设计与实现其它的指令,包括原来已经实现的基本指令(要变换为另外一个指令操作

码)或自己确定的指令。

4、单条运行指令,查看指令的功能、格式和执行流程。

5、用监控程序的A、E(扩展指令必须用E 命令置入)命令编写一段小程序,观察运行结果。

四、实验步骤(和说明):

1、(1选择基本指令的B组指令中的MVRD指令,观察其节拍流程

1) 置拨动开关SW=10001000 00010000;(表示指令MVRD DRDATA

2) 按RESET按键; 指示灯Microp亮(只要选择微程序,该灯在指令执行过程中一直亮),

其它灯全灭;

3) 按START按键; 指示灯CI3~0、SCC3~0显示1110 0000,微址和下址的指示灯全灭;

(本拍完成公共操作0→PC、DI#=0)

4) 按START按键; 指示灯CI3~0、SCC3~0显示1110 0000,微址指示灯显示0000 0001,下址的指示灯全灭;(本拍完成公共操作PC→AR、PC+1→PC)

5) 按START按键; 指示灯CI3~0、SCC3~0显示1110 0000,微址指示灯显示0000 0010,下址的指示灯全灭;(本拍完成公共操作MEM→IR)

6) 以上三步为公共操作,其它指令同;

7) 按START按键; 指示灯CI3~0、SCC3~0显示0010 0000,微址指示灯显示0000 0011,下址的指示灯显示0001 1101;(本拍完成/MAP操作功能)

8) 按START按键; 指示灯CI3~0、SCC3~0显示0011 0000,微址指示灯显示0001 1101,下址的指示灯显示0001 1100 (本拍执行MVRD指令,DR←DATA 操作)。

9) 按START按键; 指示灯CI3~0、SCC3~0显示0011 0000,微址指示灯显示0001 1100,下址的指示灯显示0011 0000;(本拍完成STR→Q、CC#=INT#公共操作功能)

10) 按START按键; 指示灯CI3~0、SCC3~0 显示0011 0010,微址指示灯显示0011 0000

下址的指示灯显示0011 1010;(本拍完成PC→AR、PC+1→PC、CC#=0的公共操作)

2选择基本指令的D组指令中的CALA指令,观察其节拍流程

1) 置拨动开关SW=11001110 00000000;(表示指令CALA ADR

2) 按RESET按键; 指示灯Microp亮(只要选择微程序,该灯在指令执行过程中一直亮),

其它灯全灭;

3) 按START按键; 指示灯CI3~0、SCC3~0显示1110 0000,微址和下址的指示灯全灭;

(本拍完成公共操作0→PC、DI#=0)

4) 按START按键; 指示灯CI3~0、SCC3~0显示1110 0000,微址指示灯显示0000 0001,下址的指示灯全灭;(本拍完成公共操作PC→AR、PC+1→PC)

5) 按START按键; 指示灯CI3~0、SCC3~0显示1110 0000,微址指示灯显示0000 0010,下址的指示灯全灭;(本拍完成公共操作MEM→IR)

6) 以上三步为公共操作,其它指令同;

7) 按START按键; 指示灯CI3~0、SCC3~0显示0010 0000,微址指示灯显示0000 0011,下址的指示灯显示0001 1111;(本拍完成/MAP操作功能)

8) 按START按键; 指示灯CI3~0、SCC3~0显示1110 0000,微址指示灯显示0001 1111,下址的指示灯显示0000 0000 (本拍执行CALA指令,调用首地址为ADR的子程序)。

9) 按START按键; 指示灯CI3~0、SCC3~0显示1110 0000,微址指示灯显示0010 0000,下址的指示灯显示0000 0000;(本拍完成STR→Q、CC#=INT#公共操作功能)

10) 按START按键; 指示灯CI3~0、SCC3~0 显示1110 0000,微址指示灯显示0010 0001

下址的指示灯显示0000 0000;(本拍完成PC→AR、PC+1→PC、CC#=0的公共操作)

2、(1选择扩展指令的C 组指令中的LDRA指令,观察其节拍流程

1) 置拨动开关SW=11100100 00010000;(表示指令LDRA

2) 按RESET 按键; 指示灯Microp 亮(只要选择微程序,该灯在指令执行过程中一直

亮),其它灯全灭;

3) 按START 按键; 指示灯CI3~0、SCC3~0 显示1110 0000,微址和下址的指示灯全灭;

4) 按START 按键; 指示灯CI3~0、SCC3~0 显示1110 0000,微址指示灯显示0000 0001,

下址的指示灯全灭;

5) 按START 按键; 指示灯CI3~0、SCC3~0 显示1110 0000,微址指示灯显示0000 0010,

下址的指示灯全灭;

6) 以上三步为公共操作,其它指令同。

7) 按START 按键; 指示灯CI3~0、SCC3~0 显示0010 0000,微址指示灯显示0000 0011

下址的指示灯显示0101 1011

8) 按START 按键; 指示灯CI3~0、SCC3~0 显示1110 0000,微址指示灯显示0101 1011

下址的指示灯显示0000 0000;(本拍完成DR←[ADR]操作)

9) 按START 按键; 指示灯CI3~0、SCC3~0 显示0011 0000,微址指示灯显示0101 1100

下址的指示灯显示0001 1100;(本拍完成STR→Q、CC#=INT#操作)

10) 按START 按键; 指示灯CI3~0、SCC3~0 显示0011 0000,微址指示灯显示0001 1100,下址的指示灯显示0011 0000;(本拍完成PC→AR、PC+1→PC 操作)

2选择扩展指令的C 组指令中的CALR指令,观察其节拍流程

1) 置拨动开关SW=11100000 00000001;(表示指令CALR

2) 按RESET 按键; 指示灯Microp 亮(只要选择微程序,该灯在指令执行过程中一直

亮),其它灯全灭;

3) 按START 按键; 指示灯CI3~0、SCC3~0 显示1110 0000,微址和下址的指示灯全灭;

4) 按START 按键; 指示灯CI3~0、SCC3~0 显示1110 0000,微址指示灯显示0000 0001,

下址的指示灯全灭;

5) 按START 按键; 指示灯CI3~0、SCC3~0 显示1110 0000,微址指示灯显示0000 0010,

下址的指示灯全灭;

6) 以上三步为公共操作,其它指令同。

7) 按START 按键; 指示灯CI3~0、SCC3~0 显示0000 0011,微址指示灯显示0000 0011

下址的指示灯显示0110 0100

8) 按START 按键; 指示灯CI3~0、SCC3~0 显示1110 0000,微址指示灯显示0110 0100

下址的指示灯显示0000 0000;(本拍完成调用SR指向的子程序

9) 按START 按键; 指示灯CI3~0、SCC3~0 显示1110 0000,微址指示灯显示0110 0101

下址的指示灯显示0000 0000;(本拍完成STR→Q、CC#=INT#操作)

10) 按START 按键; 指示灯CI3~0、SCC3~0 显示0011 0000,微址指示灯显示0110 0110,下址的指示灯显示0011 0000;(本拍完成PC→AR、PC+1→PC 操作)

3AE键入程序连续运行(扩展指令用E命令键入)

(1) 测试ADC 指令。运行结果应为R0=1112 R1=1010。

(2) 测试CALR 指令

1) 将被显示的6个字符‘A’~‘F’送入到内存20F0H开始的存储区域中。

2)用A键输入,错误

3) 从地址2100H 开始输入程序

(3) 测试指令LDRA

1) 将要输出的字符存放在地址单元2100

2) 用A、E 命令键入程序

A错误

E成功

五、思考题:

在“A”命令下能否直接输入新指令?为什么?

不能。因为监控程序的A命令只支持基本指令,扩展指令应用E命令将指令代码写入到相应的存储单元中。

六、实验心得:

本次实验对单步执行指令和连续执行指令分别进行了测试,分别观察其节拍流程;分别用监控程序的A、E命令编写一段小程序,观察运行结果;应了解监控程序的A命令只支持基本指令,扩展指令应用E命令将指令代码写入到相应的存储单元中;不能用T、P命令单步调试扩展指令,只能用G命令执行扩展指令。经过实践测试,E命令可对指令进行扩展,增加原有基本指令功能。

更多相关推荐:
自动化毕业实习总结范文

生产实习报告当今时代工科人才培养的工程化已被世界高等教育界视为工科人才培养重中之重毕业实习作为工科院校教学计划的重要组成部分不仅是毕业论文撰写的前期实践活动也是培养高素质应用型人才必不可少的实践性教学环节依据教...

自动化认识实习报告范文

认识实习报告系专业班级学号学生姓名指导教师姓名实习日期20xx年2月2125日第一篇20xx年5月22日星期二实践单位湖南韶力电气有限公司今天我们第一次参加认知实习我们来到了湖南韶力电气有限公司该公司是以研发和...

自动化专业毕业实习报告

毕业实习报告专业自动化班级学号姓名指导老师刘星平实习时间20xx年3月5日至20xx年3月30日

电气自动化实习报告范文

一.实习目的生产实习是教学与生产实际相结合的重要实践性教学环节。在生产实习过程中,学校也以培养学生观察问题、解决问题和向生产实际学习的能力和方法为目标。培养我们的团结合作精神,牢固树立我们的群体意识,即个人智慧…

自动化毕业实习总结范文

当今时代,工科人才培养的工程化已被世界高等教育界视为工科人才培养的重中之重。毕业实习作为工科院校教学计划的重要组成部分,不仅是毕业论文撰写的前期实践活动,也是培养高素质应用型人才必不可少的实践性教学环节。依据教…

自动化类专业实习总结范文

《浙江大学优秀实习总结汇编》自动化类岗位工作实习期总结转眼之间,两个月的实习期即将结束,回顾这两个月的实习工作,感触很深,收获颇丰。这两个月,在领导和同事们的悉心关怀和指导下,通过我自身的不懈努力,我学到了人生…

电气自动化实习报告范文

电气自动化实习报告范文电气自动化专业实习报告实习过程1安全教育在实习开始时学校组织我们到公司由专业人士对我们进行安全教育讲解了安全问题的重要性和在实习中所要遇到的种种危险和潜在的危险等等2组织参观在实习开始时学...

庄俊桂_自动化实习报告

华南农业大学工程学院自动化专业实践报告年级20xx班级自动化3班学号20xx30460334姓名庄俊桂由于我所在的城镇是全国有名的内衣城因此我选择来广东省汕头市嘉林隆实业有限公司进行为期两个星期的实习公司是一家...

自动化认识实习报告

认识实习报告一实习内容20xx年6月25日我们自动化专业在学校的排老师的带领下于上午8点半从学校出发去陡河发电厂进行为期一天的参观和学习到达目的地后我们进入了陡河发电厂的一个考试教室由熊小洁老师给我们进行实习前...

自动化专业生产实习报告

生产实习报告柳化之行一生产实习目的生产实习是自动化专业教学计划中重要的实践性教学环节是对我们进行专业技能基本训练培养我们理论联系实际增强实践动手能力的重要课程也是我们从一个学生身份向一个职业者身份转变的一个过渡...

自动化火电厂实习报告

报告名称院系专业班级姓名学号实习时间自动化专业生产实习报告实习报告信息工程及其自动化学院自动化自动化081王思20xx1040113620xx年3月目录一绪论111实习目的112实习要求1二实习内容221实习单...

生产实习报告(自动化)

生产实习报告单位:计算机与信息工程学院专业:自动化专业班级:自动073姓名:学号:北京工商大学20**年7月14日前言经过近三年的学习,我们迎来了大学专业课程学习中的一个重要实践环节---生产实习。实习中我们一…

自动化实习报告范文(29篇)