汇编上机实验二.docx

上传人:b****8 文档编号:10915204 上传时间:2023-02-23 格式:DOCX 页数:16 大小:269.85KB
下载 相关 举报
汇编上机实验二.docx_第1页
第1页 / 共16页
汇编上机实验二.docx_第2页
第2页 / 共16页
汇编上机实验二.docx_第3页
第3页 / 共16页
汇编上机实验二.docx_第4页
第4页 / 共16页
汇编上机实验二.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

汇编上机实验二.docx

《汇编上机实验二.docx》由会员分享,可在线阅读,更多相关《汇编上机实验二.docx(16页珍藏版)》请在冰豆网上搜索。

汇编上机实验二.docx

汇编上机实验二

昆明理工大学信息工程与自动化学院学生实验报告

(201—201学年第一学期)

课程名称:

汇编与微机接口实验开课实验室:

年月日

年级

学号

姓名

成绩

实验项目名称

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

指导教师

教师评语

 

教师签名:

年月日

一、实验目的:

1、熟悉并且掌握汇编语言的基本指令;

2、熟练地掌握循环与分支程序的设计过程;

3、掌握带符号数的比较转移指令:

JL、JLE、JG、JGE;

4、伪指令EQU及操作符'$'的使用。

5、熟悉并且掌握BIOS和DOS中断的调用方法。

二、实验要求:

A、设计要求

1、编写一个程序,判别键盘上输入的字符;若是1-9字符,则显示之;若为A-Z或a-z字符,均显示“c”;若是回车字符,则结束程序,若为其它字符则不显示,继续等待新的字符输入。

2、提示编程:

①回车字符的ASCII码为0DH

②显示字符用INT21H的2号调用

B、设计要求

已知DATA单元开始存放三个带符号数

1、判断三个数是否同号,若同时为正,显示“+”,若同时为负,则显示“—”,否则显不“*”。

2、显示三个数中的最小值。

c、设计要求

编写7c号中断的处理程序,使得在除法溢出发生时,在屏幕上输出字符串”2LiLongzhi”,然后返回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中断分别实现。

三、实验环境

汇编程序:

MASM6.15,链接程序:

LINK.EXE,调试环境:

DEBUG.EXE,对操作系统和计算机五特殊要求,如果是WIN7以上操作系统,需要安装DOSBOX虚拟平台。

四、实验内容(算法及运行结果的截图)

先模拟c盘和设置好默认路径,后面程序则可以在该路径下直接编译、链接和运行。

后面文件分别为a.asm、b.asm、c.asm和test.asm、d.asm。

a.程序代码:

datasegment;定义数据段

DB0

dataends

codesegment

assumecs:

code,ds:

data

mainprocfar;定义main函数

pushds;对ds寄存器进栈保护

subax,ax;对ax清零

pushax;对ax寄存器进栈保护

movax,data

movds,ax;将data段地址赋值给ds

next:

movah,07h;调用int21键盘输入(无回显)功能

int21h

cmpal,0dh;回车ascall码为0dh

jEend_d

cmpal,'0';对数字处理

JGEDY0;>=0

JMPNEXT;<'0'...30H

DY0:

;数字处理函数

CMPAL,'9';因为int2107号功能字符信息存于AL中。

JLEIS_09

CMPAL,'A'

JGEDY_A;DAYUA

JMPNEXT;<'A'...41H

DY_A:

CMPAL,'Z'

JLEIS_AZ

CMPAL,'a'

JGEDY_xA;DAYUxA

JMPNEXT;<'a'...61H

DY_xA:

CMPAL,'z'

JLEIS_AZ

JMPNEXT

IS_AZ:

MOVAH,02

MOVDL,'c'

INT21H

JMPNEXT

IS_09:

MOVAH,2

MOVDL,AL

INT21H

JMPNEXT

end_d:

ret;用于调用返回

mainendp

codeends

endmain

程序运行截图:

b.程序代码:

data_Csegment

DATADB5,6,7;编程所用3个数,该处3数值可任意设定

A1DB0

A2DB0

A3DB0

DISP_MESSDB0DH,0AH,'MINIS:

';输出字符串

D1DB0

D2DB0,'H$'

data_Cends

codesegment

assumecs:

code,ds:

data_C

mainprocfar

pushds;寄存器进栈保护

subax,ax;ax寄存器清零

pushax;寄存器进栈保护

movax,data_C

movds,ax;将数据段地址赋值给ds

MOVBX,OFFSETDATA;将数据段首地址赋值给bx

MOVAL,[BX]

INCBX

MOVAH,[BX]

CMPAL,AH;将bx值取出并进行判断是否已取完

JLALAL1;AL

XCHGAH,AL

ALAL1:

INCBX

MOVDL,[BX]

CMPAL,DL

JLALAL

XCHGAL,DL

ALAL:

CMPAH,DL

JLAL_SMALL

XCHGAH,DL

AL_SMALL:

MOVA1,DL

MOVA2,AH

MOVA3,AL

XORDL,AL;最大和最小数异或

ANDDL,80H

NOTDL

TESTDL,80H;高位为1表示一正一负,否则为全负或全正

JEYZYF

ANDAL,80H

NOTAL

TESTAL,80H;高位为1表示全负

JEQF

MOVAH,02

MOVDL,'+'

INT21H

JMPDISP_SMALL

QF:

MOVAH,02

MOVDL,'-'

INT21H

JMPDISP_SMALL

YZYF:

MOVAH,02

MOVDL,'*'

INT21H

DISP_SMALL:

MOVAL,A3

MOVAH,AL

ANDAX,0F00FH

MOVCL,4

SHRAH,CL

CMPAH,0AH

JGEIS_AZ

ADDAH,30H

MOVD1,AH

JMPNN_1

IS_AZ:

ADDAH,40H-0AH+1

MOVD1,AH

NN_1:

CMPAL,0AH

JGEIS_AZ1

ADDAL,30H

MOVD2,AL

JMPNN_2

IS_AZ1:

ADDAL,40H-0AH+1

MOVD2,AL

NN_2:

MOVAH,09

MOVDX,OFFSETDISP_MESS

INT21H

ret

mainendp

codeends

endmain

程序运行截图:

 

c.程序代码:

c.asm:

assumecs:

code

codesegment

start:

movax,cs

movds,ax;将代码段地址交给ds

movsi,offsetdo0

movax,0

moves,ax

movdi,200h

movcx,offsetdo0end-offsetdo0;计算输出字符串长度

cld

repmovsb

;设置中断向量表

movax,0

moves,ax

movwordptres:

[7ch*4],200h

movwordptres:

[7ch*4+2],0

movax,4c00h

int21h

do0:

jmpshortdo0start

db"2LiLongzhi",0;设置输出字符串

do0start:

pushcx

movax,cs

movds,ax

movsi,202h

movax,0b800h;指向显存

moves,ax

movdi,12*160+30*2;使其显示于屏幕中央

show:

movcl,[si]

movch,0

jcxzreturn

moves:

[di],cl

movch,2

moves:

[di+1],ch

incsi

adddi,2

jmpshow

return:

popcx

movax,4c00h

int21h

do0end:

nop

codeends

endstart

test.asm:

assumecs:

code

codesegment

start:

int7ch

movax,4c00h

int21h

codeends

endstart

程序运行截图:

 

d.程序代码:

datasegment

msgdb'pleaseinputtennumber:

',0dh,0ah,'$'

buferdb10dup(?

mimadb7,5,9,1,3,6,8,0,2,4

dataends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movsi,offsetbufer

movbx,offsetmima

movdx,offsetmsg

movah,09

int21h

movcx,10

input:

movah,01

int21h

movah,0

andal,0fh

movdi,ax

moval,[bx][di]

mov[si],al

incsi

loopinput

movah,4ch

int21h

codeends

endstart

 

程序运行截图:

五、实验总结(程序的优缺点,不足和改进的过程)

这次实验的内容是循环和分支程序设计,我们之前学过了一些转移指令,如jmp指令可以修改CS,IP的值;jcxz指令为有条件转移指令,当cx=0时转移到标号处执行;loop指令为循环指令,每循环一次cx=cx-1,cx不为0转移到标号处执行,当cx=0时结束循环。

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

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1