




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、IO汇编实验部分实验一 一)实验目的学会安装“16位汇编程序开发软件”的安装,完成将汇编语言源程序录入进计算机、利用ml.exe进行汇编,LINK进行链接,并用DEBUG调试16位程序的全部过程。本实验大家不必了解程序细节,只是为了熟悉开发环境和上机过程。二)实验内容3. 写16位汇编程序,从键盘输入一个字符串,然后换行后将该字符串输出到屏幕。1)源程序datasegmentbuff DB 255 DB ? DB 255 dup (?)crlfdb 0ah, 0dh, $;回车换行dataends code segmentassume ds:data, cs:codestart:movax,
2、datamovds, ax leadx, buffmovah, 0ahint21h leadx, crlfmovah, 9hint21h leasi, buff + 2hmovcl, buff + 1h next:cmpcl, 0hjefinish movdl, byte ptr simovah, 2hint21h decclincsijmpnext finish:movah, 4chint21hcodeendsend start2)运行结果贴图3) 编程与调试心得(遇到的问题和解决的办法,以及获得的收获)一开始写buff byte 255 显示error,换成buffdb 255可以运行 C
3、rlf db 0ah, 0dh, $;回车换行关键在于获取字符串的长度,会存储在buff+1h中也可在末尾加$表示结尾。实验二 一)实验目的通过这一部分的实验,进一步熟悉汇编过程和DEBUG调试过程;掌握用汇编语言编写顺序程序。二)实验内容2. 写完整程序16位程序,在内存中从Table开始的10个单元中连续存放0到9的平方值,任给一个0到9的数X,该数存放在内存单元XX中,用XLAT指令查表求X的平方值,并将结果存于内存YY单元中。编写程序,并在DEBUG中进行调试和验证结果。(X,XX,YY都是内存中的变量)1)源程序.8086.MODEL SMALL.STACK.DATA TABLE d
4、b 0,1,4,9,16,25,36,49,64,81RESULT DB ?crlfdb 0ah, 0dh, $;回车换行.CODESTART:MOV AX,DATA MOV DS,AX MOV BX,offset TABLE MOV AH,01H INT 21H SUB AL,30H XLAT MOV RESULT,AL leadx, crlf;输出回车换行movah, 9hint21h MOV DL,RESULT MOV AH,02H INT 21H EXIT:MOV AH,4CH INT 21Hend start2)运行结果贴图运行debug,-u反汇编-g至001E,输入值6,查表应为
5、36,即24H()查ASCII为$,图0076A:0030位置即为result值(通过对比一开始的存储单元得出)3)编程与调试心得(遇到的问题和解决的办法,以及获得的收获)一开始没有注意到输入的AL是ASCII码,应当减去30H数据存储在result中可以用-d查询,学会了使用反汇编和查询存储单元通过输出是ASCII码,如9对应result的81,即51H,查表恰为Q说明存储正确(可用除10或循环移位的方法,单个数转为十进制数输出)实验三 一)实验目的通过本实验,熟练使用字符串的输入、读取与判断,通过实验,可以掌握循环结构的各种实现方法,进一步了解循环结构中初始化部分、循环体部分、循环控制部分
6、的功能以及他们彼此之间的关系。尤其是多重循环中外层循环和内层循环之间的关系。二)实验内容所谓回文字符串是指一个字符串正读和倒读都是一样的,例如字符串ABCDEFFEDCBA就是一个回文字符串,而字符串ABCFDDCAB就不是回文字符串。现在编写完整的16位汇编程序,输入一个字符串,判断该字符串是否为回文字符串,并用“It is a palindrome”或“It is NOT a palindrome”作为输出。1)源程序datasegmentbuffdb 255db ?db 255 dup (?)crlfdb 0ah, 0dh, $;回车换行Y DB It is a palindrome$N
7、 DB It is NOT a palindrome$ dataends code segmentassume ds:data, cs:codestart:movax, datamovds, ax leadx, buffmovah, 0ahint21h leadx, crlfmovah, 9hint21h movbl, buff + 1h mov bh,0h mov di,2hadd di,bxmovsi, 1hdec blnext: dec bldec diincsicmpbl, 0hjefinishmovdl,buffsimovah, 2hint21hmovdl,buffdimovah,
8、2hint21h movdl, movah, 2hint21h moval,buffsimov cl,buffdicmp cl,aljne nojmpnextno:leadx, crlfmovah, 9hint21h mov dx,offset N mov ah,09h INT 21H movah, 4chint21h finish: leadx, crlfmovah, 9hint21h mov dx,offset Y mov ah,09h INT 21H movah, 4chint21hcodeendsend start2)运行结果贴图3)编程与调试心得(遇到的问题和解决的办法,以及获得的收
9、获)本程序存在bug,如上图当输入abvcba时可以将abvcab与abcvba逐个字对比,发现第三个字符不同转入no段提示“It is NOT a palindrome”,而当输入确实为回文时首字母错误,原因实在是查不出来。实验四实验目的熟悉如何在数组中进行查找,并返回是否成功的信息,通过实验,可以掌握循环结构的各种实现方法,进一步了解循环结构中初始化部分、循环体部分、循环控制部分的功能以及他们彼此之间的关系。尤其是多重循环中外层循环和内层循环之间的关系。实验内容2请编写16位完整汇编程序,在一个升序字节数组BUFF中查找数N,找到后将此数从数组中删除,并使得CF=0;没找到返回CF1。1)
10、 源程序.8086.model small.databuff db abcdefghijklmn,$N db n.codestart: mov dx,data mov ds,dx mov al,N mov,ah,$ lea di,buff dec difinding:inc di cmp al,di jz yes cmp ah,di;检测是否读完buff jz no jmp findingyes:add ah,0 mov si,di inc sisetarray: cmp ah,di;检测是否读完buff jz exit mov cl,si mov di,cl inc di inc si jm
11、p setarrayno:mov ah,0 cmp ah,1;设置cfexit:mov ah,4ch int 21hend start2)运行结果贴图NC说明CF=0,查找到数N,查看存储单元由abcdefghijklmn,$,n变为abcdefghijklm,$,n已将数组中的数n删去3) 编程与调试心得(遇到的问题和解决的办法,以及获得的收获) 运用反汇编-u得到每个指令的地址,利用-g 断点地址 快速让程序运行到特定指令位置,可以方便快捷地排查错误 进位标志CF(Carry flag) CY(1) NC(0)实验五实验目的通过本实验,掌握子程序的定义和调用方法。通过程序调试,进一步理解C
12、ALL指令和RET指令的功能,掌握子程序调用时参数传递的方法。实验内容请编写完整16位汇编程序从键盘读取字符,如果是十进制的09则在屏幕上输出该数的8位二进制码,并将数字依次存放到BUF开头的数组中,如果读入的字符是Q或者q,则程序退出,其他情况在屏幕上打印“You must input 09, or q or Q”。(如输入的字符是9,则输出“”).提示:输出一个数的2进制形式应该从最高位开始输出。要求打印一个数的2进制形式和输出回车换行分别定义成一个子程序可以将此段程序定义成一个过程。1) 源程序.8086.model small.stack.dataSTR db you must inp
13、ut 09 or q,Q,$.codeLFCR PROC PUSH AX MOV AH,02 MOV DL,0AH INT 21H POP AX RETLFCR ENDPPRINT PROC SUB AL,30H JL T CMP AL,9 JG T MOV AH,02H MOV CX,8LP:MOV DL,0 SHL AL,1 ADC DL,30H PUSH AX INT 21H POP AX LOOP LP JMP RT:LEA DX,STR MOV AH,09H INT 21HR: RETPRINT ENDP start: mov dx,data mov ds,dx MOV CX,-1L
14、: MOV AH,01H INT 21H CMP AL,Q JZ exit CMP AL,q JZ exit CALL LFCR CALL PRINT CALL LFCR POP CX DEC CX PUSH CX JNZ Lexit:mov ah,4ch int 21hend start2)运行结果贴图3) 编程与调试心得(遇到的问题和解决的办法,以及获得的收获)输入的AH是ASCII码SUB AL,30H使的转换为数字运用子程序调用可以使主程序看起来更加简洁明了,且易于调试,维护LFCR回车换行需注意将ax压栈,以便调用int 21h的输出功能Crlf db 0ah, 0dh, $;即为回
15、车换行实验六实验目的熟悉如何在数组中进行查找,并返回是否成功的信息,通过实验,可以掌握循环结构的各种实现方法,进一步了解循环结构中初始化部分、循环体部分、循环控制部分的功能以及他们彼此之间的关系。尤其是多重循环中外层循环和内层循环之间的关系。实验内容Programming a sub routine to calculate N!. Specific requirements:Read a number N(16) from keyboard,programming a sub routine named DAC to calcute N!, then print the result to
16、screen in decimal form.1) 源程序.8086.model small.stack.dataNUMBER DB ?,$STR db 0AH,0DH,you must input 16,$OUTPUT DB 20H,4 DUP(20H),$.codePRINT PROC MOV BX,10 MOV SI,4 L: IDIV BX ADD DX,30H MOV OUTPUTSI,DL MOV DX,0 DEC SI CMP SI,0JG L CHECK0: INC SI CMP OUTPUTSI,30H JNZ RIGHT MOV OUTPUTSI, CMP SI,4 JL
17、CHECK0 RIGHT:LEA DX,OUTPUTMOV AH,9INT 21HMOV AH,4CHINT 21HRETPRINT ENDPstart: mov dx,data mov ds,dx LEA DX,NUMBER MOV AH,01H INT 21H SUB AL,30H JBE exit CMP AL,07H JAE EXIT MOV CL,AL MOV CH,0H MOV AX,1 MOV DX,0 LP:IMUL CX LOOPNZ LP CALL PRINTexit:LEA DX,STRMOV AH,09HINT 21Hmov ah,4ch int 21hend star
18、t2)运行结果贴图3) 编程与调试心得(遇到的问题和解决的办法,以及获得的收获)一开始输出的十进制数带0,如0720,0002等,后检测为0即赋值20H(空格),发现6!=72,不仅去掉了开头的0,也去掉了末尾的0,将NUMBER由+1至+4检查,遇到非0的数就退出检测可以解决。实验七实验目的熟悉如何在数组中进行查找,并返回是否成功的信息,通过实验,可以掌握循环结构的各种实现方法,进一步了解循环结构中初始化部分、循环体部分、循环控制部分的功能以及他们彼此之间的关系。尤其是多重循环中外层循环和内层循环之间的关系。实验内容在附加段中有一个从小到大排序的无符号数字数组,其首地址在DI中,数组的第一个
19、单元存放数组长度。要求用折半查找法在数组中查找数N,假设该数已在AX中,如找到,CF=0,并在SI中给出该元素在数组中的偏移地址;如未找到,CF=1。1)源程序.8086.MODEL SMALL.STACK.DATA TABLE db 1,4,7,9,16,31,36,49n DB 1r db 7l db 0crlf db 0ah, 0dh, $;回车换行.CODESTART:MOV AX,DATA MOV DS,AX MOV di,offset TABLE mov bl,n mov cl,2check: MOV al,r cmp al,l jz no add al,l mov ah,0 di
20、v cl mov ah,0 mov si,di add si,ax cmp si,bl jz yes jl right mov r,al jmp check right:mov l,aljmp check no:mov ah,0 sub ah,1 jmp exit yes: add si,ax cmp ax,0 EXIT:MOV AH,4CH INT 21Hend start2) 运行结果贴图查找数字n=1(BX),得数组中序号0,即Table0(AX)=1满足搜索条件,使CF=0(NC),并 用mov si,di add si,ax使得si获得Table0(AX)的偏移地址。 3) 编程与调
21、试心得(遇到的问题和解决的办法,以及获得的收获) 一开始div cl 时忘记将AH设置成0,结果一直循环DIV C;? ,SI+BI,IRETMOV AH,0后恢复正常 实验八实验目的熟悉如何在数组中进行查找,并返回是否成功的信息,通过实验,可以掌握循环结构的各种实现方法,进一步了解循环结构中初始化部分、循环体部分、循环控制部分的功能以及他们彼此之间的关系。尤其是多重循环中外层循环和内层循环之间的关系。实验内容在内存中有一个数组,里面是放着10个学生的某科的成绩,分别是:85,73,92,66,91,98,52,87,83,68, 请用冒泡排序法将这10个数从大到小排序,并将排序的结果在屏幕上打印出来,要求一个数一行的格
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025黑龙江齐齐哈尔市建华区北华街道公益性岗位招聘模拟试卷及答案详解1套
- 2025年宣城宁国市人民医院招聘医疗卫生人才15人考前自测高频考点模拟试题及答案详解(易错题)
- 天津市人民医院心脏功能B超评估考核
- 秦皇岛市中医院妇科肿瘤B超诊断考核
- 2025届春季东华公司校园招聘模拟试卷及1套完整答案详解
- 衡水市人民医院功能性矫治器应用考核
- 2025人民医院图像引导放疗考核
- 沧州市人民医院神经刺激仪使用考核
- 邢台市人民医院B超诊断思维流程考核
- 2025人民医院儿童脑电图判读技能考核
- 二零二五年度污水运输与污水处理厂合作运营合同
- 2025年上教版八年级地理上册月考试卷
- 贸易安全课件
- 中职对口高考-机械类专业综合模拟卷( 湖北适用) 第5卷(答案版)
- 部编六年级上册快乐读书吧《童年》测试题(3份)(有答案)
- 霍尼韦尔Honeywell温控器UDC2500中文手册
- 临汾市尧都区招聘专职社区工作者笔试真题2023
- 留置胃管课件
- 核反应堆热工分析课程设计
- DL-T5017-2007水电水利工程压力钢管制造安装及验收规范
- 《药物化学》课件-苯二氮䓬类药物
评论
0/150
提交评论