微机原理实验1

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

信息与通信工程学院微机原理软件实验报告(二)

班级:

姓名:

学号:

序号:

日期:2014年12月

一、实验目的

1)掌握MASM 的操作步骤,能够将源程序编译成可执行文件

2)掌握简单的DOS功能调用

3)掌握简单的汇编语言程序的设计

二、实验任务

1. 编一程序,在显示器上显示256个ASCII代码,要求显示格式为每行显示16个字符,

两个ASCII字符间空一格。

2. 试编一程序,把地址偏移量为100H 单元开始的256 个单元分别写入:00H,01 H,

02H,03H,…,FFH 数据。统计写入的数据块中0 元素、正元素、负元素的个数,并分别把统计结果送人上述数据块之后的三个单元中。用DOS功能调用显示上面两题中数据块各单元(包括统计结果)内容。为了显示清晰明了,要求每行显示16 个数据,两个数据之间用空格分开。(教材P185第1、2、3题合到一起编一完整的程序。)

3. 编一程序,把键入的十六进制数转换成十进制数并在屏幕上显示出来。键入的最大数为

FFFFH,若键人的不是十六进数字,则显示出错提示。(教材P188第21题。)

三、实验内容

1.显示256个ASCII码

(1)源程序(附注释):

data segment ;定义数据段

buf db 256 dup (?)

count equ $-buf ;将buf定义的字节长度赋值给count data ends

code segment ;定义代码段

assume ds:data,cs:code

start: mov ax,data

mov ds,ax

mov si,offset buf ;设置数据块首地址

mov cx,count ;设定循环次数

cld ;地址修改为增量

xor ax,ax

xor dx,dx

xor bx,bx

hyone: mov [si],al ;将数据存入数据段

inc si

inc al

loop hyone

mov si,offset buf ;指向数据块首地址

mov cx,count-1

hytwo: mov dl,[si] ;显示数据段的内容

mov ah,2

int 21h

mov dl,20h ;插入空格

mov ah,2

int 21h

inc si

inc bl ;设定为换行指示标志

cmp bl,10h ;当显示了16个字符之后就换行

jz hythree

loop hytwo

;回车换行

hythree: mov dl,0dh

mov ah,02h

int 21h

mov dl,0ah

mov ah,02h

int 21h

xor bl,bl ;将换行指示标志重新置为0

cmp cx,0 ;判断是否显示完

jnz hytwo ;没有显示完的话继续显示

jz hyfour ;显示完结束程序

hyfour:

mov ah,4ch ;终止程序

int 21h code ends

end start

(2)程序流程图: 开始

初始化代码段,程序段基址

设置存入数据循环次数cx 和初始ASCII 码bl

bh 作为每一行显示字符个数的界限;

Dos 功能调用显示bl

结束

Bl 加1,bh 减1

Bh 为0

换行

Cx 减1

Cx 为0

是否

图1

2. 写入数据,统计各类元素个数

(1)源程序(附注释):

data segment ;定义数据段

org 100h ;设定初始偏移量为100h

buf db 259 dup(?) ;定义259个数据存放地址

count equ $-buf ;将buf定义的字节长度赋值给count hy db 0 ;定义变量hy作为空格显示控制标志data ends

code segment ;定义代码段

assume cs:code,ds:data

start: mov ax,data

mov ds,ax

mov si,offset buf ;设置数据块首地址

mov cx,count-3 ;将循环次数存入cx中

cld ;地址修改为增量

xor bx,bx

xor ax,ax

xor dx,dx

hyone: mov[si],al ;将数据存入数据段

inc si

inc al

loop hyone

mov si,offset buf ;指向数据块首地址

mov cx,count-3 ;将循环次数存入cx中

lodsb ;把si指向的存储单元读入累加器hytwo: mov al,[si]

and al,al

jz zero ;如果为0的话则跳转到zero

jns positive ;如果大于0的话则跳转到positive

js negtive ;如果小于0的话则跳转到negtive zero: inc bl ;统计为0的个数,用bl计数

jmp hythree

positive: inc bh ;统计大于0的个数,用bh计数

jmp hythree

negtive: inc dl ;统计小于0的个数,用dl计数

jmp hythree

hythree: inc si ;si加一

loop hytwo ;继续判断下一个数

hyfour: dec si ;先执行后判断所以si要减1

;将0的个数存入数据块之后的第一个单元

mov [si],bl

inc si

;将大于0的个数存入数据块之后的第二个单元

相关文档
最新文档