计算机组成原理-汇编语言程序设计.pdf
《计算机组成原理-汇编语言程序设计.pdf》由会员分享,可在线阅读,更多相关《计算机组成原理-汇编语言程序设计.pdf(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!计算机组成原理实验 计算机组成原理实验 实验报告 (实验二)学 院 名 称:数据科学与计算机学院 专业(班级):学 生 姓 名:学号 时间:2019 年 10 月 19 日 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!计算机组成原理实验 成 绩:实验二:MIPS汇编语言程序设计实验 一.实验目的 1.初步认识和掌握 MIPS 汇编语言程序设计的基本方法;2.熟悉 QEMU 模拟器和 GNU/Linux 下 x86-MIPS 交叉编译环境的使用。二.实验
2、内容 我的题目为31%4+1,第四题。【密码】编写一个程序,先从键盘输入一个字符串(有英文字母,可能也有数字),然后显示其中数字符的个数、英文字母的个数和字符串的长度;字符串中不能有空格,若有 将其删除,并将改变后的字符串按相反的顺序显示出来;输入第二个字符串,然后将输入的 字符串与前面处理后的字符串比较是否相同,若相同,输出“Password Right!”,否则输 出“Password Error!”。三.实验器材 PC机一台,装有Linux操作系统的虚拟机一套,QEMU模拟器软件一套,GNU跨平台交叉编译环境一套。四.实验过程与结果 说明:根据需要书写相关内容,如:程序流程图、设计的思想
3、与方法、分析、实验步骤和实验结果及分析等。1、程序流程图 首先,遍历输入字符串并记录字符串长度,字母个数,数字个数,并把非空格字符存到分配好的空间。欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!计算机组成原理实验 然后,逆转字符串并再存入另一个空间。随后再读入一个字符串,判断两者是否相等。如果相等就输出Password Right!,否则输出Password Error!2、可能用到的指令 lb/lh/lw:从存储器中读取一个byte/half word/word的数据到寄存器中.如lb$1,0($2)sb/sh/sw:把一个byte/half
4、word/word的数据从寄存器存储到存储器中.如 sb$1,0($2)add/addu:把两个定点寄存器的内容相加add$1,$2,$3($1=$2+$3);u为不带符号加。addi/addiu:把一个寄存器的内容加上一个立即数add$1,$2,#3($1=$2+3);u为不带符号加。sub/subu:把两个定点寄存器的内容相减。欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!计算机组成原理实验 and/andi:与运算,两个寄存器中的内容相与and$1,$2,$3($1=$2&$3);i为立即数。or/ori:或运算。xor/xori:异或运算
5、。beq/beqz/benz/bne:条件转移eq相等,z零,ne不等。j/jr/jal/jalr:j直接跳转;jr使用寄存器跳转;slt/slti/sltui:如果$2的值小于$3,那么设置$1的值为1,否则设置$1的值为0。slt$1,$2,$3。mov/movz/movn:复制,n为负,z为零。mov$1,$2;movz$1,$2,$3($3为零则复制$2到$1)。本实验主要涉及字符串和字符的操作,此外还涉及到计数。所以一般使用lb/sb和lw/sw来解决寄存器存储数据空间不足的情况。本实验涉及判断单个字符的类型,需要用到大小比较。我使用slt/slti和beq/beqz/benz/bn
6、e来跳转。另外,必须用到的还有加减法、寄存器赋值、逻辑运算等指令。3、设计流程 首先我们为输入字符串和操作后的字符串分配内存空间,分配:origin_str:.space 1000#原始输入字符串 nospace_str:.space 1000#去除空格后的字符串 reversed_str:.space 1000#翻转后的字符串 然后分配存储计数的整形变量的内存空间:str_len:.word 0#字符串长度 num_let:.word 0#字母字符数量 num_dig:.word 0#数字字符数量 打印特定的字符串使用syscall 4,预设一些可能用到的asciiz字符串。输入字符串使用s
7、yscall 8,需要把目的地址放入寄存器,如下:la$a0,str li$a1,100 li$v0,8 syscall 遍历字符串取字符的操作可以使用不断自增当前地址+寻址的方式进行:loop:lb$t2,($t0)add$t0,$t0,1#$t0 地址加一 j loop 题目涉及连续判断的条件。判断大于和小于都可以通过slti和slt来进行,只需要颠倒寄存器的位置即可。对连续判断条件,可以分别计算并作逻辑运算,例如,判断字符是不是数字:欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!计算机组成原理实验 slti$t6,$t2,58#$t29+1
8、 时置位 slti$t7,$t2,48#$t20时置位 nor$t7,$zero,$t7#$t7 取反 and$t6,$t6,$t7#$t6=0=$t2=9 beq$t6,1,adddigit 需要一个取反操作,或者把48放入寄存器中。类似的,判断是不是字母,是不是空格也使用类似的方法。循环过程中进行存数操作,每次存一个字节然后地址增加一个字节。save1:sb$t2,($t5)addi$t5,$t5,1 j judge 遍历结束后,使用另一块空间把字符串作逆转,使用C代码的指针实现如下。char*p1=str;char*p2=reversed_str+length-1;while(*p1!=
9、0)*p2=*p1;p2-;p1+;指针可以直接用地址代替,使用MIPS汇编实现如下:reverse:la$t0,nospace_str la$t1,reversed_str add$t2,$t3,$t4#$t2=nospace_str 字符串的有效长度#做一个 t2 次的循环,不断存字节使(reversed_str+$t2-i-1)=i(nospace_str)add$t1,$t1,$t2 addi$t1,$t1,-1 li$t3,0 loop:beq$t3,$t2,Retype add$t4,$t3,$t0 lb$t5,($t4)sub$t6,$t1,$t3 sb$t5,($t6)addi
10、$t3,1 j loop 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!计算机组成原理实验 图1 输入正确时的程序输出 图2 输入错误时的程序输出 可以看到基础的功能都得到实现,尝试在 x86 环境下汇编链接代码并生成 MIPS 可执行文件,随后使用 QEMU 来运行。QEMU和PCSPIM的不同点在于使用的是linux内核调用,所以与syscall相关的代码必须得到修改。此外,由于写整数的接口无法使用,我们需要自己实现一个把整数转换为字符串的函数,用于
11、打印该整数。基本思路还是把整数不断除10,把余数放入对应的地址,如下:#打印一个整数的代码,整数保存在 t1 中,返回地址保存在 ra 中 Printint:#先确定该整数长度 la$t0,int_str li$t2,10 li$t4,0 move$t3,$t1 get_int_len:div$t3,$t2#除 10 mflo$t3 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!计算机组成原理实验 add$t4,$t4,1 bnez$t3,get_int_len add$t5,$t0,$t4 sb$zero,($t5)#置末尾为 0 addi$t
12、4,$t4,-1 assign:blt$t1,$t2,saveint#如果 t1 小于 10 div$t1,$t2#除 10 mflo$t1#商 mfhi$t3#余数 addi$t3,$t3,48#acsii 码 add$t5,$t0,$t4#t5 为存字节的地址 sb$t3,($t5)#存数 addi$t4,$t4,-1#调整地址 j assign#循环 saveint:addi$t1,$t1,48#acsii 码 add$t5,$t0,$t4#t5 为存字节的地址 sb$t1,($t5)#存数 printStr:li$a0,1 la$a1,int_str li$a2,100 li$v0,4
13、004 syscall jr$ra 这样我们用jal调用它时,就可以直接打印出$t1中的整数了。自此程序设计环节完成。4、实验测试结果与分析 尝试在linux虚拟机上运行这段程序的MIPS可执行文件,并使用不同的输入例来寻找程序的不足。基础输入例 使用例子中的输入,查看到输出如下:欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!计算机组成原理实验 图3 QEMU的执行结果1 符合我们的预期,再尝试一下其他的测试例。长度不同的输入例 查看到输出如下:图4 QEMU的执行结果2 长度相同字符不同的输入例 查看到输出如下:图5 QEMU的执行结果3 全都
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 组成 原理 汇编语言 程序设计
限制150内