汇编语言实验题目及测试截图456.docx

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

汇编语言实验题目及测试截图456.docx

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

汇编语言实验题目及测试截图456.docx

汇编语言实验题目及测试截图456

实验五分支结构程序设计

实验目的

1、掌握利用无条件转移指令JMP和有条件转移指令实现多分支程序的设计方法。

2、掌握用DOS的中断调用,实现再程序执行过程中从键盘动态输入字符串的方法。

3、掌握程序中标号的定义和使用。

实验内容

实现从键盘输入一个月份数值(1-12),根据输入的月份数值显示相应的月份英文单词缩写,如输入5则显示May。

实验步骤

1、编辑下列程序:

.modelsmall

.stack

.data

mondb'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'

msg1db'Pleaseinputamonth(1-12):

',13,10,'$'

msg2db'Inputerror!

Nowtryagain...',13,10,'$'

bufferlabelbyte;定义输入月份的输入缓冲区

maxlendb3;最多2个数字,包括一个回车

actlendb?

;保存实际输入的字符个数

stringdb3dup(?

);保存输入的月份数字内容(ASCII码)

.code

.startup

shuru:

;开始输入月份编号

leadx,msg1

movah,09h

int21h;显示提示信息

leadx,buffer

movah,0ah

int21h;输入月份数值

cmpactlen,0;若没有输入月份则转出错处理

jeshuruerr

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

leadi,string

cmpactlen,2

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

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

andal,0fh;把ASCII码转换为对应数字

jmpjisuan

da10:

moval,string

andal,0fh;把月份数值十位的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

int21h

jmpshuru

end

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

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

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

实验目的

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

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

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

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

实验内容

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

要求:

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

实验步骤

1、编辑下列程序:

.modelsmall

.stack

.data

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,'Score"D"countis:

$'

scorecdb10,13,'Score"C"countis:

$'

scorebdb10,13,'Score"B"countis:

$'

scoreadb10,13,'Score"A"countis:

$'

scoreodb10,13,'Score"Other"countis:

$'

tabledwscoreo,scoree,scored,scorec,scoreb,scorea;定义地址表

.code

.startup

MOVCX,count

movsi,0

begin:

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

.ifhan[si]<60

addmem[1],1

.elseifhan[si]>=60&&han[si]<=69

addmem[2],1

.elseifhan[si]>=70&&han[si]<=79

addmem[3],1

.elseifhan[si]>=80&&han[si]<=89

addmem[4],1

.elseifhan[si]>=90&&han[si]<=99

addmem[5],1

.else

addmem[0],1

.endif

incsi

loopbegin

movcx,6

.repeat;开始循环

movsi,cx

decsi

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

movdx,table[si]

movah,9

int21h;显示提示信息

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;以十进制形式显示十位

MOVAH,2

movdl,mem[si-1]

adddl,30h

INT21H;再显示个位

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

.exit0

END

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

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,'Score"E"countis:

$';定义各分数段的提示信息

652022452220

636F756E7420

69733A24

002C0A0D53636F72scoreddb10,13,'Score"D"countis:

$'

652022442220

636F756E7420

69733A24

00420A0D53636F72scorecdb10,13,'Score"C"countis:

$'

652022432220

636F756E7420

69733A24

00580A0D53636F72scorebdb10,13,'Score"B"countis:

$'

652022422220

636F756E7420

69733A24

006E0A0D53636F72scoreadb10,13,'Score"A"countis:

$'

652022412220

636F756E7420

69733A24

00840A0D53636F72scoreodb10,13,'Score"Other"countis:

$'

6520224F7468

65722220636F

756E74206973

3A24

009E0084R0016R002CRtabledwscoreo,scoree,scored,scorec,scoreb,scorea;定义地址表

0042R0058R006ER

0000.code

.startup

0017B90010MOVCX,count

001ABE0000movsi,0

001Dbegin:

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

.ifhan[si]<60

002480060011R01addmem[1],1

.elseifhan[si]>=60&&han[si]<=69

003980060012R01addmem[2],1

.elseifhan[si]>=70&&han[si]<=79

004E80060013R01addmem[3],1

.elseifhan[si]>=80&&han[si]<=89

006380060014R01addmem[4],1

.elseifhan[si]>=90&&han[si]<=99

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];读出统计好的一个数值(此处只能处理99以下的)

009FB30Amovbl,10

00A1F6F3divbl;ax/10

00A388A4000FRmovmem[si-1],ah;AH为余数是个位,暂时存放回该内存单元

00A78AD0movdl,AL;al为商是十位

00A980C230adddl,30h;转换为ASCII码

00ACB402MOVAH,2

00AECD21INT21H;以十进制形式显示十位

00B0B402MOVAH,2

00B28A94000FRmovdl,mem[si-1]

00B680C230adddl,30h

00B9CD21INT21H;再显示个位

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

.exit0

END

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

36:

33

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

int21h

.exit0

End

运行结果:

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

当前位置:首页 > 初中教育 > 其它课程

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

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