微机原理实验1.docx

上传人:b****1 文档编号:2407087 上传时间:2022-10-29 格式:DOCX 页数:17 大小:494.29KB
下载 相关 举报
微机原理实验1.docx_第1页
第1页 / 共17页
微机原理实验1.docx_第2页
第2页 / 共17页
微机原理实验1.docx_第3页
第3页 / 共17页
微机原理实验1.docx_第4页
第4页 / 共17页
微机原理实验1.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

微机原理实验1.docx

《微机原理实验1.docx》由会员分享,可在线阅读,更多相关《微机原理实验1.docx(17页珍藏版)》请在冰豆网上搜索。

微机原理实验1.docx

微机原理实验1

信息与通信工程学院

微机原理软件实验报告

(二)

班级:

姓名:

学号:

序号:

日期:

2014年12月

一、实验目的

1)掌握MASM的操作步骤,能够将源程序编译成可执行文件

2)掌握简单的DOS功能调用

3)掌握简单的汇编语言程序的设计

二、实验任务

1.编一程序,在显示器上显示256个ASCII代码,要求显示格式为每行显示16个字符,两个ASCII字符间空一格。

2.试编一程序,把地址偏移量为100H单元开始的256个单元分别写入:

00H,01H,02H,03H,…,FFH数据。

统计写入的数据块中0元素、正元素、负元素的个数,并分别把统计结果送人上述数据块之后的三个单元中。

用DOS功能调用显示上面两题中数据块各单元(包括统计结果)内容。

为了显示清晰明了,要求每行显示16个数据,两个数据之间用空格分开。

(教材P185第1、2、3题合到一起编一完整的程序。

3.编一程序,把键入的十六进制数转换成十进制数并在屏幕上显示出来。

键入的最大数为FFFFH,若键人的不是十六进数字,则显示出错提示。

(教材P188第21题。

 

三、实验内容

1.显示256个ASCII码

(1)源程序(附注释):

datasegment;定义数据段

bufdb256dup(?

countequ$-buf;将buf定义的字节长度赋值给count

dataends

codesegment;定义代码段

assumeds:

data,cs:

code

start:

movax,data

movds,ax

movsi,offsetbuf;设置数据块首地址

movcx,count;设定循环次数

cld;地址修改为增量

xorax,ax

xordx,dx

xorbx,bx

hyone:

mov[si],al;将数据存入数据段

incsi

incal

loophyone

movsi,offsetbuf;指向数据块首地址

movcx,count-1

hytwo:

movdl,[si];显示数据段的内容

movah,2

int21h

movdl,20h;插入空格

movah,2

int21h

incsi

incbl;设定为换行指示标志

cmpbl,10h;当显示了16个字符之后就换行

jzhythree

loophytwo

;回车换行

hythree:

movdl,0dh

movah,02h

int21h

movdl,0ah

movah,02h

int21h

xorbl,bl;将换行指示标志重新置为0

cmpcx,0;判断是否显示完

jnzhytwo;没有显示完的话继续显示

jzhyfour;显示完结束程序

hyfour:

movah,4ch;终止程序

int21h

codeends

endstart

(2)程序流程图:

图1

2.写入数据,统计各类元素个数

(1)源程序(附注释):

datasegment;定义数据段

org100h;设定初始偏移量为100h

bufdb259dup(?

);定义259个数据存放地址

countequ$-buf;将buf定义的字节长度赋值给count

hydb0;定义变量hy作为空格显示控制标志

dataends

codesegment;定义代码段

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movsi,offsetbuf;设置数据块首地址

movcx,count-3;将循环次数存入cx中

cld;地址修改为增量

xorbx,bx

xorax,ax

xordx,dx

hyone:

mov[si],al;将数据存入数据段

incsi

incal

loophyone

movsi,offsetbuf;指向数据块首地址

movcx,count-3;将循环次数存入cx中

lodsb;把si指向的存储单元读入累加器

hytwo:

moval,[si]

andal,al

jzzero;如果为0的话则跳转到zero

jnspositive;如果大于0的话则跳转到positive

jsnegtive;如果小于0的话则跳转到negtive

zero:

incbl;统计为0的个数,用bl计数

jmphythree

positive:

incbh;统计大于0的个数,用bh计数

jmphythree

negtive:

incdl;统计小于0的个数,用dl计数

jmphythree

hythree:

incsi;si加一

loophytwo;继续判断下一个数

hyfour:

decsi;先执行后判断所以si要减1

;将0的个数存入数据块之后的第一个单元

mov[si],bl

incsi

;将大于0的个数存入数据块之后的第二个单元

mov[si],bh

incsi

;将小于0的个数存入数据块之后的第三个单元

mov[si],dl

movsi,offsetbuf;指向数据块首地址

movcx,count;设置循环次数

done:

moval,[si];将数据段的内容赋值给al

movbh,al;暂存数据

;右移4位

shral,1

shral,1

shral,1

shral,1

calldisp

moval,bh;将暂存的数据送回al

andal,0fh;屏蔽掉高四位

calldisp

incsi

loopdone

movah,4ch;终止程序

int21h

dispproc

cmpal,0ah;与0ah比较,小于0ah,加30h

jshyfive;大于0ah,为十六进制数A~F,加37h

addal,7

hyfive:

addal,30h

movdl,al;dos功能调用显示字符

movah,02

int21h

inchy

cmphy,02

jzhyseven

ret

;根据空格显示标志符hy的大小判断是否插入空格

hyseven:

movdl,20h;插入空格

movah,2

int21h

incdh

movhy,0

cmpdh,10h

jzhysix

ret

hysix:

movdl,0dh;回车换行

movah,02h

int21h

movdl,0ah

movah,02h

int21h

xordh,dh

ret

dispendp

codeends

endstart

 

(2)程序流程图

图2

3.十六进制数转换成十进制数

(1)源程序(附注释):

namehexdec

codesegment

assumecs:

code

;提示信息

msg1db'erronumber','$'

msg2db'Hello!

Pleaseinputthehexadecimalnumber:

','$'

msg3db'Hello!

Toexitthisprogram,youonlyhavesixchances','$'

msg4db'numberoverflow','$'

hydb0

countdb0

crlfmacro;定义宏指令,回车换行

movdl,0dh

movah,02h

int21h

movdl,0ah

movah,2

int21h

endm

start:

movax,segcode

movds,ax;给数据段赋值,与代码段在同一个段

;提示正确调试的机会只有6次

begin:

crlf

movdx,offsetmsg3

movah,09

int21h

crlf

main:

crlf

movdx,offsetmsg2;提示输入一个十六进制的数

movah,09

int21h

crlf

callhexbin;从键盘接收进制的数并转化为二进制

crlf

callbindec;把二进制转化为十进制数

crlf

movhy,0;重置输入次数标志

inccount;正确调试次数加1

cmpcount,6;如果已经正确调试六次则退出程序

jzdone

jmpmain

done:

movah,4ch;退出程序

int21h

;接收键盘输入的十六进制数据,并转化为二进制子程序

hexbinprocnear

xorbx,bx

newchar:

movah,01

int21h

cmpal,0dh;若输入回车则结束本程序

jzretu

;统计输入的十六进制数长度,如果大于ffffh则溢出报错

inchy

cmphy,5

jzbck;溢出报错

subal,30h

jlexit;键入的字符小于0,为非法字符

cmpal,9

jleaddto;键入的字符大于0,小于9,移位处理

subal,07;判断是否为字母A~F

cmpal,0ah;不是大于A的字母为非法字母

jlexit

cmpal,0fh;判断是否为a~f

jgnext

addto:

movcl,4

shlbx,cl;键入的字符左移四位,先键入的字符移向高位

movah,0

addbx,ax;把刚键入的字符与前面的字符和在一起

jmpnewchar

;溢出报错

bck:

movhy,0

xorbx,bx

xorax,ax

crlf

movdx,offsetmsg4

movah,09

int21h

crlf

jmpmain

next:

subal,20h;判断是否为小写a~f

cmpal,0ah

jlexit;小于a为非法字符

cmpal,0fh;大于f为非法字符

jleaddto

jgexit

jmpretu

retu:

ret

;输入

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

当前位置:首页 > PPT模板 > 动物植物

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

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