微机原理第五章 程序设计-dsh

合集下载

微机原理与汇编语言第5章汇编语言程序设计

微机原理与汇编语言第5章汇编语言程序设计
(2) 约定段寄存器和段的关系(即物理段和逻辑 段的关系,使用一个或多个ASSUME语句实现)
(3) 装填段寄存器(只装填数据型段寄存器)
(4) 设置返回DOS的方法
例如:
MYDARA SEGMENT ……
MYDATA ENDS MYCODE SEGMENT
ASSUME CS:MYCODE,DS:MYDATA START:
无法正常连接
有算法错误
LINK .EXE文件
(1) 编辑程序
DOS 环境下用 EDIT 编辑器
WINDOWS 环境下用 记事本
(2)汇编源程序
宏汇编程序 MASM.EXE 或小汇编程序 汇编程序主要有以下功能:
① 检查源程序中语法错误,给出错误提示信息 ② 产生目标文件(.OBJ)、列表文件(.LST)及 交叉引用文件(.CRF) ③ 展开宏指令
end start
汇编后的目 标文件只有 208字节
汇编语言源程序的格式
例二 编程实现多字节加法,如 S=3B74AC60F8H+20D59E36C1H
DATA1
F8H 60H ACH 74H 3BH
……
被加数、和
DATA2
C1H 36H 9EH D5H 20H
加数
DATA SEGMENT
DATA1 DB 0F8H, 60H, 0ACH, 74H, 3BH
(3) 操作数
操作数即为操作的对象。在指令语句中,可能有 单操作数或双操作数,也可能无操作数或隐含操作数; 而在伪指令中可能有更多个操作数。当操作数不止一个 时,相互之间应该用逗号隔开。
可以作为操作数的有:常数、寄存器、标号、变量 和表达式等。
1) 常量:是指令在中出现的哪些固定值, 可以分为数值常数和字符串常数两类。

微机原理与汇编语言实用教程_第5章_运算程序设计及应用举例

微机原理与汇编语言实用教程_第5章_运算程序设计及应用举例

/webnew/
第5章 运算程序设计及应用举例 章
5.1.4 除法指令 1.无符号数除法指令DIV (Unsigned Divide Instruction) 指令格式:DIV SRC (AX) (SRC) (AX)/(SRC)商、AH AH (AX) (AX)/ 功能:如果SRC是字节操作数,则把AX中的无符号数除以SRC,得到8位 的商送AL中,8位的余数送AH中,即:AL AL 8 AH AL (SRC)余数。 如果SRC是字操作数,则把DX和AX中的无符号数除以SRC,得到16位的 商送AX中,16位的余数送DX中,即:AX (DX,AX)/(SRC)余数。 指令对标志位的影响无定义。 (DX,AX)/(SRC)商、DX
IMUL指令除了运算对象是有符号数之外,其它都与MUL指令一样,但计算结果 不同。如果乘积的高半部分有符号扩展,则CF=OF=0,否则CF=OF=1。 例5.8 有符号数0B4H与11H相乘。 MOV AL,0B4H MOV BL,11H IMUL BL ;(AL)=0B4H=-76D ;(BL)=11H=17D ;AX)=(AL)×(BL)=(-76)×17=-1292D=0FAF4H ;CF=OF=1
/webnew/
第5章 运算程序设计及应用举例 章
例5.4 DATA SUB1 SUB2 SUB3 DATA 双精度数带借位减法运算。 SEGMENT DW 7788H,5566H DW 3344H,1122H DW 0,0 ENDS … MOV AX,SUB1 SUB AX,SUB2 MOV SUB3,AX MOV AX,SUB1+2 SBB AX,SUB2+2 MOV SUB3+2,AX …
/webnew/
第5章 运算程序设计及应用举例 章

微机原理及其应用第五章

微机原理及其应用第五章
3)SHORT 用于指定某个标号的类型为“短标号”, 即使当前指令位置到指定标号的距离在-128+127 个字节的范围内
⑥ 其他运算符: 1)冒号 一般跟在段寄存器名之后,用于给存储单元 操作数指定段属性,不必考虑存储单元原来的隐含属性。 例如: MOV AX,ES: [DI] 冒号跟在段寄存器ES之后,表示段寄存器的偏移地 址由DI指定。

⑴ 常量 常量是指令中的固定值,它们在程序运 行期间不发生变化,它可以分为数值常量和字符串常 量。例如:立即数寻址时的立即数;直接寻址时的地 址;ASCII码字符串等都属于常量。在汇编语言源程序 中,数值常量可以用二进制数、八进制数(O或Q)、十 进制数和十六进制数来表示,但要用不同的后缀加以 区别。要注意的是,汇编语言要求数值常量的第一位 必须是数字,如:FFFFH应写成0FFFFH,否则汇编 时会被误作为标号处理。 ⑵ 变量 变量是指存放在存储器或寄存器中的数 据,这些数据随着程序运行可能随时会发生变化。寄 存器有固定的名字,如:AL、AX等;存储器常以其地 址或地址表达式的形式出现。应该指出,变量也有段、 偏移量和类型三个属性。
表5-1 TYPE运算结果与操作数类型的对应关系
TYPE运算结果 操作数类型 TYPE运算结果 操作数类型 1 BYTE ( DB ) -1 NEAR
2
4
WORD( DW )
DWORD( DD )
-2
FAR
例如: VAR DW 1234H ARRAY DB 56H ⋮ MOV AX,TYPE VAR MOV BX,TYPE ARRAY 上例中前两句伪指令定义了变量VAR的类型为字, 变量ARRAY的类型为字节,后两句将VAR、ARRAY 的类型对应数值送寄存器AX、BX,即执行TYPE后 AX的值应为2,BX的值应为1。

微机原理与接口技术 第5章

微机原理与接口技术 第5章

提示
(6)类型运算符PTR
5.2 汇编语言入门
格式:类型 PTR 变量、标号或表达式 功能:对已定义的变量、标号或表达式,临时转换其类型,类型可以是BYTE,WORD,DWORD, NEAR或FAR。
例如,“MOV AX, WORD PTR COUNT”,指的是将变量COUNT临时转换成字类型。
内容提要
掌握汇编语言程序的编辑、汇编、连接和调试方法。 掌握汇编语言的概念、助记符和语句格式,以及常数、表达式、标号、变量和运算符的定义与用法。 掌握汇编语言的常用伪指令的格式和用法,以及源程序的结构。 掌握汇编程序设计的基本方法。 掌握高级汇编程序设计方法。
4
5.1 汇编语言程序的编辑、汇编、连接和调试
(2)助记符
• 助记符是汇编语句中 必不可少的部分。其 中,指令助记符规定 了指令语句的操作类 型,伪指令助记符规 定了伪指令语句的伪 操作功能。
(3)操作数
• 操作数可以是寄存器、 存储器、常数、变量、 标号和表达式。指令 语句的操作数可能是 一个、两个或没有, 它们之间用逗号分隔。 而伪指令语句的操作 数根据伪操作命令的 不同而不同,有的伪 指令不允许有操作数, 有的伪指令允许带多 个操作数。
由单引号括起来的一个或多个字符,例如,'I AM A STUDENT'。
2 表达式
5.2 汇编语言入门
汇编语言中的表达式分为数字表达式和地址表达式两种。汇编时对表达式进行计算,如果表达式的结 果是一个数值,则称为数字表达式;如果表达式的结果是一个存储单元的地址,则称为地址表达式。
表达式
算术运算符
运算符 逻辑运算符
该操作符表达式只在本语句中有效,在其他地方不起作用。
注意

《微机原理》教学课件 第5章汇编语言程序设计

《微机原理》教学课件 第5章汇编语言程序设计

第5章 汇编语言程序设计
把例改写为COM程序格式,源程序如下。
;exam 5_3.asm. Seek the largest number and store in the max unit.
Com file form.
code segment
;代码段定义
assume
cs:code
main proc far
data ends
stack segment stack ‘stack’
;堆栈段定义
db 100 dup(?)
stack ends
6页
2021/8/7
code main
seek: next: main code
segment para ‘code’ ;代码段定义
assume cs:code,ds:data,ss:stack
PSP实际上是一个程序控制块,并利用它来管理系统 的进程。PSP包含了操作系统的装入程序在把该EXE 文件装入内存时所需要的有关信息,如重定位表和 初始化有关段寄存器的信息等。
当DOS加载一个可执行文件的程序代码到内存中时, 它首先为该程序建立一个程序段前缀PSP,然后把可 执行的程序代码加载到PSP后面的内存中(由CS指 示),而DS和ES初始化在PSP的起始地址。
proc far
;函数定义
push ds
;返回地址入栈
xor ax, ax
push ax mov ax, data mov ds, ax
;数据段寄存汇(器赋编Se值g语m言en程t)序构是成由的段。
lea si, buffer
;指向buffer区
mov cx, count
;数据个数送cx
dec mov

微机原理课件(09秋)第五章 汇编语言程序设计

微机原理课件(09秋)第五章 汇编语言程序设计

第五章 汇编语言程序设计
3.变量 3.变量
变量——即内存中的存储单元或数据区。 即内存中的存储单元或数据区。 变量 即内存中的存储单元或数据区 变量名——是存储单元(数据区)的符号地 是存储单元( 变量名 是存储单元 数据区) 址或名字。 址或名字。 变量也有三个属性: 变量也有三个属性:
• 段地址—变量所在段的段地址 段地址 变量所在段的段地址 • 偏移量 变量单元地址与段首地址之间的位移量 偏移量—变量单元地址与段首地址之间的位移量 • 类 型—有BYTE、WORD和DWORD三种 有BYTE、WORD和DWORD三种
字符串常数: 字符串常数:
包含在单引号中的若干字符。 包含在单引号中的若干字符。 汇编时被翻译成对应的ASCII ASCII码 汇编时被翻译成对应的ASCII码
第五章 汇编语言程序设计
2.标号 2.标号——指令所在内存单元的符号地址 标号 指令所在内存单元的符号地址
有三个属性: 有三个属性: 段地址:即标号所在段的段地址; 段地址:即标号所在段的段地址; 偏移量:标号所代表存储单元的段内偏移地址; 偏移量:标号所代表存储单元的段内偏移地址; NEAR或FAR: 类 型:NEAR或FAR: NEAR—表示标号所在语句与转移指令 表示标号所在语句与转移指令/ NEAR 表示标号所在语句与转移指令/ 调用指令在同一码段内。 调用指令在同一码段内。 FAR—标号所在语句与转移指令 标号所在语句与转移指令/ FAR 标号所在语句与转移指令/调用 指令不在同一代码段内。 指令不在同一代码段内。 若没有对类型进行说明,默认为NEAR NEAR。 若没有对类型进行说明,默认为NEAR。 转移指令或 指令的转移地址 标号通常作为转移指令 CALL指令的转移地址。 标号通常作为转移指令或CALL指令的转移地址。

微机原理第五章汇编语言程序的设计课件

微机原理第五章汇编语言程序的设计课件
DB:定义字节变量,即其后的每个操作数均占1个字节; DW:定义字变量,即其后的每个操作数均占2个字节; DD:定义双字变量,即其后的每个操作数均占4个字节; DQ:定义4字变量,即其后的每个操作数均占8个字节; DT:定义10字节变量,即其后的每个操作数均占10个字节。 注意: 存放多字节数据时,数据高字节存放在高地址单元,低字 节存放在低地址单元。
汇编语句使用说明(续)
汇编语言中的常量与变量
常量:汇编中允许的常量有整数常量和字符串常量两种。 变量:汇编语言中的变量用来表示存放在内存中操作数,它 的值是可以改变的,变量的值就是操作数在内存中首字节的地 址,变量要事先定义才能使用。对于变量,类型属性说明变量在 内存中占多少个字节,其属性有BYTE(字节)、WORD(字)、 DOUBLE WORD(双字)3种。
☆ 变量定义伪指令
初值表给出变量的初始化值,有多个值时用逗号分隔。 初始化值可以是数值常数,也可以是表达式、?,还可以 由$、重复操作符DUP组成。其中: ?表示未赋初值; $ 表示将要分配的内存单元的偏移地址; DUP表示重复初值。 格式为:重复次数 DUP(重复参数) 说明:重复参数可以是多个,之间用逗号间隔。 举例:2 DUP(1,2) ;等价于1,2,1,2
☆ 常量--整数常量
字符串常量是由单引号或双引号括起来的单个字符或多个字符构成的。汇编程序把引号中的字符翻译成它的ASCII码值。如:‘A’(等于41H)、‘BC’(等于4243H)、“HELLO”等。
☆ 常量—字符串常量
汇编语言中的运算符与表达式
运算符:汇编中的运算符分为6大类,它们是:算术运算符、 移位运算符、逻辑运算符、关系运算符、分析运算符、合成运算 符(见课本P131表5-1)。 表达式:表达式是常数、寄存器、标号、变量与一些运算 符和操作码相组合的序列。 表达式的运算不由CPU完成,而是在程序汇编过程中进行 计算确定,并将表达式的结果作为操作数参与指令所规定的操 作。 当各种运算符同时出现在同一表达式中时,按照运算符的 优先级进行计算,对于优先级相同的运算符,按照从左到右的 顺序进行计算(见课本P132表5-2)。

《微机原理与接口技术》PPT电子课件教案- 第五章 汇编语言程序设计(1)

《微机原理与接口技术》PPT电子课件教案- 第五章 汇编语言程序设计(1)
第五章 汇编语言程序设计
第一节 第二节 汇编语言程序结构 指示性语句
第三节
第四节 第五节
汇编语言程序举例
BIOS和DOS功能调用 汇编语言程序设计
1
第一节 汇编语言程序结构 一、程序结构
二、语句结构
2
第一节
例一
程序:
汇编语言程序结构
movs.asm
功能: 实现数据传送功能
数据段1
传送到
数据段2
目的: 学习程序结构
str1
str2
str1 DW ‘abcd’
str2 DD ‘abcd’
54 73 69 6e 67 48 75 61 49 4e 50 55 54 3a 0d 0a 24
‘T’ ‘s’ ‘i’ ‘n’ ‘g’ ‘H’ ‘u’ ‘a’ ‘I’ ‘N’ ‘P’ ‘U’ ‘T’ ‘:’ 0dH 0aH ‘$’
20
三、变量定义伪操作
格式 变量名 类型助记符 操作数 [ ,操作数 , ... ] ▲ 用来定义程序中所用的内存操作数。 其中 变量名指示内存操作数的地址(符号地址) 类型助记符指示内存操作数的类型(字节、字、双字等) 操作数指示内存操作数的内容 ▲ 汇编程序将定义的操作数,按其类型分配内存单元数,
26
例 用程序实现 1234H + 5678H
六、过程定义 (第五节程序设计介绍) 七、等值定义 (第五节程序设计介绍) 汇编语言程序例三 (第五节程序设计介绍)
15
指示性语句与指令性语句:
指令性语句是用指令系统中的指令构成的语句。
例 MOV AX, BX
指示性语句是指示汇编程序进行汇编的操作。
例 MOV AX, 4 + 8
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

INT
COSEG
21H
ENDS END START
第三节 分支程序
计算机可根据不同条件进行逻辑判断,从而选择不同 的程序流向。程序的流向是由 CS和 IP决定的,当程序 的转移仅在同一段内进行时,只需修改偏移地址 IP的 值;如果程序的转移是在不同的段之间进行,则段基 址 CS和偏移地址 IP均需要修改。 转移指令分为无条件转移指令和条件转移指令。 在进行分支程序设计时,首先要根据处理的问题用比 较、测试的方式,或者用算术运算、逻辑运算使标志 寄存器产生相应的标志位,根据转移条件选择转移指 令。
INC INC DEC JNZ
BX BX CX LOP ; ;控制部分
修改部分
MOV YY,AX MOV AH,4CH INT CODE ENDS 21H
END
START
一.循环的基本结构
1.先执行,后判断结构
流程图如右:
入口
初始化部分
循环体
修改部分
N
循环 结束? Y 出口
例2. 编程统计数据块中正数的个数,
Y
RS END (DX)
DATA
SEGMENT
D1
COUNT RS DATA CODE
DB,-1,-3,5,7,-9,·,-6 · ·
EQU DW ENDS SEGMENT ASSUME CS:CODE,DS:DATA $-D1 ?
START:
MOV
AX,DATA
MOV
MOV MOV MOV
DS,AX
JMP JUS2
BIGD: JG JUS1 ;x>0转移 ;x=0
MOV AL, 0
JMP
JUS1: JUS2:
JUS2
;x>0
MOV AL, 1 MOV YY, AL MOV AH, 4CH INT 21H
CODE
ENDS
END START
例2. 数据块搬移程序 程序要求把内存中一数据块(源数据块)传送到内存的另一 存储区(目标数据块)。为了程序的通用性,应考虑以下三种 情况: (1)两块分离 (2)两块重叠,源数据块首址<目标数据块首址 (3)两块重叠,源数据块首址>目标数据块首址 根据图示三种情况分析,可得出以下规律:
当源数据块首址>目标数据块首址:从数据块首地址开始传送。
当源数据块首址<目标数据块首址:从数据块末地址开始传送。
(1)两块分离
(2)两块重叠
(3)两块重叠
源数 据块
• • • • • •
源数 据块
目标 数据 块 目标数 据块 源数 据块
目标 数据 块
传送方向任意
源数据块首址<目标 数据块首址。传送从 数据块末地址开始
例4. 编程计算 C ai bi a1 b1 a2 b2 a3 b3 a4 b4
i 1 4
设aibi为 8位无符号数,运算结果不超过 16位二进制数。 解: BUFA中存放a1,a2,a3,a4, BUFB 中存放b1,b2,b3,b4,存 储单元 C中放结果。SI 放 BUFA偏移地址,DI 放 BUFB偏 移地址,CX 作计数器。 流程图及程序如下:
DW a11,a12,·a20 · ·
YY
DATA CODE
DW?
ENDS SEGMENT ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA MOV MOV DS,AX AX,0
MOV
MOV
BX,OFFSET TABL
CX,20 ;
初始化
LOP:
ADD
AX,[BX]
; 循环体
1.分析问题,建立数学模型
2.确定算法
3.编制程序流程图
4.编制程序
5.调试程序
一个源程序的基本格式如下: DATA SEGMENT
• • •
;存放数据项的数据段
DATA EXTRA
ENDS SEGEMNT
• • •
;存放数据项的附加段
EXTRA STACK1 STACK1 CODE
ENDS SGMEN PRA STACK •
DW
ENDS

SEGMENT PARA STACK ENDS SEGMENT
ASSUME CS:COSEG
ASSUME DS:DATA ASSUME SS:STACK1 START: MOV AX , DATA
MOV MOV ADD MOV
DS , AX DX,VARX DX,VARY CL , 3 ;DX ;DX X X+Y
(2)程序流程图和程序如下:
(X+Y)*8-X = 2
开始
预置段寄存器 DX X DX (DX)-X DX左移3次 (X+Y)*8
DX X+Y
DX右移得
((X+Y)*8-X)/2
RESULT DX 结束
DATA VARX VARY
SEGMENT DW 0006H DW 0007H
RESUL
DATA SACK1 SACK1 COSEG
COSEG
SEGMENT
ASSUME CS:COSEG, DS:DATA, SS:STACK1
START: MOV
AX, DATA
MOV
MOV MOV
DS, AX
AH, 0 AL, XX
MOV
ADD MOV MOV MOV
BX, OFFSET TABLE
BX, AX AL, [BX] YY, AL AH, 4CH
源数据块首址>目标 数据块首址。传送从 数据块首地址开始
程序流程图如下:
START
预置段R
SI 源数据块首址 DI 目标数据块首址 CX 传送字节数
N
SI SI+CX-1 DI DI+CX-1 (DI) (SI)
SI>DI?
Y
(DI) (SI)
SI SI-1 DI DI-1 CX CX-1
SI SI+1 DI DI+1 CX CX-1
BX,OFFSET D1 CX,COUNT DX,0
LOP1:
MOV CMP JLE INC
AL,[BX] AL,0 JUSTI DX BX CX LOP1
JUSTI:
INC DEC JNZ
MOV
MOV INT CODE ENDS END
RS,DX
AH,4CH 21H
START
2.先判断,后执行结构
INT CODE ENDS END START 21H
第二节 顺序结构程序
例1 编制程序,求下列公式中的Z值,并将结果存放 到RESULT单元中。
Z
设X,Y的值分别存放在VARX,VARY单元中, 运算结果不超过16位。 解:(1)存储单元 RESULT 用来存放结果,VARX 和 VARY 放 X、 Y的值。寄存器 DX 放中间运算结果,左移 1 位相当于乘 2,右 移 1 位相当于除 2,所以可以用左移 3 位得到乘以 8 的结果。
N
CX=0?
CX=0?
END
N
Y
Y
编程如下: DATA DA SEGMENT DB 200 DUP (‘1,2,3,4,5’)
DA1
DA2
EQU
EQU
DA+10H
DA+50H 50
COUNT EQU DATA STACK1 ENDS
SEGMENT PARA STACK
DW
STACK1 COSEG
20H
ENDS
DUP (0)
SEGMENT ASSUME CS:COSEG,DS:DATA
ASSUME
SS:STACK1
MOVE:
MOV AX,DATA
MOV DS,AX MOV CX,COUNT MOV SI,OFFSET DA1 MOV DI,OFFSET DA2 ;源串首偏址 SI ;目标串首偏址 DI
1 x>0 其中 x为8位有符号数 y= 0 x=0 -1 x<0 开始 解:设 x的值放在 XX单元中, y的值放在 YY单元中。寄存器
选用 AL存放中间结果。 预置段R AL X N AL>0 N AL -1 AL 0 Y AL 结束 Y AL>0 Y AL 1
例1. 符号函数
流程图及程序如下:
a
i 1
20
i
设 a1,a2,·a20是一组无符号十六位二进制数,并设其 · · 和不大于2个字节 。 解:定义数组名TABL存放 a1~a20;和存放于单元YY中。 中间结果存于寄存器AX中。BX寄存器为地址指针, CX寄存器作计数器。 程序如下
DATA
TABL
SEGMENT
DW a1,a2,·a10 · ·
DATA XX YY
SEGMENT DB DB x ?
DATA
CODE
ENDS
SEGMENT ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA MOV DS, AX
MOV AL, XX
CMP JGE MOV AL, 0 BIGR AL,-1 ;x-0建标志位 ;x> 0转移 ;x<0
START
预置段R SI 0 DI 0 C 0 CX 4 AX 0 C=C+ai*bi
SI SI+1 DI DI+1
N CX-1=0? Y END
入口
流程图如右
初始化部分
循环 结束?
N 循环体
Y 出口
修改部分
例3. AX寄存器中有一个 16位的二 进制数,编程统计其中值为 1的位的 个数,并将结果存于CX中。
相关文档
最新文档