北京理工大学汇编第五次子程序设计实验设计性实验Word文档下载推荐.docx

上传人:b****6 文档编号:17294614 上传时间:2022-12-01 格式:DOCX 页数:15 大小:32.44KB
下载 相关 举报
北京理工大学汇编第五次子程序设计实验设计性实验Word文档下载推荐.docx_第1页
第1页 / 共15页
北京理工大学汇编第五次子程序设计实验设计性实验Word文档下载推荐.docx_第2页
第2页 / 共15页
北京理工大学汇编第五次子程序设计实验设计性实验Word文档下载推荐.docx_第3页
第3页 / 共15页
北京理工大学汇编第五次子程序设计实验设计性实验Word文档下载推荐.docx_第4页
第4页 / 共15页
北京理工大学汇编第五次子程序设计实验设计性实验Word文档下载推荐.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

北京理工大学汇编第五次子程序设计实验设计性实验Word文档下载推荐.docx

《北京理工大学汇编第五次子程序设计实验设计性实验Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《北京理工大学汇编第五次子程序设计实验设计性实验Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。

北京理工大学汇编第五次子程序设计实验设计性实验Word文档下载推荐.docx

子程序所占用的寄存器和工作单元;

子程序调用示例;

2)掌握子程序的调用与返回

在汇编语言中,子程序的调用用CALL,返回用RET指令来完成。

段内调用与返回:

调用子程序指令与子程序同在一个段内,因此只修改IP;

段间调用与返回:

调用子程序与子程序分别在不同的段,因此在返回时,需同时修改

CS:

IP。

3)子程序的现场保护与恢复

保护现场:

在子程序设计时,CPU内部寄存器内容的保护和恢复。

一般利用堆栈实现现场保护和恢复的格式:

过程名PROC[NEAR/FAR]

PUSHAX

PUSHBX

PUSHDX

POPDX

POPAX

3.子程序的参数传递方法

1.寄存器传递参数

这种方式是最基本的参数传递方式。

2.存储器单元传(变量)递参数

这种方法是在主程序调用子程序前,将入口参数存放到约定的存储单元中;

子程序运

行时到约定存储位置读取参数;

子程序执行结束后将结果也放在约定存储单元中。

3.用堆栈传递参数

利用共享堆栈区来传递参数是重要的的方法之一。

B)字符、字符串输入输出知识要点:

在实际应用中,经常需要从键盘输入数据并将结果等内容显示到屏幕上,方便程序控制

及查看结果。

汇编语言的数据输入和输出分成两类,一是单个字符数据的输入输出,一是字

符串数据的输入输出,都可以通过DOS功能调用来实现,下面就分别介绍下用来实现数据输

入输出的功能调用的使用方法。

1.单个字符输入

单个字符输入可以利用DOS的1号功能调用来完成,使用方法为:

MOVAH,1

INT21H

这两条语句执行后,光标会在屏幕上闪烁,等待输入数据,输入的数据以ASCII码形式存储在AL寄存器中。

2.单个字符输出

单个字符输出可利用DOS2号功能调用来完成,使用方法为:

MOVDL,’?

MOVAH,2

单个字符输出需要把要输出字符的ASCII码放在DL寄存器中。

3.字符串输入

从键盘输入一串字符串可以利用DOS的10号功能调用来完成,使用方法为:

BUFDB50;

预定义可以输入的最大字符个数

DB?

;

实际输入字符个数,根据输入自动统计

DB50DUP(?

);

存放输入字符串数据缓冲区

LEADX,BUF

MOVAH,10

4.字符串输出

字符串输出可由DOS9号功能调用来完成,使用方法为:

STRINGDB‘HELLO$’

LEADX,STRING

MOVAH,9

C)表的处理知识要点:

表的处理在实际数据处理中应用较为广泛,主要有排序、搜索、插入和删除等操作。

有一些常用的冒泡法、对分搜索法等需要掌握。

四、实验内容与步骤

1.从键盘输入一串字符串(显示提示)到内存中,在该字符串的某一个指定位置,插入某一字符或删除某一字符,并显示操作后的字符串。

1)代码

DATASEGMENT

BUFDB25

ACTHARDB?

CHARDB25DUP(?

DB'

$'

STRDB'

1.INSERT2.DELETE'

'

STR1DB'

PLEASEINPUT:

'

STR2DB0DH,0AH,'

PLACEDB?

CHRDB?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETSTR1

MOVAH,09H

INT21H

MOVDX,OFFSETBUF

MOVAH,0AH

MOVDX,OFFSETSTR2

MOVDX,OFFSETSTR

MOVAH,1

CMPAL,31H

JNZDELETE

CALLINSERT

JMPL

DELETE:

CALLDELE

L:

MOVDX,OFFSETCHAR

MOVAH,4CH

INSERTPROCNEAR

MOVAH,01H

SUBAL,30H

MOVPLACE,AL

MOVCHR,AL

MOVCX,0000H

MOVCL,[ACTHAR]

MOVSI,CX

MOVBX,OFFSETCHAR

MOVAL,'

MOV[BX][SI],AL

SUBCL,PLACE

INCCX

L1:

MOVAL,CHAR[SI]

MOVCHAR[SI+1],AL

DECSI

LOOPL1

INCSI

MOVAL,CHR

MOVCHAR[SI],AL

RET

INSERTENDP

DELEPROCNEAR

MOVSI,WORDPTRPLACE

MOVCX,0

MOVCL,ACTHAR

MOVDI,CX

MOV[CHAR][DI],AL

L2:

MOVCHAR[SI-1],AL

LOOPL2

DELEENDP

CODEENDS

ENDSTART

2)操作步骤

实例1:

-g使程序运行,输入字符串‘segmentdebug’,选择插入字符,在第8个字符处插入‘!

’。

程序运行的结果如下:

实例2:

-g使程序运行,输入字符创‘segment!

Debug’,选择删除字符,删除第8个字符。

程序运行结果如下:

2、编写程序把从键盘输入的四位十六进制数,转换为十进制形式在屏幕上打印出来。

NUM10DB5DUP(?

NUMDB6DUP(?

INPUTDB5

ACTUALDB?

CHARDB5DUP(?

NUM16DW?

MOVDX,OFFSETINPUT

MOVAH,0AH

INT21H

CALLFUNC

CALLPRINT

MOVAH,4CH

FUNCPROCNEAR

MOVCX,4

MOVAX,0

MOVDX,0

MOVSI,0

MOVBX,0

L1:

MOVBX,10H

MULBX

MOVBL,CHAR[SI]

CMPBX,41H

JSG1

SUBBL,37H

JMPG2

G1:

SUBBL,30H

G2:

ADDAX,BX

INCSI

LOOPL1

MOVNUM16,AX

RET

FUNCENDP

PRINTPROCNEAR

MOVAX,NUM16

MOVBX,0AH

L2:

CMPAX,0

JZS

IDIVBX

MOVNUM10[SI],DL

JMPL2

S:

MOVCX,SI

MOVDI,0

S1:

MOVAL,NUM10[SI]

ADDAL,30H

MOVNUM[DI],AL

INCDI

LOOPS1

MOVAL,'

MOVDX,OFFSETNUM

MOVAH,09H

PRINTENDP

运行程序。

输入十六进制数8B9AH,十进制为35738

程序运行结果如下,结果正确。

3、从键盘输入(显示提示)十个2位十进制数(正数)到内存中,按从小到大排序,然后把该数以十六进制形式在屏幕上打印出来。

NUMDDB3

CHARDB3DUP(?

NUMXDB10DUP(?

PRINTDB2DUP(?

CALLINPUT

CALLOUTPUT

INPUTPROCNEAR

MOVCX,10

MOVSI,0

MOVDX,OFFSETSTR1

MOVDX,OFFSETNUMD

MOVAH,0AH

INT21H

MOVAX,0

MOVBX,0AH

MOVAL,[CHAR]

SUBAL,30H

MULBL

MOVBL,1[CHAR]

SUBBL,30H

ADDAL,BL

MOVNUMX[SI],AL

INCSI

MOVDX,OFFSETSTR2

MOVAH,09H

LOOPL1

RET

INPUTENDP

OUTPUTPROCNEAR

MOVBX,CX

SUBBX,1

K:

CMPSI,BX

JZS

MOVAL,NUMX[SI]

MOVAH,NUMX[SI+1]

CMPAL,AH

JNSM

JMPN

M:

XCHGAL,AH

MOVNUMX[SI],AL

MOVNUMX[SI+1],AH

N:

JMPK

MOVSI,0

MOVCX,10

MOVBX,10H

L3:

MOVAX,0

MOVAL,NUMX[SI]

DIVBL

CMPAL,0AH

JSM1

ADDAL,37H

JMPM2

M1:

ADDAL,30H

M2:

MOVPRINT,AL

CMPAH,0AH

JSM3

ADDAH,37H

JMPM4

M3:

ADDAH,30H

M4:

MOVPRINT[1],AH

MOVDX,OFFSETPRINT

LOOPL3

RET

OUTPUTENDP

ENDSTART

输入十个十进制数:

99、98、97、30、45、87、63、46、56、38。

程序运行结果如下,输出的十六进制数为:

1EH、26H、2DH、2EH、38、3FH、57H、61H、62H、63H。

结果正确。

五、思考与练习

1.字符串在内存中是如何存储的?

字符串在内存中以字节(byte)为单位存储,字符串包含多少字符就需要多少byte来存。

汇编中定义一个字符串如下:

myStringBYTE"

ABCDEF"

0;

常以0作为字符串的结尾

内存中存储顺序如图所示,从箭头开始,依次向下。

假设第一个地址是0000h,下一个byte的地址就是00001h,依次类推。

内存中存储的是字符的二进制编码,比如A41h=01000001b。

2.屏幕有多个字符串显示时,如何换行?

在内存中定义一个字符串为:

“STR2DB0DH,0AH,'

”,当需要换行的时候,输出这个字符串就可以了。

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

当前位置:首页 > 高等教育 > 医学

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

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