武汉科技大学微机原理实验报告 (2)

  • 格式:doc
  • 大小:232.50 KB
  • 文档页数:17

实验一“HELLO WORLD!”的显示
1.实验目的
从最简单的汇编语言入门起,逐步掌握汇编语言的指令,汇编语言的编程技巧,熟悉汇编语言的编程环境,慢慢入门提升技能。

2.试验环境及设备
实验采用的是emu8086仿真软件,全软件操作,无硬件操作,操作方法简单,实验过程全用汇编指令编程。

3.实验内容
用汇编语言的指令编写程序,然后通过屏幕显示出“HELLO WORD!”的字样出来,然后截图,写出实验报告。

试验程序代码如下:
OEG 100H
MOV AX, 0B800h
MOV DS, AX
MOV [52h], 'H'
MOV [54h], 'E'
MOV [56h], 'L'
MOV [58h], 'L'
MOV [5Ah], 'O' //到这一步就把“HELLO”存入相应的地址中
PUSH CS //进栈操作
POP DS //出栈操作
MOV AX, 0B800h
MOV ES, AX
MOV ES:[5Eh], 'W' MOV ES:[60h], 'O' MOV ES:[62h], 'R' MOV ES:[64h], 'L' MOV ES:[66h], 'D' MOV ES:[68h], '!' HLT
4.实验结果截图如下:
5.实验结论
Emu8086功能比较大,就目前我自己水平要掌握汇编语言语言的编程技巧还是有一定难度,只得才考人家程序,自己再实践实践。

实验二数的加法
1.实验目的
用汇编语言编写程序实现两个数相加的功能,然后将结果用程序显示出来,最后写出实验报告。

2.试验环境及设备
实验采用的是emu8086仿真软件,全软件操作,无硬件操作,操作方法简单,实验过程全用汇编指令编程。

3实验内容
用汇编语言的指令编写程序,然后通过屏幕显示出计算结果,然后截图,写出实验报告。

试验程序代码如下:
ORG 100H
MOV AH, 07
MOV AL, 08
ADD AL, AH
XOR AH, AH
AAA
MOV DX, AX
MOV AH, 0Eh
OR DH, 30h
MOV AL, DH
INT 10h
OR DL, 30h
MOV AL, DL
INT 10h
RET
END
4.实验结果截图如下:
5.实验结论
Emu8086功能比较大,就目前我自己水平要掌握汇编语言语言的编程技巧还是有一定难度,不过我相信多次实验就会让自己的水平有长进。

实验三数的阶乘计算
1. 实验目的
用汇编语言编写程序实现一个数的阶乘的计算功能,然后将结果用程序显示出来,最后写出实验报告。

2.试验环境及设备
实验采用的是emu8086仿真软件,全软件操作,无硬件操作,操作方法简单,实验过程全用汇编指令编程。

3实验内容
用汇编语言的指令编写程序,然后通过屏幕显示出计算结果,然后截图,写出实验报告。

试验程序代码如下:
include 'emu8086.inc'
ORG 100h
start:
CALL PTHIS
DB 13, 10, 'Enter the number: ', 0
CALL scan_num
; factorial of 0 = 1:
MOV AX, 1
CMP CX, 0
JE print_result
; move the number to BX:
; CX will be a counter:
MOV BX, CX
MOV AX, 1
MOV BX, 1
calc:
MUL BX
CMP DX, 0
JNE overflow
INC BX
LOOP calc
print_result:
; print result in AX:
CALL PTHIS
DB 13, 10, 'Factorial: ', 0
CALL PRINT_NUM_UNS
JMP exit
overflow:
CALL PTHIS
DB 13, 10, 'The result is too big!', 13, 10, 'Use values from 0 to 8.', 0 JMP start
exit:
RET
DEFINE_SCAN_NUM
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
DEFINE_PTHIS
END
4.实验截图如下,输入数字为5,输出结果为120:
5.实验结论
实验的时候觉得实在是太难了,后来慢慢看懂了程序,但是现在我还是不能单独写出来,因为这个汇编语言实在是不像C语言那么容易,这个毕竟是以前的的语言,相比C语言来说没有C语言活跃,况且移植性也不好,所以感觉有点难度。

实验四DEBUG实验
1.实验目的
用汇编语言编写程序练习使用DEBUG功能,然后将结果用程序显示出来,最后写出实验报告。

2.实验环境及设备
微机电脑一台,DEBUG操作平台,全是软件操作,无硬件操作,操作方法简单,容易上手。

3.操作界面以及实验内容如下:
实验内容:
用R指令可以看到内存中各个寄存器的状态,以及内容,同时R可以修改内存中寄存器的内容,例如修改AX内容之前里面的内容是1212,在界面中输入R AX
我们修改成0013,然后再输入R查看则会看到AX的值已经被改变了,如下所示:
用D指令可以查看内存中的内容,例如输入D则会看到内存中的内容:
可以看到内存中的内容还是比较多的。

用A指令可以输入一段汇编语言在内存中执行,如图所示:
然后用D指令:d 0b19:0100可以查看执行的结果:
这个里面就有刚才执行的程序内容。

用U指令可以把上述内存中的内容翻译成汇编命令:输入U 0b19:0100结果如下:
然后用R指令找到0b19:0100的地址,输入r CS 0b19 r IP 0100 找到之后然后用R指令可以查看内存中各个寄存器的内容:
4.实验结果及结论
此次试验没有采用EMU8086操作方式,而是在DEBUG的操作界面下进行的,这样我们可以很好的看到内存中各个寄存器的内容,同时也让加深了汇编语言的熟悉程度,其中的单步运行更能够看到汇编语言的运行过程,从另外的角度理解了程序的运行方式。

实验五数字大小比较
1.实验目的
用汇编语言编写程序实现数的大小比较的功能,然后将结果用程序显示出来,最后写出实验报告。

2.试验环境及设备
实验采用的是emu8086仿真软件,全软件操作,无硬件操作,操作方法简单,实验过程全用汇编指令编程。

3.实验内容,用汇编语言的指令如下:
ORG 100h
MOV AH, 4
MOV AL, 4
CMP AH, AL ;比较得到两个数字相等
NOP
MOV AH, 4
MOV AL, 3
CMP AH, AL ;比较得到4比3大
NOP
MOV AH, 1
MOV AL, -5
CMP AH, AL
NOP
MOV AH, 1
MOV AL, 251
CMP AH, AL ;比较得到1比251小
NOP
MOV AH, -3
MOV AL, -2
CMP AH, AL ;比较得到-3比-2小NOP
MOV AH, -2
MOV AL, -3
CMP AH, AL ;比较得到-2比-3大NOP
MOV AH, 255
MOV AL, 1
CMP AH, AL ;比较得到255比1大
NOP
HLT
4.实验结果及结论
两数比较大小必然涉及到状态寄存器的标志位,比较大小时,若是两数相等,则ZF=1,此时两数相等,因为比较大小的时候是两个数相减的过程,只是最终结果不会保存下来,但是相应的状态标志位会发生改变;若是两数不相等,这种情况下,分两种情况,第一种两个无符号的数字比较,若CF=0,则表示没有借位,则是比较数的前面一个比后面大,若CF=1,表示有借位,后面一个数比前面的数字小,这样就可以比较出两个数字的大小,第二种情况,比较两个有符号的数字,若是状态标志位OF+SF=0,表示运算结果没有溢出,并且最后结果最高位为0,则前面的数比后面的数大,因为比较结果之后为正数,前面就比后面大,若是状态标志位为OF+SF=1,表示结果至少有溢出,或者是至少结果最高位为1,结果为负数,则是前面的数比后面的数字小。