福建农林大学汇编实验四子程序设计.docx

上传人:b****2 文档编号:1820934 上传时间:2022-10-24 格式:DOCX 页数:14 大小:51.62KB
下载 相关 举报
福建农林大学汇编实验四子程序设计.docx_第1页
第1页 / 共14页
福建农林大学汇编实验四子程序设计.docx_第2页
第2页 / 共14页
福建农林大学汇编实验四子程序设计.docx_第3页
第3页 / 共14页
福建农林大学汇编实验四子程序设计.docx_第4页
第4页 / 共14页
福建农林大学汇编实验四子程序设计.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

福建农林大学汇编实验四子程序设计.docx

《福建农林大学汇编实验四子程序设计.docx》由会员分享,可在线阅读,更多相关《福建农林大学汇编实验四子程序设计.docx(14页珍藏版)》请在冰豆网上搜索。

福建农林大学汇编实验四子程序设计.docx

福建农林大学汇编实验四子程序设计

福建农林大学计算机与信息学院实验报告系:

计算机专业:

计算机科学与技术年级:

2014姓名学号:

实验室号__计算机号实验时间:

2016-10-29指导教师签字:

刘庆连成绩:

实验四子程序设计

1.实验目的

1)学习子程序的编写,主子程序的调用;

2)不同模块间程序的调用和调试。

2.实验内容

1)数据段中的3个字符,调用子程序将其逐个显示出来。

子程序的功能是显示一个字符。

单步执行,对CALL语句和RET语句观察SP,IP的变化,并用D命令查看栈顶的内容。

DATASEGMENTMAGDB‘ABC'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

AX,DATA

DS,AX

SI,0

CX,3

DL,MAG[SI]

MADD

SI

LL

START:

MOV

MOV

MOV

MOV

LL:

MOV

CALL

INC

LOOP

MOVAH,4CH

INT21H

MADDPROC

MOVAH,02H

INT21H

RET

CODEENDS

ENDSTART

2)阅读S31.ASM和S32.ASM两个模块中的程序,并分别汇编,然后连接成一个可执行文件S31.EXE。

具体步骤如下:

MASMS31.ASM(分别汇编)

MASMS32.ASM

LINKS31S32(将两个文件连接成为一个文件名为S31)

S31.EXE(运行)

3)编程:

利用主程序调用子程序,比较BUF1和BUF2缓冲区中不相等的字符,并将

不相等的字符显示出来。

(也可以将找到的不相等字符逐个显示,用INT21H的02功能调用)

4)编程:

子程序搜索指定字符缓冲区中是否有N,如果有用Y替代。

调用子程序将

BUF1,BUF2,BUF3中的N全部用Y替代。

附源程序:

NAMES31.ASM

不同模块间的段间调用。

从键盘输入2位非压缩BCD数,存入AX寄存器中。

为了将其转换为二进制数,编写一个子程序TRAN。

显示子程序DISP完成将16进制数转换为对应的ASCII码并显示该字符,显示子程序在另一模块S32中。

输入数据为00时结束。

EXTRN

DISP:

FAR

CODE

SEGMENTPARA‘C

ASSUME

CS:

CODE

START:

MOV

AH,01H

INT

21H

MOV

BL,AL

INT

21H

MOV

AH,AL

MOV

AL,BL

CMP

AX,3030H

JE

EXIT

CALL

NEARPTRTRAN

CALL

FARPTRdisp

JMP

START

EXIT:

MOV

AH,4CH

INT

21H

TRAN

PROC

NEAR

;将输入的

ASCII码转换成

2进制数

AND

AX,0F0FH

;将ASCII

码转换成非压缩

BCD码,

;高位在AL中

MOVBL,AH

MOVCL,10D

MULCL

ADDAL,BL

RET

TRANENDP

CODEENDS

ENDSTART

NAMES32.ASM

PUBLICDISP

CODE1SEGMENTPARA‘CODE'

ASSUMECS:

CODE1

DISPPROCFAR

MOVBL,AL

MOVBH,00

MOVCH,4

ROLL:

MOVCL,4

ROLBX,CL

MOVDL,BL

ANDDL,0FH

CMPDL,9

JBENEXT1

ADDDL,07H

NEXT1:

ADDDL,30H

MOVAH,02H

INT21H

DECCH

JNZROLL

RET

DISPENDP

CODE1ENDS

END

5)编一个子程序:

输入一个字符,显示出来。

6)编一个子程序:

输入一个字符串,显示出来。

4.算法描述及实验步骤

题1:

依题输入相应的代码如下,运行->调试->单步执行,对CALL语句和RET语句观

察SP,IP的变化,并用D命令查看栈顶的内容。

题3及4,5,6按要求编写即可

5.调试过程

6.实验结果

【题一】

实验结果如下

有上图可知,当程序运行到call语句之前,SP一直保持0000不变,而IP则一直在增

加。

继续单步执行程序

由上图,当程序在RET语句之前运行时,SP、IP每次都是分别按2和1递增,当运行

到RET语句时,SP还是按照2来递增,而IP出现了变化,这次却减少了很多,说明指针

回撤执行下一个循环。

题二】按要求把s31s32分别汇编连接形成一个s31.exe文件,如下汇编s31

汇编s32

 

 

Links31s32

形成一个s31.exe的文件

题三】编写代码如下

运行结果如下图

BUF1='HELLOWORL'D!

BUF2='HOLLOWOLLD'~比较可知BUF1与BUF2中不同的字符有

【题四】

ER!

结果与预期一

编写代码如下

 

运行结果如下图

 

分析:

有图可知,结果将BUF1和BUF2中的n改为了y完成题目要求

题五】编一个子程序:

输入一个字符,显示出来

编写代码如下

【题六】编一个子程序:

输入一个字符串,显示出来

编写代码如下

 

7.总结

通过本次上机实验,学会了子程序的编写和主子程序的调用,并且掌握了在不同模块间程序的调用和调试。

在本次实验中,再一次加深了对汇编程序的汇编以及连接运行的方法。

附录:

【题3代码】

DATASEGMENT

BUF1DB'HELLOWORLD!

'

LEN=$-BUF1

BUF2DB'HOLLOWOLLD~'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

STAR:

TMOVAX,DATA

MOVDS,AX

LEASI,BUF1

LEADI,BUF2

MOVCX,LEN

CALLCMPP

MOVAH,4CH

;子程序

INT21H

CMPPPROCNEAR

L1:

MOVDL,[SI]

CMPDL,[DI]

JZNEXT

MOVAH,02H

INT21H

NEXTI:

NCSI

INCDI

LOOPL1

RET;子程序返回

CMPPENDP

CODEENDS

ENDSTART

【题4代码】

DATASEGMENT

BUF1DB'aaanaannaaan',0ah,0dh,'$'

LEN1=$-BUF1

BUF2DB'bbnnnbbbbnnn','$'

LEN2=$-BUF2

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

STAR:

TMOVAX,DATA

MOVDS,AX

LEASI,BUF1

MOVCX,LEN1

CALLCMMP

LEASI,BUF2

MOVCX,LEN2

CALLCMMP

MOVAH,4CH

INT21H

CMMPPROC

MOVDX,SI

CMP1:

CMPBYTEPTR[SI],'n'

 

JNE

NOTN

MOV

AL,'y'

MOV

[SI],AL

NOTN:

INC

SI

LOOP

CMP1

MOV

AH,09H

INT21H

RET

CMMP

ENDP

CODE

ENDS

END

START

;显示字符串

 

 

【题5代码】

STACKSSEGMENSTTACK

DW128DUP(?

STACKSENDS

CSEG

SEGMENPTARAPUBLIC'CODE'

ASSUMECS:

CSEG

STAR:

TMOVAH,01

INT21H

MOVDL,AL

MOVAH,02

INT21H

MOVAL,0

MOVAH,4CH

INT21H

CSEGEN

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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