收藏 分享(赏)

汇编上机(实验二).doc

上传人:lufeng1000 文档编号:2190050 上传时间:2018-09-04 格式:DOC 页数:14 大小:308KB
下载 相关 举报
汇编上机(实验二).doc_第1页
第1页 / 共14页
汇编上机(实验二).doc_第2页
第2页 / 共14页
汇编上机(实验二).doc_第3页
第3页 / 共14页
汇编上机(实验二).doc_第4页
第4页 / 共14页
汇编上机(实验二).doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

1、昆明理工大学信息工程与自动化学院学生实验报告( 201 201 学年 第 一 学期 )课程名称:汇编与微机接口实验 开课实验室: 年 月 日年级 学号 姓名 成绩实验项目名称 实验二 循环及分支程序设计 指导教师教师评语教师签名:年 月 日一、实验目的:1、熟悉并且掌握汇编语言的基本指令;2、熟练地掌握循环与分支程序的设计过程;3、掌握带符号数的比较转移指令:JL、JLE、JG 、JGE ;4、伪指令 EQU 及操作符 $的使用。5、熟悉并且掌握 BIOS 和 DOS 中断的调用方法。二、实验要求:A、设计要求1、编写一个程序,判别键盘上输入的字符;若是 1-9 字符,则显示之;若为 A-Z

2、或 a-z 字符,均显示 “c”;若是回车字符,则结束程序,若为其它字符则不显示,继续等待新的字符输入。2、提示编程: 回车字符的 ASCII 码为 0DH 显示字符用 INT 21H 的 2 号调用B、设计要求已知 DATA 单元开始存放三个带符号数1、判断三个数是否同号,若同时为正,显示“+” ,若同时为负,则显示“” ,否则显不“*” 。2、显示三个数中的最小值。c、设计要求编写 7c 号中断的处理程序,使得在除法溢出发生时,在屏幕上输出字符串”201110405313 Li Longzhi”,然后返回 DOS。d、设计要求编写一个程序,接收从键盘输入的 10 个十进制数字,输入回车符则

3、停止输入,然后将这些数字加密后存入内存缓冲区 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 虚拟平台。四、实验内容(算法及运行结果的截图)先模拟 c 盘和设置好默认路径,后面程序则可以在该路径下直接编译、链接和运行。后面文件分别为 a.asm、

4、b.asm 、c.asm 和test.asm、d.asm。a. 程序代码:data segment ;定义数据段DB 0data endscode segmentassume cs:code,ds:datamain proc far ;定义 main 函数push ds ;对 ds 寄存器进栈保护sub ax,ax ;对 ax 清零push ax ;对 ax 寄存器进栈保护 mov ax,data mov ds,ax ;将 data 段地址赋值给 dsnext:mov ah,07h ;调用 int 21 键盘输入(无回显)功能int 21hcmp al,0dh ;回车 ascall 码为 0d

5、hjE end_dcmp al,0 ;对数字处理JGE DY0 ;=0JMP NEXT ;0.30HDY0: ;数字处理函数CMP AL,9 ;因为 int21 07 号功能字符信息存于 AL 中。JLE IS_09 CMP AL, AJGE DY_A ;DAYU AJMP NEXT ;A.41HDY_A:CMP AL,ZJLE IS_AZCMP AL,aJGE DY_xA ;DAYU xAJMP NEXT ;a.61HDY_xA:CMP AL,zJLE IS_AZJMP NEXTIS_AZ:MOV AH,02MOV DL,cINT 21HJMP NEXTIS_09:MOV AH,2MOV D

6、L,ALINT 21HJMP NEXTend_d:ret ; 用于调用返回main endpcode endsend main程序运行截图:b.程序代码:data_C segmentDATA DB 5,6,7 ;编程所用 3 个数,该处 3 数值可任意设定A1 DB 0A2 DB 0A3 DB 0DISP_MESS DB 0DH,0AH,MIN IS : ;输出字符串D1 DB 0D2 DB 0, H$data_C endscode segmentassume cs:code,ds:data_Cmain proc farpush ds ;寄存器进栈保护sub ax,ax ;ax 寄存器清零pu

7、sh ax ;寄存器进栈保护mov ax,data_Cmov ds,ax ;将数据段地址赋值给 dsMOV BX, OFFSET DATA ;将数据段首地址赋值给 bxMOV AL,BXINC BXMOV AH,BXCMP AL,AH ;将 bx 值取出并进行判断是否已取完JL ALAL1 ;ALAHXCHG AH,ALALAL1:INC BXMOV DL,BXCMP AL ,DLJL ALALXCHG AL,DLALAL:CMP AH,DLJL AL_SMALLXCHG AH,DLAL_SMALL:MOV A1,DLMOV A2,AHMOV A3, ALXOR DL,AL ;最大和最小数异或

8、AND DL,80HNOT DLTEST DL,80H ;高位为 1 表示一正一负,否则为全负或全正JE YZYFAND AL,80HNOT ALTEST AL,80H ;高位为 1 表示全负JE QFMOV AH,02MOV DL,+INT 21HJMP DISP_SMALLQF:MOV AH,02MOV DL,-INT 21HJMP DISP_SMALLYZYF:MOV AH,02MOV DL,*INT 21HDISP_SMALL:MOV AL,A3MOV AH,ALAND AX,0F00FHMOV CL,4SHR AH,CLCMP AH,0AHJGE IS_AZADD AH,30HMOV

9、 D1,AHJMP NN_1IS_AZ:ADD AH,40H -0AH+1MOV D1,AHNN_1:CMP AL,0AHJGE IS_AZ1ADD AL,30HMOV D2,ALJMP NN_2IS_AZ1:ADD AL,40H -0AH+1MOV D2,ALNN_2:MOV AH,09MOV DX,OFFSET DISP_MESSINT 21H retmain endpcode endsend main程序运行截图:c.程序代码:c.asm:assume cs:codecode segmentstart:mov ax,csmov ds,ax ;将代码段地址交给 dsmov si,offse

10、t do0 mov ax,0mov es,axmov di,200hmov cx,offset do0end - offset do0 ;计算输出字符串长度cldrep movsb;设置中断向量表mov ax,0mov es,axmov word ptr es:7ch*4,200hmov word ptr es:7ch*4+2,0mov ax,4c00hint 21hdo0: jmp short do0startdb “201110405313 Li Longzhi“,0 ;设置输出字符串do0start:push cxmov ax,csmov ds,axmov si,202hmov ax,0

11、b800h ;指向显存mov es,axmov di,12*160+30*2 ;使其显示于屏幕中央show: mov cl,simov ch,0jcxz returnmov es:di,clmov ch,2mov es:di+1,chinc siadd di,2jmp showreturn: pop cxmov ax,4c00hint 21hdo0end:nopcode endsend starttest.asm:assume cs:codecode segmentstart:int 7chmov ax,4c00hint 21hcode endsend start程序运行截图:d.程序代码:d

12、ata segmentmsg db please input ten number:,0dh,0ah,$bufer db 10 dup(?)mima db 7,5,9,1,3,6,8,0,2,4data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds, axmov si,offset bufermov bx,offset mimamov dx,offset msgmov ah,09int 21hmov cx,10input: mov ah,01int 21hmov ah,0and al,0fhmov di,axmov al,bxdimov si,alinc siloop inputmov ah,4chint 21hcode endsend start程序运行截图:五、实验总结(程序的优缺点,不足和改进的过程)这次实验的内容是循环和分支程序设计,我们之前学过了一些转移指令,如 jmp 指令可以修改 CS,IP 的值; jcxz 指令为有条件转移指令,当 cx=0 时转移到标号处执行; loop 指令为循环指令,每循环一次 cx=cx-1,cx 不为 0 转移到标号处执行,当 cx=0 时结束循环。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 实用文档 > 往来文书

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报