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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

计算机组成原理与汇编实验报告.docx

1、计算机组成原理与汇编实验报告计算机组成原理与汇编实验报告学 院:信息科学与工程学院 专业班级:物联网工程1202班 指导老师: 贺建飚 学 号: 0909123006 姓 名: 胡松 实验一:二进制转十六进制一、 实验原理:在源程序中设置数据段、堆栈段及代码段,在数据段中定义八个字节数据,把这些数据转换成 16 进制数的 ASCll 码存在上述数据之后,然后在屏幕上显示这些数据。二、 实验目的1. 掌握 86 系列汇编语言及指令的格式和寻址方式2. 掌握 86 系列汇编语言各类指令的用法。3. 掌握简单程序、分支程序、循环程序、子程序等的设计方法。三、实验内容流程图: NAME EX1 ; 程

2、序命名伪指令,程序名为EX1PAGE 50,70 ; 表示占了50行,70列DAT SEGMENT PARADAT ;数据段定义伪指令 A1 DB 12H,34H,56H,78H,9AH DB 0BCH,0DEH,0F0H B1=$-A1 ;赋值伪指令,求A1(符号地址)到当前汇编地址($)的字节数 B2=B1*2 ;求2倍的B1 A2 DB B2 DUP(?) ;数据重复定义伪指令,定义ASCII码字符区DAT ENDSSTAC SEGMENT PARA STACK STA ;定义堆栈段 STA1 DW 100 DUP(?) STAC ENDSCODE SEGMENT PARA CODE A

3、SSUME CS:CODE,DS:DAT,SS:STAC,ES:DATSTAR PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DAT MOV DS,AX MOV ES,AX LEA SI,A1 ;把A1首地址赋给SI LEA DI,A2 ;转化后用来放结果 MOV CX,B1G1: MOV BL,2 MOV AL,SI ;把八位的数据赋给AL,准备转化 MOV BH,AL ;把AL中的数据暂存于BH中 PUSH CX ;保护CX中的数据 MOV CL,4 ;指出移位的位数为4ROR AL,CL ;循环右移四位 POP CX ;把CX弹出堆栈G2: AND

4、AL,0FH ;把AL中的数据和0FH“与”,得到高四位DAA ;对AL两位十进制数做(BCD)调整ADD AL,0F0HADC AL,40HMOV DI,AL ;存ASCII码INC DI ;修改地址加一MOV AL,BHDEC BLJNZ G2INC SI ;指向下一个数LOOP G1MOV SI,OFFSET A2 ;A2的偏移地址送给SI寄存器MOV CX,B2CALL P1RET ;子程序返回STAR ENDPP1 PROCMOV BL,2G: MOV DL,SI MOV AH,2 INT 21H INC SI ;指向下一个要显示的数 DEC BL JNZ T ;连续显示两个数,未完

5、继续 MOV DL, MOV AH,2 INT 21H MOV BL,2T: LOOP G RETP1 ENDPCODE ENDS END STAR四、实验结果五、实验心得 读了这个程序之后发现,想要真正理解一个程序都是需要掌握众多助记符的用法以及它的意思,只有了解并明白了这些之后才可以分析程序或者是编写简单的小程序实验二:起泡排序算法二、 实验原理:在源程序中设置数据段、堆栈段及代码段,在数据段中定义八个字节数据,把这些数据转换成 16 进制数的 ASCll 码存在上述数据之后,然后在屏幕上显示这些数据。二、 实验目的1.掌握循环程序的设计方法;2.了解循环结构在程序中的重要作用起泡排序程序

6、。三、实验内容 流程图:STACKSG SEGMENT STACK S DW 64 DUP(ST)STACKSG ENDSDATA SEGMENT ARY DW 5,7,1,4,3,6,9,8,2 ;数组,流程图中为A CT EQU($-ARY)/2 ;元素个数DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACKSG MAIN PROC FAR MOV AX,DATA MOV DS,AX MOV DI,CT-1 ;初始化外循环次数 LOP1: MOV CX,DI ;置内循环次数 MOV BX,0 ;置地址指针 LOP2: MOV AX,

7、ARYBX CMP AX,ARYBX+2 ;两数比较 JGE CONT ;次序正确转 XCHG AX,ARYBX+2 ;次序不正确互换位置 MOV ARYBX,AX CONT: ADD BX,2 ;修改地址指针 LOOP LOP2 ;内循环控制 DEC DI ;修改外循环次数 JNZ LOP1 ;外循环控制 MOV AX,4C00H INT 21H MAIN ENDPCODE ENDSEND MAIN四、实验结果五、实验心得1.在进行循环程序设计时,要注意循环初始化、内外层循环的控制、循环结束条件等的设置,对整个程序的执行逻辑要非常清楚,这样可以避免死循环等意外情况的出现。2 .当要观察排序结

8、果时,可利用D命令,显示数据段的内容,检查程序是否正常运行实验三:查找匹配字符串一、实验原理:字符串的匹配进行应选用repzcmpsb操作,匹配一次过程后去判断关键字的指针移动的步数是不是和关键字长度相同,如果相同说明匹配成功,调用进制转化函数将结果输出即可,如果句子的指针移动到最后也没有使关键字的指针移动到它的结尾说明不能匹配。二、 实验目的练习字符串的匹配程序设计。三、实验内容 流程图如下:源程序:datarea segment keyadr label byte keymax db 20 keyact db ? keystring db 20 dup(?) senadr label by

9、te senmax db 50 senact db ? secstring db 50 dup(?) messkey db Enter keyword:,$ messsen db 0dh,0ah,Enter Sentence:,$ nomatch db 0dh,0ah,No match.,$ match db 0dh,0ah,Match at location:,$ rest db H of the sentence.,$ datarea ends ;* prognam segment main proc far assume cs:prognam,ds:datarea,es:datarea

10、start: push ds xor ax,ax push ax mov ax,datarea mov ds,ax mov es,ax lea dx,messkey mov ah,09h int 21h lea dx,keyadr mov ah,0ah int 21h lea dx,messsen mov ah,09h int 21h lea dx,senadr mov ah,0ah int 21h mov al,senact sub al,keyact jl nmatch call search jmp short e0 nmatch: lea dx,nomatch mov ah,09h i

11、nt 21he0: ret main endp ;- search proc near xor cx,cx;markoff counter mov dx,offset senadr add dl,senact inc dl mov cl,keyact cld lea di,secstring r0: lea si,keystring repz cmpsb mov al,byte ptr si-1 cmp al,byte ptr di-1 jnz next sub si,offset keystring mov ax,si cmp al,keyact je showp next: mov cl,

12、keyact cmp di,dx jnz r0 shown: lea dx,nomatch mov ah,09h int 21h jmp short e1 showp: lea dx,match mov ah,09h int 21h dec di mov bx,di xor ax,ax mov al,keyact sub bx,ax mov ax,offset senadr sub bx,ax call binihex lea dx,rest mov ah,09h int 21h e1: ret search endp binihex proc near mov ch,4 r1: mov cl

13、,4 rol bx,cl mov dl,bl and dl,0fh add dl,30h cmp dl,39h jle disp add dl,07h disp: mov ah,02h int 21h dec ch jnz r1 ret binihex endp ;- prognam ends ;* end main四、实验结果五、实验心得 与第一次实验相比这次用到了数据段,应该注意数据段的定义和使用。此外应该注意单个字符时的“边缘”情况因为,这是指针的移动和关键字的长度是一致的,但是这并不意味着,两个字符串匹配。实验四:求Fibonacci递归数一、 实验原理:Fibonacci数的定义如下

14、:FIB(1)=1FIB(2)=1 FIB(N)=FIB(N-2)+FIB(N-1)N=3 程序接收用户输入的1小于等于50的十进制正整数,存入输入缓冲区后再把它转化为十六进制数,存入内存单元N中。调用FIB函数求Fibonacci数,结果高位存在RESULT2H,低位存在RESULT2L,最后调用OUTPUT函数将结果以十进制的形式显示出来。程序亮点在于将结果转换为十进制时采用了除10取余的方法,对于高位通过在适当的位数加65536(ADD65536)的方式巧妙地将乘法转化为加法。二、 实验目的进一步掌握子程序的设计方法,熟悉递归程序的设计三、实验内容 流程图:DATAS SEGMENT S

15、TR1 DB Please input a number(1-50):N=,$ STR2 DB 13,10,FIB(N)=,$ WRONGSTR DB 13,10,13,10,A number between 1 and 50 please!,13,10,13,10,$ INPUTBUFFER DB 3,?,3 DUP(?) N DW ? ;输入N值 RESULT1H DW 0 RESULT1L DW 0 RESULT2H DW 0 ;结果的高16位 RESULT2L DW 0 ;结果的低16位 C10 DW 10 OUTPUTBUFFER DB 11 DUP(0) DATAS ENDS CO

16、DES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX CALL INPUT CALL FIB CALL OUTPUT JMPQUIT;*INPUT PROC JMPT1WRONG:LEA DX,WRONGSTR MOV AH,9 INT 21H T1:LEA DX,STR1 MOV AH,9 INT 21H LEA DX,INPUTBUFFER MOV AH,10 INT 21H MOV AX,0 MOV CL,INPUTBUFFER+1 MOV CH,0 LEABX,INPUTBUFFER+2 T2:MUL C1

17、0 MOV DL,BX CMP DL,0 JB WRONG CMP DL,9 JA WRONG AND DL,0FH ADD AL,DL ADC AH,0 INC BX LOOP T2 CMP AX,0032H JA WRONG CMP AX,1 JB WRONG MOV N,AX RETINPUTENDP;*FIB PROC CMP N,1 JZ L1 CMP N,2 JL 2 DEC N CALL FIB MOV AX,RESULT2L MOV DX,RESULT2H MOV CX,RESULT1L ADD RESULT2L,CX MOV CX,RESULT1H ADC RESULT2H,

18、CX MOV RESULT1L,AX MOV RESULT1H,DX JMP EXIT L1:MOV RESULT1L,1 MOV RESULT2L,1 JMP EXIT L2:MOV RESULT2L,1 DEC N CALL FIBEXIT:RETFIB ENDP;*OUTPUT PROC MOV AX,RESULT2L LEA SI,OUTPUTBUFFER MOV CX,5R1:MOV DX,0;低位加入OUTPUTBUFFER DIV C10 INC SI ADD SI,DL LOOP R1;* MOV AX,RESULT2H LEA SI,OUTPUTBUFFER MOV CX,5

19、R2:MOV DX,0 DIV C10 INC SI PUSH CX;高位加入OUTPUTBUFFER CMP DX,0 JE NOADD MOV CX,DX ADDN:CALL ADD65536 LOOPADDNNOADD:POP CX LOOP R2;* LEA DX,STR2 MOV AH,9 INT 21H LEA SI,OUTPUTBUFFER MOV BX,10R3:CMP BYTE PTRSI+BX,0 JA PRINT DEC BX ;显示十进制结果 JMP R3PRINT:MOV DL,SI+BX MOV AH,2 INT 21H DEC BX CMP BX,1 JAE PR

20、INT RETOUTPUT ENDP;*ADD65536 PROC;高位算法 ADD BYTE PTRSI,6 MOV DL,0 CMP BYTEPTRSI,3AH JB A1 SUB BYTEPTRSI,10 MOV DL,1A1:ADD BYTEPTRSI+1,3 ADD BYTEPTRSI+1,DL MOV DL,0 CMP BYTEPTRSI+1,3AH JB A2 SUB BYTEPTRSI+1,10 MOV DL,1A2:ADD BYTEPTRSI+2,5 ADD BYTEPTRSI+2,DL MOV DL,0 CMP BYTEPTRSI+2,3AH JB A3 SUB BYTEP

21、TRSI+2,10 MOV DL,1A3:ADD BYTEPTRSI+3,5 ADD BYTEPTRSI+3,DL MOV DL,0 CMP BYTEPTRSI+3,3AH JB A4 SUB BYTEPTRSI+3,10 MOV DL,1A4:ADD BYTEPTRSI+4,6 ADD BYTEPTRSI+4,DL MOV DL,0 CMP BYTEPTRSI+4,3AH JB A0 SUB BYTEPTRSI+4,10 MOV DL,1A5:ADD BYTEPTRSI+5,DL MOV DL,0 CMP BYTEPTRSI+5,3AH JB A3 SUB BYTEPTRSI+5,10 MO

22、V DL,1A6:ADD BYTEPTRSI+6,DL MOV DL,0 CMP BYTEPTRSI+6,3AH JB A0 SUB BYTEPTRSI+6,10 MOV DL,1A7:ADD BYTEPTRSI+7,DL MOVDL,0 CMP BYTEPTRSI+7,3AH JB A0 SUB BYTEPTRSI+7,10 MOV DL,1A8:ADD BYTEPTR SI+8,DL MOV DL,0 CMP BYTE PTR SI+8,3AH JB A0 SUB BYTE PTR SI+8,10 MOV DL,1 A9:ADD BYTE PTR SI+9,DLA0:RETADD65536

23、 ENDP ;*QUIT:MOV AH,4CH INT 21HCODES ENDS END START四、实验结果五、实验心得 本实验使我进一步掌握子程序的设计方法,熟悉递归程序的设计,丰富了我写汇编程序的经验。实验五:分类统计字符个数一、 实验原理:在下面的程序中,以读到的字符的ASCII码是否为0作为字符串末尾的标志;而进行三个逻辑判断(即数字字符判,大写字母字符判断和小写字母字符判)对相应字符的个数进行统计。二、 实验目的通过分支程序设计实现字母、数字及其它字符的分类统计计数。三、实验内容DATASSEGMENTSTRING1DBPleaseinputastring: $;输入提示信息S

24、TRING2DBNumberofchars:$ ;各类字符提示信息STRING3DBNumberofdigits:$STRING4DBNumberofothers:$CHARSDB0;字母DIGITDB0;数字OTHERSDB0其他DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXLEADX,STRING1;显示输入提示信息PleaseinputastringMOVAH,09HINT21HMOVCX,100;设置循环次数足

25、够大L1:MOVAH,01H;中断调用,单字符输入INT21H;输入符号的ASCII代码在AL寄存器中CMPAL,0DH;若输入回车符则结束JZOVER2CMPAL,30H;若39H(9),跳转进一步比较JAHIGHER1JMPDIGITAL;DIGIT+HIGHER1:CMPAL,41H;若IF5AH(Z),跳转继续比较JAHIGHER2JMPCHAR;ALPHAU+HIGHER2:CMPAL,61H;若IF7AH(z),OTHERS+JAOTHERJMPCHAR;ALPHAU+JMPOVER;比较结束OTHER:INCOTHERS;OTHERS+JMPOVER;比较结束CHAR:INCCHARS;ALPHAL+JMPOVER;比较结束DIGITAL:INCDIGIT;DIGIT+JMPOVER;比较结束JMPOVER;比较结束OVER:NOPLOOPL1

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

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