汇编实验报告山东大学.docx

上传人:b****5 文档编号:8048634 上传时间:2023-01-28 格式:DOCX 页数:37 大小:292.12KB
下载 相关 举报
汇编实验报告山东大学.docx_第1页
第1页 / 共37页
汇编实验报告山东大学.docx_第2页
第2页 / 共37页
汇编实验报告山东大学.docx_第3页
第3页 / 共37页
汇编实验报告山东大学.docx_第4页
第4页 / 共37页
汇编实验报告山东大学.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

汇编实验报告山东大学.docx

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

汇编实验报告山东大学.docx

汇编实验报告山东大学

实验一熟悉汇编环境及调试命令

内容和要求:

(1)选取教科书中典型例题(完整程序),用编辑软件在PC机中形成汇编源程序*.ASM文件,然后编译、连接,生成目标文件和可执行文件。

(2)用DEBUG程序进行调试,熟悉动态调试环境和常用命令。

目的:

掌握用编辑软件编辑程序文本的方法;在DOS环境下,熟练掌握用MASM5.0宏汇编程序对ASM文件进行编译、连接等操作步骤;熟悉并掌握用DEBUG调试程序。

实验程序

DATASSEGMENT

onedb20dup(32),1,'WELCOMEYOU!

',7,13,10

countequ$-one

DATASENDS

STACKSSEGMENTstack'stack'

stapdb256dup(?

topequthisword

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

movax,segstacks;此处输入代码段代码

movss,ax

movsp,offsettop

movsi,offsetone

movcx,count

next:

movdl,[si]

movah,2

int21h

incsi

loopnext

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

结果

Debug调试:

输入a,进行逐行汇编,输入c,比较两内存块,输入d,内存信息以16进制显示;输入e,修改内存指定的字节;输入f,可以预置一段内存;输入g,执行程序;输入h,制算术运算;输入i,从指定端口地址输入;输入l,读盘;输入m,内存块传送;输入n,置文件名;输入o,从指定端口地址输出;输入q,结束DEBUG调试;输入r,显示和修改寄存器;输入s,查找字节串;输入t,跟踪执行;输入u,反汇编;输入w,存盘操作。

实验总结:

1.通过实验,了解了程序书写,熟悉了MASM环境,编译和运行的方法,对汇编有了初步认识。

2.掌握了Debug调试方法,对程序修改有很大帮助,通过练习,熟悉了各调试指令。

 

实验二多位十进制数相加求和显示

内容和要求:

将两个多位十进制数(如四位)相加,要求被加数、加数以ASCII码形式按顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前)。

要求:

将相加结果仍以常用十进制数形式显示在屏幕上。

目的:

学习数据传送、加法运算及十进制数(BCD码)运算调整指令的用法;熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序过程,练习分析程序,会查错。

实验程序:

DATA1SEGMENT

bufdb10

db0

db10dup(0)

sumdw?

buffdb10

db0

db10dup(0)

sum1dw?

tw1db'pleaseinputthefirstnum:

','$'

tw2db'pleaseinputthesecondnum:

','$'

tw3db'sum:

','$';此处输入数据段代码

DATA1ENDS

STACKSSEGMENT

;此处输入堆栈段代码

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATA1,ss:

stacks

START:

MOVAX,DATA1

MOVDS,AX

movax,stacks

movss,ax

pushf

;显示输入a

movah,9

movdx,offsettw1

int21h

;输入buf

;movdx,segbuf

;movds,dx

movdx,offsetbuf

movah,0ah

int21h

;换行

movah,2

movdl,10

int21h

;换行

movah,2

movdl,10

int21h

;提示输入b

movah,9

movdx,offsettw2

int21h

;输入buf

;movdx,segbuf

;movds,dx

movdx,offsetbuff

movah,0ah

int21h

;换行

movah,2

movdl,10

int21h

movah,2

movdl,10

int21h

;显示加法标志

movah,9

movdx,offsettw3

int21h

;

;以下为加法过程

MOVDI,OFFSETbuff+2

MOVSI,OFFSETbuf+2

xordx,dx

xorax,ax

movdl,ds:

[di-1]

moval,ds:

[si-1]

adddi,dx

addsi,ax

movcx,0

movds:

[di],cx

movds:

[si],cx

pushax

pushdx

MOVDI,OFFSETbuff+2

MOVSI,OFFSETbuf+2

popdx

cmpdl,1

jetep2

movcx,dx

deccx

tep1:

movdx,cx

test1:

moval,ds:

[di]

xchgal,ds:

[di+1]

movds:

[di],al

incdi

looptest1

movcx,dx

movdi,offsetbuff+2

looptep1

tep2:

popax

cmpax,1

jetep4

movcx,ax

deccx

tep3:

movdx,cx

test2:

moval,ds:

[si]

xchgal,ds:

[si+1]

movds:

[si],al

incsi

looptest2

movcx,dx

movsi,offsetbuf+2

looptep3

tep4:

popf

MOVDI,OFFSETbuff+2

MOVSI,OFFSETbuf+2

movcx,10

ADDS:

MOVAL,ds:

[DI]

ADCAL,dS:

[SI]

AAA

MOVds:

[DI],AL

INCDI

INCSI

LOOPADDS

MOVCX,10

SHOW:

MOVDL,ds:

[DI-1]

ADDDL,30H

DECDI

MOVAH,2H

INT21H

LOOPSHOW

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

CODESENDS

ENDSTART

实验结果:

实验总结:

1.学会数据传送,由键盘输入是ASCII码需转换成十进制数加30h。

2.学会了汇编加法指令的使用方法,以及BCD码调整。

3.注意问题:

汇编内部处理数据与输入是反向的,在显示时应倒序显示。

 

实验三两个十进制数相乘并显示乘积

内容和要求:

实现一多位十进制数和一个一位十进制数的乘法,被乘数和乘数均以ASCII码形式存放在内存中,结果以十进制数形式显示在屏幕上。

目的:

掌握乘法指令的用法、计算结果的转换、存放及显示。

实验程序:

CRLFMACRO

MOVDL,0DH

MOVAH,02H

INT21H

MOVDL,0AH

MOVAH,02H

INT21H

ENDM

DATASEGMENT

DATA1DB20DUP(?

DATA2DB20DUP(?

str1db'Thefirstnumber(0~9):

','$'

str2db'Thesecondnumber(0~99):

','$'

zDB?

DATAENDS

STACKSEGMENT

STADB20DUP(?

TOPEQULENGTHSTA

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK,ES:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAX,STACK

MOVSS,AX

MOVAX,TOP

MOVSP,AX

movah,09h

leadx,str1

int21h

CRLF

MOVBX,01

MOVSI,OFFSETDATA1

CALLINPUT2

CRLF

movah,09h

leadx,str2

int21h

CRLF

MOVBX,02

MOVSI,OFFSETDATA2

CALLINPUT1

CRLF

CRLF

MOVSI,OFFSETDATA1

MOVBX,02

CALLDISPL

movah,02

movdl,2AH

INT21H

MOVSI,OFFSETDATA2

MOVBX,01

CALLDISPL

movah,02h

movdl,3dh

int21h

MOVDI,OFFSETDATA1

xorz,0

CALLADDA

MOVSI,OFFSETDATA2

MOVBX,03

CALLDISPL

CRLF

MOVAX,4C00H

INT21H

DISPLPROCNEAR

DSI:

MOVAH,06

MOVDL,[SI+2]

INT21H

MOVAH,06

MOVDL,[SI+1]

INT21H

MOVAH,06

MOVDL,[SI]

INT21H

RET

DISPLENDP

ADDAPROCNEAR

MOVDX,SI

MOVBP,DI

MOVBX,02

AD1:

SUBBYTEPTR[SI+BX-1],30H

DECBX

JNZAD1

SUBBYTEPTR[DI],30H

MOVSI,DX

MOVDI,BP

;MOVCX,01

CLC

AD2:

MOVAL,[SI]

MOVBL,[DI]

imulBL

AAM

movz,ah

MOV[SI],al

movAL,[SI+1]

movBL,[DI]

imulBL

AAM

ADCAL,z

AAA

MOV[SI+1],AL

MOV[SI+2],AH

MOVSI,DX

MOVDI,BP

MOVBX,03

AD3:

ADDBYTEPTR[SI+BX-1],30H

DECBX

JNEAD3

;ADDBYTEPTR[DI],30H

RET

INPUT1PROCNEAR

IN1:

MOVAH,01

INT21H

MOV[SI+1],AL

decSI

DECBX

JNZIN1

RET

INPUT1ENDP

INPUT2PROCNEAR

IN1:

MOVAH,01

INT21H;

MOV[SI],AL

RET

INPUT2ENDP

ADDAENDP

CODEENDS

ENDSTART

 

实验结果:

 

实验总结:

1.通过实验学会了,使用汇编语言完成相乘运算以及转过程。

2.与加法类似,应注意显示顺序的问题。

3.学会了使用宏定义,重复部分只需写一次即可,大大简化了程序的复杂性,简洁易懂。

 

实验四字符串匹配程序

内容与要求:

编写程序,实现两个字符串(假设两字符串事先已存于内存中)的比较。

若相同,则显示比较结果’MATCH’,否则显示’NOMATCH’。

目的:

掌握字符串比较指令的使用方法及运行结果的提示显示。

实验程序:

CRLFMACRO

MOVAH,02H

MOVDL,0DH

INT21H

MOVAH,02H

MOVDL,0AH

INT21H

ENDM

datasegment

string1db100,?

100dup(?

string2db100,?

100dup(?

str1db'MATCH','$'

str2db'NOMATCH','$'

dataend

codesegment'code'

assumecs:

code,ds:

data

start:

movax,data

movds,ax

moves,ax

leadx,string1

movah,0AH

int21h

subch,ch

adddx,2

movsi,dx

CRLF

leadx,string2

movah,0AH

int21h

subch,ch

adddx,2

movdi,dx

CRLF

movcl,100

repzcmpsb

jnzdiffer

jmpsame

same:

movah,09h

leadx,str1

int21h

jmptail

differ:

movah,09h

leadx,str2

int21h

tail:

movah,4ch

int21h

codeends

endstart

实验结果:

实验总结:

1.学会了repzcmpsb指令的使用方法,其比较次数放在cl中,学会了cx寄存器的使用方法。

2.进一步了解了DOS调用方法,分别是9号调用显示字符串,1号调用从键盘输入字符和4CH调用终止程序。

9号使用DX指向字符串首地址,1号结果存在AL中。

通过实验,对DOS功能调有了更加深刻的认识。

3.学会了跳转指令使用,jmp、jz以及jnz的区别,使用时应选择正确的标志寄存器。

 

实验五查找字符串中的指定字符(即字符搜索)

内容与要求:

用串操作指令设计程序,实现在指定存储区(长度:

100H)中寻找指定的匹配字符,当遇空格字符(20H)便结束,并显示查找结果,如提示“找到”或“未找到”。

要求:

欲查找的指定字符从键盘输入。

目的:

灵活运用串操作指令,掌握DOS功能调用,完成键入信息的提示和信息键入。

实验程序:

CRLFMACRO

MOVAH,02H

MOVDL,0DH

INT21H

MOVAH,02H

MOVDL,0AH

INT21H

ENDM

datasegment

string1db100,?

100dup(?

string2db0

str3db'pleaseinputastring:

','$'

keydb'Pleasethekeyword:

','$'

str1db'FIND','$'

str2db'NOFIND','$'

dataends

codesegment'code'

assumecs:

code,ds:

data,es:

data

start:

movax,data

movds,ax

moves,ax

MOVAH,09H

leadx,str3

INT21H

movdx,offsetstring1

movah,0AH

int21h

subch,ch

CRLF

MOVAH,09H

leadx,key

INT21H

movah,01H

int21h

movstring2,al

CRLF

;xorax,ax

movdi,offsetstring1+2

moval,string2

movcl,100

repnescasb

jnenofind

find:

movah,09h

leadx,str1

int21h

jmptail

nofind:

movah,09h

leadx,str2

int21h

tail:

movah,4ch

int21h

codeends

endstart

实验结果:

实验总结:

1.本实验与上一个实验内容类似,不过不同之处在于直接比较两个已存在的字符串内容是否

等。

2.对字符串内容比较时,使用repnescasb,用标志位ZF不相等时跳转。

3.用cl控制比较次数。

 

实验六将键入的十六进制数转换为对应二进制数并回显

内容与要求:

编写程序,将键盘输入的四位十六进制数形式转换为对应的二进制数形式,并显示在屏幕上,(如:

键入AE60H---回显1010111001100000)。

若输入的不是0—F间的数字字符,则显示出错信息,并提示重新输入。

目的:

掌握接收键盘输入的方法,并掌握数制转换,将转换结果数据以ASCII码显示。

实验程序:

CRLFMACRO

MOVAH,02H

MOVDL,0DH

INT21H

MOVAH,02H

MOVDL,0AH

INT21H

ENDM

SPACEMACRO

MOVAH,02H

MOVDL,32

INT21H

ENDM

DATASSEGMENT

xdb?

xcdb'Pleaseinputahexnumber(0000~FFFF):

','$'

eordb'error!

',0dh,0ah,'$'

bufdb10,?

10dup(?

DATASENDS

STACKSSEGMENT

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

movah,09h

leadx,xc

int21h

CRLF

movdx,offsetbuf

movah,0Ah

int21h

movdi,offsetbuf+2

CRLF

movcx,4

loop0:

moval,[di]

incdi

cmpal,30h

jsERROR

cmpal,40h

jsl1

cmpal,41h

jsERROR

cmpal,47h

jsl1

cmpal,61h

jsERROR

cmpal,67h

jnsERROR

l1:

looploop0

movcx,4

movdi,offsetbuf+2

loop1:

movx,00010000b

moval,[di]

incdi

cmpal,40h

jssub1

cmpal,47h

jsadd1

cmpal,67h

jsadd1

sub1:

subal,30h

jmps1

add1:

addal,09h

s1:

movdh,al

pushcx

movcx,4

comp:

moval,dh

shrx,1

andal,x

jnzonedisp

jzzerodisp

onedisp:

movah,02h

movdl,31h

int21h

jmptail1

zerodisp:

movah,02h

movdl,30h

int21h

tail1:

loopcomp

SPACE

popcx

looploop1

jmptail

ERROR:

leadx,eor

MOVAH,09H

INT21H

tail:

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

实验结果:

实验总结:

1.输入的数字在寄存器中以二进制储存,但不能依次显示,用00001000序列与其进行比较,此序列每比较一次右移一位,这样可以把每一位数值提取出来。

2.判断输入值在0~9、a~f还是A~F范围内,需要让其分别与3ah,47h与67h进行比较。

实验七字符串键入和统计显示程序

内容与要求:

显示信息“输入字符串,回车或空格结束”,回车或空格后显示输入字符串的字符总个数,统计并显示其中的数字字符(1--9)个数和非数字字符个数。

目的:

掌握字符串信息的统计方法和数据的显示。

CRLFMACRO

MOVAH,02H

MOVDL,0DH

INT21H

MOVAH,02H

MOVDL,0AH

INT21H

ENDM

SPACEMACRO

MOVAH,02H

MOVDL,32

INT21H

ENDM

DATASSEGMENT

Ldb0

Ddb0

str1db'Pleaseinputastring:

','$'

digdb'Digital:

','$'

letdb'Letter:

','$'

bufdb100,?

100dup(?

DATASENDS

STACKSSEGMENT

;此处输入堆栈段代码

STACKSENDS

CODESSEGMENT

ASSUMECS:

CODES,DS:

DATAS,SS:

STACKS

START:

MOVAX,DATAS

MOVDS,AX

movah,09h

leadx,str1

int21h

CRLF

movdx,offsetbuf

movah,0Ah

int21h

movdi,offsetbuf+2

CRLF

check:

moval,[di]

incdi

cmpal,0dh

jzk

cmpal,3ah

jsadd1

jnsadd2

add1:

incD

jmps1

add2:

incL

s1:

jmpcheck

k:

movah,09h

leadx,dig

int21h

subah,ah

moval,D

movdl,1

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

当前位置:首页 > 工作范文 > 行政公文

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

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