的时候把ENDS指令打成了END,改过来就好了。3、MOV指令的两个操作数之间的逗号打成了空格,为此出现了十4来个错误,把空格改回逗号就好了。4、返回DOS时用09H代替了4CH,结果程序运行完之后就什么都没有了,根本不让看结果,改成4CH就行了。
实验12
实验结果:8347H,和预期的结果相同。遇到的问题及解决方法,有了上一个程序的经验,本次的问题较少,我直接把BUFFER的第一个数据存到MIN中(MOVMIN,BUFFER),这句没有汇编成功,我以为是没有指定数据的长度,于是我改成了(MOVMIN,WORDPTRBUFFER);还是没有通过,仔细看看才发现这是个memorytomemory。用BX做中间变量就解决了。
f第二次实验
一、实验目的
1、近一步熟悉汇编语言的编辑、宏汇编、链接和运行的基本概念。2、熟练掌握动态调试程序TDDEBUG的常用指令和窗口功能,学会用TDDEBUG调试程序,修改数据和寄存器环境。3、熟悉掌握汇编语言程序的典型数据结构设计、典型程序控制方法,了解DOSBIOS功能调用的基本方法。
二、实验内容
实验21
从键盘输入任意字符串后,存入自定义存储单元,判断处理后将字符串中小写字母转换为大写字母(其它字符不变),并按原顺序将这些字符在屏幕上显示出来(参考程序P36),并显示字符串“Thetotal
umberisXXXXX”。
实验22
从键盘输入一个0255之间的十进制数,将其转换为16进制数,并在屏幕上显示变换前后的数据(参考程序P38)。
三、实验原理
实验21
本实验要实现的功能是从键盘输入一个字符串,将其中的小写字母改成大写字母,按原顺序将改变后的字符串输出,并指明字符串的长度。这就需要调用DOS,包括输入字符串是的0AH,输出字符串时的09H,输出单个字符时的02H。我们的思路是,将字符串中的每一个字符都与‘a’和‘z’比较,若在它们之间,则在他们的ASCII码上减去30H,否则不改变。流程图:
f实验22
本实验要把一个从键盘输入的十进制数转换成十六进制数,并输出转换成的十六进制数。同样的,本实验也要调用DOS功能,调用的功能和实验21进本相同。虽说输入的是十进制数,但存入的数据并不是十进制数,而是字符,就是ASCII码形式的数据。我们首先将ASCII码转换成十进制数,再用除十六取余法得到对应的十六进制数。流程图
f四、实验源程序
由于代码较长,此处仅截取部分代码。
实验21
STARTMOVAXDATASMOVDSAXMOVAXSTACKsMOVSSAXMOVDXOFFSETSTRING2MOVAH09HINT21HMOVDXOFFSETSTRINGMOVAH0AHINT21H
fMOVCX100MOVAL61HMOVAH0DHMOVBL20HMOVDL7AHMOVSIOr