资源预览内容
第1页 / 共36页
第2页 / 共36页
第3页 / 共36页
第4页 / 共36页
第5页 / 共36页
第6页 / 共36页
第7页 / 共36页
第8页 / 共36页
第9页 / 共36页
第10页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
微微 机机 原原 理理 实实 验验 报报 告告 班级:班级: 指导老师:指导老师: 学号:学号: 姓名:姓名: 实验一实验一 两个多位十进制数相加的实验两个多位十进制数相加的实验 一、实验目的一、实验目的 学习数据传送和算术运算指令的用法 熟悉在 PC 机上建立、汇编、链接、调试和运行汇编语言程序 的过程。 二、实验内容二、实验内容 将两个多位十进制数相加,要求被加数和加数均以 ASCII 码形 式各自顺序存放在以 DATA1、DATA2 为首的 5 个内存单元中(低 位在前) ,结果送回 DATA1 处。 三、程序框图三、程序框图 图 3-1 4、参考程序清单参考程序清单 DATA SEGMENT DATA1 DB 33H,39H,31H,37H,34H;被加数 DATA1END EQU $-1 DATA2 DB 34H,35H,30H,38H,32H;加数 DATA2END EQU $-1 SUM DB 5 DUP(?) DATA ENDS STACK 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 SI,OFFSET DATA1END MOV DI,OFFSET DATA2END CALL ADDA MOV AX,4C00H INT21H ADDAPROC NEAR MOV DX,SI MOV BP,DI MOV BX,05H AD1: SUBBYTE PTR SI,30H SUBBYTE PTR DI,30H DECSI DECDI DECBX JNZAD1 MOV SI,DX MOV DI,BP MOV CX,05H CLC AD2: MOV AL,SI MOV BL,DI ADCAL,BL AAA MOV SI,AL DECSI DECDI LOOP AD2 MOV SI,DX MOV DI,BP MOV BX,05H AD3: ADDBYTE PTR SI,30H ADDBYTE PTR DI,30H DECSI DECDI DECBX JNZAD3 RET ADDAENDP CODE ENDS ENDSTART 5、实验结果与分析实验结果与分析 这次实验依次将相加数与被加数存入 AL,BL,依次从低位向 高位相加,然后把结果放在内存中。 6、实验体会实验体会 这次实验是微机原理课的第一次实验,主要是为了通过这次的 实验,让我们对这个软件的编程有更深的了解、知道如何运行程序。 在实验中误把 C00H ,写成了 COOH.从中,我学到了许多课本里学不 到的东西,有些意外,有些收获。 实验二实验二 排序实验排序实验 一、实验目的一、实验目的 掌握用汇编语言编写排序程序的思路和方法。 二、实验内容二、实验内容 将指定内存出开始的数据(最多为 4 位数)按从大到小的顺序 排列。第一个数字表示数据的个数(不是要比较的数值!) 。 三、程序流程图三、程序流程图 图 3-2 4、程序清单程序清单 DATA SEGMENT ADDR DW 8,234,35,67,876,54,39,765,237 DATA ENDS STACK SEGMENT STA DW 32 DUP(?) TOP DW ? STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX MOV SP,TOP MOV CX,WORD PTR ADDR0 DEC CX LOOP1: MOV DI,CX MOV BX,2 LOOP2: MOV AX,WORD PTR ADDRBX CMP AX,WORD PTR ADDRBX+2 JGE CCC XCHG AX,WORD PTR ADDRBX+2 MOV WORD PTR ADDRBX,AX CCC: ADD BX,2 LOOP LOOP2 MOV CX,DI LOOP LOOP1 EXIT: MOV AX,4C00H INT 21H CODE ENDS END START 5、实验结果与分析实验结果与分析 这次实验是给我们 8 个数字,按从大到小的顺序排列出来,定 义的数字中 8 是一个指示数字的个数量。 6、实验体会实验体会 通过此次的实验,懂得了用汇编语言编写排序程序的思路和方 法,知道义的数字中 8 是一个指示数字的个数量,不是一个数。更 加加强了我对程序的操作的熟练程度。 实验三实验三 字符串按字符串按 ASCIIASCII 值的查找值的查找 1、实验目的实验目的 1.掌握字符串按 ASCII 值查找的方法。 二、实验设备二、实验设备 计算机一台。预装 Windows XP、宏汇编 MASM5。 三、实验内容三、实验内容 编写能够实现以下要求的汇编语言程序,并上机实现。 1.对一个给定的字符串,统计其中 09 的个数,并在屏幕上显 示这个字符串和 09 的个数(3 位十进制数) 。 四、实验框图四、实验框图 程序开始 DB 定义一个字符串 将字符串的长度转换成十进制 符串按 ASCII 值查找 、执行 INT 21H 结束 五、程序清单五、程序清单 DATA SEGMENT STRING DB GFDsfgfdsGDA0935J/:KO6ASD78,$ L1 DB ? DATA ENDS STACK SEGMENT PARA STACK STACK DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START PROC FAR BEGIN: PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX LEA BX,STRING MOV DL,0 LP2: MOV AL,BX CMP AL,30H JB LP3 CMP AL,39H JA LP3 INC DL LP3: CMP AL,$ JE LP4 INC BX JMP LP2 LP4: MOV L1,DL LEA DX,STRING MOV AH,9 INT 21H MOV DL,0DH MOV AH,2 INT 21H MOV DL,0AH MOV AH,2 INT 21H MOV AL,L1 MOV AH,0 CALL B_D RET START ENDP B_D PROC ;二十进制转换及显示 MOV CL,100 DIV CL PUSH AX MOV DL,AL ADD DL,30H MOV AH,2 INT 21H POP AX MOV AL,AH MOV AH,0 MOV CL,10 DIV CL PUSH AX MOV DL,AL ADD DL,30H MOV AH,2 INT 21H POP AX MOV DL,AH ADD DL,30H MOV AH,2 INT 21H RET B_D ENDP CODE ENDS END BEGIN 六、实验结果与分析六、实验结果与分析 大写的英文字符 AZ 的 ASCII 码是 41H5AH,小写的英文字符 az 的 ASCII 码是 61H7AH,如果一个字符的 ASCII 码在这两个范 围内,则满足要求。 7、实验体会实验体会 通过此次的实验更加加强了我对 ASCII 码转换的应用,以后可 以对这个问题,有更深的了解,而且我能很快的用它进行查找,很 有收获。 实验四实验四 DOSDOS 输入输出功能的使用输入输出功能的使用 一、实验目的一、实验目的 1.掌握 8086 汇编语言程序的汇编、链接、运行的方法。 2.掌握用软中断调用 DOS 输入输出功能的方法。 3.掌握将二进制数转换成十进制数的编程方法。 二、实验设备二、实验设备 计算机一台。预装 Windows XP、宏汇编 MASM5。 3、实验内容实验内容 程序开始 DB 定义一个字符串 将字符串的长度转换成十进制 MOV DL,字符 ASCII 码 MOV AH,2 INT 21H “$”结束 四、程序清单四、程序清单 DATA SEGMENT STRING1 DB 1234567890ABCDEFG,$ ;准备显示的字符串 COUNT DB $-STRING1-1 ;上面字符串的长度 DATA ENDS STACK SEGMENT PARA STACK STACK DB 100 DUP(100) STACK ENDS CODE SEGMENT START PROC FAR ASSUME CS:CODE, SS:STACK,DS:DATA BEGIN: PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX LEA DX,STRING1 ;输出字符串 MOV AH,9 INT 21H ;输出回车和换行符,以实现另起一行 MOV DL,0DH ;输出回车命令 MOV AH,2 INT 21H MOV DL,0AH ;输出换行命令 MOV AH,2 INT 21H MOV AL,COUNT ;将字符串长度转换成 3 位十进制数 输出 MOV AH,0 ;高 8 位补 0 MOV CL,100 DIV CL ;除以 100 获得百位数 PUSH AX ;暂存结果和余数 MOV DL,AL ADD DL,30H ;换成 ASCII 码 MOV AH,2 ;输出字符到屏幕 INT 21H POP AX ;恢复结果和余数 MOV AL,AH ;余数作为被除数 MOV AH,0 MOV CL,10 DIV CL ;除以 10 获得十位数 PUSH AX MOV DL,AL ADD DL,30H MOV AH,2 INT 2
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号