汇编语言实验题目及测试截图456Word格式文档下载.docx

上传人:b****6 文档编号:21251810 上传时间:2023-01-28 格式:DOCX 页数:13 大小:83.65KB
下载 相关 举报
汇编语言实验题目及测试截图456Word格式文档下载.docx_第1页
第1页 / 共13页
汇编语言实验题目及测试截图456Word格式文档下载.docx_第2页
第2页 / 共13页
汇编语言实验题目及测试截图456Word格式文档下载.docx_第3页
第3页 / 共13页
汇编语言实验题目及测试截图456Word格式文档下载.docx_第4页
第4页 / 共13页
汇编语言实验题目及测试截图456Word格式文档下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

汇编语言实验题目及测试截图456Word格式文档下载.docx

《汇编语言实验题目及测试截图456Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《汇编语言实验题目及测试截图456Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。

汇编语言实验题目及测试截图456Word格式文档下载.docx

.startup

shuru:

开始输入月份编号

leadx,msg1

movah,09h

int21h;

显示提示信息

leadx,buffer

movah,0ah

输入月份数值

cmpactlen,0;

若没有输入月份则转出错处理

jeshuruerr

以下判断输入月份是否合法

leadi,string

cmpactlen,2

jeda10;

若输入的是2位数月份值则转到da10标号处执行

moval,string;

若只输入1位数字月份值,则读出该值

andal,0fh;

把ASCII码转换为对应数字

jmpjisuan

da10:

moval,string

把月份数值十位的ASCII码转换为对应数字(如12月的1字)

movbl,10

mulbl

andstring[1],0fh;

把月份数值个位的ASCII码转换为对应数字

addal,string[1];

十位加上个位(如12月)

jisuan:

以下计算偏移地址

cmpal,1;

比1小是非法月份

jbshuruerr;

若月份值小于1则转出错处理

cmpal,12

jashuruerr;

比12大也是非法月份

subal,1;

月份值减1

shlal,1

shlal,1;

月份再乘4对应了MON字符串中从首地址开始的字符相对位置

xorah,ah;

1月份从0位置开始即JAN,...5月份从位置16开始即MAY

leasi,mon;

找到被显示月份字符的位置

addsi,ax

movcx,3

output:

movdl,[si];

输出对应月份英文缩写

movah,2

int21h

incsi

loopoutput

.exit0

shuruerr:

leadx,msg2;

输入出错时提示出错,并转到程序起始处重新执行

movah,09h

jmpshuru

end

2、程序汇编通过后,运行程序察看输出结果。

3、程序运行中不输入月份值(直接回车),或输入非法月份值,观察程序执行的情况。

实验六分支与循环混合结构程序设计

1、掌握利用.IF语句实现分支程序的设计方法;

2、掌握利用.REPEAT语句实现循环程序的设计方法;

3、掌握DIV指令的使用特点;

4、掌握地址表的定义和使用方法。

实现成绩单的分等级统计功能,在数据段中有成绩单的定义,并包含有若干个分数,程序根据成绩单数据的个数循环分别统计个分数段成绩的个数,最后输出个等级段的分数个数。

要求:

成绩单数据少于100字节,输出的每个档次统计值按两位数显示。

HANDB42,62,68,70,79,82,85,90,95,99,66,88,78,90,98,200;

成绩单

countequ$-han;

记录数据个数

MEMDB6dup(0);

分别用于存放各分数段成绩的个数

scoreedb10,13,'

Score"

E"

countis:

定义各分数段的提示信息

scoreddb10,13,'

D"

scorecdb10,13,'

C"

scorebdb10,13,'

B"

scoreadb10,13,'

A"

scoreodb10,13,'

Other"

tabledwscoreo,scoree,scored,scorec,scoreb,scorea;

定义地址表

MOVCX,count

movsi,0

begin:

统计各个分数段的成绩个数

.ifhan[si]<

60

addmem[1],1

.elseifhan[si]>

=60&

&

han[si]<

=69

addmem[2],1

=70&

=79

addmem[3],1

=80&

=89

addmem[4],1

=90&

=99

addmem[5],1

.else

addmem[0],1

.endif

loopbegin

movcx,6

.repeat;

开始循环

movsi,cx

decsi

addsi,si;

计算地址表中对应地址项与提示信息的对应关系

movdx,table[si]

movah,9

xorah,ah

movsi,cx

MOVal,mem[si-1];

读出统计好的一个数值(此处只能处理99以下的)

movbl,10

divbl;

ax/10

movmem[si-1],ah;

AH为余数是个位,暂时存放回该内存单元

movdl,AL;

al为商是十位

adddl,30h;

转换为ASCII码

MOVAH,2

INT21H;

以十进制形式显示十位

movdl,mem[si-1]

adddl,30h

再显示个位

.untilcxz;

CX自动减1,减到0结束循环

END

3、修改成绩单的内容再重新汇编和运行程序,观察程序的结果变化情况。

把数据修改为22,32,48,50,69,72,85,40,75,89,66,58,48,70,78,200

 

4、利用DEBUG工具的U命令反汇编可执行程序,观察.IF语句及.REPEAT语句所对应的汇编指令情况。

5、利用MASM的命令行,汇编源文件并生成.LST列表文件,查看列表文件内容。

由:

masm/l+文件名生成lst

注:

实际上高级程序结构控制语句在汇编时,都转换成相应的比较指令和条件转移指令了。

高级程序结构控制语句使得程序设计、理解都变得非常方便。

生成list文件为

Microsoft(R)MacroAssemblerVersion6.15.880306/07/1119:

36:

33

6.asmPage1-1

.modelsmall

.stack

0000.data

0000162030324548HANDB22,32,48,50,69,72,85,40,75,89,66,58,48,70,78,200;

55284B59423A

30464EC8

0010=0010countequ$-han;

00100006[MEMDB6dup(0);

00

]

00160A0D53636F72scoreedb10,13,'

;

652022452220

636F756E7420

69733A24

002C0A0D53636F72scoreddb10,13,'

652022442220

00420A0D53636F72scorecdb10,13,'

652022432220

00580A0D53636F72scorebdb10,13,'

652022422220

006E0A0D53636F72scoreadb10,13,'

652022412220

00840A0D53636F72scoreodb10,13,'

6520224F7468

65722220636F

756E74206973

3A24

009E0084R0016R002CRtabledwscoreo,scoree,scored,scorec,scoreb,scorea;

0042R0058R006ER

0000.code

.startup

0017B90010MOVCX,count

001ABE0000movsi,0

001Dbegin:

.ifhan[si]<

002480060011R01addmem[1],1

.elseifhan[si]>

003980060012R01addmem[2],1

004E80060013R01addmem[3],1

006380060014R01addmem[4],1

007880060015R01addmem[5],1

.else

007F80060010R01addmem[0],1

.endif

008446incsi

0085E296loopbegin

0087B90006movcx,6

.repeat;

008A8BF1movsi,cx

008C4Edecsi

008D03F6addsi,si;

008F8B94009ERmovdx,table[si]

0093B409movah,9

0095CD21int21h;

009732E4xorah,ah

00998BF1movsi,cx

009B8A84000FRMOVal,mem[si-1];

009FB30Amovbl,10

00A1F6F3divbl;

00A388A4000FRmovmem[si-1],ah;

AH为余数是个位,暂时存放回该内存单元

00A78AD0movdl,AL;

00A980C230adddl,30h;

00ACB402MOVAH,2

00AECD21INT21H;

00B0B402MOVAH,2

00B28A94000FRmovdl,mem[si-1]

00B680C230adddl,30h

00B9CD21INT21H;

.untilcxz;

CX自动减1,减到0结束循环

.exit0

END

6.asmSymbols2-1

SegmentsandGroups:

NameSizeLengthAlignCombineClass

DGROUP.............GROUP

_DATA.............16Bit00AAWordPublic'

DATA'

STACK.............16Bit0400ParaStack'

STACK'

_TEXT.............16Bit00C2WordPublic'

CODE'

Symbols:

NameTypeValueAttr

@CodeSize...........Number0000h

@DataSize...........Number0000h

@Interface...........Number0000h

@Model.............Number0002h

@Startup............LNear0000_TEXT

@code.............Text_TEXT

@data.............TextDGROUP

@fardata?

...........TextFAR_BSS

@fardata............TextFAR_DATA

@stack.............TextDGROUP

HAN..............Byte0000_DATA

MEM..............Byte0010_DATA

begin.............LNear001D_TEXT

count.............Number0010h

scorea.............Byte006E_DATA

scoreb.............Byte0058_DATA

scorec.............Byte0042_DATA

scored.............Byte002C_DATA

scoree.............Byte0016_DATA

scoreo.............Byte0084_DATA

table.............Word009E_DATA

0Warnings

0Errors

4-6.确定自变量wordX中的1的最低位数(0~15),并将结果存于变量byteY中;

若wordX中没有1的位,则将-1存入byteY。

实验源程序:

.modelsmall

.stack

.data

wordXdw56

byteYdb?

.code

.startup

movax,wordX

movcx,16

movdl,-1

again:

incdl

testax,1

rorax,1

loopeagain

jenotfound

movbyteY,dl

jmpdone

notfound:

movbyteY,-1

done:

movah,02h

movbl,byteY

End

运行结果:

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

当前位置:首页 > 求职职场 > 笔试

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

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