ImageVerifierCode 换一换
格式:DOCX , 页数:37 ,大小:292.12KB ,
资源ID:8048634      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8048634.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汇编实验报告山东大学.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

汇编实验报告山东大学.docx

1、汇编实验报告山东大学实验一 熟悉汇编环境及调试命令内容和要求:(1)选取教科书中典型例题(完整程序),用编辑软件在PC机中形成汇编源程序*.ASM文件,然后编译、连接,生成目标文件和可执行文件。(2)用DEBUG程序进行调试,熟悉动态调试环境和常用命令。目的:掌握用编辑软件编辑程序文本的方法;在DOS环境下,熟练掌握用MASM5.0宏汇编程序对ASM文件进行编译、连接等操作步骤;熟悉并掌握用DEBUG调试程序。实验程序DATAS SEGMENTone db 20 dup(32),1,WELCOME YOU!,7,13,10 count equ $-oneDATAS ENDSSTACKS SEG

2、MENT stackstackstap db 256 dup(?)top equ this wordSTACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX mov ax, seg stacks;此处输入代码段代码 mov ss,ax mov sp,offset top mov si,offset one mov cx,countnext: mov dl,si mov ah,2 int 21h inc si loop next MOV AH,4CH INT 21HCODES

3、ENDS END START结果Debug调试:输入a,进行逐行汇编,输入c, 比较两内存块,输入d,内存信息以16进制显示;输入e,修改内存指定的字节;输入f,可以预置一段内存; 输入g,执行程序;输入h,制算术运算;输入i,从指定端口地址输入;输入l,读盘;输入m,内存块传送;输入n,置文件名;输入o,从指定端口地址输出;输入q,结束DEBUG调试;输入r,显示和修改寄存器;输入s,查找字节串;输入t,跟踪执行;输入u,反汇编;输入w,存盘操作。实验总结:1 通过实验,了解了程序书写,熟悉了MASM环境,编译和运行的方法,对汇编有了初步认识。2 掌握了Debug调试方法,对程序修改有很大帮

4、助,通过练习,熟悉了各调试指令。 实验二 多位十进制数相加求和显示内容和要求:将两个多位十进制数(如四位)相加,要求被加数、加数以ASCII码形式按顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前)。要求:将相加结果仍以常用十进制数形式显示在屏幕上。目的:学习数据传送、加法运算及十进制数(BCD码)运算调整指令的用法;熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序过程,练习分析程序,会查错。 实验程序:DATA1 SEGMENTbuf db 10 db 0 db 10 dup(0)sum dw ?buff db 10 db 0 db 10 dup(0)sum1 dw ?

5、 tw1 db please input the first num:,$tw2 db please input the second num:,$tw3 db sum:,$ ;此处输入数据段代码 DATA1 ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATA1,ss:stacksSTART: MOV AX,DATA1 MOV DS,AX mov ax,stacks mov ss,ax pushf;显示输入a mov ah,9 mov dx,offset tw1 int 21h;输入buf

6、;mov dx,seg buf ;mov ds,dx mov dx,offset buf mov ah,0ah int 21h;换行 mov ah,2 mov dl,10 int 21h ;换行 mov ah,2 mov dl,10 int 21h;提示输入b mov ah,9 mov dx,offset tw2 int 21h ;输入buf ;mov dx,seg buf ;mov ds,dx mov dx,offset buff mov ah,0ah int 21h ;换行 mov ah,2 mov dl,10 int 21h mov ah,2 mov dl,10 int 21h ;显示加

7、法标志 mov ah,9 mov dx,offset tw3 int 21h ; ;以下为加法过程 MOV DI,OFFSET buff+2 MOV SI,OFFSET buf+2 xor dx,dx xor ax,ax mov dl,ds:di-1 mov al,ds:si-1 add di,dx add si,ax mov cx,0 mov ds:di,cx mov ds:si,cx push ax push dx MOV DI,OFFSET buff+2 MOV SI,OFFSET buf+2 pop dx cmp dl,1 je tep2 mov cx,dx dec cxtep1: m

8、ov dx,cxtest1: mov al,ds:di xchg al,ds:di+1 mov ds:di,al inc di loop test1 mov cx,dx mov di,offset buff+2 loop tep1tep2: pop ax cmp ax,1 je tep4 mov cx,ax dec cxtep3: mov dx,cxtest2: mov al,ds:si xchg al,ds:si+1 mov ds:si,al inc si loop test2 mov cx,dx mov si,offset buf+2 loop tep3tep4: popf MOV DI,

9、OFFSET buff+2 MOV SI,OFFSET buf+2 mov cx,10ADDS: MOV AL,ds:DI ADC AL,dS:SI AAA MOV ds:DI,AL INC DI INC SI LOOP ADDS MOV CX,10SHOW:MOV DL,ds:DI-1 ADD DL,30H DEC DI MOV AH,2H INT 21H LOOP SHOW MOV AH,4CH INT 21HCODES ENDS END STARTCODES ENDSEND START实验结果:实验总结:1. 学会数据传送,由键盘输入是ASCII码需转换成十进制数加30h。2. 学会了汇

10、编加法指令的使用方法,以及BCD码调整。3. 注意问题:汇编内部处理数据与输入是反向的,在显示时应倒序显示。 实验三 两个十进制数相乘并显示乘积内容和要求:实现一多位十进制数和一个一位十进制数的乘法,被乘数和乘数均以ASCII码形式存放在内存中,结果以十进制数形式显示在屏幕上。目的:掌握乘法指令的用法、计算结果的转换、存放及显示。实验程序:CRLF MACRO MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH MOV AH,02H INT 21H ENDMDATA SEGMENT DATA1 DB 20 DUP(?) DATA2 DB 20 DUP(?) str

11、1 dbThe first number(09):,$str2 db The second number(099):,$z DB ?DATA ENDSSTACK SEGMENT STA DB 20 DUP(?)TOP EQU LENGTH STA STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX mov ah,09h lea dx,str1 int 21h CRLF MOV

12、 BX,01 MOV SI,OFFSET DATA1 CALL INPUT2 CRLF mov ah,09h lea dx,str2 int 21h CRLF MOV BX,02 MOV SI,OFFSET DATA2 CALL INPUT1 CRLF CRLF MOV SI,OFFSET DATA1 MOV BX,02 CALL DISPL mov ah,02 mov dl,2AH INT 21H MOV SI,OFFSET DATA2 MOV BX,01 CALL DISPL mov ah,02h mov dl,3dh int 21hMOV DI,OFFSET DATA1 xor z,0

13、CALL ADDA MOV SI,OFFSET DATA2 MOV BX,03 CALL DISPL CRLF MOV AX,4C00H INT 21HDISPL PROC NEAR DSI: MOV AH,06 MOV DL,SI+2 INT 21H MOV AH,06 MOV DL,SI+1 INT 21H MOV AH,06 MOV DL,SI INT 21H RET DISPL ENDPADDA PROC NEAR MOV DX,SI MOV BP,DI MOV BX,02AD1: SUB BYTE PTRSI+BX-1,30H DEC BX JNZ AD1 SUB BYTE PTRD

14、I,30H MOV SI,DX MOV DI,BP ;MOV CX,01 CLC AD2: MOV AL,SI MOV BL,DI imul BL AAM mov z,ah MOV SI,al mov AL,SI+1 mov BL,DI imul BL AAM ADC AL,z AAA MOV SI+1,AL MOV SI+2,AH MOV SI,DX MOV DI,BP MOV BX,03AD3: ADD BYTE PTRSI+BX-1,30H DEC BX JNE AD3 ;ADD BYTE PTRDI,30H RETINPUT1 PROC NEAR IN1:MOV AH,01 INT 2

15、1H MOV SI+1,AL dec SI DEC BX JNZ IN1 RETINPUT1 ENDPINPUT2 PROC NEAR IN1:MOV AH,01 INT 21H ; MOV SI,AL RETINPUT2 ENDPADDA ENDPCODE ENDS END START实验结果:实验总结:1. 通过实验学会了,使用汇编语言完成相乘运算以及转过程。2. 与加法类似,应注意显示顺序的问题。3. 学会了使用宏定义,重复部分只需写一次即可,大大简化了程序的复杂性,简洁易懂。 实验四 字符串匹配程序内容与要求:编写程序,实现两个字符串(假设两字符串事先已存于内存中)的比较。若相同,则显

16、示比较结果MATCH,否则显示NO MATCH。目的:掌握字符串比较指令的使用方法及运行结果的提示显示。实验程序: CRLF MACRO MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21HENDMdata segment string1 db 100,?,100 dup(?) string2 db 100,?,100 dup(?) str1 db MATCH,$ str2 db NO MATCH,$data endcode segment code assume cs:code,ds:data start: mov ax,da

17、ta mov ds,ax mov es,ax lea dx,string1 mov ah,0AH int 21h sub ch,ch add dx,2 mov si,dx CRLFlea dx,string2 mov ah,0AH int 21h sub ch,ch add dx,2 mov di,dx CRLF mov cl,100 repz cmpsb jnz differ jmp same same: mov ah,09h lea dx,str1 int 21h jmp tail differ: mov ah,09h lea dx,str2 int 21h tail: mov ah,4c

18、h int 21h code endsend start实验结果: 实验总结:1 学会了repz cmpsb 指令的使用方法,其比较次数放在cl中,学会了cx寄存器的使用方法。2 进一步了解了DOS调用方法,分别是9号调用显示字符串,1号调用从键盘输入字符和4CH调用终止程序。9号使用DX指向字符串首地址,1号结果存在AL中。通过实验,对DOS功能调有了更加深刻的认识。3 学会了跳转指令使用,jmp、jz以及jnz的区别,使用时应选择正确的标志寄存器。实验五 查找字符串中的指定字符(即字符搜索)内容与要求:用串操作指令设计程序,实现在指定存储区(长度:100H)中寻找指定的匹配字符,当遇空格字

19、符(20H)便结束,并显示查找结果,如提示“找到”或“未找到”。要求:欲查找的指定字符从键盘输入。目的:灵活运用串操作指令,掌握DOS功能调用,完成键入信息的提示和信息键入。实验程序:CRLF MACRO MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21HENDMdata segment string1 db 100,?,100 dup(?) string2 db 0 str3 db please input a string: ,$ key db Please the keyword: ,$ str1 db FIND,$ s

20、tr2 db NO FIND,$data endscode segment code assume cs:code,ds:data,es:data start: mov ax,data mov ds,ax mov es,ax MOV AH,09H lea dx,str3 INT 21H mov dx,offset string1 mov ah,0AH int 21h sub ch,ch CRLF MOV AH,09H lea dx,key INT 21H mov ah,01H int 21h mov string2,al CRLF ;xor ax,ax mov di,offset string

21、1+2 mov al,string2 mov cl,100 repne scasb jne nofind find: mov ah,09h lea dx,str1 int 21h jmp tail nofind: mov ah,09h lea dx,str2 int 21h tail: mov ah,4ch int 21h code ends end start实验结果: 实验总结:1.本实验与上一个实验内容类似,不过不同之处在于直接比较两个已存在的字符串内容是否等。2.对字符串内容比较时,使用repne scasb,用标志位ZF不相等时跳转。3.用cl控制比较次数。实验六 将键入的十六进制数

22、转换为对应二进制数并回显 内容与要求:编写程序,将键盘输入的四位十六进制数形式转换为对应的二进制数形式,并显示在屏幕上,(如:键入AE60H-回显1010 1110 0110 0000)。若输入的不是0F间的数字字符,则显示出错信息,并提示重新输入。目的:掌握接收键盘输入的方法,并掌握数制转换,将转换结果数据以ASCII码显示。实验程序:CRLF MACRO MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21HENDMSPACE MACRO MOV AH,02H MOV DL,32 INT 21HENDMDATAS SEGMEN

23、T x db ? xc db Please input a hex number(0000FFFF) :,$ eor db error!,0dh,0ah,$ buf db 10,?,10 dup(?) DATAS ENDS STACKS SEGMENTSTACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX mov ah,09h lea dx,xc int 21h CRLF mov dx,offset buf mov ah,0Ah int 21h mov di,offset

24、 buf+2 CRLF mov cx,4 loop0: mov al,di inc di cmp al,30h js ERROR cmp al,40h js l1 cmp al,41h js ERROR cmp al,47h js l1 cmp al,61h js ERROR cmp al,67h jns ERRORl1: loop loop0 mov cx,4 mov di,offset buf+2 loop1: mov x,00010000b mov al,di inc di cmp al,40h js sub1 cmp al,47h js add1 cmp al,67h js add1s

25、ub1: sub al,30h jmp s1add1: add al,09hs1: mov dh,al push cx mov cx,4 comp: mov al,dh shr x,1 and al,x jnz onedisp jz zerodisp onedisp: mov ah,02h mov dl,31h int 21h jmp tail1zerodisp: mov ah,02h mov dl,30h int 21htail1: loop comp SPACE pop cx loop loop1 jmp tailERROR: lea dx,eor MOV AH,09H INT 21H t

26、ail: MOV AH,4CH INT 21HCODES ENDS END START实验结果: 实验总结:1. 输入的数字在寄存器中以二进制储存,但不能依次显示,用00001000序列与其进行比较,此序列每比较一次右移一位,这样可以把每一位数值提取出来。2. 判断输入值在09、af还是AF范围内,需要让其分别与3ah,47h与67h进行比较。 实验七 字符串键入和统计显示程序内容与要求:显示信息“输入字符串,回车或空格结束”,回车或空格后显示输入字符串的字符总个数,统计并显示其中的数字字符(1-9)个数和非数字字符个数。目的:掌握字符串信息的统计方法和数据的显示。CRLF MACRO MOV

27、 AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21HENDMSPACE MACRO MOV AH,02H MOV DL,32 INT 21HENDMDATAS SEGMENT L db 0 D db 0 str1 db Please input a string:,$ dig db Digital:,$ let db Letter:,$ buf db 100,?,100 dup(?) DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码STACKS ENDS CODES SEGMENT ASSUME CS:CODE

28、S,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX mov ah,09h lea dx,str1 int 21h CRLF mov dx,offset buf mov ah,0Ah int 21h mov di,offset buf+2 CRLFcheck: mov al,di inc di cmp al,0dh jz k cmp al,3ah js add1 jns add2add1: inc D jmp s1add2: inc Ls1: jmp checkk: mov ah,09h lea dx,dig int 21h sub ah,ah mov al,D mov dl,1

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

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