Freescale HCS08单片机原理及应用-汇编程序设计

Freescale HCS08单片机原理及应用-汇编程序设计
Freescale HCS08单片机原理及应用-汇编程序设计

体值,而无需用户自己计算。由于复位矢量位于Flash空间,并且每个复位/中断矢量占用2字节的Flash空间,因此用DC.W伪指令定义。注意不能用DS伪指令定义Flash常量。

对于有中断服务子程序的源程序,为了在发生中断时能够响应中断进入相应的中断服务子程序,和填写复位向量类似,只需将中断服务子程序的入口地址填入对应的中断复位向量区即可。

3.6.3汇编程序设计

3.6.3.1算术/逻辑运算程序设计

MCU主要用于控制目的,其数据运算、处理的能力并不强。但由于HCS08系列MCU具有相应的算术、逻辑指令,因此它可以完成一些简单的算术/逻辑运算功能。

[例3.1] 若字变量Data1和Data2分别存放着两个16位无符号数,编写求这两个数之和的子程

序,并将和存放到Sum字节存储空间中。

两个16位无符号数相加,和为17位,至少需要3个字节的存储空间,和按照从高位到低位的顺序依次存放在以Sum为首地址的字节存储单元中。

Add_Pro:CLC ; 清进位标志位

LDA Data1+1

ADD Data2+1 ; 两数低八位相加

STA Sum+2 ; 存低八位之和

LDA Data1

ADC Data2 ; 高八位带低八位进位加

STA Sum+1 ; 存高八位之和

ROLA

AND #01H

STA Sum ; 存高八位进位位

RTS

3.6.3.2查表和散转程序

HCS08具有变址寻址方式,实现查表操作非常方便。利用查表可以实现转换、计算等各种功能。散转是指根据输入数据的不同跳转到不同的程序入口进行处理。

[例3.2] 单字节变量Hex_Byte中存放了一十六进制数,编写子程序将其转换为两位ASCII码,并将结果存至以Result开首的字节存储单元中。例如4AH的ASCII码为3441H,$F9的ASCII码为4639H。

……

ORG 0070H ; 用户变量一定要定位在Ram区域Hex_Byte DS.B 1

Result DS.B 2

……

ORG 0870H

ASCII_Table DC.B ‘0123456789ABCDEFG’; 常数表格、代码一定要定位在Flash区域

……

Hex_To_Ascii:

LDA Hex_Byte

AND #$F0 ; 取出高4位

NSA ; (A[3:0]:A[7:4])→A

TAX ; A→X

LDA ASCII_Table,X ; 查表,得高4位的ASCII码

STA Result ; 存高4位的ASCII码

LDA Hex_Byte

AND #$0F ; 取出低4位

TAX ; A→X

LDA ASCII_Table,X ; 查表,得低4位的ASCII码

STA Result+1 ; 存低4位的ASCII码

RTS

[例3.3] 设字节变量Num存放在Ram的0070H单元,取值范围为0T~9T,编写查表子程序,查出变量的立方值,并存入Cube字节变量中。

可以在Ram区存储一张立方表,通过查表来求立方值。由于9的立方值为729T=2D9H,故表中的每一个立方值需用2个字节来存储,则数值Num、数值Num的立方值的存储地址Addr_n和立方表的首地址Cube_Tab的关系为:

Addr_n=Cube_Tab+Num×2

代码段如下:

……

ORG 0070H ; 用户变量一定要定位在Ram区域Num DS.B 1

Res_Cube DS.B 2

……

ORG 1860H ; 常数表格、代码一定要定位在Flash区域Cube_Tab:DC.W 0000,0001,0008,0064,0125,0216,0343,0512,0729

……

Cube:LDX Num ; Num→X

LSLX ; X×2→X

LDA Cube_Tab,X ; 查表得立方值高位

STA Res_Cube

LDA Cube_Tab+1,X ; 查表得立方值低位

STA Res_Cube +1

RTS

查表技术是汇编语言程序设计的一个重要技术,通过查表避免了复杂的计算和编程,如查平方表、立方表、函数表、数码管显示的段码表等。需要注意的是,表格常数一定要定位到Flash区域才能正确实现查表功能,而不能把常数表格定位到RAM区域。查表运算有时还常和转移指令配合使

用,非常方便地实现散转功能。实现散转的具体做法是,在程序中定义一块连续存储单元作为跳转表,表中顺序存放各分支处理程序的跳转地址。各跳转地址在表中的偏移起始地址等于跳转表首地址加上它们各自的序号与所占字节数的乘积。

3.6.3.3软件延时程序

在MCU处理程序中,有时需要MCU什么都不做,而仅仅只拖延一段时间。延时功能既可通过MCU的定时器、计数器来实现,也可采用软件进行延时。通过A、H:X增减指令、空操作指令NOP 和BRN以及相应的转移指令,再利用循环程序结构,可以用它们方便地实现软件延时功能。

[例3.4] 设计一个延时10ms的延时子程序,已知MCU总线时钟频率为4MHz。

采用软件延时,延时时间与两个因素有关,一个是MCU总线时钟频率,一个是循环次数。由于MCU总线时钟频率为4MHz,故1个总线周期占用的时间为0.25us,10ms延时需要执行相当于40000个总线周期的指令。我们首先设计一个具有较小总线周期时延的子程序Re_cycle,然后再通

过多次循环调用此子程序来实现较长时延。

Re_cycle:

MOV #196T,Num ; 4个总线周期

DBNZ Num,* ; 5个总线周期

RTS ; 4个总线周期

Delay_10ms:

MOV #39T,Count ; 4个总线周期

Re_Call:BSR Re_cycle ; 4个总线周期

BRN $ ; 3个总线周期

DBNZ Count,Re_Call ; 5个总线周期

BSR Re_cycle ; 再延时4+988个总线周期

RTS ; 4个总线周期

上述Re_Cycle子程序延时4+5×196+4=988个总线周期;Delay_10ms延时子程序中的Re_Call 循环调用Re_cycle子程序39次,共延时39×(4+3+988+5)=39000个总线周期;Delay_10ms子程序总延时为4+39000+4+988+4=40000个总线周期,调用Delay_10ms子程序的指令BSR Delay_10ms 本身要占用4个总线周期。这样每调用Delay_10ms一次,便可实现40004个总线周期约10ms的延时。

HCS08系列MCU具有16种寻址方式,灵活使用这些寻址方式,可以方便、快速、高效地访问MCU的内部资源。不同的寻址方式具有不同的特点,应该从时间复杂度(指令执行总线周期即指令执行速度快慢)和空间复杂度(指令机器码长短)等方面加深理解。HCS08指令系统中,每条指令通常具有多种寻址方式,不同寻址方式的同种指令,其执行快慢和机器码长短有别,应该选用合适的寻址方式优化程序,充分提高其存储和执行效率。对于常用指令应该熟练掌握。编写汇编源程序按照一定的框架结构,可以使源程序清晰、易读、便于维护。学会简单算术/逻辑运算、查表、散转、软件延时等汇编程序设计方法。

图3-2 S1记录格式图

S-record 文件中的所有数值都是16 进制的。S-record 文件的类型有S0、S1或S9。长度域是记录中除类型和长度以外成对出现的16 进制数字的个数。地址域是内存中首数据字节的16 位地址。机器码域中每对16 进制数都代表了一个8 位的数,并且存储在内存中连续的单元里。校验和是一个8 位的数值,它等于S-record 文件中除了类型和校验和之外所有字节总和的补码。在加载S-record文件时,校验和用来检查数据的完整性和每个记录的正确性。

S123C000A47FA1619106A17A9202A0208187A130250DA1392308A1412505A14622014F86F6

S104C020819A

S9030000FC

图3-3 S19文件例子

可以比较图3-3中的S-record文件数值和代码列表中的目标码。源代码中用ORG指令将代码起始地址设为了$C000。

3.8思考与练习

3.1 指出下列指令的寻址方式

ADC 40H AND 0140H ADD 1240H

ASRX BIT $FF BEQ rel

BSET 2,00H DIV COM 20H,SP

CLC BRA rel CLI

CPX 120,SP MUL EOR ,X

LSLX MOV #00,00H MOV 00H,40H

MOV 40H,X+ MOV X+,50H PSHA

PULA NEGX LDA 40H,X

STA 240H,SP RTS JMP rel

SEI SEC SBC 200H,X

TAX SUB 30H,SP

3.2 将下列两组指令译成机器码,并计算两组机器码在Flash中各占用多少字节的程序存储空间,执行完这两组指令各需多长时间。设MCU总线时钟频率为4MHz。

(1)(2)

LDA #$FF MOV #$FF,PTAD

STA PTAD MOV #$FF,PTBD

STA PTBD MOV #%00001111,PTADD

LDA #%00001111 MOV #%00001111,PTBDD

STA PTADD

STA PTBDD

3.3 下列指令是否正确?请在错误指令后面的括号中打×并说明错误理由。

MOV A,00H MOV #0FF,A

MOV 140H,40H MOV 40H,140H

MOV #00,120H ASL 150H

CLR 200H,X DEC 120,SP

MOV 120H,X+ MOV X+,300H

NEG #FF NEG 100H

BSET 7,DDRA BCLR 0,120H

ROL 100,X JSR 200T,SP

PSH $40 PUL 140H

(思考﹕以下各指令是否正确?如有错,错在什么地方?

CLR $1030,X

CLR $1030,SP

MOV #$1030,$30

MOV #$30,$0130)

(思考:下列各指令是否正确?

MOV A,$40

MOV PORTB,$150

MOV $150,X

MOV X+,$10A)

3.4 IX、IX1、IX2三种寻址方式有何不同?

3.5 设SP=00FFH,A=0FFH,H:X=0000H,(0070H)=0FH,在下列程序段注释括号中填上执行结果。

LDX 70H,X ;H:X=(),(0070H)= ()

PSHX ; H:X=(),SP=(),(SP)=()

STA 70H ; (0070H)=(),A=()

PULA ; A=(),SP=()

3.6 试用两种方法编程实现135T×8T。

3.7 若要求解两个无符号数字变量Data1和Data2之差,并将结果存至Sub_Resul字节变量中,试编写子程序实现此功能。

3.8 试编写查表子程序,求0T~10T的平方值。

3.9 编写子程序,入口参数N为0H~FH,出口参数N_LED为N所对应的7段LED显示码。如N=0H,则N_LED=3FH;N=1H,则N_LED=06H。

3.10 设MCU总线时钟频率为4MHz,编写软件延时100us的子程序并作好注释。

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

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

实验四循环结构汇编语言程序设计 一、实验目的 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. 了解汇编程序、连接程序、DOS系统装入和返回功能。掌握MASM、LINK的应用。 3. 掌握汇编语言程序结构,熟悉汇编语言的一些常用语法规则,初步掌握汇编语言的开发过程。 4. 掌握DOS系统功能调用的基本方法。 二、实验原理 通过调用(INT 21H)表中的01h号功能号从键盘输入一个字符并回显到视频显示器上 三、实验内容及算法流程、源程序清单 实验内容:编写程序,从键盘输入一个字符并回显到视频显示器上。 源程序清单: 实验1.asm 实验1.obj 实验1.exe code segment assume cs:code start: mov ah,1 int 21h mov ah,4ch int 21h code ends end start 实验二:编写程序,显示一个字符Q 一、实验目的 1、学习汇编语言源程序的编辑、汇编、连接、运行全过程。 2、了解汇编程序、连接程序、DOS系统装入和返回功能。掌握MASM、LINK的应用。 3、掌握汇编语言程序结构,熟悉汇编语言的一些常用语法规则,初步掌握汇编语言的开发过程。 4、掌握DOS系统功能调用的基本方法。 二、实验原理 通过调用(INT 21H)表中的02h号功能显示输出一个字符Y。

三、实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释) 实验内容: 编写程序,显示输出一个字符Q。 源程序清单: 实验2.asm 实验2.obj 实验2.exe code segment assume cs:code start: mov ah,02 mov dl,'Q' int 21h mov ah,4ch int 21h code ends end start 实验三:编写程序,在屏幕上显示输出“I love DOTA” 一、实验目的 1、学习汇编语言源程序的编辑、汇编、连接、运行全过程。 2、了解汇编程序、连接程序、DOS系统装入和返回功能。掌握MASM、LINK的应用。 3、掌握汇编语言程序结构,熟悉汇编语言的一些常用语法规则,初步掌握汇编语言的开发过程。 4、掌握DOS系统功能调用的基本方法。 二、实验原理 考察通过调用(INT 21H)表中的0ah号功能显示输出字符串 三、实验内容及算法流程(流程框图)、源程序清单(要求在重要语句后写出注释) 实验内容: 编写程序,在屏幕上显示输出‘I love DOTA。 源程序清单: 实验3.asm 实验3.obj 实验3.exe data segment buf db 'I love DOTA.$'

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

微机原理实验报告 实验名称汇编语言程序设计 一、实验目的 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 + 第1页

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

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

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

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

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

2位数计算器程序-汇编语言课程设计

信息学院课程设计题目:2位数计算器程序设计 __ 姓名: __ _____ 学号: ____ ___ 班级: 课程:汇编语言 ________ 任课教师:侯艳艳 ____ 2011年12月

课程设计任务书及成绩评定

目录 摘要 (2) 1.设计目的………………………………………………………………………………………………?2 2.概要设计………………………………………………………………………………………………?3 2.1系统总体分析…………………………………………………………………………?3 2.2程序流程图 (3) 3.详细设计......................................................................................................? (4) 3.1主程序及子程序说明 (4) 3.2程序代码编写 (4) 4.程序调试 (6) 4.1运行界面分析 (6) 4.2算法的分析 (6) 4.3调试过程及分析 (6) 5.心得体会 (7) 5.1设计体会...................................................................................................? (7) 5.2系统改进...................................................................................................? (7) 参考文献 (8)

汇编语言程序设计报告模板总结模板计划模板.docx

《汇编语言》课程设 计报告 专业计算机科学与技术 学生姓名张竹青 班级Z计算机 151 学号1560704132 任课老师王志宏 完成日期2017年12月29日

目录 1 概述 (1) 1.1 设计目的 (1) 1.2 设计内容 (1) 2 系统需求分析 (1) 2.1 系统目标 (1) 2.2 主体功能 (1) 2.3 开发环境 (2) 3 系统概要设计 (2) 3.1 系统的功能模块划分 (2) 3.2 系统流程图 (3) 4 系统详细设计 (4) 4.1 界面设置 (4) 4.2 选择算法设置 (4) 4.3 十进制转换设置 (4) 5 测试 (5) 5.1 测试方案 (5) 5.2 测试结果 (5) 6 小结 (6) 参考文献 (7)

实现加减乘除四则运算的计算器 1 概述 1.1 设计目的 使用汇编语言,通过实现简单计算器的一般功能,如加、减、乘、除的计算来 了解并掌握 DOS系统功能的调试方法,学会画出编程的具体流程图,同时在程序 设 计过程中熟悉各种指令的应用和意义,以及如何进行上机编辑、汇编、连接和调试。 本课程设计也是对课堂上所学的基本理论知识和程序设计方法的巩固和深化, 提高我们的编程思想、分析问题和解决问题的综合应用能力,能够编写较复杂的应 用程序,最终达到熟练地掌握结构化程序设计技术和编写汇编源程序的基本方法的 目的。 1.2 设计内容 设计一个能实现加、减、乘、除计算的程序,要求该程序接受从键盘输入的十 六进制数,当程序执行时需在文件名后直接跟上计算表达式,每当读到一个有效的 表达式时对表达式进行相应的运算后,输出用十进制数或十六进制数表示的运算结果,如在命令提示符下执行结果如下: c:\tasm>js 3+2 5 2系统需求分析 2.1 系统目标 本次汇编语言课程设计的最终目的是要实现一个简单的加减乘除四则运算的 计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则 运算。具体功能如下: (1)调用中断把要做运算的两个数输入到屏幕上并用程序将他们存储起来 (2)判断用户所输入的运算是四则运算中的哪一种运算 (3)判断运算过程中是进位还是借位 (4)选择用何种输出方式 (5)实现清屏 2.2 主体功能 要求该程序接受的是十六进制数,执行相应的计算后,计算结果以十六进制数 或十进制数输出。本设计的使用说明如下: (1)按照提示选择数字 1,2,3,4 (2) 1: ADD 加法 (3) 2: SUB 减法 (4) 3: MUL 乘法

汇编语言程序设计大纲

《汇编语言程序设计》课程教学大纲 课程编号: 0910218 课程名称:汇编语言程序设计 英文名称:Assemble Language Programming 课程类型: 专业基础课 总学时:48 讲课学时:48 实验学时:0 学分:3 适用对象: 计算机科学与技术、网络工程、信息安全及相关专业 先修课程:数字逻辑与数字系统设计、数据结构 一、课程性质、目的和任务 汇编语言程序设计是计算机科学与技术、网络工程、信息安全等专业的必修课,是进一步学习操作系统、编译、接口与通信等专业课的基础。通过本门课程的学习,学生可以加深对计算机工作原理的理解,有助于促进后续课程的学习。同时,汇编语言作为一种计算机语言工具,对于学生将来从事计算机的研究与应用是必需的,有助于提高学生的程序设计能力。 二、教学基本要求 通过本课程的学习,要求学生了解或掌握:模型机的基本结构、工作原理、寻址方式及指令系统,用汇编语言编写顺序、分支、循环、子程序、宏汇编语言程序等各种程序的技术。学会编写输入/输出程序和中断服务程序,掌握利用系统的功能调用进行程序设计的方法。掌握汇编过程和汇编程序的原理,能够正确熟练地使用编辑、汇编、链接和调试等各种软件工具。 三、教学内容及要求 1. 模型机结构。模型机系统的概述,存储器、中央处理器及外部设备与接口的基本概念、工作原理及编程方法。 2. 指令系统与寻址方式。模型机的寻址方式,机器语言指令格式,汇编语言指令系统。 3. 汇编语言程序格式。汇编程序的功能,伪操作,汇编语言程序格式。 4. 循环与分支程序设计。程序流程图的画法;分支与循环程序的设计思想与方法,重点介绍双重循环的程序设计和通过比较——判断、跳转表等方法进行分支程序设计。 5. 系统功能调用。介绍操作系统提供的BIOS、DOS等系统功能调用,学习通过功能调用进行程序设计的方法。 6. 子程序设计。子程序的设计方法,嵌套与递归子程序,堆栈在其中的应用。 7. 高级汇编语言技术。宏汇编、重复汇编、条件汇编的基本概念及其程序设计。 8. 输入输出及中断程序设计。I/O设备的数据传送方式,程序直接控制I/O方式和中断程序设计。 9. 软件工具。汇编程序、文本编辑程序、链接程序、调试程序的基本功能及汇编语言程序编写、调试、运行中的使用方法。 四、实践环节 见“汇编语言程序设计综合实验”。

汇编语言程序设计课程教学大纲.

《汇编语言程序设计》课程教学大纲 二、课程性质与教学目标 《汇编语言程序设计》是计算机科学与技术专业一门重要的基础课,是必修的核心课程之一,是"操作系统"和"微机原理和接口技术"等其它核心课程必要的先修课,而且对于训练学生掌握程序设计技术,熟悉上机操作和程序调试技术都有重要作用。因此该课程在整个教学计划中占有重要地位。 本课程的目的和要求是: 1、应使学生掌握8086/8088宏汇编语言程序设计的基本方法和技巧,能够运用8086/8088宏汇编语言编写应用程序。提高学生分析问题、解决问题的能力以及实际动手能力。 2、应使学生基本掌握汇编语言程序设计的基本理论,方法和技巧,正确地使用结构化、模块程序设计技术。注意培养学生良好的程序设计风格。 3、应使学生比较熟练地使用调试工具DEBUG调试8086/8088汇编语言程序。注意提高学生的调试能力。 4、注意与前后相关课程的关系。使学生对前导课程有进一步的理解,同时为学习后继课程打好基础。 三、教学内容及基本要求 第一单元基础知识 [知识点] 汇编语言的基本概念、数据的表示和类型、几种基本的逻辑运算、Intel 8088/8086微处理器基本概念、存储器分段和地址的形成、

[教学内容] 1.以二进制存在的机器语言。计算机内部数的存储及运算也都是采用二进制。 2.制数的值由1所在位置的权来确定。 3.进制是一种很重要的短格式记数法,它把二进制数每4位分成一组,分别用0-9和 A-F来表示0000-1111。反之,16进制数的每一位用四位二进制表示,就是相应的二进制数。 4.十进制转换为二进制的方法主要有降幂法和除法。计算机十化二程序中采取下面的算法: 5.标志位OF=1表示带符号数的运算结果无效。CF=1表示无符号数运算结果无效。 6.计算机中的字符数据用ASCⅡ码表示,一个字符在存储器中占用一个字节(8位二进制码)。 7.BCD码是一种用二进制编码的十进制数,又称二-十进制数或8421码,它用4位二进制数表示一个十进制数码。BCD码有压缩和非压缩两种格式,压缩的BCD码用4位二进制数表示一个十进制数位,如95 表示为1001,0101。非压缩的BCD码用地位二进制数表示一个十进制数位。如95 表示为00001001 00000101。 8.两种类型的内部存储器是ROM(只读存储器)和RAM(随机存储器)。存储器按字节编址,存储器地址一般用16进制的无符号数表示。 9.字数据在存储器中存放的顺序为高地址字节放高8位,低地址字节放低8位。 10.AX、BA、CA、和DX是通用寄存器,每个通用寄存器可作两个8位寄存器使用(如AH和AL)。 11.一个20位的物理地址可表示成段地址:偏移地址。计算存储器单元的物理地址,可将段地址乘以10H,再加上偏移地址。 物理地址=(段地址×10H)+偏移地址 12.段寄存器CS、SS、DS和ES分别寄存代码段、堆栈段、数据段和附加段的段地址。 13.变址寄存器SI和DI一般指示数据段内单元的地址,有时也可作为数据寄存器用。 14.16位的标志寄存器个包括6个状态标志(SF、ZF、PF、CF、AF、OF)和3个控制标志(DF、IF、TF)。(CF、AF、SF、ZF和OF反映了算术运算以及移位、循环、逻辑等操作的结果状态。 [重难点] 1.教学重点 1.汇编语言的基本概念 (1)机器语言,汇编语言,汇编程序,汇编语言源程序,目标程序,目标代码,可执行程序。 (2)汇编语言的特点 (3)为什么要学习汇编语言,汇编语言的应用场合。 2.数据的表示和类型 (1)数值数据的表示,符号扩展,数值数据的表示范围,BCD码,不同数据之间的转换。 (2)非数值数据类型:字节、字、双字等。 3.几种基本的罗辑运算 “与”、“或”、“非”、“异或” 4.Intel 8088/8086微处理器基本概念 (1)8086/8088基本结构:执行单元EU,总线接口单元BIU,指令的执行次序。

《汇编语言程序设计》学习心得自主学习报告.doc

自主学习报告书 题目:学习汇编语言程序设计报告学习课程:《汇编语言程序设计》姓名: 专业: 学号: 福建工程学院国脉信息学院教务处制 二○一二年六月

学习汇编语言程序设计报告书 由于实际工作中对汇编语言程序设计应用较多,在业余时间我自主学习了北京大学出版社出版的《汇编语言程序设计》一书。这一本书介绍了80x86汇编语言程序设计的方法和技术,共分为两个部分:第一部分介绍80x86cpu的编程结构,汇编语言程序的格式和伪指令,80x86cpu的寻址方式和指令系统;第二部分深入讨论分支程序、循环程序、子程序基本程序设计方法,以及以中断为主的i/o程序设计,其中包括宏指令、多模块连接技术、汇编语言与高级语言的混合编程、dos和bios提供的常用中断调用,以及文件系统等内容。 通过本书,我深入的掌握了汇编语言的编程方法、思路和技巧,并对计算机的底层编程有一定认识;还对计算机底层运行程序的机制及计算机的工作原理有了深入的了解。 在学汇编的过程中,最重要的就是要掌握汇编语言中的指令的一些基本用法。当然要能够真正的了解其中的内涵,这样在实际的编程中也能够像运用高级语言一样灵活的变通。汇编语言作为一种低级程序设计语言,既然是低级所以应该是最底层的,与计算机内部的结构联系应该联系很密切,而且我在学习中也深刻的了解到了这一点。比如说后来学到的寄存器、中断、还要各种寻址方式以及进栈出栈,好多的就是设计到计算机硬件。前面几章都是对计算机内部结构和一些常用的指令以及寻址方式的寻址方式。到后面学到子程序以及宏的作用才真正发现到其实跟高级语言差别不大。以C语言为例,C语言也

是由一个一个的函数组成的。没想到想汇编这样的低级语言也可以这样。在汇编语言的子程序和宏中,我个人更感觉宏的运用更像我们高级语言的子函数,通过定义好的宏,我们在后面直接调用就可以了。尤其是宏带参数的宏跟C语言中带参数的函数真的很像,根据参数的不同调用宏就能得到不同的结果。而汇编中的子程序没有这个传递参数这个功能。在调用子程序的时候要注意各寄存器中的内容。子程序是在程序执行期间由主程序调用的,它只占有它自身大小的一个空间,他不仅是源程序级别简化,形成的目标代码较短;而宏调用则是在汇编期间展开的,每调用依次进把宏定义体展开一次,它是源程序级的简化。因而它占有的存储空间与调用次数有关,调用次数越多则占有的存储空间越大。如果宏调用次数较多的话,则其空间上的开销也是应该考虑的因素 汇编程序给人感觉最烦的就是好多程序的结果不能直接通过运行EXE文件显示出来,而更多的是经过DEBUG单步调试才能看到其内在变化,看是否正确。汇编程序不像其他的高级语言一样需要编译器,而是直接的就能在记事本上编写,然后进行汇编和连接就可以了。学习汇编调试,关键就是要掌握DEBUG的运用。汇编程序把汇编语言翻译成机器语言的过程称为汇编。是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。比机器语言易于读写、调试和修改,同时具有机器语言全部优点。但在编写复杂程序时,相对高级语言代码量较大,而且汇编语言依赖于具体的处理器体系结构,不能通用,因此不能直接在不同处理器体系结构之间移植。

《汇编语言程序设计》实验报告(一)

《汇编语言程序设计》实验报告(一) 姓名学号系别班级 指导教师实验日期 课程名称《汇编语言程序设计》同组实验者 一、实验名称:实验一汇编程序和连接程序的使用 二、实验目的: 1. 熟悉汇编语言的上机环境; 2. 学习EDIT,MASM,LINK程序的使用; 3. 掌握建立、汇编、链接、运行汇编语言程序的过程。 三、实验类型:验证 四、实验材料、工具、或软件 多媒体计算机、WINDOWS XP系统或纯DOS系统、MASM6.11以上版本或汇编语言程序设计实验集成环境。 五、实验要求 1. 编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示‘MATCH’,若不相同则显示‘NO MATCH’。用串比较功能来完成程序所要求的功能。 2.完成课堂例题,并用DEBUG运行,观察结果。 六、试验内容与步骤:(附上必要的调试过程及运行结果截图,可加附页) 试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示‘MATCH’,若不相同则显示‘NO MATCH’。用串比较功能来完成程序所要求的功能。上机步骤如下: 1、调用https://www.360docs.net/doc/f83888282.html,程序建立汇编语言源程序.ASM 建立好的源文件以EX_1.ASM为文件名存盘 DATA SEGMENT STRING1 DB 'Visual C++ ' STRING2 DB 'Visual Basic' COUNT EQU $-STRING2 MESS1 DB 'MATCH!’,13,10,’$' MESS2 DB 'NO MATCH!’,13,10,’$' DATA ENDS code segment assume cs:code,ds:data,es:data main proc far start: push ds

汇编语言程序设计

汇编语言程序设计 实验报告 实验名称上机过程及顺序结构与分支结构程序设计实验班级 学号 姓名 日期2017年10月26号 成绩 评阅人 软件学院

一、实验目的与意义 理解并熟练掌握汇编语言程序设计过程中的编辑、汇编、链接和调试等各个步骤,提高对汇编课程内容的理解和汇编语言的掌握,通过上机练习加深对课程内容的理解和掌握。通过汇编语言编制的程序上机调试、运行检验程序设计是否正确。熟悉和掌握编辑、汇编、连接和调试四个实用程序的使用方法,掌握调试程序中的几个常用命令的使用方法。熟悉其基本的指令操作,debug调试操作命令以及分支结构、顺序结构和循环结构的程序设计。 二、实验环境 操作系统:Microsoft Windows8 集成环境:Masm for Windows 上机地点:信息楼B405教室 三、实验的预习内容 预习的主要内容: 1. 使用DEBUG命令的方法; 2. 熟悉掌握从理论上定义数据的类型(即DB,DW,DD,); 3. 分支结构和顺序结构的步骤以及相关的指令; 4. 常用的标志位状态及相应的作用; 实验思路: 在对题目进行分析后,分析出解题方法,并做出与实验思路相对应的程序框图。依照程序框图的内容输入相对应的代码,最终在调试代码后,发现并解决一系列的汇编语言错误。进一步优化算法。实验之前必须了解十进制、十六进制和ASCII码之间的转换。预习查表法相关命令,掌握顺序程序的结构,从键盘输入数据的命令及显示到屏幕上的命令。 实验一: 题目1:将程序编辑、汇编、连接并通过集成环境中的debug调试,观察运行结果;用E命令修改指定地址的数据,再用G命令执行程序查看变化,用A 命令将加法指令修改成减法指令,再将其编译运行,查看寄存器值变化的异同。 题目2:分别用DB、DW和DD数据段9H,0FAH,41H,27H,编译链接之后生成exe文件,再用debug的r命令找到数据段地址,用d命令指定数据段地址,观察汇编后在机器内部对应的存储情况。 实验二: 先设置数据段地址和堆栈段地址;设置堆栈段指针;读取一个字符然后存储在AL中;用BX来存储AL中字符对应的数值;将BX中的值作为偏移地址;并在数据段中查找对应字符串;最终输出结果结束程序。 实验三: 先初始化数据段地址与堆栈段地址;设置堆栈段指针;然后将数据段中的data1放入AL中;读取数据段中的data2并判断data2是否大于0;然后读取数

《汇编语言程序设计》教案

授课题目第七章更灵活地定位内存地址的方法课时安排4学时一、教学目的 通过本次课程学习,让学生 1.掌握and与or指令 2.掌握大小写之母的转换 3.掌握SI和DI寄存器 4.掌握内存地址的多种定位方法 二、教学重点 1.and与or指令 2.定位内存地址的多种方法 三、教学难点 1.灵活运用and与or指令 2.灵活运用地址定位方法 四、教学方法(请打√):讲授√□ 讨论□ 课堂练习√□ 实验□ 其他□ 五、教学手段(请打√):多媒体√□ 模型□ 实物□ 挂图□ 音像□ 其他□ 六、教学内容及过程 1. 课程引入 (约 5 分钟) 我们已经学过了用bx来保存内存的偏移地址,也可以用cs:[idata]的方法来访问内存单元,还有没其他的内存地址定位方法? 我们已知一组由英文字母组成的字符串,如何将这些字符进行大小写的转换? 2. and和or指令 (约15分钟) (1)and指令 and指令是逻辑与指令,按位进行与运算。 (2)or指令 or指令是逻辑或指令,按位进行或运算。 3. 关于ASCII码 (约10分钟) 编码方案,就是一套规则,它约定了用什么样的信息来表示现实对象。ASCII码就是一种编码方案。 4. 以字符形式给出的数据 (约10分钟) 汇编程序中,用 ‘……’的方式指明数据是以字符的形式给出的,编译器将把它们转化为相对应的ASCII码。

Db表示定义字节型数据,即define byte。 例题分析。 5 大小写转换的问题 (约25分钟) 大写字母与小写字母的ASCII码相差20H,因此可以利用这个规律进行大小写转换。但是前提条件是需要知道该字母是大写字母还是小写字母。 例题分析。 目前我们尚未学习判断字母是大小写的问题,那么如何应用学过的知识进行大小写字母的转换。 就ASCII码的二进制形式来看,除第5位(位数从0开始计算)外,大写字母和小写字母的其他各位都一样。大写字母ASCII码的第5位(位数从0开始计算)为0,小写字母的第5位为1。因此就可以利用大小写字母的这个特点以及or指令和and指令进行大小写转换。 6 [bx+idata] (约10分钟) [bx]指明一个内存单元。 [bx+idata]也指明一个内存单元,它的偏移地址为(bx)+idata。 mov ax,[bx+200]也可以写成mov ax,[200+bx]、 mov ax,200[bx]、mov ax,[bx].200问题7.1。 7 用[bx+idata]处理数组 (约15分钟) (1)利用[bx+idata]的方式,就可以用更简化的方法来编写代码。 (2)例题分析。 (3)[bx+idata]与高级语言的比较。 [bx+idata]的方式为高级语言实现数组提供了便利机制 8 SI和DI (约15分钟) (1) SI和DI寄存器 SI和DI与bx功能相近的寄存器,SI和DI不能够分成两个8 位寄存器来使用。 (2)例题分析。 (3)问题7.2分析 用ds:si指向源字符串的地址,ds:di 指向复制的目的地址。 问题7.2的简化。利用[bx(si或di)+idata]可以进一步简化代码。 9 [bx+si]和[bx+di] (约15分钟) (1)[bx+si]和[bx+di]的含义 [bx+si]和[bx+di]的含义相似,[bx+si](或[bx+di])表示一个内存单元,它的偏移地址为(bx)+(si)(即bx中的数值加上si中的数值)。 (2)问题分析 10 [bx+si+idata]和[bx+di+idata] (约20分钟)

《汇编语言程序设计》学习总结与心得

《汇编语言程序设计》学习总结与心得 其实说实话在学这门课之前自己对汇编语言一点都不了解,只知道它也是一种语言,而且是一门很少用的语言,可能很多人都是这么想的,或许在学这门课之前不少同学也有和我当初一样的思想,大概学学就好,反正以后很少能用到,毕竟现在高级语言这么发达,而且运用起来灵活易懂,像汇编这种低级语言又难又不易学。或许老师是知道我们之前有这种想法,所以第一节课就跟我们讲解了一下了汇编语言在当今这种高速发展的社会的作用和地位,让我们能够正确的认识汇编语言的精华,正确对待这么课。而且还在课堂了百度了汇编语言的招聘信息,或许这才是使我们正确对待汇编的最直接的原因,关系到我们以后的出路,或许我们学好了一门汇编,以后出去找工作的机会不就更广了吗?正是在这种动力的驱使下我才对汇编语言有了一个新的认识,而且决定要把它学好。 在后来的学习中我发现其实汇编不是很难学,其实学汇编就像学其他的高级语言一样,高级语言要求对语言非常了解。在学汇编的过程中,我们最重要的就是要掌握汇编语言中的指令的一些基本用法。当然要能够真正的了解其中的内涵,这样我们在实际的编程中也能够像运用高级语言一样灵活的变通。汇编语言作为一种低级程序设计语言,既然是低级所以应该是最底层的,与我们计算机内部的结构联系应该联系很密切,而且在我们学习中也深刻的了解到了这一点。比如说后来学到的寄存器、中断、还要各种寻址方式以及进栈出栈,好多的就是设计到计算机硬件。前面几章都是对计算机内部结构和一些常用的指令以及寻址方式的寻址方式。到后面学到子程序以及宏的作用才真正发现到其实跟高级语言差别不大。以C语言为例,C语言不也是由一个一个的函数组成的吗?没想到想汇编这样的低级语言也可以这样。在汇编语言的子程序和宏中,我个人更感觉宏的运用更像我们高级语言的子函数,通过定义好的宏,我们在后面直接调用就可以了。尤其是宏带参数的宏跟C语言中带参数的函数真的很像,根据参数的不同调用宏就能得到不同的结果。而汇编中的子程序没有这个传递参数这个功能。在调用子程序的时候要注意各寄存器中的内容。子程序是在程序执行期间由主程序调用的,它只占有它自身大小的一个空间,他不仅是源程序级别简化,形成的目标代码较短;而宏调用则是在汇编期间展开的,每调用依次进把宏定义体展开一次,它是源程序级的简化。因而它占有的存储空间与调用次数有关,调用次数越多则占有的存储空间越大。如果宏调用次数较多的话,则其空间上的开销也是应该考虑的因素 汇编程序给人感觉最烦的就是好多程序的结果不能直接通过运行EXE文件显示出来,而更多的是经过DEBUG单步调试才能看到其内在变化,看是否正确。在初次接触汇编的几个汇编工具时,有一种神奇的感觉,因为汇编程序不像其他的高级语言一样需要编译器,而是直接的就能在记事本上编写,然后进行汇编和

汇编语言程序设计基本方法

第七章汇编语言程序设计基本方法1.教学目的:掌握微型汇编语言程序分析和设计方法 2.教学要求: ①熟悉汇编语言程序设计的基本步骤。 ②掌握程序流程图的使用,会利用其分析问题。 ③掌握汇编语言的顺序、分支、循环程序的设计。 ④了解实模式下80386及其后继机型的汇编语言的程序设计3.教学重点: ①利用流程图分析问题。 ②顺序、分支、循环程序的设计。 4.掌握难点: ①分支程序设计 ②循环程序设计 5.教学进程安排:P137~P168 6.教学方法: 课堂讲授 7.教学内容摘要: 7.1 汇编语言程序设计概述 7.1.1 汇编语言程序设计的基本步骤 1.分析问题,抽象出描述问题的数学模型 2.确定算法 3.绘制流程图 4.分配存储空间和工作单元 5.编写程序 6.静态检查 7.上机调试运行 7.1.2 程序流程图 1. 用自然语言表示算法 2. 流程图的组成 ⑴执行框(矩形框) ⑵判别框(菱形框) ⑶开始框和终止框 ⑷指向线 ⑸连接点 3. 三种基本结构和改进的流程图 ⑴传统流程图的弊端 ⑵三种基本结构 ①顺序结构 ②选择结构 ③循环结构

图7.4 顺序结构图图7.5 选择结构图 4. 结构化程序设计的特点 ⑴只有一个入口 ⑵只有一个出口 ⑶各功能框均可执行 ⑷结构中无死循环 7.2 顺序程序设计 顺序结构程序是最简单的程序,在顺序结构程序中,指令按照先后顺序一条条执行。 【例7-3】将—个字节压缩BCD码转换为两个ASCII码。 7.3 分支程序设计 7.3.1 分支程序的结构形式 分支程序结构可以有两种形式,如图7.6 (1) IF_THEN_ELSE结构 (2) CASE结构 7.3.2 分支程序设计方法 程序的分支一般用条件转移指令来产生,利用转移指令不影响条件码的特性,连续地使用条件转移指令使程序产生了多个不同的分支,而对于数组中的每一个数,它只能是多个分支中的某一个。 【例7-5】在附加段中,有一个按从小到大顺序排列的无符号数数组,其首地址存放在DI 寄存器中,数组中的第一个单元存放着数组长度,在AX中有一个无符号数,要求在数组中查找(AX),如找到,则使CF=0,并在SI中给出该元素在数组中的偏移地址;如未找到,则使CF=1。 【例7-6】折半查找算法程序 7.3.3 跳跃表法

汇编语言编程实验报告

汇编语言编程实验报告 学号: 姓名: 成绩:

目录 一、实验一: ................................................... 错误!未定义书签。 二、实验二: (4) 三、实验三: (8) 四、实验四: (10) 五、实验五: ................................................... 错误!未定义书签。 六、实验六: (19) 七、汇编实验总结 (23)

实验一 一.实验题目 【汇编语言补充作业T20】编写完整程序,利用DOS系统功能调用,从键盘输入一个字符串,并将该字符串从屏幕上换行后并输出。 二.程序流程及思路 实现字符串输入,需要分成三个步骤: 1、在数据段中定义一个缓存区为存放字符串做准备; 2、DOS系统功能调用0AH号子功能,(DS:DX)= 输入缓冲区首址; 3、在输入的字符串尾加上‘$’字符,以作为输出结束条件。 实现字符串输出,则需要注意的问题是: 1、缓冲区第三个字节才开始存放输入的字符,前两个字节分别存放缓冲区长度 和字符串实际字符数; 2、输出回车换行可利用字符串:CR DB 0AH,0DH,’$’。 三.源程序清单 DATA SEGMENT N EQU 50 MAXLEN DB N ;缓冲区字符的最大长度 ACTLEN DB ? ;实际字符个数 STRING DB N DUP(?) ;字符空间 CR DB 0AH,0DH,'$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX LEA DX,MAXLEN MOV AH,0AH INT 21H ;字符串输入 MOV AH,09H LEA DX,CR INT 21H ;回车换行 MOV BL,MAXLEN+1 ;取实际的字符长度 MOV BH,0 LEA SI,MAXLEN+2 ;取字符开始的首地址

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

汇编语言程序设计 学生姓名:学号: 学院: 专业: 指导教师: 2011年 11 月 27日

实验三循环程序设计 一.实验目的 1.学习调试程序,查找逻辑错误; 2.掌握循环程序设计的方法; 3.掌握正确分配与使用寄存器。 二.实验内容与要求 题目1:数组中是一组无符号数,将最小数放在M单元中,经过汇编后,形成.EXE文件,先用G=0命令执行程序,用-D命令查看M单元的内容,会发现结果不正确。用单步执行命令T查找程序中的逻辑错误。DSEG SEGMENT MSG DB 13, 15, 7, 25, 24 M DB ? DSEG ENDS CSEG SEGMENT ASSUME CS: CSEG, DS: DSEG START: MOV AX, DSEG MOV DS, AX MOV CX, 4 MOV AL, MSG MOV SI, OFFSET MSG+1 L1: CMP AL, [SI] JB NEXT MOV AL, [SI] NEXT: LOOP L1 MOV M, AL MOV AX, 4C00H INT 21H CSEG ENDS END START (1)程序说明:这个程序的目的是要在13, 15, 7, 25, 24中找到最小数,并且放到M单元中。

(2)调试说明:运行无问题 (3)错误问题:结果中M单元的内容是错误的,此时M为13,但真实值应为6 解决办法:该程序的循环是一个死循环,无法将每个数都进行比较,因此,需要每次循环时地址+1才能将每个数进行比较,所以需要在 循环上加“INC SI”。 (4)修改后程序及运行结果: DSEG SEGMENT MSG DB 13, 15, 7, 25, 24 M DB ?

汇编语言程序设计考试大纲

汇编语言程序设计考试大纲 -、课程性质及其设置目的和要求 (-)课程的性质、地位与任务 汇编语言程序设计课程在高等教育自学考试计算机及应用专业(专科)考试计划中是一门专业基础课程,是为培养计算机应用专科人才的需要而设置的。 本课程的任务是为《微型计算机及其接口技术》、《操作系统概论》等后继课程提供必要的汇编语高及程序设计的基础知识。对训练应考者掌握程序设计技术,熟悉上机操作和程序调试技术都有重要作用。为从事计算机的开发应用提供了强有力的编程工具。 (二)本课程的基本要求 通过本课程的学习要求应考者: 1.系统地获得计算机(以8086CPU的微型机作为典型机)指令系统的常用指令及寻址方式的概念、功能、书写格式及其在编程中的应用。 2.系统地获得汇编语言语句、源程序的书写格式和规定,伪指令语句的概念、功能、书写格式,宏指令定义、调用及其在编程中的应用。 3.系统地获得汇编语言程序的基本结构形式及其程序设计的基本方法和技巧。 4.熟练掌握汇编语言程序的上机调试和运行。 (三)本课程与有关课程的联系 1.有关数制、二进制算术运算和逻辑运算等知识,应在先修课程《模拟电路与数字电路》、 《计算机组成原理》中学过。 2.有关输人/输出、中断、接口电路及其编程,本课程不作介绍,全部列入“微型计算机及其接口技术"课程中。二、课程内容与考核目标 第l章基础知识 (-)课程内容

1.计算机系统基本组成 2.8086汇编语言编程的硬件模型 3.汇编语言程序设计的特点和作用 (二)学习目的和要求 本章总的要求是:熟练掌握有关计算机系统的基本概念、基本组成。熟练掌握8086汇编语言编程的基本硬件模型。理解学习汇编语言程序设计的目的,了解汇编语言程序设计的特点和作用。 本章的知识点中,重点是8086汇编语言编程的硬件模型。 (三)考核知识点和考核要求 1.计算机系统基本组成。应达到“识记”的层次。 1.1有关计算机的基本概念和基本组成。 2. 8086汇编语言编程的硬件模型,应达到“综合应用”的层次。 2.l 8086微处理器内部数据寄存器组和段寄存器组的各寄存器名称、符号、位数和功能,指令寄存器IP的位数和功能。 2.2 8086的程序状态字寄存器PSW的状态标志位和控制标志位的名称、符号和功能,状态标志的状态符号的表示。 2.3 8086存储器的组织形式和特点,存储器地址的分段,存储单元物理地址的形成方法。 3.汇编语言程序设计的特点和作用,应达到“识记”的层次。 3.1学习汇编语言程序设计的目的和意义。 3.2汇编语言程序设计的特点和作用。 第2章 8086的寻址方武和指令系统 (-)课程内容 1. 寻址方式的定义 2. 与数据有关的寻址方式 3. 与转移地址有关的寻址方式 4. 指令和指令系统的定义

汇编语言程序设计教学大纲

汇编语言程序设计教学大纲 课程概述 “汇编语言程序设计”是继“高级语言程序设计”之后的又一门计算机语言程序设计课程,但讲解的是面向处理器的低级语言。该课程一方面加强学生的高级语言编程能力;另一方面配合“计算机组成原理”和“微机原理及接口技术”课程,从软件角度理解计算机工作原理;同时,还作为自动控制等与硬件相关应用领域的程序设计基础,以及为“嵌入式系统”、“操作系统”、“编译原理”等课程提供基础知识。 本课程以Intel 80x86指令系统和微软MASM展开汇编语言程序设计方法。课程要求学生系统学习80x86整数指令系统、进一步理解计算机工作原理;要求学生掌握汇编语言源程序语句和格式,能够利用顺序、分支、循环和子程序等结构解决常规问题。本课程配有上机实践环节,要求学生具有阅读、编辑、汇编和调试汇编语言程序的能力。 授课目标 “汇编语言”课程主要基于32位Windows控制台,以IA-32处理器常用指令和微软MASM展开汇编语言程序设计方法。 编程实践以普通32位PC机为唯一硬件条件,结合MASM开发软件包进行。 课程从开发环境的熟悉、MASM开发方法的练习、开发过程的熟练掌握,逐步掌握常用指令应用、顺序、分支、循环、子程序的编程。 课程大纲 第1周汇编语言基础 1-1 硬件组成 1-2 程序格式 1-3 开发过程 第1周测试 第2周数据表示 2-1 常量表达 2-2 变量定义

2-3 变量应用 第2周测试 第3周数据寻址 3-1 立即数寻址 3-2 寄存器寻址 3-3 存储器寻址 第3周测试 第4周通用数据处理指令4-1 数据传送类指令 4-2 算术运算类指令 4-3 位操作类指令 第4周测试 第5周顺序程序结构 5-1 移位实现乘法 5-2 自然数求和 第5周测试 第6周分支程序结构 6-1 转移指令 6-2 单分支结构 6-3 双分支结构 第6周测试 第7周循环程序结构

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

循环结构汇编语言程序设 计实验报告 实验四循环结构汇编语言程序设计 一、实验目的 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后,调试程序

相关文档
最新文档