昆明理工大学信息工程与自动化学院学生实验报告
( 2012 —2013 学年 第 一 学期 )
课程名称:汇编与微机接口实验 开课实验室:信自楼444 2012 年 11 月 22 日 年级 计科2010级 学号 姓名 成绩 实验项目名实验二 循环及分支程序设计 称 教师 评语 指导教师 李英娜 教师签名: 年 月 日
一、实验目的:
1、熟悉并且掌握汇编语言的基本指令; 2、熟练地掌握循环与分支程序的设计过程;
3、掌握带符号数的比较转移指令:JL、JLE、JG、JGE; 4、伪指令 EQU 及操作符 '$'的使用。
5、熟悉并且掌握BIOS 和DOS中断的调用方法。
二、实验要求:
A、设计要求
1、编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符,则结束程序,若为其它字符则不显示,继续等待新的字符输入。
2、提示编程:① 回车字符的ASCII码为0DH ② 显示字符用INT 21H的2号调用 B、设计要求
已知DATA单元开始存放三个带符号数
1、判断三个数是否同号,若同时为正,显示“+”,若同时为负,则显示“—”,否则显不“*”。
-1-
2、显示三个数中的最小值。 c、设计要求
编写0号中断的处理程序,使得在除法溢出发生时,在屏幕上输出字符串”divide error!”,然后返回DOS。 d、设计要求
编写一个程序,接收从键盘输入的10个十进制数字,输入回车符则停止输入,然后将这些数字加密
后存入内存缓冲区BUFFER。加密表为:
输入数字:0、1、2、3、4、5、6、7、8、9 密码数字:7,5,9,1,3,6,8,0,2,4 提示:加密可通过XLAT指令完成。
要求:键盘输入通过BIOS和DOS中断分别实现。
三、实验环境
汇编程序:MASM 6.15,链接程序:LINK.EXE,调试环境:DEBUG.EXE,对操作系统和计算机五特殊要求,如果是WIN7以上操作系统,需要安装DOSBOX虚拟平台。
四、实验内容(算法及运行结果的截图) A、
code segment
assume cs:code start:
mov ah,1 ;输入字符 int 21h
cmp al,0dh ;与回车比较,若该字符是回车则转到exit处执行 je exit
cmp al,'0' ;输入的字符与0比较,若小于0,则转到start处执行 jb start
cmp al,'9' ;输入的字符与9比较,若大于9,则转到output1处执行 jbe output1 cmp al,'A' jb start
-2-
cmp al,'Z' jbe output cmp al,'a' jb start cmp al,'z' jbe output
output1: mov dl,al ;将al中的数据放到dl中 mov ah,2 int 21h jmp start output:mov ah,02h mov dl,'c' int 21h jmp start exit: mov ah,4ch int 21h code ends end start
-3-
B、
data_C segment
DATA DB -5 , 4, 9 ;该处3数值可任意设定 A1 DB 0 A2 DB 0 A3 DB 0
DISP_MESS DB 0DH,0AH,'MIN IS : ' D1 DB 0
D2 DB 0, 'H$'
data_C ends
code segment
assume cs:code,ds:data_C
main proc far push ds sub ax,ax push ax
mov ax,data_C mov ds,ax
MOV BX, OFFSET DATA MOV AL,[BX] INC BX
MOV AH,[BX] CMP AL,AH
JL ALAL1 ;AL ALAL1: INC BX MOV DL,[BX] CMP AL ,DL JL ALAL XCHG AL,DL ALAL: CMP AH,DL JL AL_SMALL XCHG AH,DL AL_SMALL: -4- MOV A1,DL MOV A2,AH MOV A3, AL XOR DL,AL ;最大和最小数异或 AND DL,80H NOT DL TEST DL,80H ;高位为1 表示一正一负,否则为全负或全正 JE YZYF AND AL,80H NOT AL TEST AL,80H ;高位为1 表示全负 JE QF MOV AH,02 MOV DL,'+' INT 21H JMP DISP_SMALL QF: MOV AH,02 MOV DL,'-' INT 21H JMP DISP_SMALL YZYF: MOV AH,02 MOV DL,'*' INT 21H DISP_SMALL: ;显示最小值 MOV AL,A3 MOV AH,AL AND AX,0F00FH MOV CL,4 SHR AH,CL CMP AH,0AH JGE IS_AZ ADD AH,30H MOV D1,AH JMP NN_1 IS_AZ: ADD AH,40H -0AH+1 MOV D1,AH NN_1: CMP AL,0AH -5- JGE IS_AZ1 ADD AL,30H MOV D2,AL JMP NN_2 IS_AZ1: ADD AL,40H -0AH+1 MOV D2,AL NN_2: MOV AH,09 MOV DX,OFFSET DISP_MESS INT 21H ret main endp code ends end main -6- C、 assume cs:codesg codesg segment start: mov ax,0f000h mov dx,22d mov cx,10d div cx mov ax,4c00h int 21h codesg ends end start ;程序执行过后,在屏幕中间显示“divide error!”,字体为绿色。 assume cs:code code segment start: ;0号中断处理程序的安装 mov ax,cs mov ds,ax mov si,offset over ;串传送源地址ds:[si] mov ax,0 mov es,ax mov di,0200h ;串传送目的地址es:[di] mov cx,offset overend - offset over ;串传送长度 cld ;设置方向标志位 rep movsb ;串传送 ;设置中断向量表项 mov ax,0 mov es,ax mov word ptr es:[0*4],0200h mov word ptr es:[0*4+2],0 ;此四句执行后产生溢出 mov ax,0ffffh mov dx,0ffffh mov cx,10d div cx ;返回DOS状态 mov ax,4c00h -7- int 21h ;0号中断处理程序 over: jmp short over_code ;此指令占两个字节 db \over_code: mov ax,cs mov ds,ax mov si,0202h ;ds:[si]指向数据段 mov ax,0b800h mov es,ax mov bx,12*160+36*2 ;es:[bx]指向显示缓冲区 mov cx,13d ;显示13个字符 mov al,2 ;设置字符颜色为绿色 over_loop: mov ah,ds:[si] mov es:[bx],ah mov es:[bx+1],al inc si add bx,2 loop over_loop ;返回DOS状态 mov ax,4c00h int 21h overend:nop ;空操作 code ends end start -8- D、 data segment msg db 'please input ten number:',0dh,0ah,'$' bufer db 10 dup(?) mima db 7,5,9,1,3,6,8,0,2,4 data ends code segment assume cs:code,ds:data start: mov ax,data mov ds, ax mov si,offset bufer mov bx,offset mima mov dx,offset msg mov ah,09 int 21h mov cx,10 input: mov ah,01 int 21h mov ah,0 and al,0fh mov di,ax -9- mov al,[bx][di] mov [si],al inc si loop input mov ah,4ch int 21h code ends end start 六、实验总结(程序的优缺点,不足和改进的过程) 由于对有些指令不是特别熟悉,在实验过程中遇到了一些困难,但通过和同学的讨论 -10- 慢慢掌握指令的用法,经过几次实验,增强了动手能力,遇到题目只想不去做是不可能有结果的,要不断的去尝试,遇到不会的可以上网查资料或者去图书馆查资料。只有不断的实践才会有所成就。 -11- 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库循环及分支程序设计汇编实验报告_昆明理工大学在线全文阅读。
相关推荐: