77范文网 - 专业文章范例文档资料分享平台

东南大学信息学院微机实验简单编程练习

来源:网络收集 时间:2020-06-07 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

微机实验报告

第三次实验

实验名称:简单编程练习 院系:信息科学和工程学院 学号: 姓名:

实验时间:2016.4

一、实验目的

1. 利用已掌握的宏汇编语言,进行简单的程序设计练习 2. 学习和掌握建立与运行汇编语言程序各个步骤和命令 3. 熟悉汇编程序的调试过程 二、实验任务

1. 在一个数据块中找出最大数

假设有数据22、46、32、72、84、16,且为不带符号的正整数,数据块的长度存放在CX寄存器中,找出的最大数存放在以MAXN为符号的单元中。

2. 求无符号字节数据之和,和数为8位二进制数

假设有数据38,55,26,12,23,数据块的长度存放在CX寄存器中,和数存放在以SUM为符号的单元中。

3. 求无符号字节数据之和,和数为16位二进制数

假设有数据58,25,45,73,64,43,数据块长度存放在CX寄存器中,和数存放在以SUM为符号的字单元中。

4. 求两个十进制数相乘的积(56093*5=?),被乘数和乘数均以非组合BCD

码表示,并存放在内存中,乘积存放在以SUM为符号的单元中。 5. 试分别用数据传送指令和串传送指令编写程序,将以STR1为首地址的字节存储单元中的数据30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,40H,41H,42H,43H,44H,45H,传送到以STR2为首地址的字节存储单元中。

三、实验代码

1.

DATAS SEGMENT

NUM DB 22,46,32,72,84,16 MAXN DB ?

DATAS ENDS ;定义数据段

STACKS SEGMENT

STACKS ENDS ;定义栈段

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS START:

MOV AX,DATAS MOV DS,AX LEA BX,NUM

MOV CX,05 ;CX计入比较的计数值 MOV AL,[BX] AGAIN: INC BX

CMP AL,[BX] ;将AL与[BX]的当前值进行比较

JA NEXT ;如果前AL大于[BX],则跳转到NEXT MOV AL,[BX] ;将[BX]赋值给AL

NEXT:LOOP AGAIN ;继续下一次循环 MOV MAXN,AL ;将AL赋值给MAXN MOV AH,4CH

INT 21H ;结束本程序的运行,并返回DOS状态 CODES ENDS

END START ;整个程序汇编结束

实验结果:[DS:0006]=54H

2.

DATAS SEGMENT

NUM DB 38,55,26,12,23 ;定义5个字节数据

SUM DB ? ;定义变量SUM存放和 DATAS ENDS ;定义数据段

STACKS SEGMENT STACKS ENDS ;定义栈段

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS START:

MOV AX,DATAS MOV DS,AX

MOV CX,05 ;将数据的个数赋给CX

LEA BX,NUM ;将变量NUM的偏移地址赋给BX SUB AL,AL ;AL清零 NEXT:

ADD AL,[BX] INC BX ;取下一个数 LOOP NEXT ;跳转至NEXT,继续循环 MOV SUM,AL ;将AL赋值给SUM MOV AH,4CH INT 21H ;返回DOS CODES ENDS

END START ;整个程序汇编结束 实验结果:[DS:0005]=9AH

3.

DATAS SEGMENT

NUM DB 58,25,45,73,64,43 ;定义6个字节数据

SUM DW ? ;定义字单元数据存放和 DATAS ENDS ;定义数据段

STACKS SEGMENT

STACKS ENDS ;定义栈段

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS START:

MOV AX,DATAS MOV DS,AX LEA BX,SUM MOV CX,6 ;把数据个数赋给CX SUB AX,AX ;AX清零 NEXT:

ADD AL,[BX] ;当前值和下一个值相加 ADC AH,0 ;加上进位 INC BX ;BX加1 LOOP NEXT ;跳转至NEXT,继续循环 MOV SUM,AX ;把AX的值传送到AUM

MOV AH,4CH INT 21H ;返回DOS CODES ENDS

END START ;整个程序汇编结束 实验结果:[DS:0006]=0134H

4.DATAS SEGMENT

DATA1 DB 03,09,00,06,05 ;定义5个字节数据,分别作为每一位的被乘数 DATA2 DB 05 ;说明乘数

SUM DB 6 DUP(00) ;定义5个字节数据存放数据相乘结果 DATAS ENDS

STACKS SEGMENT STACKS ENDS ;定义栈段

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS START:

MOV AX,DATAS MOV DS,AX

MOV SI,OFFSET DATA2 ;取DATA2的偏移地址 MOV BL,[SI] ;将乘数保存到BL中 MOV SI,OFFSET DATA1 ;取DATA1的偏移地址 MOV DI,OFFSET SUM ;取SUM的偏移地址

MOV CX,05 ;将被乘数的位数赋值给CX NEXT:

MOV AL,[SI]

INC SI

MUL BL ;将当前位数与乘数相乘 AAM ;将AL中的乘法运算结果调整为两位非压缩十进制数 ADD AL,[DI] ;将乘法结果与上次进位相加 AAA ;将加法运算结果调整为一位非压缩十进制数 MOV [DI],AL ;传送结果至[DI]中 INC DI

MOV [DI],AH ;把进位传送到[DI]中 LOOP NEXT ;跳转至LOOP,继续循环 MOV AH,4CH INT 21H ;返回DOS CODES ENDS

END START ;整个程序汇编结束

实验结果:[DS:0006-DS:000B]中的内容为05,06,04,00,08,02 5.

法一:数据传送指令

DATAS SEGMENT STR1 DB

30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,40H,41H,42H,43H,44H,45H COUNT EQU $-STR1 ;把STR1数据的长度赋给COUNT

STR2 DB COUNT DUP(0);为STR2开辟与STR1相同长度的字节单元,初值为0 DATAS ENDS

STACKS SEGMENT STACKS ENDS CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS START:

MOV AX,DATAS MOV DS,AX

LEA SI,STR1 ;取STR1的偏移地址 LEA DI,STR2 ;取STR2的偏移地址

MOV CX,COUNT ;将STR1的长度赋给CX,设定循环次数 NEXT:

MOV AL,[SI] MOV [DI],AL

INC SI ;SI自增 INC DI ;DI自增

LOOP NEXT ;跳转至NEXT继续循环 MOV AH,4CH

INT 21H ;返回DOS CODES ENDS

END START ;整个程序汇编结束

法二:串传送指令 DATAS SEGMENT STR1 DB

30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,40H,41H,42H,43H,44H,45H COUNT EQU $-STR1 ;把STR1数据的长度赋给COUNT

STR2 DB COUNT DUP(0) ;为STR2开辟与STR1相同长度的字节单元,初值为0 DATAS ENDS

STACKS SEGMENT

STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS START:

MOV AX,DATAS MOV DS,AX MOV ES,AX

LEA SI,STR1 ;将STR1的偏移地址赋给SI LEA DI,STR2 ;将STR2的偏移地址赋给DI MOV CX,COUNT

CLD ;设置方向 REP MOVSB ;传送字符串 MOV AH,4CH

INT 21H ;返回DOS CODES ENDS

END START ;整个程序汇编结束

思考:数据传送指令和串传送指令两种传送方式有什么区别?

1.mov的源位置和目标位置都是自己指定的;movs的源串固定用si指出,目的串固定用di指出;

2.mov指令的源位置和目标位置可以在四个段的任意一个段;movs的源串必须定义在数据段,目标串必须定义在附加段;

3.mov指令执行完后,源和目的指针不变;movs执行一次后,si和di自动变化;

4.mov不能直接由存储器到存储器传送,必须经寄存器中转;movs是存储器到存储器的直接传送。

四、思考题

1. 在例题中,“CMP BL,00”指令有什么作用?

比较BL和0的关系,判断BL的正负

2. “CMP BL,00”指令是否可以用其他指令替代?

可以用其他指令替换,如TEST BL,80H等

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库东南大学信息学院微机实验简单编程练习在线全文阅读。

东南大学信息学院微机实验简单编程练习.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/1097902.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: