东南大学微机实验报告2带流程图.docx

上传人:b****8 文档编号:9479038 上传时间:2023-02-04 格式:DOCX 页数:20 大小:281.92KB
下载 相关 举报
东南大学微机实验报告2带流程图.docx_第1页
第1页 / 共20页
东南大学微机实验报告2带流程图.docx_第2页
第2页 / 共20页
东南大学微机实验报告2带流程图.docx_第3页
第3页 / 共20页
东南大学微机实验报告2带流程图.docx_第4页
第4页 / 共20页
东南大学微机实验报告2带流程图.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

东南大学微机实验报告2带流程图.docx

《东南大学微机实验报告2带流程图.docx》由会员分享,可在线阅读,更多相关《东南大学微机实验报告2带流程图.docx(20页珍藏版)》请在冰豆网上搜索。

东南大学微机实验报告2带流程图.docx

东南大学微机实验报告2带流程图

《微机实验及课程设计》

实验报告

 

实验二汇编语言程序设计

 

姓名:

谢雨蒙学号:

22011209

专业:

仪器科学与工程学院实验室:

金智楼416

实验时间:

2013年04月24日报告时间:

2013年04月24日

评定成绩:

审阅教师:

 

一、实验目的

1、近一步熟悉汇编语言的编辑、宏汇编、链接和运行的基本概念

2、熟练掌握动态调试程序TD/DEBUG的常用指令和窗口功能,学会用TD/DEBUG调试程序,修改数据和寄存器环境

3、熟悉掌握汇编语言程序的典型数据结构设计、典型程序控制方法,了解DOS/BIOS功能调用的基本方法

二、实验内容

1、必做内容

(1)从键盘输入任意字符串后,存入自定义存储单元,判断处理后将字符串中小写字母转换为大写字母(其它字符不变),并按原顺序将这些字符在屏幕上显示出来(参考程序P36),并显示字符串“ThetotalnumberisXXXXX”。

(2)从键盘输入一个0~255之间的十进制数,将其转换为16进制数,并在屏幕上显示变换前后的数据(参考程序P38)。

2、选做内容

(1)从键盘输入5个十六进制带符号数(范围为-128~+127),请将它们按从大到小排序,并将排序前后的数据显示在屏幕上。

三、实验原理

1、实验基本步骤

(1)用任意一种文本编辑器(EDIT、NOTEPAD、UltraEDIT等)建立编辑汇编源程序,并将其保存为文件名.asm文件,将其放入带汇编工具的文件夹中(d:

\tasm)。

注:

文件名不要起的过长,在连接时可能会出现can’tfindfile的问题。

(2)开始菜单,点运行条目,打入cmd命令进入DOS调试环境。

(3)进入该文件夹(cdd:

\tasm),键入如下命令开始编辑程序:

d:

\zxj>edit文件名.asm

(4)将程序保存后返回DOS进行汇编,键入如下命令:

d:

\zxj>tasm文件名.asm

如果汇编通过,进行下一步,如果出现error,返回3步骤,根据错误的行数进行修改,然后重新汇编,直到不产生error为止。

此时若出现warning可不予理会。

(5)将程序进行连接,键入如下命令:

d:

\zxj>link文件名.obj

如果连接正确,进行下一步,如果错误返回3步骤进行修改,然后重新编译和连接。

(6)执行程序,键入如下命令:

d:

\zxj>文件名.exe

如果执行正确,则应该显示正确结果;如果执行错误,返回步骤3,重新编译连接和执行。

(7)如果不能直接从程序中找出错误,可以应用Debug程序进行调试,键入如下命令:

d:

\zxj>td文件名.exe

在找出错误后,重新返回3步骤,重新编译连接和执行。

2、实验相关操作界面

(1)TD操作界面

四、实验源程序和流程图:

1、实验1:

流程图:

源代码:

DATASEGMENT

INPUTDB100,100DUP(0)

STRING1DB0DH,0AH,'PLEASEINPUTYOURSTRING',0DH,0AH,'$'

STRING2DB0DH,0AH,'THESTRINGYOUINPUTIS:

',0DH,0AH,'$'

STRING3DB0DH,0AH,'DOYOUWANTTOCONTINUE(Y/N):

',0DH,0AH,'$'

STRING4DB0DH,0AH,'THETOTALNUMBERIS:

',0DH,0AH,'$'

DATAENDS

STACKSSEGMENTSTACK

DB256DUP(0)

STACKSENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACKS

MAINPROCFAR

START:

MOVAX,DATA

MOVDS,AX

MOVAX,STACKS

MOVSS,AX

LOOP1:

MOVDX,OFFSETSTRING1

MOVAH,09H

INT21H

MOVDX,OFFSETINPUT

MOVAH,0AH

INT21H

MOVDX,OFFSETSTRING2

MOVAH,09H

INT21H

CALLDISP

MOVDX,OFFSETSTRING4

MOVAH,09H

INT21H

ADDBL,30H

MOVDL,BL

MOVAH,02H

INT21H

MOVDX,OFFSETSTRING3

MOVAH,09H

INT21H

MOVAH,01H

INT21H

CMPAL,'Y'

JZLOOP1

MOVAH,4CH

INT21H

MAINENDP

DISPPROCNEAR

XORCX,CX

MOVCL,INPUT[1]

MOVBL,INPUT[1]

MOVSI,2

AGAIN:

MOVDL,INPUT[SI]

CMPDL,61H

JBNEXT

CMPDL,7AH

JANEXT

SUBDL,20H

NEXT:

MOVAH,02H

INT21H

INCSI

LOOPAGAIN

RET

DISPENDP

CODEENDS

ENDSTART

 

2、实验2:

流程图:

源代码:

DATASEGMENT

INPUTDB100,100DUP(0)

STRING1DB0DH,0AH,'PLEASEINPUTYOURSTRING',0DH,0AH,'$'

STRING2DB0DH,0AH,'THESTRINGYOUINPUTIS:

',0DH,0AH,'$'

STRING3DB0DH,0AH,'DOYOUWANTTOCONTINUE(Y/N):

',0DH,0AH,'$'

STRING4DB0DH,0AH,'THETOTALNUMBERIS:

',0DH,0AH,'$'

DATAENDS

STACKSSEGMENTSTACK

DB256DUP(0)

STACKSENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACKS

MAINPROCFAR

START:

MOVAX,DATA

MOVDS,AX

MOVAX,STACKS

MOVSS,AX

LOOP1:

MOVDX,OFFSETSTRING1

MOVAH,09H

INT21H

MOVDX,OFFSETINPUT

MOVAH,0AH

INT21H

MOVDX,OFFSETSTRING2

MOVAH,09H

INT21H

CALLDISP

MOVDX,OFFSETSTRING4

MOVAH,09H

INT21H

ADDBL,30H

MOVDL,BL

MOVAH,02H

INT21H

MOVDX,OFFSETSTRING3

MOVAH,09H

INT21H

MOVAH,01H

INT21H

CMPAL,'Y'

JZLOOP1

MOVAH,4CH

INT21H

MAINENDP

DISPPROCNEAR

XORCX,CX

MOVCL,INPUT[1]

MOVBL,INPUT[1]

MOVSI,2

AGAIN:

MOVDL,INPUT[SI]

CMPDL,61H

JBNEXT

CMPDL,7AH

JANEXT

SUBDL,20H

NEXT:

MOVAH,02H

INT21H

INCSI

LOOPAGAIN

RET

DISPENDP

CODEENDS

ENDSTART

3、实验3

datasegment

input1db4,5dup(0)

input2db4,5dup(0)

input3db4,5dup(0)

input4db4,5dup(0)

input5db4,5dup(0)

tempdb00h,00h

tempoutdb00h

outputdb00h,00h,00h,00h,00h

string1db0dh,0ah,'pleaseinputyournumber(00h~ffh):

',0dh,0ah,'$'

string2db0dh,0ah,'thenumberyouinputis(00h~ffh):

',0dh,0ah,'$'

string3db0dh,0ah,'thenumberafterorderingis(00h~ffh):

',0dh,0ah,'$'

string4db0dh,0ah,'doyouwanttocontinue(y/n):

',0dh,0ah,'$'

dataends

stackssegmentstack

db256dup(0)

stacksends

codesegment

assumecs:

code,ds:

data,ss:

stacks

mainprocfar

start:

movax,data

movds,ax

movax,stacks

movss,ax

loopQ:

movdx,offsetstring1

movah,09h

int21h

movdx,offsetinput1

movah,0ah

int21h

movdx,offsetstring1

movah,09h

int21h

movdx,offsetinput2

movah,0ah

int21h

movdx,offsetstring1

movah,09h

int21h

movdx,offsetinput3

movah,0ah

int21h

movdx,offsetstring1

movah,09h

int21h

movdx,offsetinput4

movah,0ah

int21h

movdx,offsetstring1

movah,09h

int21h

movdx,offsetinput5

movah,0ah

int21h

callshowin

moval,input1[2]

movtemp[0],al

moval,input1[3]

movtemp[1],al

callchange

moval,tempout

movoutput[0],al

moval,input2[2]

movtemp[0],al

moval,input2[3]

movtemp[1],al

callchange

moval,tempout

movoutput[1],al

moval,input3[2]

movtemp[0],al

moval,input3[3]

movtemp[1],al

callchange

moval,tempout

movoutput[2],al

moval,input4[2]

movtemp[0],al

moval,input4[3]

movtemp[1],al

callchange

moval,tempout

movoutput[3],al

jmploop2

loop1:

jmploopQ;77

loop2:

moval,input5[2]

movtemp[0],al

moval,input5[3]

movtemp[1],al

callchange

moval,tempout

movoutput[4],al

callorder;85

movdx,offsetstring3

movah,09h

int21h

movsi,0

circle:

movah,output[si]

movdl,ah

movcl,4

shrdl,cl

calldisp

movdl,ah

anddl,0fh

calldisp

movdl,48h

movah,02h

int21h

movdl,0h

movah,02h

int21h

incsi

cmpsi,5

jnzcircle

movdx,offsetstring4

movah,09h

int21h

movah,1

int21h

cmpal,'y'

jzloop1

cmpal,'Y'

jzloop1

movah,4ch

int21h

mainendp

showinprocnear

movsi,2

circle1:

movdl,input1[si]

movah,02h

int21h

incsi

cmpsi,5

jnzcircle1

movdl,0h

movah,02h

int21h

movsi,2

circle2:

movdl,input2[si]

movah,02h

int21h

incsi

cmpsi,5

jnzcircle2

movdl,0h

movah,02h

int21h

movsi,2

circle3:

movdl,input3[si]

movah,02h

int21h

incsi

cmpsi,5

jnzcircle3

movdl,0h

movah,02h

int21h

movsi,2

circle4:

movdl,input4[si]

movah,02h

int21h

incsi

cmpsi,5

jnzcircle4

movdl,0h

movah,02h

int21h

movsi,2

circle5:

movdl,input5[si]

movah,02h

int21h

incsi

cmpsi,5

jnzcircle5

ret

showinendp

changeprocnear

xorax,ax

xorbx,bx

xordx,dx

movbl,temp[0]

cmpbl,40h

jbnext1

subbl,37h

jmpnext

next1:

subbl,30h

next:

movtemp[0],bl

movbl,temp[1]

cmpbl,40h

jbnext2

subbl,37h

jmpnext3

next2:

subbl,30h

next3:

moval,temp[0]

movcl,10h

mulcl

addal,bl

movtempout,al

ret

changeendp

orderprocnear

XORAL,AL

XORBL,BL

movsi,0h

movdi,1h

order1:

moval,output[si]

order2:

cmpal,output[di]

jnlnet

movbl,output[di]

movoutput[si],bl

movoutput[di],al

moval,output[si]

net:

incdi

cmpdi,5

jnzorder2

incsi

movdi,si

incdi

cmpsi,4

jnzorder1

ret

orderendp

dispprocnear

pushdx

pushax

cmpdl,9

jbenum

adddl,7

num:

adddl,30h

movah,02h

int21h

popax

popdx

ret

dispendp

codeends

endstart

五、实验结果

1、实验1:

2、实验2:

3、实验3:

 

六、遇到的问题及解决办法

1、在写代码的过程中遇到过很多问题

(1)在编程时忘记了add的两个操作数要同时为十六位符号数或八位符号数这个规则,因此在编译的时候出现了问题

(2)三个程序代码都是自己先写,然后再跟书上或网上的demo进行比较修改,在这个过程中发现熟悉一些指令可以让代码简单很多,譬如说lodsb、stosb、xor等等,在自己写的时候很难想到去用,因此对各种指令有一定的熟悉程度还是很必要的。

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

当前位置:首页 > 小学教育 > 学科竞赛

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

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