汇编语言程序结构
汇编语言设计实践:第4部分 基本汇编语言
4.1 汇编语言语句种类及其格式
汇编语言的程序格式
• 完整的汇编语言源程序由段组成,段由指令语句与 伪指令语句构成
• 一个汇编语言源程序可以包含若干个代码段、数据 段、附加段或堆栈段,段与段之间的顺序可随意排 列
• 需独立运行的程序必须包含一个代码段,并指示程 序执行的起始点,一个程序只有一个起始点
• 所有的指令语句必须位于某一个代码段内,伪指令 语句可根据需要位于任一段内或段外
汇编语言的语句可以分为指令语句和伪指令语句
•指令语句——产生使CPU产生动作、可供机器
执行的机器目标代码
•伪指令语句——不产生CPU动作、在程序执行
前由汇编程序处理的说明性语句,例如,数据说明、 变量定义等等
2
一、指令语句
每一条指令语句在汇编时都要产生一个可供CPU执 行的机器目标代码,它又叫可执行语句。
指令语句的一般格式为: 标号 : 操作码
, 操作数
; 注释
一条指令语句最多可以包含4个字段 例 L1:MOV AH,0A0H ;将0A0H放入AH
3
1.标号字段
标号是可选字段,它后面必须有“:”。标号是一条 指令的符号地址,代表了该指令的第一个字节存放 地址。
注释字段可以是一条指令的后面部分,也可以是 整个语句行。
例:
LABEL1: ADD AX,BX; 功能为AX<=(AX)+(BX)
;后面的程序段将完成两次对存储器的访问
MOV AX, W_VAR1
MOV W_VAR2, AX
7
二、伪指令语句
伪指令语句又叫命令语句。 伪指令本身并不产生对应的机器目标代码。它仅 仅是告诉汇编程序对其后面的指令语句和伪指令 语句的操作数应该如何处理。
汇编 第四章伪指令及汇编语言源程序结构
MOV AL, BUF1
ADD AL, BUF2 MOV SUM, AL
;取第一个加数
;两数加 ;和放入SUM单元
3
伪指令(指 示性)语句: 提供相关辅 助信息。
指令性语句: 完成一定功 能,能翻译 成机器码。
伪指令语句
DATA SEGMENT ;DATA段定义开始 BUF1 DB 34H BUF2 DB 27H SUM DB ? DATA ENDS ;DATA段定义结束 CODE SEGMENT ;CODE段定义开始 ASSUME CS:CODE ASSUME DS:DATA ;段性质规定 START: MOV AX,DATA MOV DS,AX ;给DS赋值 MOV AL, BUF1 ;取第一个加数 ADD AL, BUF2 ;两数加 MOV SUM, AL ;和放入SUM单元 MOV AH,4CH INT 21H ;返回DOS CODE ENDS ;CODE段定义结束 END START ;源程序结束
14
二、= 等号伪指令
格式:符号名 = 表达式 功能:为常量、表达式及其他各种符号定义一个等价的符号 名,并能对所定义的符号多次重复定义,且以最后一次定义 的值为准。 例:COST = 20 M = MOV LOST = COST+10 ;30→LOST M = ADD ;M=ADD 注 : “ = ” 伪 指 令 的 格 式 和 功 能 与 EQU 类 似 。 二者区别:在同一程序中,“=”可以对一个符号重 复定义,EQU不能对同一符号重复定义。
26
三、变量、标号的分析运算和合成运算
例:DATA SEGMENT A DB ‘ABCDEF’ B DW 10 DUP(1,2DUP(2)) C DB 3,20 DUP(0) DATA ENDS ┆ MOV AX,LENGTH A ;1→AX MOV BX,LENGTH B ;10→BX MOV CX,LENGTH C ;1→CX ┆
第三章 汇编语言程序及实现
2013-8-13
河南师范大学计算机与信息技术学院
29
汇编语言程序设计——方法、技术、应用
2. 属性指定操作
格式:THIS 类型名 利用THIS说明的操作数具有汇编时的当前逻辑地址,但具有指 定的类型。 LABEL伪指令的功能等同于‚EQU THIS‛。
示例1
示例2
2013-8-13
河南师范大学计算机与信息技术学院
河南师范大学计算机与信息技术学院
25
汇编语言程序设计——方法、技术、应用
运算符的优先级
1 2 3 4 5 6 7 8 9 10 () <> [] · LENGTH SIZE WIDTH MASK PTR OFFSET SEG TPYE THIS : HIGE LOW * / MOD SHL SHR + EQ NE GT LT GE LE NOT AND 建议采用圆括号‚()‛ OR XOR 显式表达,它可以极大 SHORT 地提高程序的可阅读性。
量
2013-8-13
河南师范大学计算机与信息技术学院
13
汇编语言程序设计——方法、技术、应用
1.常量
常量表示一个固定的数值。不占存储空间。
常量在程序中可以直接出现,对于经常使用的常量可以定义为符号常量。 常量在伪指令语句中主要用于给变量赋初值,在指令语句中常用作立即 数及存储器寻址方式中的位移量。 数值常量可以是二、八、十、十六进制数。 字符常量是将字符用单引号或双引号界定; 字符串常量是将字符串用单引号或双引号引起,单引号字符本身用连 续两个单引号引起。 各种符号的属性值可作为常量使用,称为属性常量。
2013-8-13
河南师范大学计算机与信息技术学院
28
汇编语言程序设计——方法、技术、应用
汇编语言程序框架结构
汇编语言程序通常具有一种典型的框架结构,这种结构可以描述如下:
程序开始:程序从地址0开始执行,通常是引导加载器(bootloader)的一部分,它负责将程序加载到内存中并设置好运行环境。
初始化过程:在程序开始执行后,首先需要进行一些初始化操作,例如设置寄存器的值,配置系统参数等。
这些操作通常在程序的开头部分进行。
主程序循环:初始化过程完成后,程序进入主程序循环。
在这个循环中,程序会反复执行一系列指令,直到达到退出条件。
主程序循环通常包括处理输入/输出操作、执行计算任务、控制设备等。
中断处理:在程序执行过程中,可能会遇到一些特殊情况(称为中断),需要暂时停止当前任务的执行,转而处理这些特殊情况。
中断处理程序负责在需要时响应中断,并执行相应的操作。
结束程序:当程序完成所有任务或遇到退出条件时,程序将结束执行。
在结束程序之前,通常需要进行一些清理工作,例如释放资源、保存状态等。
除了以上框架结构外,汇编语言程序还具有一些特点:
直接访问硬件:汇编语言程序可以直接访问硬件资源,例如寄存器、内存、I/O端口等。
这使得程序能够更灵活地控制硬件设备,但也需要程序员对硬件有较深。
简述ARM汇编语言的程序结构
简述ARM汇编语言的程序结构ARM汇编语言的程序结构,由指令、数据和指令流程控制三个主要组成部分构成。
指令是ARM汇编程序的核心,它包含了CPU指令集中的基础操作,如加、减、乘、除、移位操作等,通过这些基础操作,可以实现各种不同的功能。
指令的组成是由操作码和操作数两部分构成,其中操作码是指令的关键词汇,用于决定指令的功能,而操作数则是指令所作用的对象或数据。
数据部分是ARM汇编程序中存储、处理数据的部分。
在ARM汇编程序中,数据通常表示为二进制数值或字符,这些数据可以是程序中使用的常量,也可以是程序中间结果的计算结果。
数据的存放位置通常是通过汇编语言中的数据定义指令来实现。
指令流程控制是ARM汇编程序中控制程序执行流程的部分。
实现指令流程控制的语句包括条件分支语句、循环语句等,通过这些语句可以实现程序的条件跳转、循环执行等控制流程。
在ARM汇编程序中,指令流程控制也可以通过汇编指令的标签和跳转指令来实现。
总体而言,ARM汇编程序必须遵循一定的程序结构,包括定义全局数据段、段间跳转、异常处理等等。
ARM汇编程序的结构可以分为数据段和代码段:1. 数据段:指令流程控制之前,必须先声明所有的数据段。
数据段包括声明全局变量、局部变量、定义字符串等。
数据段只需要声明一次,不需要往返于数据段和代码段之间。
2. 代码段:代码段包括所有的指令流程控制指令。
这些指令包括从主程序跳转到子程序,从子程序返回到主程序等等。
这一部分的指令可以定义标签、跳转语句、条件分支等。
此外,在ARM汇编程序中还需要注意的一些细节,如跳转指令必须放在指令执行前面,异常处理必须考虑到所有临界条件等。
只要按照一定的结构进行编写,就可以充分发挥ARM汇编程序的性能和效率,实现各种复杂的逻辑运算和控制流程。
第四章:8086汇编语言程序设计
第 4章
汇编语言程序设计
汇编语言程序设计
(2)尽量采用循环结构和子程序 (2)尽量采用循环结构和子程序 采用循环结构和子程序可以使程序的长度减少、 采用循环结构和子程序可以使程序的长度减少、 占用内存空间减少。 占用内存空间减少。 多重循环,注意各重循环的初值和循环结束条件, 多重循环,注意各重循环的初值和循环结束条件, 死循环”现象; 避免出现 “死循环”现象; 通用的子程序, 通用的子程序,除了用于存放子程序入口参数的寄 存器外, 存器外,子程序中用到的其它寄存器的内容应压入堆栈 进行现场保护, 进行现场保护,并要特别注意堆栈操作的压入和弹出的 平衡; 平衡; 中断处理子程序除了要保护程序中用到的寄存器外, 中断处理子程序除了要保护程序中用到的寄存器外, 还应保护标志寄存器。 还应保护标志寄存器。
1、汇编语言的语句格式
汇编语言源程序是由汇编语句(即指令)组成的。 汇编语言源程序是由汇编语句(即指令)组成的。 汇编语言一般由四部分组成。 汇编语言一般由四部分组成。
其典型的汇编语句格式: 其典型的汇编语句格式: 标号: 标号:操作码
例如: 例如: START: START:MOV AL,30H AL,30H ;(AL)=30H (AL)=30H 30
第 4章
汇编语言程序设计
汇编语言程序设计
经过任务分析、算法优化后, 经过任务分析、算法优化后, 在微型机上使用编 首先, 首先,要对单片机应用 就可以进行程序的总体构思, 就可以进行程序的总体构思, 辑软件编写源程序, 辑软件编写源程序, 系统预完成的任务进行 确定程序的结构和数据形式, 确定程序的结构和数据形式, 在使用交叉汇编的 深入的分析, 深入的分析,明确系统 并考虑资源的分配和参数的 方法对源程序进行 的设计任务、 的设计任务、功能要求 计算等。 计算等。然后根据程序运行 汇编, 汇编,然后采用串 和技术指标。其次, 和技术指标。其次,要 的过程, 的过程,勾画出程序执行的 算法是解决具体问题 行通信的方法, 行通信的方法,把 对系统的硬件资源和工 逻辑顺序, 。同一个问题 逻辑顺序,用图形符号将总 的方法。 的方法 汇编得到的目标程 作环境进行分析。 ,, 作环境进行分析。这是 体设计思路及程序流向绘制 的算法可以有多种, 的算法可以有多种 序传送到单片机内, 序传送到单片机内 单片机应用系统程序设 在平面图上, 在平面图上,从而使程序的 结果也可能不尽相同, 结果也可能不尽相同, 并进行程序运行和 计的基础和条件 结构关系直观明了, 结构关系直观明了,便于检 所以, 调试 所以,应对各种算法 查和修改。 查和修改。 进行分析比较,并进 进行分析比较, 行合理的优化
汇编语言程序
汇编语言程序一、引言汇编语言是一种低级语言,是计算机硬件可以直接理解和执行的一种指令集。
编写汇编语言程序可以实现对计算机硬件的直接控制,具有高效性和灵活性。
本文将介绍汇编语言程序的基本概念、语法结构以及编写方法。
二、汇编语言程序的基本概念1. 汇编语言汇编语言是一种基于计算机硬件指令集的符号化编程语言,用于编写汇编语言程序。
它与机器语言一一对应,可以直接由计算机硬件执行。
2. 汇编语言程序汇编语言程序是用汇编语言编写的具体实现某种功能的程序。
它由一系列指令组成,每条指令都对应着一条机器语言指令。
三、汇编语言程序的语法结构1. 指令格式汇编语言程序的指令由助记符、操作数和注释三个部分组成。
其中,助记符表示某种操作或指令,操作数表示需要操作的数据,注释用于对指令进行解释说明。
2. 寄存器寄存器是汇编语言程序中使用的数据存储单元,可以存储计算过程中的临时数据。
常见的寄存器包括通用寄存器、段寄存器、标志寄存器等。
3. 标号标号用于标识程序中的某个位置,可以作为跳转或循环的目标。
标号的命名需要遵循一定的规则,如以字母、下划线开头,只包含字母、数字、下划线等字符。
四、编写汇编语言程序的方法1. 确定程序的功能和需求在编写汇编语言程序之前,需要明确程序的功能和需求,确定需要实现的具体功能。
2. 设计算法和逻辑根据程序的功能,设计相应的算法和逻辑。
这包括声明和初始化变量、定义数据结构、编写算法等。
3. 编写汇编语言代码根据设计好的算法和逻辑,编写相应的汇编语言代码。
需要注意语法的正确性、指令的合理性,并添加必要的注释以便于他人理解。
4. 进行编译和调试将编写好的汇编语言代码进行编译,并进行调试。
通过调试,可以找出程序中的错误,并进行修复。
5. 执行程序编译和调试完成后,可以将程序加载到计算机上执行。
通过执行程序,可以验证程序的正确性和功能是否满足需求。
五、总结汇编语言程序是一种低级语言,可以直接操作计算机硬件实现某种功能。
汇编语言程序完整的框架
汇编语言程序完整的框架在汇编语言程序设计中,一个完整的框架是至关重要的。
它可以提供程序的结构和组织,使得程序的编写更加高效和可维护。
本文将介绍一个汇编语言程序的完整框架,并给出相应的示例代码。
一、引言汇编语言是一种低级别的机器语言,它直接操作计算机的硬件。
因此,编写汇编语言程序需要考虑到硬件的特性和限制。
一个完整的汇编语言程序框架应该包括以下几个方面的内容:程序入口和退出、输入和输出、数据段和代码段、以及子程序的调用和返回。
二、程序入口和退出一个汇编语言程序的入口通常是一个名为_start的标号。
在程序被加载到内存中后,计算机会从这个标号开始执行程序。
在程序的最后,需要使用系统调用退出程序,一般为int 0x80,调用号为1。
下面是一个示例代码:```section .datasection .textglobal _start_start:; 程序逻辑代码; ...; 退出程序mov eax, 1xor ebx, ebxint 0x80```三、输入和输出汇编语言程序通常需要与外部环境进行交互,如读取用户的输入和向屏幕输出信息。
在Linux系统中,可以使用系统调用进行输入输出操作。
常用的输入系统调用是read,输出系统调用是write。
下面是一个示例代码:```section .datamsg db 'Hello, World!', 0xAlen equ $-msgsection .textglobal _start_start:; 输出信息mov eax, 4mov ebx, 1mov ecx, msgmov edx, lenint 0x80; 退出程序mov eax, 1xor ebx, ebxint 0x80```四、数据段和代码段为了更好地组织程序的数据和代码,通常需要使用.data段和.text 段。
.data段用于定义程序所使用的数据,如字符串、常量等。
.text段用于存放程序的逻辑代码。
汇编语言程序格式
1.2汇编语言程序的段定义
DATA_SEG1 SEGMENT PARA
DATA_SEG1 ENDS
DATA_SEG2 SEGMENT PARA
…….
DATA_SEG2 ENDS
E_SEG1
SEGMENT PARA
……..
ቤተ መጻሕፍቲ ባይዱ
E_SEG1
ENDS
E_SEG2
SEGMENT PARA
……..
E_SEG2
ENDS
ENDP 说明:过程属性项省略,系统默认为NEAR,表示段内调用, FAR 过程体至少有一条返回指令RET,RET一般放在过程体的最后。 也可以使用带参数的返回语句,如RET n。
1.3汇编语言源程序过程定义
MY_CODE SEGMENT
UP_COUNT PROC NEAR
ADDCX, 1
RET
UP_COUNT ENDP
1.2 汇编语言程序的段定义
存储器是采用分段管理方式,在编制任意源程序时亦必 须按段来构造程序。按段来构造程序有两种形式:一种是完
1.
NAME TITLE EQU EXTRN PUBLIC SEG1
SEG1 SEG2
SEG2
SEGMENT PARA STACK …… ENDS SEGMENT PARA STACK ; …… ENDS
避免多模块使用不同起始地址,只有主模块使用起始地址, 否则引起程序出错。
1.4标准程序前奏
Code_SREG1 SEGMENT‘CODE’ ASSUME CS:Code_SREG1…
MAIN PROC FAR ……… RET
MAIN ENDP Code_SREG1 ENDS
END MAIN Code_G2 SEGMENT ‘CODE’
4.1 汇编语言源程序格式
4.1 汇编语言源程序格式4.1.1 汇编语言程序的结构在详细介绍ARM汇编语言之前,先给出一个汇编源程序示例,使读者对ARM 汇编语言程序的结构有一个大概的了解。
CODE32 ;32位的ARM指令段AREA codesec, CODE, READONLY ;代码段,名称为codesec,属性为只读main PROC ;函数mainSTMFD sp!,{lr} ;保存必要的寄存器和返回地址到数据栈ADR r0,strhello ;取标签strhello代表的地址值BL _ printf ;调用C运行时库的_printf函数打印;“Hello world!”字符串BL welcomefun ;调用子函数welcomfunLDMFD sp!,{pc} ;恢复寄存器值strhello ;strhello代表本地字符串的地址DCB "Hello world!\n\0" ;定义一段字节空间ENDP ;函数main结束welcomefun ;子函数welcomfunSTMFD sp!,{lr} ;保存必要的寄存器和返回地址到数据栈ADR r0,adrstrarm ;取adrstrarm的地址放到寄存器r0中LDR r0,[r0,#0] ;将strarm的值放到r0中BL _ printf ;调用C运行时库的_printf函数打印;“Welcom to ARM world!”字符串LDMFD sp!,{pc} ;恢复寄存器值adrstrarm ;adrstrarm标签DCD strarm ;保存strarm的地址AREA constdatasec, DATA, READONLY,ALIGN=0 ;数据段,名称为constdatasec,;属性为只读strarmDCB "Welcome to ARM world!\n\0" ;存放“WelcometoARM world!”;字符串EXPORT main ;导出main函数供外部调用;引入3个C运行时库函数和ARM库IMPORT _mainIMPORT __mainIMPORT _printfIMPORT ||Lib$$Request$$armlib||, WEAKEND ;程序结束将上面代码保存为hello.s,Windows系统下在终端输入命令行:armcc -g hello.s -o hello.axf将hello.s编译成映像文件hello.axf。
第五六章 汇编语言程序
数的表示
整数
默认为十进制,非默认基数的用字母后缀标明
B:二进制 Binary H:十六进制 Hexadecimal D:十进制 Decimal O或Q:八进制 Octal
• 示例:1011B,35D,6AH,17Q
以字母开头的十六进制数必须加0
• 示例:FEH→0FEH
《微机接口技术》
23
4. 指定段内的偏移地址
ORG说明符
格式:ORG 常数表达式 作用:指定当前可用的存储单元的偏移地址为 常数表达式的值
EVEN说明符
格式:EVEN
作用:将当前可用的存储单元的偏移地址调整 为最近的偶数值
《微机接口技术》
24
示例
ORG 1000H A DB 47H, 12H, 45H EVEN B DB 47H 说明: ① ORG指令将A的偏移地址部分指定为1000H ② 从A开始存放3个字节变量,占用地址1000H、 1001H和1002H ③ EVEN指令会将B的偏移地址部分从1003H调整为 偶数地址1004H
; 返回DOS
; 代码段结束 ; 模块结束
《微机接口技术》 11
汇编语言程序的组成
分段结构
DATA SEGMENT 按段进行组织,最多由4个 … ; 数据段语句 段组成(代码、数据、附加、 DATA ENDS
堆栈) STACK SEGMENT 每个段以“段名 SEGMENT” … ; 堆栈段语句 开始,以“段名 END”结束 STACK ENDS
《微机接口技术》 25
5. 过程定义
PROC说明符
格式:过程名 PROC 类型属性名 说明:从“过程名”代表的地址开始定义一个 过程;“类型属性名”可选择NEAR(近过程) 或FAR(远过程),默认为NEAR
汇编语言结构
汇编语言结构汇编语言是一种低级别的编程语言,用于与计算机硬件进行直接交互。
它提供了对计算机硬件的底层访问和控制,使程序员能够更加精确地编写处理器指令。
一、概述汇编语言结构是汇编程序的基本组成部分。
一个典型的汇编程序由若干条指令组成,每条指令执行特定的操作。
指令通常包括操作码和操作数,用于指定要执行的任务和相关数据。
在编写汇编程序时,程序员需要了解指令的结构和格式,以正确地编写代码。
二、指令格式在汇编语言中,每条指令都有固定的格式,即操作码、目标操作数和源操作数。
操作码指定要执行的操作类型,目标操作数用于存储操作结果,源操作数用于提供操作所需的数据。
根据不同的指令类型,操作数的格式和长度也会有所不同。
三、寄存器寄存器是汇编语言中的一种重要数据存储单位,用于存储和处理数据。
计算机硬件通常提供了各种类型的寄存器,如通用寄存器、标志寄存器和指令指针寄存器等。
在编写汇编程序时,程序员可以使用这些寄存器来完成各种任务,如存储数据、进行运算和控制程序流程等。
四、内存内存是计算机中的一种重要存储设备,用于存储程序和数据。
在汇编语言中,程序员可以使用内存来存储变量、数组和其他数据结构,以便在程序执行过程中进行读写操作。
为了有效地使用内存,程序员需要了解内存的地址和访问方式等相关知识。
五、程序结构汇编语言程序通常由若干个过程和子程序组成,用于实现特定的功能。
程序员可以使用标签和跳转指令来控制程序的流程,实现条件分支和循环等结构。
此外,程序员还可以使用宏指令来简化代码编写和调试过程,提高程序的可读性和可维护性。
六、汇编程序的工具和环境为了编写和调试汇编程序,程序员通常需要使用汇编器和调试器等工具。
汇编器用于将汇编源代码翻译成机器码,调试器用于辅助程序员进行代码调试和错误排查。
此外,程序员还可以使用集成开发环境(IDE)来提供更加友好和便捷的编程环境。
结论汇编语言是一种强大而灵活的编程工具,可以直接操作计算机硬件。
通过了解汇编语言的结构和格式,程序员可以编写高效和可靠的代码,更好地理解计算机的工作原理。
汇编语言 顺序结构程序
5.3.1 顺序程序设计
sseg stack 顺 segment 序程序 完 全 ;定义堆栈段
按指令书写的 前后顺序执行 每一条指令, 是最基本、最 常见的程序结 start: 构。
sseg dseg string dseg code
code
dw 512 dup(?) ;堆栈段有512字(1024字节)空间 ends ;堆栈段结束 segment ;定义数据段 db 'Hello, Everybody !',0dh,0ah,'$' ends segment ;'code' ;定义代码段 assume cs:code,ds:dseg,ss:sseg mov ax,dseg ;建立DS段地址 mov ds,ax mov dx,offset string mov ah,9 int 21h mov ax,4c00h int 21h ;利用功能调用返回DOS ends ;代码段结束 end start ;汇编结束,同时指明程序起始点
5.1 程序设计的步骤
1. 2. 3. 4. 5.
分析问题 建立数学模型 设计算法 编制程序 上机调试
5.2 流程图的应用
(1) (2) (3) (4) (5)
流程线 端点框 判断框 处理框 连接框
开始 结束
条件 Y
N
要描述的内容
顺序结构
开始
初始化部分
工作部分
修改部分
结束
开始 设置数据段地址
AL,BL AL,10 CL,[BX] BL,[BX+SI+10] AL,SI [SI],[BX+10] AX,AX DX,DS
2000:00FBH 2000:00FCH 2000:00FDH 2000:00FEH 2000:00FFH 2000:0100H (2 ) POP CX 执行后 78H 56H 34H 12H ←SP
汇编语言之程序的基本结构
第6章程序的基本结构在前面几章,我们分别介绍了用汇编语言进行程序设计所需要的几个最基本的知识:内存单元的寻址方式,变量定义和各种汇编指令格式。
在掌握了这些基本内容之后,就需要学习如何把它们组成一个完整的汇编语言程序。
6.1 源程序的基本组成汇编语言源程序的组成部分有:模块、段、子程序和宏等。
一个模块对应一个目标文件,当开发较大型的应用程序时,该程序可能由若干个目标文件或库结合而成的。
有关模块和子程序的知识和宏在第7章介绍,有关宏的知识将在第9章中叙述。
6.1.1 段的定义微机系统的内存是分段管理的,为了及之相对应,汇编语言源程序也分若干个段来构成。
8086CPU有四个段寄存器,在该系统环境下运行的程序在某个时刻最多可访问四个段,而80386及其以后的CPU 都含有六个段寄存器,于是,在这些系统环境下开发的运行程序在某个时刻最多可访问六个段。
不论程序在某个时刻最多能访问多少个段,在编程序时,程序员都可以定义比该段数更多的段。
在通常情况下,一个段的长度不能超过64K,在80386及其以后系统的保护方式下,段基地址是32位,段的最大长度可达4G。
段的长度是指该段所占的字节数:、如果段是数据段,则其长度是其所有变量所占字节数的总和;、如果段是代码段,则其长度是其所有指令所占字节数的总和。
在定义段时,每个段都有一个段名。
在取段名时,要取一个具有一定含义的段名。
段定义的一般格式如下:段名SEGMENT[对齐类型] [组合类型] [类别]…;段内的具体内容…段名ENDS其中:“段名”必须是一个合法的标识符,前后二个段名要相同。
可选项“对齐类型”、“组合类型”和“类别”的说明作用请见6.3节中的叙述。
一个数据段的定义例子:DATA1S EGMENTword1D W1, 9078H, ?byte1D B21, 'World'DD12345678HDATA1E NDS一个代码段的例子:CODE1S EGMENTAX,MOV;把数据段DATA1的段值送AXDATA1;把AX的值送给DS,即:DS存储数据段的段MOVDS, AX值…MOV AX, 4C00HINT21H;调用DOS功能,结束程序的运行CODE1E NDS6.1.2 段寄存器的说明语句在汇编语言源程序中可以定义多个段,每个段都要及一个段寄存器建立一种对应关系。
汇编语言程序完整的框架
对于第二格式,DOS返回方法是调用20H类型的中断服务程序。
§5.2 顺序结构程序设计
顺序程序结构是指完全按照顺序逐条执行的 指令序列,这种结构的流程图除了有一个开始框 和结束框外,就是若干处理框,没有判断框,如 图5.1所示。 开 始
语 句 1 语 句 2 语 句 3 结 束
图5.1 顺序程序的结构形式
;产生多分支转移
;转移表
;各分支程序段
JMP
A1: MOV
EXIT1
LEA AH,9 DX,S1
INT
21H
JMP A2:LEA DX,S2 MOV INT AH,9 21H
EXIT1
JMP
EXIT1
DX,OFFSET ER AH,9
ERROR: MOV MOV
INT
EXIT1: MOV INT CODE END ENDS START
建 立 地 址 表 接 收 分 支 号 求 出 分 支 号 所 对 应 分 支 在 地 址 表 的 存 放 地 址 , 并 送 B X
J M P W O R D / D W O R D P T R [ B X ]
…
…
图5.6 用地址表法实现多路分支的结构框图
例5.4:编程实现菜单选择,根据不同的选择做不同的事情。
ASSUME
START: MOV
MOV LEA MOV INT DS,AX
AX,DATA
DX,MENU AH,9 21H
;显示菜单
MOV INT CMP JB
AH,1 21H AL,'0' ERROR
;1号DOS功能调用,接收分支号
;进行合法判断
CMP
JA LEA
AL,'2'
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
循环控制指令 循环控制指令的转移范围为:-128~+127字节(段内短转移)
(1)LOOP指令
格式:LOOP 标号 操作: 如图所示 (2)等于继续循环指令
格式:LOOPZ/LOOPE 标号
否
(CX)(≠≠CX00)且≠且Z0Z?FF==10??
是
执行循环体 退出循环
(3)不等于继续循环指令 格式:LOOPNZ/LOOPNE 标号
……
00110001
16. 0 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 (ROL DX,1) 0 0 0 0 0 0 0 1 (AND)
00000000 + 0 0 1 1 0 0 0 0 (ADD)
00110000
binbuf 30 31 30 30 30 30 31 C3H0ENL3I0 30 31 31 30 30 30 30 12返回
上机调试程序2
概述
二、程序的基本结构 1、顺序结构程序 2、分支结构程序 3、循环(重复)结构程序
顺序结构 分支结构 循环(重复)结构
CHENLI
3
第一节 顺序结构程序设计
• 顺序结构程序完全按指令书写的前后顺 序执行每一条指令,是最基本、最常见 的程序结构
• 特点
顺序性、结构简单,只适应于简单问题 的处理
例1 计算
例2 移位
CHENLI
4
第二节:循环结构
初始化
循环的初始状态
循环体 修改部分
循环的工作部分 及修改部分
Y 控制条件 N 结束 CHENLI
计数控制循环 条件控制循环
5
循第环一与章分支基程础序知设识计
CHENLI
6
循第环一与章分支基程础序知设识计
CHENLI
7
循环程序设计
根据条件重复执行一段指令就构成了循环程序结构 。
例:将ARRAY数组中的50个数求和,并将和存入字变量S中 。
MOV MOV MOV AGAIN : ADD ADD
AX,0
;累加求和寄存器清0
BX,OFFSET ARRAY ;数组始址送BX中
CX,50
;循环控制计数初始化
AX,[BX]
BX,2
;数组地址增2,BX指向下一个元素
DEC CX
;循环控制计数减1
要求将 4230H= 0 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 B 逐位分离开 并转换为:
30 31 30 30 30 30 31 30 30 30 31 31 30 30 30 30 先将(num)->(DX),再讨论如何分离开各二进制位并转 换为ASCII码,分析如下:
根据上述分析,将(DX)中的二进制数依次循环左移1位, 可以使得各个数位的分离(AND)和ASCII码转换(ADD)操 作完全相同,便于组织循环,并且循环次数已知(16次)。
分析问题
序的设计是汇编语言程序设计的基
本内容。
寻找解决问题的
思路、方法、算法
在此基础上还要掌握汇编语言 程序设计的基本方法和技巧 ,包
描述算法
括递归子程序设计、COM和EXE 格式程序的结构和特点、多模块
编写程序实现算法
程序设计方法等。
设计测试数据
和预期计算结果
程序设计的解题基本步骤如下:
CHENLI
AL,STRS[SI]
LOOPNE AGAIN
MOV 循环程序设计方法
LEN,SI
控制循环的方法可分为两类: 计数循环——用于循环次数已知的情况
条件循环——用于循环次数不确定的情况
CHENLI
10
例:将字变量num中的数按16位二进制数位分离开,逐位转换 为ASCII码,并从最高有效位开始依次逐位存入以binbuf为起 始地址的16个字节单元中。 设:(num)= 4230H
3)根据框图编写程序。
4)上机调试程序。任何程序必须经过调试才能检查出你的设计思想是否 正确以及你的程序是否符合你的设汁思想。在调试程序的过程中应该善于 利用机器提供的调试工具(如DEBUG)来进行工作,你会发现它会给你提 供很大的帮助。
CHENLI
1
概述
一、汇编语言程序设计的基本方法
顺序、分支、循环程序和子程
循第环一与章分支基程础序知设识计
编制一个汇编语言程序的步骤
1)分析题意,确定算法。这一步是能否编制出高质量程序的关键,因此不 应该一拿到题目就急于写程序,而是应该仔细地分析和理解题意,找出合 理的算法及适当的数据结构。
2)根据算法画出程序框图。这一点对初学者特别重要,这样做可以减少 出错的可能性。画框图时可以从粗到细把算法逐步地具体化。
此例为计数循环
例: 将十进制数(number)转换为八进制数
方法:(number)/8 保留余数,除法操作循环次数事先未知,
仅当商为0时,循环结束。此C例HE为NLI条件循环
n1e1 xt
(DX)= 0 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 1. 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 (ROL DX,1 ) 0 0 0 0 0 0 0 1 (AND ?,1) 00000000 + 0 0 1 1 0 0 0 0 (ADD ?,30H) 00110000 2. 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 1 (ROL DX,1) 0 0 0 0 0 0 0 1 (AND) 00000001 + 0 0 1 1 0 0 0 0 (ADD)
当型循环与直到型循环:
例 统计AX中的二进制数含“1”的总个数,程序段如下:
MOV CX,0
AGAIN: AND JZ
AX,AX QUIT
;(AX)=0? ;是,退出循环
SAL AX,1 JNC NEXT
(CX) (CX) -1
在前面的求和例子中,可用一条循环指令代替两条指令:
LOOP AGAIN
DEC CX
CHENLJINZ AGAIN
9
例: 求存放在STRS存储区中的字符串长度。
设: STRS
DB MOV MOV
string$ CX,80பைடு நூலகம்SI,-1
MOV
AL,$
AGAIN: INC
SI
CMP
JNZ AGAIN MOV S,AX
;计数不为0时继续循环 ;计数为0时循环结束,和存于S中
保证循环正常执行和结束的条件:
正确地初始化循环控制计数和初始条件
❖ 正确地检测循环条件
必须保证能达到循环结束条件 (例如在循环体内有修改循环
控制值的指令)
CHENLI
8
指令系统提供了专门用于循环结构的循环控制指令,更加 简便的地实现循环结构。