第3章 汇编语言及编程4 11-17~23

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

返回
操作步骤: 操作步骤:
MS-DOS下 Edit命令进入编辑状态 命令进入编辑状态, 1)在MS-DOS下,用Edit命令进入编辑状态,完成所 编写程序的输入。 编写程序的输入。 2)程序编写完成后,将文件保存为xx.asm,并退出 程序编写完成后,将文件保存为xx.asm, xx.asm 编辑状态。 编辑状态。 3)用masm命令对所编写的程序进行编译,格式如下: masm命令对所编写的程序进行编译,格式如下: 命令对所编写的程序进行编译 masm xx 回车
怎样编写程序? 怎样编写程序?
DATA SEGMENT BUFFER1 DB 0AH DATA ENDS EXTRA SEGMENT BUFFER2 DB 0BH EXTRA ENDS CODE SEGMENT START: ASSUME CS:CODE,DS:DATA,ES:EXTRA MOV AX , DATA MOV DS , AX MOV AX , EXTRA MOV ES , AX ::: ::: MOV AH 4CH INT 21H CODE ENDS END START
3.5.2 分支结构程序设计
参考程序1: 参考程序1:
SEGMENT X DB 0F8H Y DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA : , : START: MOV AX,DATA , MOV DS,AX , MOV AL,X 取变量X , ;取变量X的值 CMP AL,0 , ;X与0比较 JG BIGR JE FINISH ;X=0,Y=0 , MOV AL,0FFH , ;X < 0,Y= -1 , JMP FINISH BIGR: MOV AL,1 : , ;X > 0,Y=1 , FINISH: MOV Y,AL 保存函数值Y , ;保存函数值Y MOV AH,4CH , INT 21H CODE ENDS END START DATA
( X + Y ) *8 − X Z= 2
MOV AX, DATA MOV DS, AX MOV DX, VARX ADD DX, VARY MOV CL, 3 SHL/SAL DX, CL SUB DX, VARX SAR DX, 1 MOV RESULT, DX RET PROC1 ENDP CODE ENDS END START
生成目标文件xx.OBJ 生成目标文件
4)用link命令对所编写的程序进行连接,格式如下: link命令对所编写的程序进行连接,格式如下: 命令对所编写的程序进行连接 link xx 回车
生成可执行文件xx.EXE 生成可执行文件
5)运行程序命令格式如下: 运行程序命令格式如下: xx 回车
命令对所编写的程序进行调试,格式如下: 6)用debug 命令对所编写的程序进行调试,格式如下: debug xx.exe 回车 常用的debug命令: debug命令 常用的debug命令: “T”回车,单步运行程序并显示寄存器状态。 回车,单步运行程序并显示寄存器状态。 回车 回车, “R”回车,显示各寄存器内容。 回车 显示各寄存器内容。 DDS:XX”回车 察看数据段中偏移量为XXH 回车, XXH的内存 “DDS:XX 回车,察看数据段中偏移量为XXH的内存 单元中的内容。 单元中的内容。 回车, “U”回车,反汇编当前机器码,也就是显示待执行的 回车 反汇编当前机器码, 汇编语句。 汇编语句。 XX”回车 执行内存中的可执行代码, 回车, “G XX 回车,执行内存中的可执行代码,直到偏 移量为XXH的代码为止。 XXH的代码为止 移量为XXH的代码为止。 回车, DEBUG调试状态 “Q”回车,退出DEBUG调试状态。 回车 退出DEBUG调试状态。 在提示符状态下输入“Exit”命令 退出DOS模式。 命令, DOS模式 7)在提示符状态下输入“Exit 命令,退出DOS模式。
3.5.2 分支结构程序设计
在许多实际问题中, 在许多实际问题中,往往需要根据不同的情 况和给定的条件做出不同的处理。 况和给定的条件做出不同的处理。 要设计这样的程序, 要设计这样的程序,必须事先把各种可能出 现的情况及处理方法都编写在程序中, 现的情况及处理方法都编写在程序中,以后计算 机运行程序时,可自动根据运行的结果做出判断, 机运行程序时,可自动根据运行的结果做出判断, 有条件地选择执行不同的程序段, 有条件地选择执行不同的程序段,按这种要求编 写的程序称为分支程序。 写的程序称为分支程序。 实现:分支程序是利用条件指令, 实现:分支程序是利用条件指令,使程序执行到 条件指令 某一指令后,根据条件是否满足, 某一指令后,根据条件是否满足,来改变程序执行 的顺序。这类程序使计算机有了判断作用。 的顺序。这类程序使计算机有了判断作用。
根据实际问 题抽象出数 学模型
就需求分析、模块划分和算法确定等工作而言, 就需求分析、模块划分和算法确定等工作而言, 各种程序设计语言是类似的 类似的, 各种程序设计语言是类似的,均可按软件工程的方 法进行,但编程和调试则因程序设计语言而异。 法进行,但编程和调试则因程序设计语言而异。
3.3 汇编语言编程环境
DATA SEGMENT A DB 12H B DB 34H C DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX, DATA MOV DS, AX MOV AL, A MUL B MOV C, AX MOV AH, 4CH INT 21H CODE EDNS END START 开始
开始
例3:试编制一程 求出下列公式中Z 序,求出下列公式中Z 的值, 的值,并将结果放在 RESULT单元中 单元中( RESULT单元中(设能整 其中,X,Y的值分 除),其中,X,Y的值分 别存放在VARX,VARY VARX,VARY变 别存放在VARX,VARY变 量中,X,Y,Z均为16位 均为16 量中,X,Y,Z均为16位 带符号数。 带符号数。
可执行程序文 *.EXE 件 *.EXE
调试
可用程序或 最终程序
例:请在数据段中定义两个数,要求编 请在数据段中定义两个数, 写程序分别计算出这两个数的和、 写程序分别计算出这两个数的和、差、 并用Debug Debug的相关命令查询计 积、商,并用Debug的相关命令查询计 算结果。 算结果。
应用程序
供了一组例行子程序, 用于 供了一组例行子程序 , 完成基本I/O设备 内存、 基本I/O设备、 完成基本I/O设备、内存、文 件和作业的管理, 以及时钟、 件和作业的管理 , 以及时钟 、 日历的读出和设置等功能。 日历的读出和设置等功能。 应用程序、DOS、BIOS和 应用程序、DOS、BIOS和 外设接口之间的层次关系如 图所示。
结束 (b) 完全分支结构
结束 (c) 多分支结构
分支1 IF 条件 THEN 分支1 分支2 ELSE 分支2
3.5.2 分支结构程序设计
变量X的符号函数定义如下: 例1 变量X的符号函数定义如下: 1 0 -1 X>0 X=0 X<0
Y=
根据X(127)的值求出 的值求出Y 根据X(-128 ≤ X ≤ 127)的值求出Y。 X(
(AL) )
(A)
(AX) (A*B) ) (C) (AX) )
结束
例2:实现Z=X+Y,其中,X、Y、Z均是8位带符号数。 实现Z=X+Y,其中, Z=X+Y 均是8位带符号数。
DATA SEGMENT ; 数据段 X DB 05H Y DB 04H Z DB ? DATA ENDS CODE SEGMENT ;代码段 ASSUME CS:CODE,DS:DATA : , : START: MOV AX,DATA ; 数据段基址→AX 数据段基址→ , MOV DS,AX , ; AX →DS MOV AL,X 内存单元X的数据 的数据→ , ; 内存单元 的数据→AL ADD AL,Y , ; 内存单元Y的数据 内存单元 的数据+AL→AL, 即 → , 的数据 X+Y →AL MOV Z, AL ; AL→内存单元 , 即求和结果送回 , →内存单元Z, 即求和结果送回Z MOV AH,4CH , ;送功能号 INT 21H 系统功能调用,返回DOS操作系统 ;系统功能调用,返回 操作系统 CODE ENDS END START
3.5.1

顺序结构程序设计
顺序结构程序又称直线程序。其特点是 顺序结构程序又称直线程序。其特点是按指令 书写的先后顺序依次执行,无分支,无循环, 书写的先后顺序依次执行,无分支,无循环,也无转 只作直线运行。 移,只作直线运行。
顺序结构程序设计是最常见、 顺序结构程序设计是最常见、最基本的程序设计方 法。
3.4
DOS/BIOS功能调用 DOS/BIOS功能调用
DOS操作系统 ( DOS 操作系统( 磁 盘操 作 操作系统
系统Disk Operating System) 系统 )
BIOS系统 系统( 的简称)和ROM BIOS系统(基 本输入输出系统Basic Input and 本输入输出系统
Output System) 各为用户提
在实际应用中, 在实际应用中,完全采用顺序结构编写的完整 程序很少见,但是在程序段中它却是大量的存在。 程序很少见,但是在程序段中它却是大量的存在。 所以掌握它是编写复杂应用程序的基础。 所以掌握它是编写复杂应用程序的基础。
例1:编程实现两个字节变量相乘送字变量的 程序, 程序,即C=A*B
程序: 程序:
参考程序2: 参考程序2:
SEGMENT X DB 0F8H Y DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA : , : START: MOV AX,DATA , MOV DS,AX , MOV AL,X 取变量X , ;取变量X的值 CMP AL,0 , ;X与0比较 JGE A1 MOV Y, 81H ;X < 0,Y= -1 , JMP EXIT A1: JG A2 MOV Y, 0 ;X=0,Y=0 , JMP EXIT A2: MOV Y, 1 ;X > 0,Y=1 , EXIT: MOV AH , 4CH INT 21H CODE ENDS END START 1止 止 DATA
3.3 汇编语言编程环境
与其它程序设计语言一样, 与其它程序设计语言一样,汇编语言程序的开 发过程可归结为: 发过程可归结为: 需求分析 根据需求和规模等因素划分功能模块 确定各功能模块的求解算法、并定义所需的 确定各功能模块的求解算法、 算法 数据结构(分配内存单元和寄存器),画程序 数据结构( ),画程序 流程图。 流程图。 进行编程和调试
3.5.2 分支结构程序设计
分支程序的结构有三种形式: 分支程序的结构有三种形式:
IF 条件 THEN 分支程序
开始 开始 开始
CASE 语句
N 条件 Y
Y 条件
N i=1 i=2
条件i 条件i i=n … 分支n 分支n
分支1 分支1 分支程序
分支2 分支2 分支1 分支1 分支2 分支2
结束 (a) 不完全分支结构
DOS BIOS 外设硬件接口
3.5
三种基本结构程序的设计
程序的基本结构形式有三种: 程序的基本结构形式有三种: 顺序结构 分支结构 循环结构 理论上, 结构是完备的, 理论上,三种基本结构是完备的,即任何功 能的程序都可由顺序、分支和循环三种结构实现。 能的程序都可由顺序、分支和循环三种结构实现。
(DX) )
(VARX+VARY)
(DX) )
(DX)*8
(DX) )
(DX)-(VARX)
(DX) )
(DX)/2
( X + Y ) *8 − X Z= 2
(RESUTL)
(DX) )
结束
程序: 程序:
DATA SEGMENT VARX DW 6 VARY DW 7 定位类型 RESULT DW ? DATA ENDS STACK SEGMENT PARA STACK DW 20H DUP(0) 组合类型 STACK ENDS CODE SEGMENT ASSUMECS:CODE,SS:STACK,DS:DATA PROC1 PROC FAR START: PUSH DS MOV AX,0 PUSH AX
对汇编语言而言,根据数据结构和算法进行编码到 对汇编语言而言, 形成可用程序的过程如下: 形成可用程序的过程如下:
编辑
需求分析、 需求分析、 数据结构和算法 汇编语言源程序 *.ASM 文件 *.ASM
汇编
目标代码程序 *.OBJ 文件 *.OBJ
连接 连接目标代码 源程序转换成二 和库函数代码 进制代码
相关文档
最新文档