4360111汇编语言实验报告.docx

上传人:b****1 文档编号:23171153 上传时间:2023-05-15 格式:DOCX 页数:28 大小:275.96KB
下载 相关 举报
4360111汇编语言实验报告.docx_第1页
第1页 / 共28页
4360111汇编语言实验报告.docx_第2页
第2页 / 共28页
4360111汇编语言实验报告.docx_第3页
第3页 / 共28页
4360111汇编语言实验报告.docx_第4页
第4页 / 共28页
4360111汇编语言实验报告.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

4360111汇编语言实验报告.docx

《4360111汇编语言实验报告.docx》由会员分享,可在线阅读,更多相关《4360111汇编语言实验报告.docx(28页珍藏版)》请在冰豆网上搜索。

4360111汇编语言实验报告.docx

4360111汇编语言实验报告

南华大学

计算机科学与技术学院

实验报告

(2012—2013学年度第二学期)

课程名称:

汇编语言程序设计

实验名称:

汇编程序上机编写

 

姓名:

xxx

学号:

201140360111

专业班级:

网络工程01班

实验教室:

8—209

指导教师:

xxx

实验一用表格形式显示字符

一、实验目的:

用表格形式显示ASCII字符SMACII

二、实验内容:

按15*16列的表格形式显示ASCII码为10H-100H的所有字符,即以行为主的顺序及ASCII码递增的次序依次显示对应的字符。

每16个字符为一行,每行中的相邻两个字符之间用空白符隔开。

三、流程图:

N,计数器增一推入下一个值

 

四、程序设计和编码

;***************************************************

;作者xx

;功能:

用表格形式现实字符

;日期:

2013-5-13

;***************************************************

prognamsegment;prognam为段名,段始

assumecs:

prognam;定义代码段

start:

movah,02h;显示字符

movdl,10h;设置初始输出为ASCII的10h

movbl,15;输出显示为15行

e:

movcx,16;设置循环次数,16,表示输出显示为16列

l:

;标号,表明转移目标位置

int21h;显示输出

pushdx;推入堆栈

movah,02h;表示要进行显示

movdl,0

int21h;显示空白符

movah,02h;表示要进行显示

movdl,0

int21h;显示空白符

popdx;将栈顶元素推出,准备输出

incdl;设置下一个元素,加1指令

loopl;循环输出每行的16个ASCII元素

pushdx;将下一行的首元素推入堆栈

movah,02h

movdl,0dh;回车

int21h

movah,02h

movdl,0ah

int21h;输出换行

popdx;将栈顶元素推出

decbl;将bl寄存器减1

cmpbl,0;比较确定是否已经输出15行元素

jnee;若还未完成输出,则跳转至e,继续进行下一行元素的输出

jeexit;否则退出程序

exit:

movax,4c00h;清零

int21h

prognamends;段末

end

运行结果:

五、实验小结

通过这个小程序对汇编的思想有了一定的了解,其思想主要和寻址挂钩,本程序也用到了汇编中的循环结构,相信在不断的学习过程中,会对汇编有更深的了解。

实验二查找匹配字符串

一、目的:

查找匹配字符串SEARCH

二、实验内容

程序接收用户键入的一个关键字以及一个句子。

如果句子中不包含关键字则显示‘NOmatch!

’;如果句子中包含关键字则显示‘MATCH’,且把该字在句子中的位置用十六进制数显示出来。

三、流程图:

四、设计和编码

;***************************************************

;作者:

xx

;功能:

查找匹配字符串search

;日期:

2013-5-20

;***************************************************

DATASEGMENT

mess1DB'Enterkeyword:

','$'

mess2DB'EnterSentence:

','$'

mess3DB'Matchatlocation:

','$'

mess4DB'NOTMATCH.',13,10,'$'

mess5DB'Hifthesentence',13,10,'$'

changeDB13,10,'$'

stoknin1labelbyte

max1db10

act1db?

stokn1db10dup(?

stoknin2labelbyte

max2db50

act2db?

stokn2db50dup(?

DATAENDS

CODESEGMENT

;****************************************************

mainprocfar

assumecs:

code,ds:

data,es:

data

START:

pushds

subAX,AX

subBX,BX

subDI,DI

subSI,SI

pushAX;为返回dos并清空后面要用到的寄存器

MOVAX,DATA

MOVDS,AX

LEADX,mess1

MOVah,09

INT21h;输出Enterkeyword

LEADX,stoknin1

MOVah,0ah;用21号中段的0ah号功能获取关键字

INT21h

cmpact1,0

jeexit;如果为空直接退出程序

a10:

;********************************输入Sentence并判断

LEADX,change

MOVah,09

INT21h;输出回程,换行

LEADX,mess2

MOVah,09

INT21h;输出EnterSentence:

LEADX,stoknin2

MOVah,0ah

INT21h;用21号中段的0ah号功能获取句子

MOVAL,act1

CBW

MOVCX,AX;保存关键字长度到cx

PUSHCX;cx入栈

MOVAL,act2

cmpAL,0

jea50;保存句子长度到al,若句子为空则跳转显示notmatch

SUBAL,act1

jsa50;若句子长度小于关键字长度,则跳转显示notmatch

INCAL

CBW

LEABX,stokn2;将句子的首地址放进BX

MOVDI,0

MOVSI,0

a20:

;****************************************比较,内循环

MOVAH,[BX+DI]

CMPAH,stokn1[SI];遇见字符不相等就跳转到a30

jnea30

INCDI

INCSI

DECCX;没遇到一个相等的字符,cx-1,cx不为0则比较下一个字符,当cx为0是说明关键字比较完

CMPCX,0

jea40

jmpa20

a30:

;*****************************************外循环,BX+1,清空si,di继续内循环比较

INCBX

DECAL

cmpAL,0

jea50

MOVDI,0

MOVSI,0

POPCX

pushCX

jmpa20

a40:

;*****************************************match,将bx减去句子的首地址加一得到关键字所在位置,调用二进制转十六进制子函数将位置输出

SUBBX,offsetstokn2

INCBX

LEADX,change

MOVah,09

INT21h

LEADX,mess3

MOVah,09

INT21h

CALLbtoh

LEADX,mess5

MOVah,09

INT21h

jmpa10

;****************************************二进制转换十六进制

btohPROCNEAR

MOVCH,4

rotate:

MOVCL,4

ROLBX,CL

MOVAL,BL

andAL,0fh

addAL,30h

cmpal,3ah

jlprintit

addal,7h

printit:

MOVdl,al

MOVah,2

int21h

decch

jnzrotate

ret

btohendp

a50:

;*****************************************显示notmatch

LEADX,change

MOVah,09

INT21h

LEADX,mess4

MOVah,09

INT21h

jmpa10

exit:

ret

mainendp

CODEENDS

END

运行结果:

实验三

一、实验目的:

分类统计字符个数COUNT_CHAR

二、实验要求:

程序接收用户键入的一行字符(字数不超过80个,该字符串用回车符结束),并按字母、数字及其它字符分类计数,然后将结果存入以letter、digth和other为名的存数单元中。

三、实验提示

(1)程序可0AH功能调用把键入字符直接送到缓冲区中,然后再逐个取出分类计数。

也可01H功能调用在接收字符后先分类计数再存入缓冲区中。

(2)程序需要进入debug运行并查看计数结果。

四、设计和编码:

datasegment

stringdb80

db?

db80dup(?

);定义字符串string,长度为80

letterdb0;定义存储单元letter

digitdb0;定义存储单元digit

otherdb0;定义存储单元other

dataends

codesegment

mainprocfar

assumecs:

code,ds:

data

start:

movax,data

movds,ax

leadx,string

movah,0ah

int21h

leadi,string+2;输入一行字符,依次将每个字符存入字符串string中

subch,ch

movcl,string+1

adddx,2

check:

;将每个字符进行分类

moval,[di]

cmpal,0dh

jeexit;字符串以回车符结束,若进行分类的字符是回车符,则跳转至exit,退出程序

cmpal,30h;与ASCII码中的0,即30h比较

jbo;小于30h的,为其他类型字符,则跳转至o,在other块进行操作

cmpal,39h;与ASCII码中的9,即39h比较

jnad;不大于39h的,结合不小于30h的,则跳转至d,在digit块进行操作

jaloro;剩下的为字母或者其他类型

loro:

cmpal,41h;与ASCII码中的A,即41h比较

jbo;小于41h的,结合大于39h的,则跳转至o,在other块进行操作

cmpal,7ah;与ASCII码中的z,即7ah比较

jao;大于7ah的,则跳转至o,在other块进行操作

cmpal,5ah;与ASCII码中的Z,即5ah比较

jnal;不大于5ah的,结合大于41h的,则跳转至l,在letter块进行操作

cmpal,61h;与ASCII码中的a,即61h比较

jnbl;不小于61h的,结合不大于7ah的,则跳转至l,在letter块进行操作

jbo;小于61h的,结合大于5ah的,则跳转至o,在other块进行操作

l:

incletter;属于letter类型,则letter增1

incdi

jmpcheck;返回继续比较下一个字符

d:

incdigit;属于digit类型,则digit增1

incdi

jmpcheck

o:

incother;属于other类型,则other增1

incdi

jmpcheck

exit:

;输出letter,digit,other类型的计数结果

movah,02

movdl,0dh

int21h

movdl,0ah

int21h

movdl,4ch;输出L

int21h

movdl,3ah

int21h;输出:

movdl,0

int21h

xorax,ax

moval,letter

calldisplay;调用子程序display,输出

movah,02

movdl,0dh

int21h

movdl,0ah

int21h

movdl,44h;输出D

int21h

movdl,3ah

int21h;输出:

movdl,0

int21h

xorax,ax

moval,digit

calldisplay

movah,02

movdl,0dh

int21h

movdl,0ah

int21h

movdl,4fh;输出O

int21h

movdl,3ah

int21h;输出:

movdl,0

int21h

xorax,ax

moval,other

calldisplay

movax,4c00h

int21h

mainendp

displayprocnear;子程序display,用于将二进制数转换成十进制数

movbl,10

divbl

pushax

movdl,al

adddl,30h

movah,2

int21h

popax

movdl,ah

adddl,30h

movah,2

int21h

ret

displayendp

codeends

end

运行结果:

实验四统计学生各分数段成绩人数

一、实验目的:

统计各分数段的人数。

二、实验要求:

设有10个学生的成绩分别是76,69,84,90,73,88,99,63,100和80分。

试编制一个子程序统计60~69分,70~79分,80~89分,90~99分和100分的人数,分别存放到S6,S7,S8,S9和S10单元中。

三、流程图:

 

 

四、设计和编码

;*********************************************************

;作者xx

;功能:

统计各成绩段人数

;日期:

2013-5-13

;programtitlegoeshere--renshu

;*********************************************************

DATASSEGMENT

gradedb76,69,84,90,73,88,99,63,100,80

s6db1dup(30h)

s7db1dup(30h)

s8db1dup(30h)

s9db1dup(30h)

s10db1dup(30h)

mess6db'60-69:

$'

mess7db'70-79:

$'

mess8db'80-89:

$'

mess9db'90-99:

$'

mess10db'100:

$'

mess1db13,10,'$'

DATASENDS

stackssegment

;定义堆栈段

stacksends

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

movcx,10

;movbx,offsetgrade

xorsi,si

compare:

;movax,[bx]

cmpgrade[si],0046h

jlsix

cmpgrade[si],0050h

jlseven

cmpgrade[si],005ah

jleight

cmpgrade[si],0064h

jnenine

incs10

jmpchange_addr

six:

incs6

jmpchange_addr

seven:

incs7

jmpchange_addr

eight:

incs8

jmpchange_addr

nine:

incs9

jmpchange_addr

change_addr:

cmpcx,0

jeshow

incsi

loopcompare

show:

leadx,mess6

movah,09h

int21h

movah,02h

movdl,s6

int21h

leadx,mess1

movah,09h

int21h;输出成绩在60~69的数量

leadx,mess7

movah,09h

int21h

movdl,s7

movah,02h

int21h

leadx,mess1

movah,09h

int21h

leadx,mess8

movah,09h

int21h

movdl,s8

movah,02h

int21h

leadx,mess1

movah,09h

int21h

leadx,mess9

movah,09h

int21h

movdl,s9

movah,02h

int21h

leadx,mess1

movah,09h

int21h

leadx,mess10

movah,09h

int21h

movdl,s10

movah,02h

int21h

leadx,mess1

movah,09h

int21h

movah,4ch

int21h

CODESENDS

ENDSTART

运行结果:

实验五四分之一字节显示

一、实验目的:

四分之一字节显示

二、实验内容:

把AX中存放的16位二进制数K看作是8个二进制的"四分之一字节"。

试编写一程序片段,要求数一下值为3(即11B)的四分之一字节数,并将该数在终端上显示出来。

三、实验步骤

(1)初始化计数器count,测试K的高两位是否为11;

(2)若为11,则count加1,再逻辑左移两位;

(3)若不为11,则直接逻辑左移两位;

(4)直到数K全部逻辑左移完,将count输出在屏幕上。

三、实验流程图:

四、设计和编码:

;***************************************************

;作者:

xx

;功能:

;日期:

2013-6-05

;***************************************************

DATASSEGMENT

countdb1dup(30h);此处输入数据段代码

DATASENDS

STACKSSEGMENT

;此处输入堆栈段代码

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

movcx,8

movbx,0ffffh

compare:

moval,bl

andal,3

cmpal,3

jeL1

jmpL2

L1:

inccount

L2:

shrbx,1

shrbx,1

loopcompare

movdl,count

movah,02h

int21h

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

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

当前位置:首页 > PPT模板 > 图表模板

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

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