北京邮电大学_微机原理软件实验报告 下载本文

用e命令将A地址和B地址内的值由2AH,32H改为23H,24H,通过d命令重新查看A地址,B地址下的数值,发现改变成功。

d.

利用t命令单步调试,可发现,每一步程序的执行,会与寄存器及存储器的内容的变化是一致的。

e.

退出debug。

五、实验总结

由于之前上《操作系统》时,零散地学过一些汇编相关的内容,所以关于masm、debug的基本指令的使用还是比较熟悉的,在做实验一的整个过程中也是比较轻松。也希望自己能保持着这种轻松的状态去应对接下来的实验!

实验二 分支、循环程序设计

一、实验目的

1.开始独立进行汇编语言程序设计; 2.掌握基本分支,循环程序设计; 3.掌握最简单的 DOS 功能调用。

二、实验内容

1.安排一个数据区,内存有若干个正数,负数和零。每类数的个数都不超过 9。 2.编写一个程序统计数据区中正数,负数和零的个数。 3.将统计结果在屏幕上显示。

4.(选做题)统计出正奇数、正偶数,负奇数、负偶数以及零的个数。

三、预习题

1.十进制数 0 ~ 9 所对应的 ASCII 码是什么? 如何将十进制数 0 ~ 9 在屏幕上显示出来?

答:0~9分别对应ASCII码的30H~39H。因为屏幕上显示的数字是ASCII码,所以

为了将十进制数0~9显示在屏幕上,需在原有的十进制数值基础上加上30H即可。 2.如何检验一个数为正,为负或为零?

答:本实验中,判断正、负或零是直接用CMP命令和0比较,然后用je、jg、jl等命令

进行判断为正、负或零。

四、实验流程图

五、实验源代码

;********************************************************************************************* ;* 作者:LQ * ;* 日期:2017/11/20 * ;* 功能: * ;* 编写一个程序统计数据区中正偶数,正奇数,负奇数,负偶数和零的个数 * ;********************************************************************************************* assume cs:code,ds:data data segment ;在db数据区,假定数字大小均在 -128~127 之间,故每个数字用一个字节去存储 db -8,-10,-6,-5,-2,-55 ;给定6个负数,其中4个偶数,2个奇数 db 4 , 2, 3,78,89, 56 ;给定6个正数,其中4个偶数,2个奇数 db 0 , 0 ;给定2个零 db '$' ;设定一个结束符 data ends code segment s1:db 5 dup(0) ;在代码段设置一块空间用于存储统计的最终数值 db 'Positive Odd:','$' ;在代码段开出一块空间用于存储显示数据的字符串 db 'Positive Even:','$' db 'Negative Odd:','$' db 'Negative Even:','$' db 'Zero:','$' start: mov ax,data mov ds,ax xor di,di call main main: mov al,[di] cmp al,'$' je show cmp al,00H jg above0 ;带符号数的大于比较 cmp al,0 jl below0 ;带符号数的小于比较 jmp equal0 below0: mov bl,2 mov ah,0 idiv bl cmp ah,0 je nagative_even mov ax,cs mov cx,ds mov ds,ax mov si,offset s1 inc byte ptr [si+2] ;负奇数 inc di mov ds,cx call main nagative_even: ;负偶数 mov ax,cs mov cx,ds mov ds,ax mov si,offset s1 inc byte ptr [si+3] inc di mov ds,cx call main above0: mov bl,2 mov ah,0 idiv bl cmp ah,0 je positive_even mov ax,cs mov cx,ds mov ds,ax mov si,offset s1 inc byte ptr [si] ;正奇数 inc di mov ds,cx call main positive_even: ;正偶数 mov ax,cs mov cx,ds mov ds,ax mov si,offset s1 inc byte ptr [si+1] inc di mov ds,cx call main equal0: mov ax,cs mov cx,ds mov ds,ax mov si,offset s1 inc byte ptr [si+4] inc di mov ds,cx call main show: ;显示数据 xor di,di mov ax,0B800H mov es,ax mov ax,cs mov ds,ax mov si,offset s1 add si,5