汇编语言实验报告.docx

上传人:b****2 文档编号:17814918 上传时间:2023-08-04 格式:DOCX 页数:32 大小:284.38KB
下载 相关 举报
汇编语言实验报告.docx_第1页
第1页 / 共32页
汇编语言实验报告.docx_第2页
第2页 / 共32页
汇编语言实验报告.docx_第3页
第3页 / 共32页
汇编语言实验报告.docx_第4页
第4页 / 共32页
汇编语言实验报告.docx_第5页
第5页 / 共32页
汇编语言实验报告.docx_第6页
第6页 / 共32页
汇编语言实验报告.docx_第7页
第7页 / 共32页
汇编语言实验报告.docx_第8页
第8页 / 共32页
汇编语言实验报告.docx_第9页
第9页 / 共32页
汇编语言实验报告.docx_第10页
第10页 / 共32页
汇编语言实验报告.docx_第11页
第11页 / 共32页
汇编语言实验报告.docx_第12页
第12页 / 共32页
汇编语言实验报告.docx_第13页
第13页 / 共32页
汇编语言实验报告.docx_第14页
第14页 / 共32页
汇编语言实验报告.docx_第15页
第15页 / 共32页
汇编语言实验报告.docx_第16页
第16页 / 共32页
汇编语言实验报告.docx_第17页
第17页 / 共32页
汇编语言实验报告.docx_第18页
第18页 / 共32页
汇编语言实验报告.docx_第19页
第19页 / 共32页
汇编语言实验报告.docx_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

汇编语言实验报告.docx

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

汇编语言实验报告.docx

汇编语言实验报告

实验报告

 

实验课程:

IBM-PC汇编语言程序设计

学生姓名:

毛训星

学号:

6100410101

专业班级:

电气信息类III103班

 

2011年12月17日

南昌大学实验报告

南昌大学实验报告

---(4)汇编语言程序上机过程

学生姓名:

毛训星学号:

6100410101专业班级:

电Ⅲ103班

实验类型:

□验证■综合□设计□创新实验日期:

实验成绩:

一、实验目的

熟练掌握汇编语言程序的编辑、调试和运行的过程和方法。

了解汇编语言程序的汇编、运行环境。

二、实验内容

1.掌握常用的编辑工具软件(如WORD、EDIT)、MASM和LINK的使用;

2.伪指令:

SEGMENT,ENDS,ASSUME,END,OFFSET,DUP;

3.利用的INT21H的1号功能实现键盘输入的方法;

三、实验环境

PC微机

DOS操作系统或Windows操作系统

MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境

四、实验要求

1.仔细阅读有关伪指令SEGMENT,ENDS,ASSUME,END,OFFSET,DUP的内容;

2.了解利用的INT21H的1号功能实现键盘输入的方法,了解.EXE文件和.COM文件的区别及用INT21H4C号功能返回系统的方法;

3.阅读下面程序段。

五、主要实验步骤

程序:

datasegment

messagedb'Thisisasampleprogramofkeyboardanddisply'

db0dh,0ah,'Pleasestrikethekey!

',0dh,0ah,'$'

dataends

stacksegmentparastack'stack'

db50dup(?

stackends

codesegment

assumecs:

code,ds:

data,ss:

stack

start:

movax,data

movds,ax

movdx,offsetmessage

movah,9

int21h

again:

movah,1

int21h

cmpal,1bh

jeexit

cmpal,61h

jcnd

cmpal,7ah

jand

andal,11011111b

nd:

movdl,al

movah,2

int21h

jmpagain

exit:

movah,4ch

int21h

codeends

endstart

实验步骤:

1.用用文字编辑工具(记事本或EDIT)将源程序输入,其扩展名为.ASM。

2.用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。

若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。

3.用TYPE命令显示1产生的.LST文件。

4.用LINK将.OBJ文件连接成可执行的.EXE文件。

5.在DOS状态下运行LINK产生的.EXE文件。

即在屏幕上显示标题并提示你按键。

每按一键在屏幕上显示二个相同的字符,但小写字母被改成大写。

按ESC键可返回DOS。

若未出现预期结果,用DEBUG检查程序。

六、思考题

1、若在源程序中把INT21H的'H'省去,会产生什么现象?

代码编译连接均为正常,但是运行时无法输入与输出,也无法退出。

2、把INT21H4CH号功能改为INT20H,行不行?

更改后,编译链接均正常,输入输出也正常,但是按下ESC退出时会出现错误,错误如下:

七、参考资料

《IBM-PC汇编语言程序设计》

《汇编语言实验指导书》

南昌大学实验报告

---(7)子程序实验

学生姓名:

毛训星学号:

6100410101专业班级:

电Ⅲ103班

实验类型:

□验证■综合□设计□创新实验日期:

实验成绩:

一、实验目的

1.掌握主程序与子程序之间的调用关系及调用方法;

2.掌握子程序调用过程中近程调用与远程调用的区别;

3.掌握通过堆栈转送参数的方法。

二、实验内容

1.将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。

要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示。

2.编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符”b”的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符”b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。

三、实验环境

PC微机

DOS操作系统或Windows操作系统

MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境

四、实验要求

1.第一个实验程序用子程序的近程调用实现。

由于在调用HEXASC子程序时,子程序又调用了DISP子程序,这叫子程序的嵌套调用。

实验过程中可以从堆栈的内容看到两个子程序的返回地址值。

由于是近调用,地址值只包括返回地址的段内偏移量。

在每个子程序的执行中,检查CS值是不变的。

2.第二个程序是利用远调用的方法调用子程序的。

在远调用情况下,主程序与子程序处在不同的逻辑代码段中,可在子程序执行中查看CS值,它与主程序中的CS值是不同的。

子程序调用后,堆栈中保留了返回地址的段地址及段内偏移量。

3.第二个程序中,主程序与子程序之间参数的传送是由堆栈实现的。

一段是将参数(此处是串首址TABLE,串的长度N及待统计的字符“b”)顺序压如堆栈,在子程序调用后,通过BP指针对堆栈中的参数访问,并将统计的结果通过堆栈返回。

有关该方法的原理此处不再介绍。

4.预习子程序设计的基本方法,根据实验内容要求,画出子程序及主程序的流程图;熟悉键盘键入字符串及用堆栈传送参数的程序段编制方法。

五、主要实验步骤

1.编辑、汇编两个源程序,生成相应的可执行文件(.EXE)

2.用DEBUG的R命令,T命令或G命令和D命令检查远程调用及近程调用时堆栈的变化。

特别是通过堆栈传送的参数和子程序取出的参数是返回参数的详细过程。

3.检查程序执行的结果是否正确。

实验内容1流程图:

主程序子程序HEXASC

 

子程序DISP

实验内容1结果:

 

实验内容2流程图:

主程序子程序

实验内容2结果:

实验内容1代码:

DATASEGMENT

BUFDB0ABH,0CDH,0DEH,01H,02H,03H

DB3AH,4BH,5CH,6FH

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

LEABX,BUF

MOVCX,0AH

LOP:

MOVAL,[BX]

CALLHEXASC

INCBX

LOOPLOP

MOVAH,4CH

INT21H

HEXASCPROCNEAR

PUSHCX

PUSHAX

MOVDL,AL

MOVCL,4

SHRDL,CL

CALLDISP

POPAX

MOVDL,AL

ANDDL,0FH

CALLDISP

POPCX

RET

HEXASCENDP

DISPPROCNEAR

CMPDL,9

JBENEXT

ADDDL,7

NEXT:

ADDDL,30H

MOVAH,2

INT21H

RET

DISPENDP

CODEENDS

ENDSTART

实验内容2代码:

DATASEGMENT

CHARDB'b'

BUFDB50H,?

50HDUP(?

DATAENDS

MCODESEGMENT

ASSUMECS:

MCODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

LEADX,BUF

MOVAH,10

INT21H

MOVDL,0AH

MOVAH,2

INT21H

LEASI,BUF

MOVCL,[SI+1]

MOVCH,0

INCSI

INCSI

MOVAL,CHAR

MOVAH,0

PUSHSI

PUSHCX

PUSHAX

CALLFARPTRCHECK

POPAX

PUSHAX

MOVDL,AL

MOVCL,4

SHRDL,CL

CMPDL,9

JBEJ1

ADDDL,7

J1:

ADDDL,30H

MOVAH,2

INT21H

POPAX

MOVDL,AL

ANDDL,0FH

CMPDL,9

JBEJ2

ADDDL,7

J2:

ADDDL,30H

MOVAH,2

INT21H

MOVAH,4CH

INT21H

MCODEENDS

SCODESEGMENT

ASSUMECS:

SCODE

CHECKPROCFAR

PUSHBP

MOVBP,SP

MOVSI,[BP+10]

MOVCX,[BP+8]

MOVAX,[BP+6]

XORAH,AH

AGAIN:

CMPAL,[SI]

JNENEXT1

INCAH

NEXT1:

INCSI

LOOPAGAIN

MOVAL,AH

MOV[BP+10],AX

POPBP

RET4

CHECKENDP

SCODEENDS

ENDSTART

六、思考题

分析远程调用与近程调用的区别,在用DEBUG有关命令观察时,执行过程有何不同。

答:

在近程调用中CS值不变,而在远程调用中CS值发生改变;近程调用中SP+2,远程调用中SP+4。

七、参考资料

《IBM-PC汇编语言程序设计》

《汇编语言实验指导书》

南昌大学实验报告

---(8)字符处理程序实验

学生姓名:

毛训星学号:

6100410101专业班级:

电Ⅲ103班

实验类型:

□验证■综合□设计□创新实验日期:

实验成绩:

一.实验目的

1.熟悉串操作指令的功能与应用;

2.掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序。

二.实验内容

1.字符串统计。

从键盘最多输入80个字符存放在STR开始的存储区中,统计其中含有小写字母的个数,将统计结果以两位十进制数显示在屏幕上。

2.删除重复字符。

从键盘最多输入80个字符存放在STR开始的存储区中,删除其中重复的字符,输出删除处理后的字符串。

三.实验要求

1.认真预习有关串操作的指令极其寻址方式的特点,能够正确使用串操作指令,并准备好数据。

2.依题意分析给出程序设计算法。

四.实验环境

PC微机

DOS操作系统或Windows操作系统

MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境RADASM

五.实验步骤

1.用1号系统调用从键盘键入一个字符串,然后统计其中小写字母的个数。

程序每次执行,都能得到不同的结果。

2.要求编写一个在同一个字符串中删除字符,并将其余字符向前递补的程序。

六.实验报告要求

1、对照参考程序,画出程序流程图。

2、总结字符串处理的编程方法,提出改进和完善此类程序的设计方案。

七.思考题

1.如果要求以INT21H的10号功能调用来实现字符串的输入,请修改程序;

2.如果要统计输入的数字字符个数,指出程序修改的地方;

3.如果输入的小写字母数小于10(如输入了8个小写字符,这时候参考程序会输出小写字母个数是08)时候,如何修改程序,使得输出小写字母只有一位数而不是两位(如输入小写字母个数为个时输出8而不是08)。

参考程序清单

1.统计小写字母个数的程序清单:

DATASEGMENT

MSG1DB'Inputastring:

',0AH,0DH,'$'

MSG2DB'Thenumberoflowercaseletteris:

$'

STRDB80DUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

;输出提示

LEADX,MSG1

MOVAH,9

INT21H

LEADI,STR

MOVCL,0;CL用来记录输入字符数

AGAIN:

MOVAH,1

INT21H

CMPAL,0DH

JZDONE;输入回车键则转DONE

MOV[DI],AL

INCDI

INCCL

JMPAGAIN

DONE:

LEASI,STR

MOVCH,0;CX保存输入字符数

MOVBL,0;BL用来统计小写字符个数

CLD

CYCLE:

LODSB

CMPAL,'a'

JBNEXT

CMPAL,'z'

JANEXT

INCBL

NEXT:

LOOPCYCLE

;回车换行

MOVAH,2

MOVDL,0AH

INT21H

MOVDL,0DH

INT21H

;输出提示

LEADX,MSG2

MOVAH,9

INT21H

;以下显示输入小写字母个数的两位十进制数

MOVAL,BL;小写字符个数送AL

MOVAH,0;AX存放小写字符个数

MOVCL,10

DIVCL;十位数在AL中,个位数在AH中

MOVBX,AX;十位数在BL中,个位数在BH中

MOVDL,BL

MOVAH,2

ORDL,30H

INT21H;输出小写字母个数的十位数字

MOVDL,BH

ORDL,30H

MOVAH,2

INT21H;输出小写字母个数的个位数字

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

2.删除字符串中重复字符的源程序清单:

DATASEGMENT

STRDB80DUP(?

LENDW?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,ES:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVES,AX;初始化数据段和附加段为同一段值

LEASI,STR;SI<=输入串的首地址

;从键盘输入字符串

MOVCL,0;CL用来存放输入字符数

AGAIN:

MOVAH,1

INT21H

CMPAL,0DH;回车结束输入

JZIN_DONE

MOV[SI],AL

INCSI

INCCL

JMPAGAIN

IN_DONE:

MOVCH,0;CX存放输入字符数

MOVLEN,CX;将输入字符数保存到LEN

;将输入字符串中重复出现字符替换为0

LEASI,STR;SI<=输入串的首地址

MOVDI,SI

INCDI

AGN:

CMPCX,1

JZOK;只有剩一个字符就结束替换

PUSHCX;保护外层循环计数

MOVAL,[SI]

ANDAL,AL

JZNEXT;当前字符已被替换为0

L1:

CMPAL,[DI]

JNZL2

MOVBYTEPTR[DI],0

L2:

INCDI

LOOPL1;内部循环,扫描当前字符后面是否与当前字符相同,相同则用0替换

NEXT:

INCSI

MOVDI,SI

INCDI

POPCX

LOOPAGN

OK:

;将那些被替换成0的字符去掉

LEASI,STR;SI<=输入串的首地址

MOVCX,LEN

RPT:

ANDCX,CX

JZRTN;CX=0结束子程序

MOVAL,[SI]

ANDAL,AL

JNZNEXT1;当前字符不是被替换为0的字符

PUSHCX

MOVDI,SI

XORBX,BX

CLD

REPZSCASB

JNZL3

POPCX

JMPRTN;后面全是0,不用再继续

L3:

DECDI

MOVAL,[DI]

MOV[SI],AL

MOVBYTEPTR[DI],0

POPCX

NEXT1:

INCSI

DECCX

JMPRPT

RTN:

;回车换行

MOVAH,2

MOVDL,0AH

INT21H

MOVAH,2

MOVDL,0DH

INT21H

;输出结果

LEASI,STR;SI<=输入串的首地址

MOVCX,LEN

MOVAH,2

LOP:

MOVDL,[SI]

CMPDL,0

JZEXIT

INT21H

INCSI

LOOPLOP

EXIT:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

附件:

修改结果参考

1.

DATASEGMENT

BUFDB0ABH,0CDH,0DEH,01H,02H,03H

DB3AH,4BH,5CH,6FH

DATAENDS

STACKSEGMENTSTACK

DW10DUP(?

TOSEQUTHISWORD

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVCX,10

LEABX,BUF

AGAIN:

MOVAL,[BX]

CALLHEXASC

INCBX

LOOPAGAIN

MOVAH,4CH

INT21H

HEXASCPROCNEAR

MOVDL,AL

PUSHCX

MOVCL,4

SHRDL,CL

POPCX

CALLDISP;显示高位HEX数

MOVDL,AL

ANDDL,0FH

CALLDISP

RET

HEXASCENDP

DISPPROC

PUSHAX

CMPDL,9

JBENEXT

ADDDL,7

NEXT:

ADDDL,30H

MOVAH,2

INT21H;显示

POPAX

RET

DISPENDP

CODEENDS

ENDSTART

2.

DATASEGMENT

CHARDB'b'

BUFDB50H,?

50HDUP(?

DATAENDS

STACKSEGMENTSTACK

DW10DUP(?

TOSEQUTHISWORD

STACKENDS

MCODESEGMENT

ASSUMECS:

MCODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAX,STACK

MOVSS,AX

MOVSP,OFFSETTOS

LEADX,BUF

MOVAH,10

INT21H

LEASI,BUF

MOVCL,[SI+1]

MOVCH,0;CX中为字符串长度

INCSI

INCSI;SI指向串首址TABLE

MOVAL,CHAR

MOVAH,0;AX中为待查字符

PUSHSI

PUSHCX

PUSHAX;参数送堆栈

CALLCHECK

MOVAH,2

MOVDL,0AH

INT21H

MOVDL,0DH

INT21H

MOVDL,CHAR

MOVAH,2

INT21H

POPAX;统计个数在AL中

MOVDL,AL

ANDDL,0FH

CMPDL,9

JBENEXT

ADDDL,7

NEXT:

ADDDL,30H

MOVAH,2

INT21H;显示统计个数

MOVAH,4CH

INT21H

MCODEENDS

SCODESEGMENT

ASSUMECS:

SCODE

CHECKPROCFAR

PUSHBP

MOVBP,SP

MOVSI,[BP+10]

MOVCX,[BP+8]

MOVAX,[BP+6]

XORAH,AH

AGAIN:

CMPAL,[SI]

JNENEXT1

INCAH

NEXT1:

INCSI

LOOPAGAIN

MOVAL,AH

MOV[BP+10],AX

POPBP

RET4

CHECKENDP

SCODEENDS

ENDSTART

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2