计算机输入输出课程汇编实验部分Word文档下载推荐.docx

上传人:b****2 文档编号:14202129 上传时间:2022-10-20 格式:DOCX 页数:20 大小:97.50KB
下载 相关 举报
计算机输入输出课程汇编实验部分Word文档下载推荐.docx_第1页
第1页 / 共20页
计算机输入输出课程汇编实验部分Word文档下载推荐.docx_第2页
第2页 / 共20页
计算机输入输出课程汇编实验部分Word文档下载推荐.docx_第3页
第3页 / 共20页
计算机输入输出课程汇编实验部分Word文档下载推荐.docx_第4页
第4页 / 共20页
计算机输入输出课程汇编实验部分Word文档下载推荐.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

计算机输入输出课程汇编实验部分Word文档下载推荐.docx

《计算机输入输出课程汇编实验部分Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《计算机输入输出课程汇编实验部分Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。

计算机输入输出课程汇编实验部分Word文档下载推荐.docx

assumeds:

data,cs:

code

start:

movax,data

movds,ax

leadx,buff

movah,0ah

int21h

leadx,crlf

movah,9h

leasi,buff+2h

movcl,buff+1h

next:

cmpcl,0h

jefinish

movdl,byteptr[si]

movah,2h

deccl

incsi

jmpnext

finish:

movah,4ch

codeends

endstart

2)运行结果贴图

3)编程与调试心得(遇到的问题和解决的办法,以及获得的收获)

一开始写buffbyte255显示error,换成buffdb255可以运行

Crlfdb0ah,0dh,"

关键在于获取字符串的长度,会存储在buff+1h中

也可在末尾加‘$’表示结尾。

 

实验二

通过这一部分的实验,进一步熟悉汇编过程和DEBUG调试过程;

掌握用汇编语言编写顺序程序。

2.写完整程序16位程序,在内存中从Table开始的10个单元中连续存放0到9的平方值,任给一个0到9的数X,该数存放在内存单元XX中,用XLAT指令查表求X的平方值,并将结果存于内存YY单元中。

编写程序,并在DEBUG中进行调试和验证结果。

(X,XX,YY都是内存中的变量)

.8086

.MODELSMALL

.STACK

.DATA

TABLEdb0,1,4,9,16,25,36,49,64,81

RESULTDB?

.CODE

START:

MOVAX,@DATA

MOVDS,AX

MOVBX,offsetTABLE

MOVAH,01H

INT21H

SUBAL,30H

XLAT

MOVRESULT,AL

leadx,crlf;

输出回车换行

MOVDL,RESULT

MOVAH,02H

EXIT:

MOVAH,4CH

运行debug,-u反汇编-g至001E,输入值6,查表应为36,即24H(00100100)

查ASCII为$,图0076A:

0030位置即为result值(通过对比一开始的存储单元得出)

一开始没有注意到输入的AL是ASCII码,应当减去30H

数据存储在result中可以用-d查询,学会了使用反汇编和查询存储单元

通过输出是ASCII码,如9对应result的81,即51H,查表恰为Q

说明存储正确(可用除10或循环移位的方法,单个数转为十进制数输出)

实验三

通过本实验,熟练使用字符串的输入、读取与判断,通过实验,可以掌握循环结构的各种实现方法,进一步了解循环结构中初始化部分、循环体部分、循环控制部分的功能以及他们彼此之间的关系。

尤其是多重循环中外层循环和内层循环之间的关系。

所谓回文字符串是指一个字符串正读和倒读都是一样的,例如字符串‘ABCDEFFEDCBA’就是一个回文字符串,而字符串‘ABCFDDCAB’就不是回文字符串。

现在编写完整的16位汇编程序,输入一个字符串,判断该字符串是否为回文字符串,并用“Itisapalindrome”或“ItisNOTapalindrome”作为输出。

buffdb255

db?

db255dup(?

YDB"

Itisapalindrome$"

NDB"

ItisNOTapalindrome$"

movax,data

movds,ax

movbl,buff+1h

movbh,0h

movdi,2h

adddi,bx

movsi,1h

decbl

decbl

decdi

cmpbl,0h

movdl,buff[si]

movdl,buff[di]

int21h

movdl,"

"

moval,buff[si]

movcl,buff[di]

cmpcl,al

jneno

no:

movdx,offsetN

movah,09h

movdx,offsetY

INT21H

本程序存在bug,如上图当输入abvcba时可以将abvcab与abcvba逐个字对比,发现第三个字符不同转入no段提示“ItisNOTapalindrome”,而当输入确实为回文时首字母错误,原因实在是查不出来。

实验四

实验目的

熟悉如何在数组中进行查找,并返回是否成功的信息,通过实验,可以掌握循环结构的各种实现方法,进一步了解循环结构中初始化部分、循环体部分、循环控制部分的功能以及他们彼此之间的关系。

实验内容

2请编写16位完整汇编程序,在一个升序字节数组BUFF中查找数N,找到后将此数从数组中删除,并使得CF=0;

没找到返回CF=1。

.modelsmall

.data

buffdb'

abcdefghijklmn'

'

$'

Ndb'

n'

.code

movdx,@data

movds,dx

moval,N

mov,ah,'

leadi,buff

finding:

incdi

cmpal,[di]

jzyes

cmpah,[di];

检测是否读完buff

jzno

jmpfinding

yes:

addah,0

movsi,di

setarray:

jzexit

movcl,[si]

mov[di],cl

incdi

jmpsetarray

movah,0

cmpah,1;

设置cf

exit:

movah,4ch

endstart

NC说明CF=0,查找到数N,查看存储单元由'

,‘n’变为’abcdefghijklm’,’$’,’n’已将数组中的数n删去

运用反汇编-u得到每个指令的地址,利用-g断点地址快速让程序运行到特定指令位置,可以方便快捷地排查错误

进位标志CF(Carryflag)CY

(1)NC(0)

实验五

通过本实验,掌握子程序的定义和调用方法。

通过程序调试,进一步理解CALL指令和RET指令的功能,掌握子程序调用时参数传递的方法。

请编写完整16位汇编程序从键盘读取字符,如果是十进制的‘0’~‘9’则在屏幕上输出该数的8位二进制码,并将数字依次存放到BUF开头的数组中,如果读入的字符是’Q’或者‘q’,则程序退出,其他情况在屏幕上打印“Youmustinput0~9,or‘q’or‘Q’”。

(如输入的字符是‘9’,则输出“00001001”).提示:

输出一个数的2进制形式应该从最高位开始输出。

要求打印一个数的2进制形式和输出回车换行分别定义成一个子程序可以将此段程序定义成一个过程。

.stack

STRdb'

youmustinput0~9orq,Q'

LFCRPROC

PUSHAX

MOVAH,02

MOVDL,0AH

POPAX

RET

LFCRENDP

PRINTPROC

JLT

CMPAL,9

JGT

MOVCX,8

LP:

MOVDL,0

SHLAL,1

ADCDL,30H

LOOPLP

JMPR

T:

LEADX,STR

MOVAH,09H

R:

PRINTENDP

MOVCX,-1

L:

CMPAL,'

Q'

JZexit

q'

CALLLFCR

CALLPRINT

POPCX

DECCX

PUSHCX

JNZL

输入的AH是ASCII码SUB

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

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

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

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