东华大学罗辛汇编实验五

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

操作系统原理实验报告
实验名称:循环结构程序设计
姓名:
学号:
班级:计算机
指导老师:罗辛
一、实验内容
(描述实验内容)
1、汇编语言提供了“LOOP”指令实现循环,在debug中可以看出运行
机制如下:
请仔细分析示例中的运行机理,并根据上面的方法在debug中完成:①以你姓名中“名的首字母”为基准,使用存储单元连续输出16个字母(提示:使用ASCII码);
②显示寄存器与存储单元中的结果。

要求:
①debug的屏幕截图,并分析各语句的功能;
②指出寄存器、各存储单元的结果。

2、用多种循环方法实现1+2+3+…+20的程序(至少二种方法);
3、编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符<CR>(其ASCII码为
0DH),则结束程序,若为其它字符则不显示,继续等待新的字符输入;(选做)
4、编写一个汇编语言程序,要求将BX寄存器内的小写字母用大写字
母显示出来。

5、ADDR单元是存放数据的内存单元,要求将该内存单元中的字依次
用十六进制数显示出来。

二、实验目的
(描述实验目的)
1、掌握循环程序的结构。

2、掌握循环程序的设计、编写及调试方法。

3、掌握循环程序设计的基本方法。

主要掌握几种基本的循环程序设计技巧,如计数法程序设计、当循环、直到循环等程序设计技术。

三、实验原理
(描述实验基本原理)
利用编写汇编程序
利用MASM编译汇编程序
利用LINK连接汇编程序
利用DEBUG调试汇编程序
四、实验过程
(重点部分,必须包括:实验开发环境、实验步骤、实验源程序代码及其结构分析)实验环境:windows XP
验证实验一:
data segment
buff dw 6,35,99,17,80,69,50,33
addr1 dw 8 dup(?) ;定义内存
addr2 dw 8 dup(?)
result dw 0,0
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov cx,8d
mov si,0 ;清空si
mov di,0 ;清空di
mov bx,0
mov dx,0
L1:
test buff[si],0001h ;判断奇偶
je L2 ;若相等,则跳到L2 mov ax,buff[si] ;将偶数存入ax
mov addr2[bx],ax ;存入addr
add si,2
add bx,2
inc dl
dec cx
jmp L1
L2:
mov ax,buff[si]
mov addr1[di],ax ;将奇数存入addr1
add di,2
add si,2
inc dh
dec cx
jmp L1
mov si,0
mov byte ptr result[si],dh
add si,2
mov byte ptr result[si],dl
code ends
end start
验证实验2:
data segment
x dw 30d
y dw 10d ;定义内存data ends
code segment
assume cs:code,ds:data
start:
push ds
sub ax,ax
push ax ;ax、ds进栈
mov ax,data
mov ds,ax
mov cx,x
mov bx,y
mov ax,0
L1:
add ax,bx
loop L1
mov dx,ax
mov ah,2
int 21h
code ends
end start
程序一:
从B开始连续输出16个英文字母
B对应的ASC||码为42,bx中存入的是内存地址,每存一个地址+1
程序二:
两个程序均用到了循环结构,利用g指令可以运行指定行的程序代码,同时显示运行后寄存器情况。

程序一为直接循环20次
程序二维奇数部分偶数部分分别求和后再求总和
程序三:
code segment
assume cs:code
start:
mov ah,1h
int 21h
cmp al,0dh ;如果是回车则结束
jz done
cmp al,30h ;如果在0之下则输入下一个
jb next
cmp al,39h ;在9之上则继续判断是否为字母ja charup
mov dl,al
mov ah,2h
int 21h ;输出数字
jmp start
charup:
cmp al,41h
jb next ;在A之下,输入下一个
cmp al,5ah
ja chardown
outc:
mov dl,63h
mov ah,2h
int 21h ;输出字母c
jmp start
chardown:
cmp al,61h
jb next
cmp al,7ah
ja next ;在a~z中,输出字母c jmp outc
next:
jmp start
done:
mov ax,4c00h
int 21h
code ends
end start
利用多次跳转形成循环
程序四:
code segment
assume cs:code
start:
mov bh,69h
mov bl,70h ;初始化dx内数据
mov dl,bh
sub dl,20h ;大写转化为小写
mov ah,2
int 21h
mov dl,bl
sub dl,20h ;大写转化为小写
mov ah,2
int 21h
code ends
end start
程序五:
data segment
ADDR db 35h,2eh,28h 初始化内存data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov cx,3 ;循环次数
mov bx,offset ADDR
lop:
mov bp,cx
mov al,byte ptr [bx]
mov dh,al
mov dl,al ;准备将两位分开分别显示
mov cl,4
shr dl,cl 逻辑右移四位
cmp dl,9h
jbe next1
add dl,7h ;比9小则直接跳转,否则+7后跳转next1:
add dl,30h
mov ah,2
int 21h
mov dl,dh
and dl,0fh 屏蔽高位,留下低位
cmp dl,9h
jbe next2
add dl,7h
next2:
add dl,30h
mov ah,2
int 21h
mov cx,bp
inc bx
mov dl,0ah ;输出换行符
mov ah,2
int 21h
loop lop ;循环,继续操作下一个数据
mov ax,4c00h
int 21h
code ends
end start
五、实验结果
(把程序运行的结果通过截屏帖出来,并简单描述每个截图的意思)
部分运行结果显示在实验过程部分
程序四:
BX中数据为ip,则输出大写字母IP
程序五:
全部运行后,输出ADDR内存中三个16进制数据。

六、实验心得体会
(写出在做实验过程中碰到的问题、解决方法、存在的不足,实验过程中所获得的经验等等)对跳转指令以及循环结构有了更清晰的了解认识。

七、参考文献。

相关文档
最新文档