汇编语言第五章.
汇编语言(王爽)学习记录_第五章
汇编语⾔(王爽)学习记录_第五章第五章 [bx]和loop指令1. [bx]和内存单元的描述在debug中mov ax,[0]表⽰将ds:0中的字型数据送⼊ax寄存器,⽽在编译器中此命令表⽰将0数据送⼊ax,则需改为mov ax,[bx]。
间直接是编译器将内存单元送⼊ax。
完整描述⼀个内存单元:1.内存单元的地址,2.内存单元的长度(类似al字节型,ax字型)2.looploop循环的意思3.我们定义的描述性的符号:“()”⽤“( )”表⽰⼀个寄存器或⼀个内存单元的内容,(al)、(20000H)、((ds)*16+(bx))⽐如add ax,2 描述为:(ax) = (ax)+2(X)可表⽰两种数据类型:字,字节。
取决于寄存器或具体的运算⽐如(al)表⽰字节型数据(ax)表⽰字型数据。
4.约定符号idata表⽰常量例如mov ax,[idata] 可表⽰mov ax,[1]、mov ax,[5]。
mov ax,idata可表⽰mov ax,1、 mov ax,3。
等等5.1 [bx]mov ax,[bx],可以看成是:mov bx,idata mov ax,[bx]问题5.1需要注意的是数据类型是字节型还是字型,其他就跟着题⽬看就是了。
5.2 loop指令loop指令与cx通⽤寄存器有关,执⾏loop时要进⾏两步操作:1.(cx) = (cx)-1 、2.判断(cx)不为0则执⾏标号处程序。
例:求2的12次⽅assume cs:codecode segment mov ax,2 mov cx,11s: add ax,ax loop s mov ax,4c00h int 21hcode endsend其中s是标号,当cx不为0时转⾄s处程序。
问题5.2 ⽤加法计算123*236assume cs:codecode segment mov ax,0s: add ax,123 loop s mov ax,4c00h int 21hcode endsend问题5.3 上⾯程序循环236次可以改进程序为循环123次assume cs:codecode segment mov ax,0 mov cx,123s: add ax,256 loop s mov ax,4c00h int 21hcode endsend5.3 在debug中跟踪⽤loop指令实现的循环程序问题:计算ffff:0006单元中的数乘以3结果存储在dx中 (1)考虑dx存储范围:ffff;0006是字节型数据0~255,乘3不会超过65535。
汇编语言 第五章
2012-8-12
14
数据段定义如下:
DATA STRING DATA
SEGMENT DB ENDS
‘HOW ARE YOU!’,0
2012-8-12
15
CODE START: AGAIN:
NEXT:
SEGMENT ASSUME MOV MOV MOV MOV OR JZ CMP JB CMP JA OR MOV INC JMP
2012-8-12
10
数据段定义如下:
DATA ADDR NUMBER COUNT DATA
SEGMENT DW NUMBER DW Y DW ? ENDS
2012-8-12
11
CODE
START: MOV
REPEAT:
SHIFT: EXIT: CODE
SEGMENT ASSUME CS:CODE,DS:DATA AX,DATA MOV DS,AX MOV DX,0 MOV CX,16 MOV BX, ADDR MOV AX,[BX] TEST AX,0FFFFH JNS SHIFT INC DX SHL AX,1 LOOP REPEAT MOV COUNT,DX MOV AH,4CH INT 21H ENDS END START
2012-8-12 5
ห้องสมุดไป่ตู้
MOV INT AND CMP JB CMP JA SUB XOR ADD MOV JMP …. OK: MOV INT COMA:….. JMP ….. COMH:…. JMP
AH,1 21H AL,11011111B AL,’A’ OK AL,’H’ OK AL,’A’ AH,AH AX,AX BX,AX COMTAB[BX] AH,4CH 21H OK
第5章汇编语言应用
DATA、BIT、END等8项中的任意一项。
下面分别介绍这些伪指令的功能:
1.设置起始地址ORG(Origin)
ORG <nn> 其中,ORG是该伪指令的操作码助记符,操作数nn是16位
二进制数(或者是4位十六进制数),前者表明为后续源 程序经汇编后的目标程序安排存放位置,后者则给出了 存放的起始地址值。
例如: LOOP:MOV A, R0 ;(R0) →A 标号 操作码 目的操作数 源操作数 注释 下面分别解释这四个字段的含义: 1)标号:标号是用户设定的一个符号,表示存放指令 的存储单元的地址。标号由以字母开始的1—8个字母或 数字串组成,以冒号结尾。不能用指令助记符、伪指令 或寄存器名来作标号。 标号是任选的,并不是每条指令或数据存储单元 都要标号,只在需要时才设标号,如转移指令所要访问 的存储单元前面一般要设置标号。 一旦使用了某标号定义一地址单元,在程序的 其它地方就不能随意修改这个定义,也不能重复定义。 特别说明:在汇编程序中,除伪指令EQU、DATA、BIT前面 的标号后面不用“:”以外,其它标号后面都用“:”
知识点
1.汇编语言格式
2.汇编语言的伪指令 3.顺序结构程序
4.分支结构程序
5.循环结构程序 6.子程序
源程序
目标程序
低级语言
汇编
机器语言
反汇编
高级语言
编译 反编译
机器语言
机器语言:机器语言是用二进制代码表示的计算 机能直接识别和执行的一种机器指令的集合。 汇编语言:汇编语言(Assembly Language)是一种 低级的面向机器的程序设计语言。
程序按下述要求给Y赋值,结果存入FUNC(31H)单元。
第05章汇编语言及程序设计ppt课件
汇编语言 源程序
汇编
目标程序
汇编程序
一一对应
汇编语言的指令
机器语言的指令
汇编语言程序设计的特点:
➢ 汇编语言是面向机器的语言,CPU不同的机器有不同 的汇编语言
➢ 可以充分利用机器的硬件功能和结构特点
➢ 可有效地加快程序的执行速度,减少目标程序所占用 的存储空间
➢ 可以对输入/输出端口进行控制,实时性能好 ➢ 汇编语言程序移植性、通用性、可读性差
第 5 章 程序设计及汇编语言
内容安排
一. 程序设计步骤 二. 程序设计 三. 汇编语言及汇编程序 四. 汇编语言源程序格式及实例 五. 上机操作
§5.1 程序设计步骤
(1〕分析问题 (2〕建立数学模型 (3〕确定算法 (4〕绘制程序流程图 (5〕内存空间分配 (6〕编制程序与静态检查 (7〕程序调试〔实验)
[名字] DW <表达式或数据项表> 功能:表达式或项表中的每一项是一个/两个字
节数,他们从符号名地址开始按字节连续存放, 如:直D到1 表中DB数据12H项, 结12H束 12H
D1 DB 3 DUP (12H) MOV AX, D1
注意:① 表达式或数据项表多于一项时,项与项之间用 逗号“,”或空格分隔
MOV BL,0FFH ;将FFH送入BL寄存器
LOut: MOV AL,BL
OUT 73H,AL ;将结果的标志数据输出到 73H端口
HLT
;暂停
Lw10: MOV BL,00H
JMP LOut
L10to20: MOV BL,88H
JMP LOut
3. 循环程序
强制CPU重复执行某一指令系列〔程序段〕的一种程序 结构形式
组成:
汇编语言程序设计第5章
6.整理文档
程序设计的结果包括两大部分,一是程序,二是文档。这 里讲的文档主要是包括各个设计阶段的规格说明书,以及用户 使用手册等。这是用户使用、维护程序的依据。 7.软件测试
测试是保证软件质量的重要手段,其主要方式是在设计测
试用例的基础上检验软件的各个组成部分。首先是进行单元测 试,查找各模块在功能和结构上存在的问题并加以纠正。其次 是进行组装测试,将已测试过的模块按一定顺序组装起来。最 后按规定的各项需求,逐项进行有效性测试,决定已开发的软 件是否合格,能否交付用户使用。
4.编码 这个阶段也称为程序编制或编程,主要是选择一种程序设
计语言,并用此语言具体地实现所设计的算法。
5.调试与排错
通过调试来排除程序中的错误,保证程序的正确。一般要作
静态检查和动态运行。静态检查包括人工检查和上机进行语法
检查;动态运行就是根据程序在工作中所有可能的情况,例如,
输入各种不同的初始数据,检查程序执行是否正确。
例5-1 若内存的数据段中,有缓冲区BUFFER,存取数据的
规则是先存储一个16位带符号的被除数,再存储一个16位带符
号的除数,接着存储商,最后存储余数。 DATA SEGMENT
BUFFER DW 812DH
DW 013CH DW ? DW ? DATA ENDS
;被除数
;除数 ;存商 ;存余数
STACK
JNC LABEL JO JNO JS LABEL LABEL LABEL
JNS LABEL
JP/JPE LABEL JNP/JPO LABEL
SF=0
PF=1 PF=0
为正时转移
结果为偶时转移 结果为奇时转移
(2) 根据两个无符号数比较结果来决定转移的条件转移指令
汇编语言(王爽)第五章
汇编语⾔(王爽)第五章
第五章 [BX]和loop指令
*Loop指令
格式:loop 标号
等同步骤:(1)(cx)=(cx)-1;(2)若(cx)!=0,跳转到标号位置继续执⾏。
*Debug的相关命令及说明
g命令:g 偏移地址;使得执⾏到cs:偏移地址处停⽌;
p命令:使Debug程序⾃动重复执⾏代码中的循环指令,直到(cx)=0为⽌。
⽤Debug中直接写⼊指令,[idata]可以表⽰((段地址)*16+idata)处的值;⽽如果在汇编源代码中[idata]会被编译器masm处理为idata这个数值。
所以在汇编源代码中当使⽤⽴即数来表⽰偏移地址时,须加前缀以显式表明,⽐如:ds:[idata]。
*⽰例:计算ffff:0~ffff:b内存单元中数据的和,结果存储在dx中。
;1.每个内存单元⾥的数值是单字节类型,⽽dx是双字节寄存器
;2.总计12个内存单元的数据和最⼤为255*12<65535,不会产⽣溢出
assume cs:code
code segment
mov ax,0ffffH
mov ds,ax
mov bx,0;存储⽬标位置偏移地址
mov dx,0;初始化结果
mov ah,0;设置中转数的⾼位
mov cx,12
s:
mov al,[bx]
add dx,ax
inc bx
loop s
mov ax,4c00H
int 21H
code ends
end
*⼀段安全的空间:汇编学习过程中可以使⽤00200h~002ffh这段空间,总计256个字节。
汇编语言第五章
ASSEMBLY
LANGUAGE
软件开发按照软件工程的方法进行,主要包括: 系统分析:对用户的需求进行分析并最终对问题 做出明确的定义。 系统设计:根据对问题的定义,用能容易转变成 程序的方式对任务做出描述。 程序编码:系统设计的实施。用计算机能够直接 理解或能进行翻译的形式编写程序。 代码调试:验证程序设计的正确性。 系统维护:对系统进行日常维护、做必要的改进 等。 以上各步必须认真检查,发现错误应及时纠正, 绝不可以拖延至下一阶段。
RDKB:
MOV AH,1 ;等待输入选择号 INT 21H CMP AL,31H ;选择合法性检查 JB BEEP ;若非法则转移 CMP AL,35H JA BEEP AND AL,0FH ;ASCII码转换为非压缩 XOR AH,AH ;BCD码 DEC AX ;得到索引值(K=N-1) ADD AX,AX ; 计算一项的位移量 LEA BX,JMP_TAB ;装入表首址 ADD BX,AX ;得到表项地址 JMP [BX] ;按表项地址转移
PUSHF CMP BX,SI JZ NOFID JL MOV JMP LESS: MOV NEXT: INC JMP NOFID: LEA MOV INT JMP
LESS SI,BX SHORT NEXT DI,BX ;调整上限 DX ;查找次数加1 C1 DX,PROMPT ;显示未找到提示信息 AH,9 21H SHORT EXIT
开始
结束
顺序结构
例. 设置光标到屏幕左上角。 SET_CUR PROC MOV AH,2 MOV BH,0 MOV DX,0 INT 10H RET SET_CUR ENDP 这个程序是顺序执行的,一条指令执行后 顺序执行紧接其后的另一条指令。实际上许多 程序片段都具有顺序结构。
王爽《汇编语言》 第5章 [BX]和LOOP指令
(21006H)=BEH
CS:CODE : SEGMENT 循环控制指令LOOP 二、循环控制指令 MOV AX,2 , 作计数器控制程序的循环。 用CX作计数器控制程序的循环。 作计数器控制程序的循环 MOV CX,11 , 格式: 格式:LOOP 标号 ;CX≠0循环 循环 S: ADD AX,AX : , 功能: )-1; 功能:当CX≠0时,( )=(CX)- ;转移到标号处 时,(CX) ( )- LOOP S 循环执行。 利用 循环执行。 利用LOOP指令编程计算 12 指令编程计算2 指令编程计算 MOV AX,4C00H , INT 21H 2:编程,用加法计算123×236,结果存在AX中 例2:编程,用加法计算123×236,结果存在AX中。 CODE ENDS END ASSUME CODE CX和LOOP指令配合实现循环功能的三个要点: 和 指令配合实现循环功能的三个要点: 指令配合实现循环功能的三个要点 1、在CX中存放循环次数 、 中存放循环次数 2、LOOP指令中的标号所标识地址要在前面 、 指令中的标号所标识地址要在前面 3、要循环执行的程序段写在标号和LOOP指令之间。 、要循环执行的程序段写在标号和 指令之间。 指令之间
七、一段安全的空间
汇编语言程序直接面向机器, 汇编语言程序直接面向机器,如果我们要向 内存空间写入数据时, 内存空间写入数据时,要保证所写入的内存中没 有重要的数据,否则会影响系统的正常运行, 有重要的数据,否则会影响系统的正常运行,在 一般的PC机中都不使用 机中都不使用0: 一般的 机中都不使用 :200—0:300这段内存 : 这段内存 空间,所以我们可以放心使用这段安全的空间。 空间,所以我们可以放心使用这段安全的空间。
一、[BX]
《汇编语言程序设计》第5章基本汇编语言程序设计.ppt
5.1 汇编语言程序的设计步骤
汇编语言程序设计的基本步骤
例5.1 在100个字的无符号整数字中找出最 大数。
5.1 汇编语言程序的设计步骤
汇编语言程序设计的基本步骤
5.2 顺序结构的程序设计
(2)输出:在8086.8088指令系统中,字符的输出是由 DOS21H中断的02H子功能来实现的,命令序列如下: MOV AH,02H INT 21H 其作用是将寄存器DL中所存放的字符进行显示输出, 故在执行该命令序列之前,应先将被输出字符的ASCII 码存入DL中。
程序的基本结构
1.顺序结构 2.分支结构 3.循环结构
ห้องสมุดไป่ตู้
5.1 汇编语言程序的设计步骤
程序的基本结构 1.顺序结构
5.1 汇编语言程序的设计步骤
程序的基本结构 2.分支结构
5.1 汇编语言程序的设计步骤
程序的基本结构 3.循环结构
5.1 汇编语言程序的设计步骤
第5章基本汇编语言程序设计
1.分析题意,确定数据结构和算法 (1)初始化,建立一个数据指针指向数据区的首
地址; (2)将第一个数存入寄存器(如AX)中; (3)调整数据指针,使其指向下一个数; (4)将数据指针所指的数与寄存器AX的内容相比
较,如果该数较大,则将其存入AX,否则丢掉; (5)重复执行(3)、(4)两步,直至将数组中
分析:比较两数可用CMP指令,而带符号数的比 较结果可由标志位SF、OF来确定,选用的转移 指令应为JG、JL等。
第5章基本汇编语言程序设计
5.1 汇编语言程序的设计步骤 5.2 顺序结构的程序设计 5.3 分支结构的程序设计 5.4 循环结构的程序设计 5.5 子程序设计
汇编语言课件第05章
11/37
第五章 汇编语言顺序程序设计
乘法指令只影响CF和 , 乘法指令只影响 和OF,其它条件码无定义 。 1)MUL: 若乘积的高一半为 ,则CF=OF=0, ) : 若乘积的高一半为0 , 否则, 否则,CF=OF=1。 。 2)IMUL:若乘积的高一半是低一半的符号位的扩展, 2)IMUL:若乘积的高一半是低一半的符号位的扩展, 则,CF=OF=0,否则,CF=OF=1。 ,否则, 。
13/37
第五章 汇编语言顺序程序设计
一、算术指令(5类) 算术指令( 类 1. 加法指令(ADD,ADC,INC) 加法指令( , , ) 2. 减法指令(SUB,SBB,DEC,NEG ,CMP ) 减法指令( , , , 3.乘法指令 MUL,IMUL) 3.乘法指令(MUL,IMUL) 乘法指令( 4.除法指令(DIV,IDIV) 除法指令( 除法指令 , ) 5.十进制调整指令(DAA,DAS等) 十进制调整指令( 十进制调整指令 , 等
12/37
第五章 汇编语言顺序程序设计
如何区分MUL和IMUL 和 如何区分 (1111,1111B)×(1111,1111B) , ) , ) 看作无数号数,上式为: 看作无数号数,上式为:FFH×FFH=FFE01H × 看作带符号数,上式为:(-1) 看作带符号数,上式为:( )×(-1)=1 :( ) 选用MUL或IMUL应根据实际情况而定。 或 应根据实际情况而定。 选用 应根据实际情况而定
21/37
第五章 汇编语言顺序程序设计
本章内容分三节: 本章内容分三节: 5.1 算术指令 5.2 逻辑指令 5.3 顺序程序举例
22/37
第五章 汇编语言顺序程序设计
二、逻辑指令 逻辑运算指令( 1. 逻辑运算指令(5个) 移位指令( 2. 移位指令(8个)
汇编语言程序设计电子稿第五章
第五章 汇编语言程序设计
5.2 汇编语言程序设计的基本方法和步骤 1 汇编语言程序设计基本步骤
一般来说,编制一个汇编语言程序的步骤如下: v 分析题意,确定算法或算法思想。 v 根据算法画出流程图,简单的情况也可不画。 v 分配存储空间和工作单元,合理地使用寄存器。 v 根据流程图编写程序。 v 上机调试运行程序。 v 编写说明文件
❖ 由于模块相互独立,因此在设计其中一个模块时,不会受 到其它模块的牵连,因而可将原来较为复杂的问题化简为 一系列简单模块的设计。模块的独立性还为扩充已有的系 统、建立新系统带来了不少的方便,因为我们可以充分利 用现有的模块作积木式的扩展。
第五章 汇编语言程序设计
5.2 汇编语言程序设计的基本方法和步骤 2 结构化程序的概念
❖ 如果段是代码段,则其长度是其所有指令所占字节数的总和。
❖ 在定义段时,每个段都有一个段名。在取段名时,要取一个具有 一定含义的段名。
5.1 源程序的基本结构
段的定义
○ 段定义的一般格式如下:
○ 段名
SEGMENT
[对齐类型] [组合类型]
[类别]
○ … ;段内的具体内容
○…
○ 段名
ENDS
Annual Work Summary Report
第五章 汇编语 言程序设计
汇报人 | 小智
第五章 汇编语言程序设计
5.1 源程序的基本结构
汇编语言源程序的组成部分有:模块、段、子程序和 宏等。一个模块对应一个目标文件,当开发较大型的 应用程序时,该程序可能由若干个目标文件或库结合 而成的。有关子程序的知识和宏将在后续章节介绍, 本章将介绍程序段及程序结构。
功能说明
下一个字节地 址 下一个字地址 下一个双字地 址 下一个节地址 下一个页地址
《汇编语言》第5章
•
•
•
描述性符号“()”
•
(5)对于 add ax,2 的功能,我们可以这样来描述: (ax)=(ax)+2; (6)对于add ax,bx的功能,我们可以这样来描述: (ax)=(ax)+(bx); (7)对于push ax的功能,我们可以这样来描述: (sp) = (sp)-2
•
•
((ss)*16+(sp))=(ax)
26
5.2 Loop指令
程序的执行过程: mov cx,11 s: add ax,ax
loop s
(22)执行add ax,ax(第11次); (23)执行loop s 将(cx)减1,(cx)=0,(cx)为0,所以向下执 行。 (结束循环)
27
5.2 Loop指令
从上面的过程中,我们可以总结出用cx 和loop 指令相配合实现循环功能的三个 要点:
22
5.2 Loop指令
程序的执行过程:
mov cx,11
s: add ax,ax
loop s
(6)执行add ax,ax(第3次); (7)执行loop s 将(cx)减1,(cx)=8, (cx)不为0,所以转至s 处; (8)执行add ax,ax(第4次); (9)执行loop s 将(cx)减1,(cx)=7, (cx)不为0,所以转至s 处;
•
•
•
任务1:编程计算2∧ 2,结果存放在ax中。 任务1分析 任务2:编程计算2∧ 3。 任务2分析 任务3:编程计算2∧ 12。 任务3分析
18
5.2 Loop指令
程序分析:
(1)标号 在汇编语言中,标号代表一个地址,此程序中有 一个标号s 。它实际上标识了一个地址,这个地 址处有一条指令:add ax,ax。 (2)loop s
汇编语言第5章王爽版(子程序调用指令)
例5-1:分别用三种参数传递方法编写求1+2的和的程序。要求将结果送到内存单元,并显示。
DATA SEGMENT SUM DB 0 DATA ENDS STACK SEGMENT DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA MOV DS,AX MOV AL, 1 MOV BL, 2 CALL subprog mov ah,4cH int 21h CODE ENDS END START
5.2 子程序的定义、调用和返回(续)
子程序返回指令(RET)
RET [n] 功能:弹出CALL指令压入堆栈的返回地址 段内返回——偏移地址IP出栈 IP←SS:[SP], SP+2 段间返回——偏移地址IP和段地址CS出栈 IP←SS:[SP],SP←SP+2 CS←SS:[SP],SP←SP+2
子程序的概念
子程序的现场保护与参数传递**
子程序的嵌套与递归调用
子程序的定义、调用和返回 **
子程序设计 *
宏汇编程序设计
教学基本内容
第5章 结构化程序设计
子程序:在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。 过程(子程序):是指功能相对独立的一段程序。 主程序和子程序间的关系:调用子程序的程序称为主调程序或主程序,被调用的程序称为子程序。
Spr PROC PUSH BP MOV BP, SP MOV AX, [BP+6] MOV BX, [BP+4] ADD AL, BL OR AL, 30H MOV DL,AL MOV AH,2 INT 21H MOV SUM, AL POP BP RET Spr ENDP
汇编语言第五章
二.模块装配
连接程序(LINK)的功能 将制定的若干个目标模块(.OBJ)和子程序 库(.LIB)中的子程序模块连接在一起,生成可 执行的文件(.EXE)
二.模块装配
NAME WAN2 EXTRN DIV0:WORD, COUNT:WORD PUBLIC WAN2
DATA1 SEGMENT PARA PUBLIC ‘A1’ SUM DW 0 DATA1 ENDS STACK SEGMENT PARA STACK ‘STACK’ DB 200 DUP(0) STACK ENDS
DATA1 SEGMENT PARA PUBLIC ‘A1’ BEG EQU 1 COUNT DW 50 DIV0 DW 0 DATA1 ENDS STACK SEGMENT PARA STACK ‘STACK’ DB 200 DUP(0) STACK ENDS CODE SEGMENT PARA PUBLIC ‘B1’ ASSUME DS:DATA1, SS:STACK, CS:CODE START: MOV AX, DATA1 MOV DS, AX MOV BX, BEG MOV CX, COUNT CALL WAN2 MOV AH, 4CH INT 21H CODE ENDS END START
二.模块装配
定位方式: 连接时段首址可以不从一小段开始,从何处开始由定 位方式确定。
① PARA:该段要从能被16整除的地址处开始存放;
② WORD:该段要从一个偶数地址处开始存放; ③ BYTE:该段可以从任何地址开始存放; ④ PAGE该段要从能被256整除的地址处开始存放
。
二.模块装配
连接时把’类别’相同的所有段存放在连续
5.3 模块化程序设计
作用:用于大型程序系统的设计。通过模块
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(3)TYPE运算符
•格式:TYPE 变量或标号 •功能:分离出其后变量或标号的类型。如果是变量,将 返回该变量的类型对应字节数;如果是标号,则返回代 表标号类型的数值。它们之间的关系见表3.2所示。
例如: ARRAY DW ? ADD SI, TYPE ARRAY ; ADD SI,2
2018/9/20
4
2.逻辑运算符
•逻辑运算符包括:
逻辑与(AND)、逻辑或(OR)、异或(XOR)、逻辑 非( NOT )四种运算。由于逻辑运算是按位操作,且在汇 编过程中完成,因而运算的结果仍为整数常量。 •【例】用逻辑运算符进行运算。
MOV AL,34H AND 0FH
MOV BL,05H OR 30H MOV CX,NOT 00FFH MOV DX,789AH XOR 000FH
2018/9/20
17
w=(v-(x*y+z-540))/x
图 5 . 1 顺 序 运 算 程 序 流 程 图
2018/9/20
源程序见LB5-1.ASM
18
LB5-1.asm,计算(v-(x*y+z-540))/x
2018/9/20 10
(4)LENGTH运算符 格式:LENGTH 变量 功能:对于变量中使用DUP的情况,汇编程序将回送分 配给该变量的单元数,而对于其他情况则送1。 【例】取出变量占存储单元个数。 DATA SEGMENT A DB ‘ABCDEF’ B DW 10 DUP(1,2 DUP(2)) C DW 3,20 DUP(0) DATA ENDS ┆ MOV AX,LENGTH A ;1→AX MOV BX,LENGTH B ;10→BX MOV CX,LENGTH C ;1→CX ┆ 2018/9/20
AX,‘A‘ EQ 41H BX,NUM2 LT NUM1
2018/9/20
6
4.属性运算符
(1)PTR运算符 格式: 类型 PTR 地址表达式 (2) PTR与EQU连用,可定义与PTR右边地址表达式 类型不同的新变量名或新标号,但不另分配存储 单元。 例如: TWO_BYTE DW ? ONE_BYTE EQU BYTE PTR TWO_BYTE OTHER_BYTE EQU BYTE PTR (TWO_BYTE+1)
2018/9/20 13
三、阅读程序L6.ASM
2018/9/20
14
第五章 循环与分支程序设计
5.1 概述 5.2 顺序程序设计 5.3 分支程序设计 5.4 循环程序设计
2018/9/20
15
汇编语言程序设计的一般步骤
汇编语言程序设计一般有以下几个步骤: 1.分析问题,确定算法 2.绘制流程图 3.根据流程图编制程序 4.调试程序
2018/9/20
3
【例】用算术运算符进行数值表达式运算。 ┆ NUM1 EQU 25*4 –50 ;NUM1=50 NUM2 EQU NUM1 / 7 ;NUM2=7 NUM3 DB NUM1 MOD 7 ;NUM3=1 VAR1 DB 1,2,3,4,5 VAR2 DB ‘12345’ NUM4 EQU VAR2-VAR1 ;NUM4=5 NUM5 EQU 0FH ┆ MOV AL,NUM5 SHL 4 ;(AL)=11110000B MOV BL,NUM5 SHR 4 ; (BL)=00000000B
2018/9/20
7
5.数值返回运算符
(1)SEG 运算符 (2)OFFSET运算符 (3)TYPE运算符 (4)LENGTH运算符 (5)SIZE运算符 (6)字节分离运算符
2018/9/20
8
(1)SEG 运算符 格式:SEG 变量或标号 功能:分离出其后变量或标号所在段的段首址。 例如: MOV AX,SEG ARR MOV DS,AX (2)OFFSET运算符 格式:OFFSET 变量或标号 功能:分离出其后变量或标号的偏移地址。 例如: MOV BX,OFFSET BUF
2018/9/20
12
(6)字节分离运算符 字节分离运算符包括:HIGH和LOW。 格式:HIGH 常量或地址表达式 LOW 常量或地址表达式 功能:HIGH 用来分离出其后16位常量或地 址表达式的偏移量的高字节; LOW 用来 分离出其后16位常量或地址表达式偏移量 的低字节。
例如: CONST DW 0ABCDH MOV AH, HIGH CONST ; 0ABHAH
;04H→AL
;35H→BL ;0FF00H→CX ;7895H→DX2018/9/20来自53.关系运算符
•关系运算符包括: 相等(EQ),不等(NE),小于(LT),大于 (GT),小于等于(LE)及大于等于(GE)。 •【例】用关系运算符进行数值表达式运算。
NUM1 DB NUM2 DB MOV MOV 10 LT 5 0AAAH GT 7FFH ;NUM1=0 ;NUM2=0FFFFH ;0FFFFH→AX ;0→BX
2018/9/20
16
5.2 顺序程序设计
下面举例说明顺序程序的设计。 【例5.1】试编写一程序计算以下表达式的值。 w=(v-(x*y+z-540))/x 式中x、y、z、v均为有符号字数据。 设x、y、z、v的值存放在字变量X、Y、 Z、V中,结果存放在双字变量W之中,程序 的流程图如图5.1所示。
一、阅读程序LBC4-1.ASM
2018/9/20
1
二、表达式与运算符
1.算术运算符 2.逻辑运算符 3.关系运算符 4.属性运算符 5.数值返回运算符
2018/9/20
2
1.算术运算符
• 算术运算符包括: +(加)、-(减)、*(乘)、/ (除)、 MOD (求模)、 SHL (左移)、 SHR (右移)几种,它既可以用于数值 表达式又可用于地址表达式。
11
(5)SIZE运算符 格式:SIZE 变量 功能:取出变量所含的数据存储区大小。其返 回值为: LENGTH 变量 * TYPE 变量 例如:上例中A、B、C三变量: SIZE A = LENGTH A*TYPE A = 1 SIZE B = LENGTH B*TYPE B = 20 SIZE C = LENGTH C*TYPE C = 2