微机原理与接口技术实验报告西安邮电文档格式.docx

上传人:b****6 文档编号:17115307 上传时间:2022-11-28 格式:DOCX 页数:33 大小:304.44KB
下载 相关 举报
微机原理与接口技术实验报告西安邮电文档格式.docx_第1页
第1页 / 共33页
微机原理与接口技术实验报告西安邮电文档格式.docx_第2页
第2页 / 共33页
微机原理与接口技术实验报告西安邮电文档格式.docx_第3页
第3页 / 共33页
微机原理与接口技术实验报告西安邮电文档格式.docx_第4页
第4页 / 共33页
微机原理与接口技术实验报告西安邮电文档格式.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

微机原理与接口技术实验报告西安邮电文档格式.docx

《微机原理与接口技术实验报告西安邮电文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术实验报告西安邮电文档格式.docx(33页珍藏版)》请在冰豆网上搜索。

微机原理与接口技术实验报告西安邮电文档格式.docx

若两操作数为带符号数,计算结果是否正确__是__?

若计算结果正确,结果是正数还是负数___负___?

(4)执行完第二条ADDAL,[BX]指令后(AL)=__72__H,CF=__1__,OF=__1_,ZF=_0___,SF=_0__,AF=_1__,PF=_1__;

若两操作数为无符号数,计算结果是否正确__否___?

若两操作数为带符号数,计算结果是否正确___否_____?

3.2、指令MOVSUM,AL中目的操作数的寻址方式为___寄存器寻址____。

该指令执行完后,注意观察(DS):

0003H单元中值的变化,该单元的值变为_72__H。

DATASEGMENT

NUMDB82H,68H,88H

SUMDB?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVBX,OFFSETNUM

MOVAL,[BX]

INCBX

ADDAL,[BX]

ADDAL,[BX]

MOVSUM,AL

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

(2)读懂下列源程序,编辑、汇编、连接生成EX12.ASM、EX12.OBJ、EX12.LST、EX12.EXE文件使用DEBUG单步调试EX12.EXE文件,并回答一下问题。

①代码的前三段指令“MOVAX,STACK”、“MOVSS,AX”和“MOVSP,LENGTHSTL”的功能为堆栈初始化,试问执行完这三条指令后,堆栈栈底所在单元的逻辑地址(SS):

(SP)为0912:

0100;

执行“PUSHAX”指令后,堆栈指针寄存器(SP)=00FEH,此时(SS):

(SP+1)和(SS):

(SP)单元的值为0AH和5BH;

执行完“PUSHBX”后,(SP)=00FCH;

此时(SS):

(SP)单元的值为4CH和A3H;

执行完“POPAX”后,(SP)=00FEH;

执行完“POPBX”后,(SP)=0100H,此时(AX)=4CA3H,(BX)=5B0AH。

请读者通过对堆栈操作指令执行情况的观察,进一步掌握进、出栈操作过程。

②执行“ADDAX,BX”指令后,(AX)=A7ADH,CF=0,OF=1,ZF=0,SF=1,AF=0,PF=0,(注意考虑PF值与计算结果高8位有无关系);

若两操作数为无符号数,计算结果是否正确正确?

若两操作数为带符号数,计算结果是否正确不正确?

③执行“ANDAX,BX”指令后,(AX)=4802H,CF=0,OF=0,ZF=0,SF=0,AF=0,PF=0.

STACKSEGMENTstack

STLDW100HDUP(?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,SS:

STACK

MOVAX,STACK

MOVSS,AX

MOVSP,LENGTHSTL

;

表达式“LENGTHSTL”的功能为计算STL中定义的变量的个数

汇编后其值为100H

MOVAX,0101101100001010B

MOVBX,0100110010100011B

PUSHAX

PUSHBX

ADDAX,BX

POPAX

POPBX

ANDAX,BX

MOVAH,4CH

CODEENDS

ENDSTART

(3)指出下列指令的错误原因,上机运行,观察汇编程序(MASM.EXE)给出的出错信息,改正后上机验证。

①MOVBP,BL②MOV[BX],[BP]

③MOV[BX],20H④INC[SI]

⑤ADDAX,[SI+DI]⑥SHLAX,3

⑦PUSH2000H⑧POPAL

⑨MOVCS,AX⑩MOVDS,1000H

答 

:

①出错信息:

warningA4031:

Operandtypesmustmatch

错误原因:

操作数类型不匹配,BP是一个16位寄存器,而BL是一个8位寄存器。

改正后:

MOVBP,BX;

②出错信息:

errorA2052:

Improperoperandtype

源操作数和目的操作数不能同时为存储器。

改正后:

MOVAX,[BP]MOV[BX],AX;

③出错信息:

error:

A2035:

Operandmusthavesize

源操作数长度不明确

④出错信息:

操作数的长度未指定

⑤出错信息:

A2047:

Multipleindexregisters

同时使用了多个变址寄存器

⑥出错信息:

循环次数大于1应该间接移位

⑦出错信息:

errorA2056:

Immediatemodeillegal

不能对立即数进行栈操作

⑧出错信息:

errorA2058:

Byteregisterillegal

要求用字寄存器而使用了字节寄存器

⑨出错信息:

errorA2059:

IllegaluseofCSregister

CS不能作为目的操作数

⑩出错信息:

立即数不能送入数据段

4、实验总结

这是第一次上机实验,并不知道具体怎样做,通过老师讲的知识和操作,理解和巩固了课堂学习容,基本掌握了汇编语言程序设计上机过程和汇编语言源程序结构,为以后汇编语言程序设计打好基础。

初步掌握了调试工具的使用方法。

字符及字符串输入输出与顺序程序设计

2017年11月14日

1.1、学习和掌握字符及字符串的输入输出方法。

1.2、掌握顺序程序设计方法。

1.3、进一步掌握调试工具的使用方法。

2、实验容

从键盘输入两个一位十进制数,计算这两个数之和,并将结果在屏幕上显示出来。

2.1、问题分析

比如使用功能号为01H的用于实现单个字符输入的DOS功能调用接收从键盘输入的两个十进制数8和6,这时计算机部得到的是这两个数的ASCII码值38H和36H。

由于数字09的ASCII码值与其代表的数值之间相差30H,因此将其减去30H即可得到以非压缩型BCD数形式表示的十进制数08H和06H,使用ADD指令对它们进行相加后结果为0EH(00001110B),显然需要用非压缩型BCD数加法调整指令对ADD的运算结果进行调整,调整后得到两个非压缩型BCD数01H和04H,将它们分别加上30H后变为其对应的ASCII码31H(1的ASCII码)和34H(4的ASCII码),然后调用功能号为02H用于单个字符输出的DOS功能调用将它们显示出来。

综上所述,需要考虑以下问题。

(1)从键盘输入一个一位十进制数的方法

通过功能号为1的DOS功能调用实现从键盘输入一个字符,格式如下:

MOVAH,01H

INT21H;

此时程序等待用户键入,键入字符的ASCII码值存在AL中

SUBAL,30H;

减去30H后得到键入数字所代表的数值

(2)提示信息字符串的显示

通过功能号为9的DOS功能调用实现字符串显示,注意字符串的最后一个字符必需为‘$’。

指令格式如下:

MOVDX,OFFSETINFOR1;

INFOR1为在数据段中定义的要显示的字符串

MOVAH,09H

INT21H

(3)非压缩型BCD数加法调整指令的使用

设从键盘输入的数值已存放在寄存器AL,BL中,可用下列程序完成数据相加和调整操作:

XORAH,AH

ADDAL,BL

AAA;

执行该指令后,AH中为和的十位上的数字,AL中为个位上的数字

请读者考虑,为什么要使用指令“XORAH,AH”,不用行否?

(4)计算结果的显示

执行完AAA指令后,只需分别将AH(十位上的数值)和AL(个位上的数值)加上30H,并依次调用功能号为2的DOS功能调用来显示字符。

2.2、原程序框架

DATASEGMENT

INFOR1DB”PLEASEINPUTTHEFIRSTDATA(<

10):

$”

INFOR2DB0AH,0DH,”PLEASEINPUTTHESECONDDATA(<

INFOR3DB0AH,0DH,”THERESULTIS:

;

0DH和0AH分别为非显示字符回车和换行的ASCII码值,

美元符号”$”为字符串结束标志,不能省略。

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

START:

MOVAX,DATA

显示提示信息INFOR1并从键盘接收一个字符的指令序列

MOVDS,AX

SUBAL,30H

显示提示信息INFOR2并从键盘接收一个字符的指令序列

MOVBL,AL

求和并调整指令序列

显示提示信息INFOR3的指令序列

PUSHAX

POPAX

显示十位及个位上数字的指令序列

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

2.3、程序调试

源程序编写完成后,先静态检查,无误后,对源程序进行汇编和连接,生成可执行文件。

在DOS命令提示符下运行该程序,分析运行结果是否正确。

若结果不正确,使用DEBUG对其进行调试。

2.4、源代码

1)、源程序框架补全源代码

ASSUMECS:

INFOR1DB"

PLEASEINPUTTHEFIRSTDATA(<

$"

INFOR2DB0AH,0DH,"

PLEASEINPUTTHESECONDDATA(<

INFOR3DB0AH,0DH,"

THERESULTIS:

DATAENDS

MOVDS,AX

LEADX,INFOR1;

获取第一个数

MOVAH,09H

INT21H

MOVAH,01H

SUBAL,30H

MOVBL,AL

LEADX,INFOR2;

获取第二个数

MOVAH,0;

计算结果

ADDAL,BL

AAA

PUSHAX;

显示结果

LEADX,INFOR3

POPAX

MOVDL,AH

ORDL,30H

MOVAH,02H

POPAX

MOVDL,AL

ORDL,30H

MOVAH,4CH;

返回DOS

选做题:

从键盘输入两个一位十进制数,计算这两个数之积,并将结果在屏幕上显示出来。

MULBL

AAM

设A,B,C,D为四个压缩型BCD数,它们被存放在存DBCD开始的4个存储单元中,计算A+B+C+D,并将结果在屏幕上显示出来(注意压缩型BCD数的表示方法:

十进制数38表示成压缩型BCD数时应写成38H)。

程序编写完成并运行正确后,打开源程序,改变A,B,C,D的容,然后重新进行汇编、连接并运行程序,检查程序运行结果与手工计算结果是否相符。

下面给出几组实验用数据:

(1)A=11,B=23,C=25,D=31

(2)A=10,B=20,C=30,D=40(3)A=45,B=45,C=45,C=45(4)A=88,B=99,C=77,D=66

(注意压缩型BCD数的表示方法:

十进制数38表示成压缩型BCD数时应写成38H)

2、从键盘输入两个一位十进制数,计算这两个数之积,并将结果在屏幕上显示出来。

3、从键盘输入0—9中任意一个自然数,将其平方值在屏幕上显示(使用查表法实现)。

3、实验结果

两个一位十进制数之和程序运行结果

2、求两个一位十进制数的积

1)部分反汇编结果

输入第一个数8后,AL=38H

输入第二个数6后,AL=36H

乘法指令执行后,AL=30H

乘法调整后,AX=0408

6*8=48,与实际计算结果一致

最终结果图

3、实验总结

通过本次实验,我学习并掌握了字符及字符串的输入输出以及顺序相关知识。

虽然中途错误百出,但最终还是完成了任务要求。

语言还是需要不断练习才能掌握的东西,实践比理论更为重要。

对于汇编语言程序的基本结构我已经有了更深的理解。

宏指令及子程序实验

2017年11月21日

1、实验目的:

1.1、掌握分支程序的设计方法。

1.2、掌握宏定义及宏调用的基本方法。

1.3、了解小写和大写字母的ASCII码表示及其转换方法。

了解数字及其它字符在的ASCII码表示方法。

1.4、进一步掌握调试工具的使用方法

2、实验预习要求:

2.1、复习比较指令、条件转移指令的用法。

2.2、复习宏定义及宏调用的基本方法。

2.3、根据“2.3.3实验容”中给出的流程图和程序框架编写源程序,以便上机调试。

2.4、程序框架中显示提示信息的指令序列用宏调用实现。

2.5、从“2.3.4实验习题”中任选一道题目,编写源程序,以便上机调试。

3、实验容:

问题:

从键盘输入一字符,判断该字符是小写字母、大写字母、数字或其它字符。

若输入为小写字母,显示“YouInputaLowercaseLetter!

”;

若输入为大写字母,显示“YouInputaUppercaseLetter!

若输入为数字,显示“YouInputaDigit!

若输入为其它字符,显示“YouInputOtherLetter!

”。

1.编程指导

数字09的ASCII码为30H39H;

大写字母的ASCII码为41H5AH,小写字母的ASCII码为61H7AH。

本题目将字符分为小写字母、大写字母、数字及其它字符,根据键入字符的ASCII码值判断其所属类型,并显示相应的信息。

字符串显示使用功能号为09H的DOS功能调用,接收键盘输入的单个字符使用功能号为01H的DOS功能调用。

2.代码:

DATASEGMENT

INFOR1DB0AH,0DH,"

PleasePressAnyKeytoinputaletter:

INFOR2DB0AH,0DH,"

YouInputaLowercaseLetter!

INFOR3DB0AH,0DH,"

YouInputaUppercaseLetter!

INFOR4DB0AH,0DH,"

YouInputaDigit!

INFOR5DB0AH,0DH,"

YouInputOtherLetter!

DATAENDS

CODESEGMENT

ASSUMECS:

START:

MOVDS,AX

CMPAL,'

0'

JBOTHER

CMPAL,'

9'

JBEDIGIT

A'

JBOTHER

Z'

JBEUPPER

a'

z'

JBELOWER

JMPPEND

LOWER:

JMPPEND;

注意执行完一个分支后应使程序跳出

UPPER:

DIGIT:

OTHER:

PEND:

INT21H

CODEENDS

ENDSTART

4、实验总结:

通过本次实验,我熟练掌握了宏定义和宏调用的使用方法,并巩固了ASCII码的表示和转换方法,以及掌握了使用分支程序,运用跳转指令跳转到子程序,在子程序结束处跳回主程序的方法。

收获很多。

课后题:

计算1+2+……n=?

2017年11月28日

1.1、掌握循环程序的设计方法。

1.2、掌握比较指令、转移指令和循环指令的使用方法。

2、实验要求:

2.1、复习比较指令、条件转移指令和循环指令。

2.2、复习循环程序的结构、循环控制方法等知识。

2.3、读懂“2.4.3实验容”中给出的将十进制数转换为二进制数以及将二进制数转换为十进制数的程序。

2.4、根据“2.4.3实验容”中给出的流程图和程序框架编写源程序,以便上机调试。

2.5、从“

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1