汇编语言菜单系统

合集下载

CCS软件_汇编语言编程

CCS软件_汇编语言编程

汇编语言编程一. 实验目的1.学习用汇编语言编制程序;2.了解汇编语言程序与C 语言程序的区别和在设置上的不同。

3.学习在CCS 环境中调试汇编代码。

二. 实验设备1.PC 兼容机一台;2.CCS软件。

三. 实验原理汇编语言程序除了程序中必须使用汇编语句之外,其编译选项的设置与C 语言编制的程序也稍有不同。

其区别为:(1) 汇编语言程序在执行时直接从用户指定入口开始,常见的入口标号为“start”,而C 语言程序在执行时,先要调用C 标准库中的初始化程序(入口标号为“_c_init00”),完成设置之后,才转入用户的主程序main()运行。

(2) 由于CCS 的代码链接器默认支持C 语言,在编制汇编语言程序时,需要设置链接参数,选择非自动初始化,注明汇编程序的入口地址。

四.实验步骤1.实验准备设置软件仿真模式。

2.建立新的工程文件(1)启动Code Composer Studio 2.21。

(2)建立TASM.pjt,保存路径:C:\ICETEK\VC5416AES61\VC5416AES61\Lab0103-ASM3.设置工程文件改变程序入口地址为start4.编辑输入源程序(1) 汇编语言程序新建源程序窗口,输入源程序:.global start ; 定义全局变量.mmregs.data.bss x,1 ; 开设全局变量(非初始化段).bss y,1 ; 每个变量占用一个字(16bit).bss z,1.textstart:stm #x,ar1 ; 取得变量x 的地址stm #y,ar2 ; 取得变量y 的地址stm #z,ar3 ; 取得变量z 的地址ST #1,*ar1 ; 变量赋初值x=1ST #2,*ar2 ; y=2LD *ar1,A ; 将变量x 的值装载到累加器Aadd *ar2,A ; 将y 的值加到累加器stl A,*ar3 ; 将累加器的值的低16 位存储到变量zxh:nopb xh ; 空循环.end注意:在输入汇编语言源程序时,除了标号以外的程序行必须以一个空格或退格字符开始。

实验1_认识汇编语言

实验1_认识汇编语言

实验一 认识汇编语言1.1 实验目的(1)理解汇编语言的概念及其与高级语言的区别(2)了解MASM6.11和TASM软件包的安装及配置(3)了解常用汇编语言集成环境(4)掌握汇编语言程序的上机过程1.2 预备知识1.2.1 系统环境对汇编语言的初学者来说,DOS环境的优点是:DOS操作系统简单,程序员可以管理系统的所有资源,访问和修改系统中的所有内存(包括内存控制块、中断向量表),直接对I/O端口进行读写,便于对知识的学习和理解。

其缺点是:单任务的DOS操作系统只有一个运行级别,任何进程与DOS操作系统都是同等级别的,致使系统中各个进程会相互影响。

如果某个进程死机,整个系统就会瘫痪。

但是DOS系统已经退出历史舞台,目前的学生只熟悉Windows环境而对DOS知之甚少,继续要求学生在DOS系统的命令行界面下编写和调试程序,无疑存在巨大的困难。

目前,IBM PC及其兼容机配置的Intel系列微处理器可以工作在实模式、保护模式和虚拟86三种模式下。

实模式是汇编语言入门的基础,是汇编语言教学中无法跨越的阶段。

了解实模式是理解内存分段式管理和寻址方式的基础。

保护模式是Windows系统的工作模式,虚拟86模式则是在保护模式下提供的模拟8086处理器工作的模式,为学习汇编语言提供了便利。

DOS汇编程序在Win32环境中运行时,操作系统会模拟实模式运行16位进程。

对于一些可能会影响整个操作系统工作的指令,windows操作系统会拒绝执行。

64位的Windows 环境则不提供16位应用的虚拟环境。

因此,采用Win32环境进行汇编语言程序的编辑工作,在虚拟控制台环境中学习(汇编、连接和调试)汇编语言是最佳方案。

下面我们将逐步给大家讲解如何安装和配置汇编语言的编译调试环境,并选择适合的编辑软件来组建汇编语言的集成环境。

最后,叙述如何使用Visual Studio 2008 Express作为汇编语言的工作环境。

1.2.2 汇编语言上机过程汇编语言程序需要经过编辑、汇编、连接、调试与执行等过程才能实现其具体功能。

汇编编译工具MASM的使用

汇编编译工具MASM的使用

实验二汇编编译工具MASM的使用2.1. 实验目的1、学习如何安装MASM;2、学习如何使用和使用编译和链接汇编语言程序。

2.2. 基础知识2、DOS汇编与WIN32汇编在DOS下编写汇编程序,程序员可以管理系统的所有资源,访问和改动系统中所有的内存,修改内存控制块,修改中断向量表截获中断,直接对I/O端口进行读写。

DOS是个单任务操作系统,只有一个运行级别,任何进程和DOS操作系统都是同等级别的。

因此,DOS系统中各个进程会互相影响,如果某个进程死机的话,整个系统都会垮掉。

DOS工作在实模式下,程序员可以寻址1M的内存,通过段寄存器来指定段的初始地址,每个段的大小为64K。

超过1M的部分,就只能把他作为XMS使用。

1M以上的内存空间只能用作数据存放而无法在其中执行程序。

Win32是指32位的Windows操作系统,进程有多种运行级别,操作系统工作在最高级别——0级,而应用程序工作在3级。

在第三级别,进程无法直接访问I/O端口,无法访问其它进程运行的内存,连向自己的运行代码写入数据都是非法的。

只有对于最高级别的进程,系统才是全开放的。

Windows工作在保护模式下,所有的资源对进程来说都是被“保护”的。

在内存方面,Windows使用了处理器的分页机制,程序员不必用一个段寄存器去指定段的地址,因为在保护模式下,段寄存器的含义是不同的(参见80386手册方面的书籍)。

程序员可以直接指定一个32位的地址来寻址4GB的内存。

在程序结构方面,Windows程序也有很大的不同,它是“基于消息”的。

在上面列举的汇编工具中,一些是DOS汇编工具,一些是Win32汇编工具。

初学者可以从DOS汇编入手,先掌握汇编编程的思路、基本语法和编程技巧,待入门后再学习Win32汇编。

当然,学习DOS汇编并不一定需要安装和使用DOS操作系统。

程序员可以在Win32环境中安装MASM 6.0或其它16位汇编工具,在命令提示符状态下编译和链接DOS汇编程序。

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

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

汇编语言程序设计实验报告汇编语言程序设计实验报告引言:汇编语言是计算机中最基本的语言,通常用于处理硬件相关问题。

在这个实验中,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。

以下是我们的实验报告。

正文:1. 实验环境我们使用的实验环境是Intel 8086微处理器与高级汇编语言。

微处理器使用的是PCB-512主板,而高级汇编语言是MASM。

2. 实验目的我们的实验目的主要是学习汇编语言的基础知识和编程技巧,包括了汇编语言的寄存器、指令、内存管理等方面的知识。

我们的另一个目的是掌握汇编语言的常用编程技巧,能够独立完成一些简单的汇编程序。

3. 实验内容我们的实验内容主要包括以下几点:(1)学习汇编语言的基础知识,包括寄存器、指令、内存管理等方面的知识。

(2)掌握汇编语言的常用编程技巧,包括数据输入输出、运算、跳转等基本操作。

(3)实践用汇编语言编写程序,如计算器、菜单等实用程序。

(4)了解8086微处理器的结构和原理。

4. 实验过程在这个实验过程中,我们完成了以下几个程序:(1)计算器计算器是一个简单的程序,主要用于实现两个数之间的加、减、乘、除等基本运算。

我们通过输入输出指令、存储指令等指令实现了这个程序的功能。

(2)菜单菜单是一个实用程序,主要用于展示一个简单的菜单并实现用户选择相关功能的功能。

我们使用了汇编语言中的跳转指令、输入输出指令等实现了这个程序。

5. 实验结果在我们的实验中,我们成功完成了上述两个程序。

我们通过输入输出指令、存储指令等指令实现了这个程序的功能。

6. 实验总结在这个实验过程中,我们学习汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。

我们通过编写计算器和菜单等简单实用程序,加深了对汇编语言的理解和认识。

我们认为这个实验对我们今后的学习和工作都有很大的帮助。

结论:通过这个实验,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。

keil调试 汇编语言

keil调试 汇编语言

keil调试汇编语言Keil是一款广泛用于嵌入式系统开发的集成开发环境(IDE),它支持多种编程语言,包括C语言和汇编语言。

在Keil中进行汇编语言的调试需要编写汇编代码以及在IDE中配置相关设置,接下来我将详细介绍如何在Keil中调试汇编语言。

首先,要在Keil中调试汇编语言,我们需要创建一个新的Keil 项目或者打开一个已有的项目。

在创建新项目或打开项目后,我们可以在项目中添加一个汇编文件,用于编写我们的汇编代码。

在Keil中,汇编文件的后缀通常为.asm,我们可以通过右键点击项目中的文件夹,选择添加→新建文件(或者通过快捷键Ctrl+N)来创建一个新的汇编文件。

创建好汇编文件后,我们可以在文件中编写我们的汇编代码。

在编写汇编代码时,我们需要注意汇编语言的语法和指令格式。

汇编语言的语法因不同的体系结构而异,比如x86汇编语言与ARM汇编语言的语法就有所不同。

因此,在编写汇编代码前,我们需要先了解目标平台的体系结构和相应的汇编语法标准。

在汇编代码中,我们可以使用一系列的汇编指令来进行数据的移动、运算和控制流的操作。

例如,通过MOV指令可以实现数据的移动,通过ADD指令可以实现数据的加法运算,通过CMP指令可以实现数据的比较等。

汇编指令的具体使用方法和参数取决于具体的体系结构和处理器指令集。

编写完汇编代码后,我们需要在Keil中配置一些相关设置,以便能够进行调试。

首先,我们需要在项目属性中设置汇编语言的编译器和链接器选项。

在Keil的项目目录视图中,右键点击项目名称,选择选项,并在弹出的对话框中选择正确的编译器和链接器。

其次,我们需要在Keil的启动文件(startup file)中设置相应的中断向量表和启动代码。

启动文件位于项目文件夹的"startup"子文件夹中,可以通过将文件拖放到Keil编辑器中打开。

在启动文件中,我们需要找到中断向量表和启动代码的位置,并将其修改为适用于我们的汇编代码的中断向量表和启动代码。

汇编语言流程图

汇编语言流程图

判定条件
判定条件
语句1
语句2 语句1 … 语句2 … 语句n
IF-THEN-ELSE结构
CASE结构
§5.3.1 用比较/测试的方法实现IF-THENELSE结构
实现方法:在产生分支之前,通常用比较、测试的办
法在标志寄存器中设置相应的标志位,然后再选用适当 的条件转移指令,以实现不同情况的分支转移。
DB 0DH,0AH,"OK,Please answer in German!$"
DATA ENDS
CODE SEGMENT
ASSUME
CS:CODE,DS:DATA
START: MOV AX,DATA
MOV
DS,AX
LEA
DX,MENU
;显示菜单
MOV
AH,9
INT
21H
MOV INT CMP JB CMP JA LEA SUB SHL XOR ADD
(1)进行比较,使用比较指令:
CMP
DEST,SRC
该指令进行减法操作,而不保存结果,只设置标志位。
(2)进行测试,使用测试指令
TEST DEST,SRC
该指令进行逻辑与操作,而不保存结果,只设置标志位。
§5.3.2 用地址表法实现CASE结构(即多路分支)
用地址表法实现CASE结构的基本思路是:将各 分支程序的入口地址依次罗列形成一个地址表,让 BX指向地址表的首地址,从键盘接收或其他方式获 取要转到的分支号,再让BX与分支号进行运算,使 BX指向对应分支入口地址,最后即可使用JMP WORD PTR [BX] 或JMP DWORD PTR [BX] 指 令实现所要转到的分支;程序设计流程图如图5.6所 示:

汇编语言程序设计的实验环境及上机步骤

汇编语言程序设计的实验环境及上机步骤

汇编语言程序设计的实验环境及上机步骤一、实验环境汇编语言程序设计的实验环境如下:1.硬件环境微型计算机(Intel x86系列CPU)一台2.软件环境⏹Windows98/2000/XP操作系统⏹任意一种文本编辑器(EDIT、NOTEPAD(记事本)、UltraEDIT等)⏹汇编程序(MASM.EXE或TASM.EXE)⏹连接程序(LINK.EXE或TLINK.EXE)⏹调试程序(DEBUG.EXE或TD.EXE)文本编辑器建议使用EDIT或NOTEPAD,汇编程序建议使用MASM.EXE,连接程序建议使用LINK.EXE,调试程序建议使用TD.EXE。

二、上机实验步骤注:以下步骤适用于除汇编语言程序设计的实验一到实验四外的所有实验(实验一到实验四仅使用TD.EXE)。

1.确定源程序的存放目录建议源程序存放的目录名为ASM(或MASM),并放在C盘或D盘的根目录下。

如果没有创建过此目录,请用如下方法创建:通过Windows的资源管理器找到C盘的根目录,在C盘的根目录窗口中点击右键,在弹出的菜单中选择“新建”→“文件夹”,并把新建的文件夹命名为ASM。

请把MASM.EXE、LINK.EXE、DENUG.EXE和TD.EXE都拷贝到此目录中。

2.建立ASM源程序建立ASM源程序可以使用EDIT或NOTEPAD(记事本)文本编辑器。

下面的例子说明了用EDIT文本编辑器来建立ASM源程序的步骤(假定要建立的源程序名为HELLO.ASM),用NOTEPAD(记事本)建立ASM源程序的步骤与此类似。

在Windows中点击桌面左下角的“开始”按钮→选择“运行”→在弹出的窗口中输入“ C:\ASM\HELLO.ASM”,屏幕上出现EDIT的编辑窗口,如图1所示。

图1 文本编辑器EDIT的编辑窗口窗口标题行显示了EDIT程序的完整路径名。

紧接着标题行下面的是菜单行,窗口最下面一行是提示行。

菜单可以用Alt键激活,然后用方向键选择菜单项,也可以直接用Alt-F打开File文件菜单,用Alt-E打开Edit编辑菜单,等等。

第4章 汇编语言程序设计

第4章 汇编语言程序设计

例: 三字节无符号数相加,其中被加数在内部RAM 的50H、51H和52H 单元中;加数在内部RAM的53H、 54H和55H单元中;要求把相加之和存放在50H、 51H和52H单元中,进位存放在位寻址区的00H位中。
内部RAM
50H 51H 52H
高字节 低字节
53H 54H 55H
R1→55H
结 束
常用程序结构:
顺序程序、分支程序、循环程序。
4-3
顺序程序
顺序程序又称简单程序,程序走向只有一条路径。 例:双字节求补程序(设数据在R4R5中): 开 始 CLR C MOV A,R5 ;取低字节 处 理 CPL A ADD A,#01H ;低字节变补 处 理 MOV R5,A MOV A, R4 ;取高字节 处 理 CPL A ADDC A,#00H ;高字节变补 结 束 MOV R4,A
片内 RAM 42H 0 十 41H 0 个 40H 十 个
4 -- 4
分支程序(参见书P49-57)
分支程序就是在程序执行过程中要判 断某些条件,当条件成立后程序转移到不 同的功能处运行。在MCS-51单片机中条件 转移指令都可以用在分支程序中。 (复习、参见书P38---39) (1)测试条件符合转移,如: JZ、JNB …等
汇编的主要任务:
1)确定程序中每条汇编语言指令的指令机器码。 2)确定每条指令在存储器中的存放地址。 3)提供错误信息。 4)提供目标执行文件(*.OBJ/*.HEX)和 列表文件(*.LST)。
一、汇编语言指令类型:
1. 机器指令: 指令系统中的全部指令,每条指令有对应的机器代码。 2. 伪指令: 汇编控制指令,仅提供汇编信息,没有指令代码。
在源程序中只能有一条END指令
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{修正行值}
else if (ah==下光标键)
{修正行值}
}
}
while (al!=Esc)
6.实验步骤
运行“光标漫游示例.EXE”了解需求。
①编一小程序获得特殊键“→、←、↑、↓”“Esc、回车”等的扫描码和Asc码值,并记录以备后用;
②写出光标漫游的算法(保存,用类自然语言描述,用word,与同学、老师讨论算法的可行性与正确性);
…..
IsESCKeyproc
…..
实训二色彩处理及方框显示
⒈问题
在显示屏显示各种形状的方框(大小不一)。
┬──┬ ┌───┐
│ │ │ │
└──┘ └───┘等
实验中可用1,2,3,4,…,9,0等来代替,如:
3
6
6
6
9
⒉实验基础
1注意颜色查看conio.c中的函数:
颜色名称

颜色名称

BLACK
;返回AH=扫描码,AL=字符码
2定位光标:用int 10h的2号
3清屏:用int 10h的6号(或7号)功能调用
MOV AH,6
MOV BH,04h
MOVAL,0
MOV CX,0
MOV DX,184fh
INT 10h
④相关键的扫描码和字符码
EnterKey EQU 1c0dh
EscKey EQU 010bh
UpCursor EQU 4800h
LeftCursor EQU 4b00h
RightCursor EQU 4d00h
DownCursor EQU 5000h
5.算法
do
{
定位光标
读键
if (al==特殊键)
{
if (ah==左光标键)
修正列值}
else if (ah==右光标键)
{修正列值}
else if (ah==上光标键)
dw EscKey,IsESCKey
dw UpCursor,IsUpCursor
dw LeftCursor,IsLeftCursor
dw RightCursor,IsRightCursor
dw DownCursor,IsDownCursor
上述跳转表共6项,每项为:键值(扫描码+字符码)、处理的入口地址
mov bh,0
mov al,boxstr
int 10h
mov cx,10
mov al,boxstr+1
showrepchar:
int 10h
loop showrepchar
mov al,boxstr+2
int 10h
注意上述代码和算法的关系。
6.直接写屏来显示的原理和方法
2.掌握跳转表的总控程序(入口地址为标号)
……
ContinueReadKey:
……
MOV BX,offset MenuJmpTbl
MOV CX,6
YesNoKeyEqual:
cmp ax,[bx]
je IsKeyEqual
add bx,4
loop YesNoKeyEqual
jmp ContinueReadKey
⑥使用体会和总结
实训一光标漫游改进
根据跳跃表法(另称跳转表,教材p180)来改进光标漫游程序。键:“→、←、↑、↓”、“Esc”、“Enter”、“ALT_X”(退出循环)。其中对“Esc”、“Enter”键暂不做任何处理。
1.掌握跳转表的原理
MenuJmpTbl dw Enterkey,IsEnterKey
实训一光标漫游
⒈问题
在25行80列的显示屏内,通过按键“→、←、↑、↓”来改变光标的位置,如按“→”键则光标往右侧走一列,按“↑”键则光标往上走一行的位置,最终通过“Esc”结束程序。
⒉边界问题
要处理好特殊情况:①光标在第一行,再按“↑”键时;②光标在第一列,再按“←”键时;③光标在第25行,再按“↓”键时;④光标在第80列,再按“→”键时。
③在②初步正确的基础上,编写汇编语言源程序;
④如发现算法问题,用调试器调试;
7.要点
光标如何根据所按的键跟随?折返如何处理?x=(x+1) %25;
8.该实验与大实验的关联性
请大家体会主菜单“实验蓝本.exe”的处理过程。
附件:实验报告内容
①问题
②设计要点及算法
③源程序
④运行结果
⑤使用调试器状况和经验总结
⒊边界问题处理
采用折返的方式:①光标在第1行,再按“↑”键时进到第25行;②光标在第1列,再按“←”键时进到第80行;③光标在第25行,再按“↓”键时进到第1行;④光标在第80列,再按“→”键时时进到第1列。
⒋实验基础
1读键:用int 16h的0号功能调用
掌握扫描码和字符码的区别
Mov ah,0
Int 16h
{//定位光标
//设置颜色并显示第一字符
//for显示中间字符
//显示最后一字符
}
5.实验关键
先实现ShowALineOfBox子程序,编程时考虑模块化的概念,处理参数的传递方法(先采用变量或寄存器的方式来传送)。参考下列案例:
boxstr db '123'
….
mov ah,0eh
mov bl,0fh
IsKeyEqual:
mov bx,[bx+2]
jmp bx
……
IsEnterKey:
…..
IsESCKey:
…..
3.掌握跳转表的总控程序(入口地址为子程序)
……
ContinueReadKey:
……
MOV BX,offset MenuJmpTbl
MOV CX,6
YesNoKeyEqual:
cmp ax,[bx]
②写出显示方框的算法(注意模块化);
③在②初步正确的基础上,编写汇编语言源程序;
④如发现算法问题,用调试器调试;
4完成本实验的实验报告。
4.算法
ShowBox(左上角坐标,右下角坐标,方框串,颜色)
{//显示第一行
//for显示中间行
//显示最后一行
}
ShowALineOfBox(左上角坐标,宽度,方框子串,颜色)
je IsKeyEqual
add bx,4
loop YesNoKeyEqual
jmp ContinueReadKey
IsKeyEqual:
mov bx,[bx+2]
callbx
jmpContinueReadKey
……
IsEnterKeyproc
……;不能用无条件转移指令等跳出子程序
ret
IsEnterKeyendp

DARKGRAY

BLUE

LIGHTBLUE

GREEN

LIGHTGREEN
10
CYAN

LIGHTCYAN
11
RED

LIGHTRED
12
MAGENTA

LIGHTMAGENTA
13
BROWN
6YELLOW14来自LIGHTGRAY7
WHITE
15
⒊实验步骤
①编写小程序,用int 10h的0eh功能来显示字符串;
相关文档
最新文档