文档库 最新最全的文档下载
当前位置:文档库 › 汇编实验 扩充键盘处理功能的程序

汇编实验 扩充键盘处理功能的程序

汇编实验 扩充键盘处理功能的程序
汇编实验 扩充键盘处理功能的程序

实验六扩充键盘处理功能的程序

一、实验的目的与要求

(一)实验目的:掌握中断的概念以及中断服务程序的编写

(二)实验要求:完成键盘处理基本功能的基础上,增加left_shift 和right_shift键的功能。要求实现左右SHIFT任何一个键处于按下状态时输入字符为键盘的上档字符或大写字母,否则输出数字或小写字母。

二、实验正文

实验分析:本次实验要求在示例3.6的基础上,添加功能,关于left_shift和right_shift 可以通过它们各自的扫描码进行判断,此外还应该设置标志变量便于程序的判断,较示例的程序除了要添加判断是否为shift键外,还应该再设置一张shifttab转换表,这样当shift被按下时,应由这样转换表进行转换,而其他情况下由,scantab转换表转换。在读入信息时候需要在不同的端口读入信息并判断,通过检测状态和数据作出正确的操作。

四、流程图如下

四、实验结果

附录:程序源代码如下:

;******************************************************* stack segment

db 256 dup(0)

stack ends

;******************************************************

data segment

buffer db 16h dup(0)

bufpt1 dw 0

bufpt2 dw 0

kbflag db 0

kbflag1 db 0

prompt db '---kbd_io program begin---',0dh,0ah,'$'

scantab db 0,0,'1234567890-=',8,0

db 'qwertyuiop[]',0dh,0

db 'asdfghjkl',3bh,27h,0,0,0

db 'zxcvbnm,./',0,0,0

db ' ',0,0,0,0,0,0,0,0,0,0,0,0,0

db '789-456+1230.'

shiftab db 0,0,'!@#$%^&*()_+',0,0

db 'QWERTYUIOP{}',0DH,0

db 'ASDFGHJKL:"',0,0,0

db 'ZXCVBNM<>?',0,0,0

db ' ',26 dup(0)

even

oldcs9 dw ?

oldip9 dw ?

data ends

;****************************************************

code segment

;----------------------------------------------------

start proc far

assume cs:code,ds:data

push ds

mov ax,0

push ax

mov ax,data

mov ds,ax

;

cli ;开中断

mov al,09 ;中断类型号

mov ah,35h ;DOS调用,取中断向量

int 21h

mov oldcs9,es ;ES:BX=中断向量

mov oldip9,bx

;

push ds

mov dx,offset kbint

mov ax,seg kbint

mov ds,ax ;DS:DX=中断向量

mov al,09 ;中断类型号

mov ah,25h ;DOS调用,设置中断向量

int 21h

pop ds

;

in al,21h

and al,0fdh ;设置中断屏蔽字,只允许键盘中断

out 21h,al

;

mov dx,offset prompt

mov ah,9

int 21h

sti ;开中断

forever:

call kbget

test kbflag,80h

jnz endint

push ax

call dispchar

pop ax

cmp al,0dh

jnz forever

mov al,0ah

call dispchar

jmp forever

endint:

mov dx,oldip9

mov ax,oldcs9

mov ds,ax

mov al,09h

mov ah,25h

int 21h

;

ret

start endp

;----------------------------------------------------------检测并等待键盘中断

kbget proc near

push bx

cli ;关中断

mov bx,bufpt1

cmp bx,bufpt2

jnz kbget2

cmp kbflag,0

jnz kbget3

sti ;开中断

pop bx

jmp kbget

kbget2:

mov al,[buffer+bx]

inc bx

cmp bx,16

jc kbget3

mov bx,0

kbget3:

mov bufpt1,bx

pop bx

ret

kbget endp

;-----------------------------------------------------------------------键盘中断程序

kbint proc far

push bx

push ax

;

in al,60h ;从PA口读扫描码

push ax

in al,61h ;从PB口读信息

or al,80h

out 61h,al ;置键盘应答位

and al,7fh

out 61h,al ;复位键盘应答位

;

pop ax

test al,80h ;检测AL第8位是否为1,判断键位是按下(1)还是放开

jnz kbint2

;

cmp al,2ah ;判断是否为左Shift键

jnz shift5

cmp kbflag1,1

jz shift1

mov kbflag1,1 ;标志位置1

jmp shift1

shift5:

cmp al,36h ;判断是否为右Shift键

jnz shift2

cmp kbflag1,1

jz shift1

mov kbflag1,1

jmp shift1

shift2:

cmp kbflag1,1

jnz shift3

lea bx,shiftab ;shifttab换码

xlat ;(AL)<--((BX)+(AL))

jmp shift4

shift3:

lea bx,scantab ;santab换码

xlat ;(AL)<--((BX)+(AL))

shift4:

cmp al,0 ;判断是否为其他控制符

jnz kbint4

mov kbflag,80h ;置退出标志

jmp kbint2

kbint4:

mov bx,bufpt2

mov [buffer+bx],al

inc bx

cmp bx,16

jc kbint3

mov bx,0

kbint3:

cmp bx,bufpt1; empty?

jz kbint2

mov bufpt2,bx

kbint2:

cmp al,0aah ;判断左shift键是否松开

jnz shift6

mov kbflag1,0

shift6:

cmp al,0b6h ;判断右shift键是否松开

jnz shift1

mov kbflag1,0

shift1:

cli ;关中断

mov al,20h ;结束键盘中断

out 20h,al

pop ax

pop bx

sti ;开中断

iret

kbint endp

;-----------------------------------------------------BIOS调用,显示字符

dispchar proc near

push bx

mov bx,0

mov ah,0eh

int 10h

pop bx

ret

dispchar endp

;-----------------------------------------------------

code ends

;*******************************************************

end start

五、实验总结

本次实验涉及到了中断,但实验是在示例3.6的基础上修改的,没有自己编写独立的中断服务程序,而在修改过程中自己也收获很多,比如设置自己的中断程序的方法先要取出中断向量,然后保存起来,在设置自己的中断向量地址,程序结束时还好记得恢复原来的中断向量,这是很必要的,如果不恢复会造成很严重的后果。此外还应引起注意的在何时应该开中断,在何时应该关中断,这对中断处理程序来说是相当重要的。

汇编语言循环程序实验报告

东北大学 计算机硬件技术基础实验报告 一、实验目的 (1) 加深对循环结构的理解; (2) 掌握循环程序的设计方法; (3) 熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。 二、实验内容 1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。 2.设STR字符串是以0结尾。试编写一个把字符串中的所有大写字母改为小写字母的程序并将转换后的字符串显示输出。 3.试编程从自然数1开始累加,直到累加和大于5050为止,统计被累加的自然数的个数,并把统计的个数送入COUNT单元,累加和送入TOTAL单元。 三、算法描述流程图 实验内容1、2、3的流程图分别为图1、图2、图3。

图 1 图 2 图3

四、实验步骤 1.已知以BUF为首地址的字存储区中存放着8个有符号二进制数,是编写程序将其中大于等于0的数依次送BUF1为首地址的字存储区中,小于0的数依次送以BUF2为首地址的字存储区中。同时将大于等于0的数的个数送A字变量,将小于0数的个数送B字变量。 1)输入源程序: DATA SEGMENT BUF DW 23,123,-12,-210,45,0,90,-453 BUF1 DW 8 DUP(0) BUF2 DW 8 DUP(0) A DW ? B DW ? DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX LEA BX, BUF LEA SI, BUF1 LEA DI, BUF2 MOV A,0 MOV B,0 MOV CX,8 L0: MOV AX,[BX] CMP AX,0 JGE L1 MOV [DI],AX ADD DI,2 INC B JMP NEXT L1: MOV [SI],AX ADD SI,2 INC A NEXT: ADD BX,2 LOOP L0 MOV AH, 4CH INT 21H CODE ENDS END START 2)运行程序。

实验四-循环结构汇编语言程序的设计实验报告

循环结构汇编语言程序设计实验报告

实验四循环结构汇编语言程序设计 一、实验目的 1、学习循环结构的汇编语言程序的设计和调试。 2、学习通过直接对8086计算机的寄存器和存的直接访问,编写更高效简洁的汇编程序。 3、加深掌握计算机整体的工作过程。 3、加深对排序算法的理解。 二、实验任务 编写程序求出数组A中(20个元素)的最大值和最小值(数组没有排序)。 要求至少采用二种不同的排序算法来实现。( 快速排序,归并排序、堆排序、Shell排序、插入排序、冒泡排序、交换排序、选择排序、基数排序……) 三、实验容 为了更好地实现老师所布置的实验任务,我们根据情况选取以下两种方式实

验。 1、利用冒泡排序的方式求解数组A中元素的最大值最小值。设计流程图如 下所示: 2、利用选择排序的方式求得数组A中元素的序列。设计流程图如下所示:

四、实验环境 PC机: winXP/win7(32位)/win7(64位)+winxp 虚拟机 汇编工具:Masm.exe+Link.exe。 五、实验步骤 1)建立和生成的文件 (1)编写的源程序,源程序名为abc、扩展名为.asm (2)源程序经汇编程序Masm.exe汇编(翻译)后生成二进制目标程序,文件名为abc.obj (3)目标程序需要经Link.exe连接生成可执行程序,文件名为abc.exe 2)汇编环境 最基本的汇编环境只需要两个文件:Masm.exe和Link.exe。将这两个文件拷入到已经建好的文件夹(例如 huibian)中,并将文件夹huibian放在硬盘根

目录C :\>下 3)上机步骤 进入DOS窗口中执行。 4)调试程序 进入DEBUG后,调试程序 5)调试成功后重新汇编、连接并生成可执行代码 6)执行程序,并对运行结果截图。 利用冒泡排序求得数组A中元素的最大值最小值的实验结果如下图所示:(说明:输入数据为:13,0,59,900,587,1,657,234,34,48) 利用选择排序对数组A中元素排序得到的序列得实验结果如下图所示:(说明:输入数据为13,0,59,900,587,1,657,234,34,48)

汇编语言程序设计实验七

实验七子程序的应用 【实验目的】 1.掌握子程序的定义 2.掌握子程序中的参数传递 3.掌握子程序的调用。 【实验环境】 配有汇编语言开发环境的计算机 【实验内容】 十进制数到十六进制数转换程序。程序要求从键盘取得一个十进制数,然后把该数以十六进制形式在屏幕上显示出来。 【实验过程、结果】 ;程序名:t6-2.asm ;功能:从键盘获取一个十进制数, ;用十六进制的形式输出 decihex segment assume cs:decihex ;主程序部分 main proc far call decibin call crlf

call binihex call crlf main endp ;*************************** decibin proc near mov bx,0 ;从键盘获取一个数字,转换为二进制 ;结果放在bx寄存器中 newchar: mov ah,1 int 21h ;从键盘输入一个字符并显示在屏幕上 sub al,30h ;转换成ASCII码 jl exit cmp al,9d jg exit cbw ;从al扩展到ax,数字现在存放在ax中 xchg ax,bx mov cx,10d mul cx xchg ax,bx add bx,ax jmp newchar

exit: ret decibin endp ;子程序结束 ;将二进制转换为十六进制子程序binihex proc near mov ch,4 rotate: mov cl,4 rol bx,cl ;循环移位 mov al,bl and al,0fh add al,30h cmp al,3ah jl printint add al,7h printint: mov dl,al mov ah,2 int 21h dec ch jnz rotate ret

计算机组成原理实验1-汇编语言实验

微处理器与接口技术 实验指导

实验一监控程序与汇编语言程序设计实验 一、实验要求 1、实验之前认真预习,明确实验的目的和具体实验内容,设计好主要的待实验的程序,做好实验之前的必要准备。 2、想好实验的操作步骤,明确通过实验到底可以学习哪些知识,想一想怎么样有意识地提高教学实验的真正效果。 3、在教学实验过程中,要爱护教学实验设备,认真记录和仔细分析遇到的现象与问题,找出解决问题的办法,有意识地提高自己创新思维能力。 4、实验之后认真写出实验报告,重点在于预习时准备的内容,实验数据,实验过程、遇到的现象和解决问题的办法,自己的收获体会,对改进教学实验安排的建议等。善于总结和发现问题,写好实验报告是培养实际工作能力非常重要的一个环节,应给以足够的重视。 二、实验目的 【1】学习和了解TEC-XP16教学实验系统监控命令的用法; 【2】学习和了解TEC-XP16教学实验系统的指令系统;

【3】学习简单的TEC-XP16教学实验系统汇编程序设计。 三、实验注意事项 (一)实验箱检查 【1】连接电源线和通讯线前TEC-XP16实验系统的电源开关一定要处于断开状态,否则可能会对TEC-XP16实验系统上的芯片和PC机的串口造成损害。 【2】五位控制开关的功能示意图如下: 【3】几种常用的工作方式【开关拨到上方表示为1,拨到下方为0】 (二)软件操作注意事项 【1】用户在选择串口时,选定的是PC机的串口1或串口2,而不是TEC-XP16实验系统上的串口。即选定的是用户实验时通讯线接的PC机的端口; 【2】如果在运行到第五步时没有出现应该出现的界面,用户需要检查是不是打开了两个软件界面,若是,关掉其中一个再试; 【3】有时若TEC-XP16实验系统不通讯,也可以重新启动软件或是重新启动PC再试; 【4】在打开该应用软件时,其它的同样会用到该串口的应用软件要先关掉。

汇编语言学习知识程序设计实验

目录 目录 (1) 实验一利用DEBUG熟悉常用指令的使用 (2) 一、实验目的 (2) 二、示例 (2) 三、实验题 (2) 实验二汇编程序和连接程序的使用 (6) 一、实验目的。 (6) 二、示例。 (6) 三、实验题。 (8) 实验三顺序结构程序设计 (11) 一、实验目的 (11) 二、示例 (11) 三、实验题 (12) 四、实验报告 (15) 实验四循环结构程序设计 (16) 一、实验目的 (16) 二、示例 (16) 三、实验题 (18) 实验五分支结构程序设计 (21) 一、实验目的 (21) 二、示例 (21) 三、实验题 (22) 实验六子程序设计 (29) 一、实验目的 (29) 二、实验题 (29)

实验一利用DEBUG熟悉常用指令的使用 一、实验目的 熟悉指令系统,掌握常用指令的用法;通过实验加深对各种寻址方式的理解;能熟练使用DEBUG中的命令对指令进行反汇编,观察并了解机器代码。 二、示例 请分别用一条汇编语言指令完成如下功能:(过程略)。 1.用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。 ADD AL,[BX][SI] 2.用位移量为0520H的直接寻址方式把存储器中的一个字与3412H相加,并把结果送回该存储单元。 ADD WORF PTR [0520H],3412H 三、实验题 1.调试、验证下列指令的结果,已知(DS)=2000H,(BX)=0100H,(SI)=0002H,(BP)=0200H,(SS)=2300H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(21201)=4CH,(21202)=B7H,(21203)=65H,(23204)=88H,说明各指令执行完后AX寄存器的内容。要求输入指令,相应存储单元的内容要事先设置,单步 P执行,观察执行结果。 (设置存储器的值)

实验七-网络程序设计综合实验汇总

网络程序设计 实验报告 实验名称:winsock 编程接口实验实验类型:设计型 指导教师:贾浩 专业班级:信安1204 姓名:马灿 学号:20123252 电子邮件: 实验地点:东6 E307 实验日期:

实验成绩:__________________________

实验七网络程序设计综合实验 摘要:本课程设计包含了文件传输协议的简单设计与实现。文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问,是INTERNET使用最广泛的协议之一。文件传输协议的简单设计与实现建立在计算机网络实验环境TCP/IP网络体系结构之上,使用socket编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c),利用了已有网络环境设计并实现简单应用层协议。本设计包括了具体设计任务,基本思路及所涉及的相关理论,设计流程图,调试过程中出现的问题及相应解决办法,实验运行结果,核心程序,个人体会及建议等。 关键词:SOCKET编程,FTPclient/server程序 一.问题描述及设计思路 1.1 问题描述 服务器端: 1.指定一个目录作为FTP目录(之后所有的文件操作均在此目录下进行) 2.接收客户端的命令请求并提供相应的服务。 客户端:完成与FTP用户的人机界面,以命令的方式向服务器请求服务,主要的命令有:1.CONNECTIP地址端口号 2.指定FTP服务器的IP地址和端口号,连接到服务器。响应:连接成功/失败。 3.LOGIN用户名 4.用户登录(假设在服务器端有用户管理功能)

5.响应:若用户不存在,提示“无此用户”;若用户存在,提示“密码:”;用户输入密码后,若正确提示“登录成功”;若不成功,提示“密码错误”。6.3.DIR 7.显示FTP服务器的FTP目录的文件列表(假设无子目录) 8.响应:目录列表(只要文件名即可)。 9.4.GET文件名 10.将FTP目录下的文件下载到本地,支持断点续传 11.响应:传送成功/失败/无此文件。 12.5.PUT文件名 13.将本地文件上传到FTP目录,支持断点续传 14.响应:传送成功/失败/无此文件。 15.6.HELP(客户端和服务器端均有该功能) 16.实验环境本次实验采用MFC工程工程采用MFC对话框界面工程名称为MyServer和FTPSOCKET。 17.详细设计过程 1.2 设计思路 1. FTP协议基础 FTP 是TCP/IP 协议组中的协议之一,该协议是Internet文件传送的基础,它由一系列规格说明文档组成。目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上或从自己计算机中拷贝至远程计算机上。在TCP/IP协议中FTP标准命令TCP端口号为21,Port

C++程序设计实验-1-7 - 完整

二、参照例1-2,用结构化方法编程实现: 1、 根据每学年学费、专业总学分、某课程学分,计算上该课程的总花费,以及每学时,每 分钟的花费。(1学分=18学时) 2、 P43编程题1,2,3 1.输入一个三位整数,将它反向输出。 2.输入平面上某点横坐标x 和纵坐标y ,若该点在由图 3.1表示的方块区域内,则输出1;否则,输出0。 图1.11 正方形 3.输入三个整数,求出其中最小数(要求使用条件表达式)。 根据每学年学费、专业总学分、某课程学分,计算上该课程的总花费,以及每学时,每分钟的花费。使得本校不同专业,不同课程的同学都能用它来计算。(1学分=18学时) 提示: 1、定义一个类, 类的数据成员包括:每学年学费、专业总学分、课程学分; 类的成员函数包括: 设置每学年学费、专业总学分、课程学分; 显示每学年学费、专业总学分、课程学分; 计算上某课程的总花费; 计算上某课程的每学时花费; 计算上某课程的每分钟的花费; 1.输入某学生成绩,若成绩在85分以上输出“very good ”,若成绩在60分到85分之间输出“good ”,若成绩低于60分输出“no good ”。 2.输入三个整数,按从小到大的顺序输出它们的值。 3.输入三角形的三条边,判别它们能否形成三角形,若能,则判断是等边、等腰、还是一般三角形。 4.输入百分制成绩,并把它转换成五级分制,转换公式为: ?????????-----=59 069607970898010090(不合格)(合格)(中等)(良好)(优秀)(级别)E D C B A grade 5.编程序模拟剪刀、石头和纸游戏。游戏规则为:剪刀剪纸,石头砸剪刀,纸包石头。玩游戏者从键盘上输入s (表示剪刀)或r (表示石头)或p (表示纸),要求两个游戏者交

汇编语言程序设计实验报告

微机原理实验报告 实验名称汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH, 97H,64H,BBH,7FH,0FH,D8H。编程并显示结果:如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H 的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD 码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再 将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H +

99223344H = xxxxxxxxH 四、实验代码及结果 实验代码见代码附录 1.1程序运行结果 图1 无符号最大值结果截图 1.1 程序运行结果

图2 有符号最大值截图2.0 程序运行结果

图3 BCD码显示3.0 程序运行结果

图4 ASCII码显示4.0 程序运行结果

图5 移动次数显示5.0 程序运行结果

单片机实验4 子程序设计-- BCD码转换为二进制

实验4. 子程序设计----BCD 码转换为二进制 单字节可存放两位压缩BCD 码(0—99) 为0 —9) 单字节BCD 码转换为二进制子程序 入口:(R0)= 压缩BCD 码的地址 出口:(A)= 转换结果 DSFR::MOV A,@R0 ANL A,#0F0H ;取十位数 SWAP A ;变为标准BCD 码 MOV B,#10 MUL AB ;(A)=D1×10 MOV R7,A ;D1× 10暂存 R7 MOV A,@R0 ANL A,#0FH ;取个位 ADD A,R7 ;A=D1×10+D0 RET 1、实验内容: 子程序设计要点: 1) 子程序一般为多次返复使用的程序段,一般应说明入口条件,DSFR 子程序的 入口条件是:被转换为二进制的单字节BCD 码为间接寻址,间接寻址寄存器为R0。要调用DFSR 子程序必需先将压缩BCD 码的存放地址赋与R0。而出口条件是指最后结果在哪儿存放。本子程序转换结果在ACC 内。 2) 主程序调用子程序,在调试时一般要先调试子程序、再调试主程序。

2、实验步骤 1)打开PV32编程序。汇编正确进入调试界面。否则修改程序重新汇编直到通过。 2)打开DATD窗口给20H、21H、R6、R7赋值 3)单步调试DSFR子程序观察并记禄寄存器、内存的变化。判断程序是否正确。若发现 问题重返编辑界面,修改、存盘、汇编。返回调试界面调试通过。 4) 设断点调试主程序观察并记禄寄存器、内存的变化。判断程序是否正确。若发现问 题重返编辑界面,修改、存盘、汇编。返回调试界面调试通过。 3.实验报告 1.写出主程序流程图、子程序流程图、程序清单 2.根据记渌数据给程序加注解 3.调试心得

汇编语言——输入输出程序设计实验

实验四输入/输出实验(2学时综合性实验) 1.实验目的 (1) 掌握输入输出程序设计的概念和方法。 (2) 了解PC机外围芯片8259的功能。 (3)学习如何在PC机上编写具有输入输出功能的程序,包括8259芯片的使用方法。 2.实验说明 本实验要求自行编写一个显示器输出处理程序,它可以完成内存中保存的一串字符在屏幕显示, 因此本实验既属于输入输出实验,也属于中断实验。 3.实验内容 编写一个显示器输出处理中断程序(名为NEW09),实现DOS 21H中断的9号功能,在屏幕上输出内存缓冲区BUF中以”$”结束的一串字符串。要求:缓冲区的偏移地址采用DX寄存器进行传递。 4.实验准备 (1) 预习输入输出程序设计的特点和方法。 (2) 仔细阅读参考程序,弄清外围芯片接口初始化的意义和方法。 5.实验步骤 (1) 建立源文件,并通过汇编和连接,产生可执行文件。 (2) 运行程序,观察常规字符键及功能键按下时程序的反应, DATAS SEGMENT buf db'li hongbin','$';此处输入数据段代码 DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS

main proc far START: mov al,68h mov ah,35h int 21h push es push bx push ds mov bx,offset buf mov dx,offset new09 mov ax,seg new09 mov ds,ax MOV AX,DATAS MOV DS,AX pop ds pop bx pop es sti mov al,68h mov ah,25h int 21h main endp

实验一简单程序设计实验

实验一:简单程序设计实验 (1)编写一个 32 位无符号数除法的程序,要求将存放在 NUM1 中的 32 位无符号数与存放 在 NUM2 中的 16 位无符号数相除,结果存放在 NUM3 和 NUM4 中。 程序流程图略。 参考源程序: DATA SEGMENT NUM1 DD 2A8B7654H NUM2 DW 5ABCH NUM3 DW ? NUM4 DW ? DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX,DATA ;数据段寄存器初始化 MOV DS,AX MOV AX, WORD PTR NUM1 MOV DX, WORD PTR NUM1+2 DIV NUM2 MOV NUM3,AX MOV NUM4,DX MOV AH,4CH ;正常返回DOS 系统 INT 21H CODE ENDS END START (2)编写一个拆字程序。要求将存放在 ARY 单元的 2 位十六进制数 X 1X 2 拆为 X 1 和 X 2 两 部分,并以 0X 1 和 0X 2 的形式分别存入 ARY+1 和 ARY+2 单元中。 程序流程图略。 参考源程序: DATA SEGMENT ARY DB 2AH,?,? DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET ARY ;取ARY 的偏移地址 MOV AL,[SI] ;取16进制数至AL

MOV BL,AL AND AL,0F0H ;取16进制数的高四位,即X1 SHR AL,4 MOV [SI+1],AL ;存0X1 MOV AL,BL AND AL,0FH ;取16进制数的低四位,即X2 MOV [SI+2],AL ;存0X2 MOV AH,4CH INT 21H CODE ENDS END START

汇编语言程序设计实验

第2章汇编语言程序设计实验 2.1、实验1-1——多字节数的运算 1、实验目的计科1406 熟悉汇编语言的上机环境和各种工具(编辑、汇编、连接、调试);201416010608掌握完整段和简化段两种汇编程序的编写;李文俊 掌握简单汇编程序的处理和调试过程。 2、实验内容 ⑴、两个长度为3个字节(3B)的二进制无符号数,分别存放在首地址为buf1和buf2的连续内存单元中,编程求这两者之和,并将结果放在起始地址为res的内存单元中。例如,这两个数据为888888H、456789H,则其和应为[1]CDF011H。 要求: ?用完整段和简化段两种方式实现。 ?观察它们的反汇编结果并进行比较,单步运行程序。 注意: ?程序运行前先将res清0,程序运行后观察res单元中的数据是否符合预期。 ?数据存放应“高对高、低对低”。 ⑵、将两数改为3B的压缩BCD码,重复以上实验过程。例如,这两个数据为888888H、456789H,则其和应为[1]345677H(表示[1]345677)。 ?注意,每两个字节相加后,应紧接着进行二-十进制调整。 3、实验扩展和思考 ⑴、计算两个长度为3B的二进制数据之差应如何进行操作? ⑵、计算两个长度为3B的压缩BCD码数据之差应如何进行操作? ============================================================================ ==== 实验报告 ============================================================================

汇编语言程序设计实验报告三(子程序设计实验)

汇编语言程序设计实验报告三(子程序设计实验) 一、实验目的 1、掌握主程序与子程序之间的调用关系及其调用方法。 2、掌握子程序调用过程中近程调用与远程调用的区别。 3、熟练掌握码型变换的程序。 二、实验内容 1、从键盘输入二位非压缩BCD数,存入AX寄存器中,编程实现将其转换为二进制 数,并在屏幕上显示。要求码型转换程序用远程子程序编写,字符显示用近程子程序编写。数据可循环输入,遇‘00’结束。 三、实验准备 1、预习子程序设计的基本方法,根据实验内容要求编写出实验用程序。 2、熟悉键盘输入和字符显示的程序段的编制。 四、实验步骤 1、编辑、汇编源程序,生成可执行文件。 2、执行程序,检查输入、输出结果,看是否正确。如不正确,用DEBUG检查,修改 源程序,再汇编、运行,直到程序正确为止。 3、用DEBUG的T命令或P命令跟踪程序的执行,观察在远程和近程调用过程中,堆 栈的变化情况。 五、实验报告要求 1、分析近程调用和远程调用的主要区别。用DEBUG命令观察执行过程有何不同。 2、分析实验结果及所遇到的问题的解决方法。 主程序流程图 转换子程序TRAN流程图

七、程序清单 STA SEGMENT STACK ’STACK’ DB 100 DUP(0) STA ENDS GSAG SEGMENT PARA ‘CODE’ ASSUME CS:CSAG MAIN PROC FAR STRA T: PUSH DS SUB AX,AX PUSH AX REV: MOV AH,1 INT 21H MOV BL,AL INT 21H MOV AH,AL MOV AL,BL CMP AX,3030H JE ENDTRAN CALL NEAR PTR TRAN CALL FAR PTR CON MOV AL,0DH CALL FAR PTR DISP MOV AL,0AH CALL FAR PTR DISP MOV AL,0AH CALL FAR PTR DISP JMP REV ENDTRAN: RET MAIN ENDP TRAN PROC NEAR AND AX,0F0FH MOV BL,AL MOV BL,AL MOV CL,3 SHL AL,CL MOV CL,1 SHL BL,CL ADD AL,BL ADD AL,AH RET TRAN ENDP CSAG ENDS CSBG SEGMENT PARA’CODE’ ASSUME CS:CSBG

汇编语言 实验七子程序设计2

实验七子程序设计 实验类型:综合性 实验目的: 1、掌握主程序与子程序之间的调用关系及调用方法。 2、掌握子程序调用过程中近程调用与远程调用的区别。 3、掌握通过堆栈转送参数的方法。 实验步骤: 1、进入DOS环境 2、输入命令:path c:\windows\command;c:\turbo\masm保证实验过程中使用的所有命令都在当前路径直接调用 3、启动EDIT编辑器输入程序代码 4、检查语法错误,如无错误以ASM为后缀名保存文件(如文件名chen.asm) 5、运行命令MASM CHEN.ASM生成OBJ文件 6、如果出错请回到第3步再纠正错误 7、运行命令LINK CHEN.OBJ(此时提示没有堆栈错误请忽略)生成EXE文件 8、运行DEBUG调入可执行程序DEBUG CHEN.EXE(以下DEBUG 命令请参看第一次实验内容) 9、执行反汇编U 10、查看程序结束地址 11、运行G 命令运行程序 12、运行D和R命令查看相应的内存单元和寄存器的数据是否与结果一致,如果不一致回到第3步纠正错误,也可以运行T命令逐条运行程序寻找错误指令位置再做修改。 实验内容: 从键盘输入一组十进制数据,按从小到大的顺序排列,并以十进制的形式输出。 要求:输入过程有键盘锁;输入、输出有提示;输入和输出之间换行。

data segment a dw 7 dup(?) data ends decihex segment main proc far assume cs:decihex,ds:data push ds mov ax,0 push ax mov ax,data mov ds,ax mov cx,07h lea si,a loop1:call decibin mov [si],bx add si,2 call crlf loop loop1 ;******************************** mov cx,7 dec cx

河北工业大学汇编语言程序设计实验

汇编语言程序设计实验 网络*** *** 实验一 顺序与分支程序设计 一 、实验目的 1) 掌握顺序程序设计方法。 2) 掌握分支程序的结构及分支程序的设计,调试方法。 2) 学习数据传送及算术和逻辑运算指令的用法。 3) 熟悉在pc 机上建立、汇编、连接、调试和运行汇编语言程序的过程。 二、实验内容 1.实验六 从键盘上接收一位十进制数x ,计算y 值,并以十六进制形式显示出来,y 按下列公式计算。 ???????===-=+=) 6(2/) 5()4(2)3(2222X X X X X X X X X X Y 2..实验七 实验内容:从键盘上接收两个一位十六进制数x 和y ,然后再输入一个a-d 之间的一个字符,按下列要求计算。 a) 当输入字符为a ,则计算x+y ,并以十六进 制形式显示出来 b) 当输入字符为b ,则计算|x-y|,并以十六进制形式显示出来 c) 当输入字符为c ,则计算x*y ,并以十六进制形式显示出来 d) 当输入字符为d ,则计算x/y ,并以十六进制形式显示出来 三、实验代码 实验六 DATE SEGMENT

X DB ? DATE ENDS ;数据段 CODE SEGMENT ASSUME CS:CODE,DS:DATE START:MOV AX,DATE ;代码段 MOV DS,AX ;初始化ds寄存器 MOV AH,1 INT 21H ;读文件到缓冲区 CMP AL,33H ;比较指令 JB L0 ;A

实验三-选择结构程序设计

实验三选择结构程序设计 3.1实验要求与目的 1.掌握关系表达式和逻辑表达式的正确应用 2.条件表达式的正确应用 3. 掌握if语句,if-else语句,if语句的嵌套的编程方法 4. 掌握switch的编程方法及执行特点 5.掌握相关的算法(大小写字母的转换,判断数的奇偶,整数的整除,分段函数的求解,成绩的转换等) 6. 培养解决实际问题的能力 3.2实验指导 结构化程序设计的三大结构:顺序结构、选择结构和循环结构。 计算机在执行过程时,根据条件选择所要执行的语句,称为选择结构,也称为分支结构。在解决实际问题时,可能会因为其种条件的约束产生分支,可能是单分支结构、双分支结构和多分支结构等。因此可选择相应的语句进行程序设计。 C语言程序设计实现单分支结构常采用,if语句;实现双分支结构常采用:if-else语句;实现多分支结构常采用:if-else嵌套语句或switch语句。 选择结构的程序设计除了选择适当的语句外,另一关键问题是条件的正确表示。条件可以用表达式来描述,如关系表达式、逻辑表达式等。 【3.1】录入下列程序,输入给定的测试数据,观察其程序执行结果。程序文件名为:ex3_1.c。 输入测试数据:23 56 程序运行结果:max=56 #include void main() { int a,b,max; scanf("%d%d",&a,&b); /*从键盘输入两整数*/ max=a; if(max

实验四子程序设计实验

实验四:子程序设计实验 专业班级 姓名: 学号: 联系方式

一、任务要求: 1. 调试程序dmove.asm,观察片外数据区7000H、A000H开始的单元内容变化规律。 修改程序将7010H-7073H单元内容传送至B000H开始的存储区中。 2. 设计一个子程序,统计片外数据区从2000H开始的256个符号数中偶数的个数,低位存入R3,高位存入R2。 3.(选作题)设计子程序,实现对片外数据存储器的测试。具体要求如下: 1)测试方法自选 2)数据存储区首地址、长度可变。 3)可统计坏单元数目,并记录坏单元地址。 4)利用LED指示灯,提示测试过程和结果状态。 二、设计思路 实验一: 1.用MOVX @DPTR, A 指令,向片外数据区7000H到70FFH单元内容送值。 2.用同样的指令,将7010H-7073H单元内容传送至B000H开始的存储区中。 实验二: 1.将要检验的地址区域内容逐个取出,进行奇偶判断 2.是偶数则统计加一,之后对下一位进行判断 3.不是则对下一位进行判断 4.结束后返回 实验三: 1.先将监测区域内赋值 2.赋值完成后通过改变区域内的内容,再进行检测 3.若两次的内容不相同,则统计数加一并记录地址 4用P1,P2,P3口的状态来表示LED指示灯的工作状态 三、资源分配

实验一: 1.起始地址为0090H 2.向片外数据区7000H、A000H开始的单元赋值。 3.将7010H-7073H单元内容传送至B000H开始的存储区中。 实验二: 1. 起始地址1000H 2. 统计片外数据区从2000H开始的256个符号数中偶数的个数,低位存入R3,高位存入R2。 实验三:(选作题) 1.起始地址2000H 2.向7000H开始的片外RAM空间送监测数 3.错误数目放在R2中 4.错误地址放在片内IDA TE中 四、流程图

汇编语言实验报告

汇编语言实验报告 专业: 班级: 姓名: 学号: 2011年12月14日

目录 实验1 利用DEBUG调试汇编语言程序段 (3) 实验2 初级程序的编写与调试实验(一) (11) 实验3 初级程序的编写与调试实验(二) (20) 实验4 汇编语言程序上机过程 (28) 实验5 分支程序实验 (33) 实验6 循环程序实验 (40) 实验7 子程序实验 (45)

实验1 利用DEBUG调试汇编语言程序段一.实验目的 1.熟悉DEBUG有关命令的使用方法; 2.利用DEBUG掌握有关指令的功能; 3.利用DEBUG运行简单的程序段。 二.实验内容 1.进入和退出DEBUG程序; 1)开始—运行,输入cmd,点确定进入命令窗口 2)在命令窗口中输入dubug进入debug程序 3)进入debug窗口后,输入q命令退出debug 2.学会DEBUG中的 1)D命令(显示内存数据D 段地址:偏移地址) 例1:-D100 ;显示DS段, 0100开始的128个节内容

说明: 指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。 ① D SEGREG[起始地址] [L 长度] ;显示SEGREG段中(缺省内默认为DS), 以[起始地址] (缺省内为当前的偏移地址),开始的[L 长度] (缺省内默认为128)个字节的内容. ② D SEGREG[段地址:偏移地址] ;显示SEGREG段中(缺省内默认为DS), [段地址:偏移地址] 开始的[L 长度] (缺省内默认为128)个字节内容 -D ;默认段寄存器为DS,当前偏移地址(刚进入debug程序偏移地址为0100H) -D DS:100 ;显示DS段, 0100H开始的128个字节内容 -D CS:200 ;显示CS段, 0200H开始的128个字节内容 -D 200:100 ;显示DS段, 0200:0100H开始的128个字节内容 -D 200 ;显示DS段, 0200H开始的128个字节内容

实验七子程序设计

实验七:子程序设计 一、实验目的: 通过运行例题程序,了解并掌握简单子程序的编写以及调用方法。 二、实验基础知识: 1、什么是子程序? 子程序又称为过程,是能完成特定功能有一定通用性的程序段,在需要时能被其它程序调用。调用子程序的程序常称为主程序。一般把源程序中反复出现的程序段或常用的功能独立的程序段设计成子程序供用户使用。 这样可以简化源程序结构、节省目标程序的存储空间,提高程序设计的效率。子程序结构也是模块化程序设计的基础。 2、子程序的定义 子程序的定义是由过程定义伪指令PROC和ENDP实现,格式如下: 过程名PROC [NEAR|FAR] …;过程体(实现某功能的指令集合体) 过程名ENDP 说明:NEAR属性的过程只能被相同代码段的其他程序调用,FAR属性的过程可以被不同代码段的程序调用。过程体中必须包括RET(返回主程序)指令。其中PROC表示过程定义开始,ENDP表示过程定义结束。过程名是过程入口地址的符号表示。(1)子程序和主程序在同一个代码段中,则子程序定义为NEAR属性。 (2)子程序和主程序不在同一个代码段中,则子程序定义为FAR属性。 (3)主程序通常定义为FAR属性,这是因为主程序被看作DOS调用的一个子程序,以便执行完返回DOS。 3、子程序的设计方法 子程序可以放在代码段主程序开始执行之前的位置,也可放在代码段的末尾主程序执行终止后的位置。 为了便于其他程序员能正确使用子程序,在编写子程序时,还要养成书写子程序说明信息的良好习惯。子程序说明信息一般包括以下内容: (1)子程序名 (2)功能描述 (3)入口和出口参数 (4)调用注意事项和说明等 子程序实例: ;子程序名:stob ;功能:将小写字母修改为大写字母 ;入口参数:al存放输入的字符 ;出口参数:al存放修改后的字符 stob proc near cmp al,61h jb next cmp al,7ah

实验报告 子程序设计实验

实验5 子程序实验 一.实验目的 1.掌握主程序与子程序之间的调用关系及调用方法; 2.掌握子程序调用过程中近程调用与远程调用的区别; 3.掌握通过堆栈转送参数的方法。 4. 掌握多模块程序设计方法 二.实验内容 1.将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示。 DATAS SEGMENT BUF DB 00000111B,00100001B,00100010B,00000011B,00000101B,10000010B,10010011B,00100100B, 11100010B,01010010B CAN DB $-BUF ;定义常量CAN DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS MAIN PROC FAR ;主程序块 START: MOV AX,DATAS MOV DS,AX MOV CL,10 LEA SI,BUF LOOP1: ;调用子程序语句 call HEXAC call DISP DEC CAN JNZ LOOP1 EXIT: MOV AH,4CH INT 21H MAIN ENDP HEXAC PROC NEAR ;二进制转换成十六进制子程序 MOV BL,[SI] INC SI RET HEXAC ENDP

DISP PROC NEAR ;显示子程序 MOV CL,4 MOV CH,2 MOVE: ;移位语句 ROL BL,CL MOV DL,BL AND DL,0FH ADD DL,30H CMP DL,'9' JBE PRINT ADD DL,07H PRINT: MOV AH,02H ;显示语句 INT 21H DEC CH JNZ MOVE MOV DL,' ' MOV AH,02H INT 21H RET DISP ENDP CODES ENDS END START 2.编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符’b’的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符"b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。 DATA SEGMENT STR1 DB 0ah,0dh,'PLEASE INPUT YOUR STRING:$' STR2 DB 0ah,0dh,'THE NUMBER OF b is:$' TABLE DB 50, ? ,50 DUP(?),'$' DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX,DATA MOV DS,AX LEA DX,STR1 MOV AH,9 INT 21H LEA DX,TABLE

《汇编语言》实验

《汇编语言》课程实验指导手册 本实验指导手册旨在指导数学与软件科学学院信息与计算科学专业《汇编语言》(专业任选课)的实验教学活动过程。其主要使用对象为本课程主讲教师和实验指导教师。它可以作为教学过程中的教学辅助参考资料,也可以作为学生在本门课程的学习中,结合实际教学内容,完成相关实验并填写实验报告的主要依据。具体实施过程中,除开各实验中要求的必做题目外,教师可结合实际教学情况,根据学生接受程度作适当扩展。学生在进行实践设计活动时,也可以结合自身掌握和学习的实际情况进行有选择地实践。 本指导手册仅针对本学院信息与计算科学专业而设置。 本实验手册编写的参考书籍: 1.《IBM-PC汇编语言程序设计(第2版)》,沈美明温冬婵编著,北京:清华大学出版社,2001年8月(第2版)2005年6月第14次印刷 2.《80X86汇编语言程序设计教程》,杨季文等编著,北京:清华大学出版社,1998年6月(第1版)2005年8月第14次印刷 引言 汇编语言程序设计技术是实践性很强的课程。实践也是学好程序设计课程中必不可少的重要环节。程序设计的实践分两个步骤:一是设计和编写解决问题的程序算法流程,并在此基础上编写源程序代码;二是在计算机上对程序进行调试,并使程序完成问题的求解过程,进行相应的逻辑测试。由于汇编语言固有的特点,其程序调试比一般的高级程序语言困难,为此,学习过程中,尤其注意事先做好上机准备,做到目的明确,思路清晰,调试策略完全、全面,以便更好地观察和分析汇编程序执行的技巧,并注意领会计算机工作的本质过程和步骤。可以参阅计算机组成 原理方面的参考书,帮助理解计算机的基本工作原理。 实验过程中,应当注意如下问题: (1) 上机实习的主要目的是训练汇编语言程序的上机调试能力和分析、解决调试过程中遇到的问题的能力。并在此过程中逐步提高程序编写与问题分析能力。而不是简单地对教材上的实例做验证式的操作; (2) 上机内容可以结合教材内容和习题,或由老师布置专门的上机习题进行; (3) 为提高上机效果。必须在上机之前准备好上机的基本内容并编写好上机程

相关文档
相关文档 最新文档