汇编语言第五章.

2018/9/20 9
(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
合集下载

汇编语言(王爽)学习记录_第五章

汇编语言(王爽)学习记录_第五章

汇编语⾔(王爽)学习记录_第五章第五章 [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章汇编语言应用

第5章汇编语言应用
操作码为必选项,该项为ORG、DB、DW、DS、EQU、
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课件

第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章

汇编语言程序设计第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指令

Mov [bx],al
(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

汇编语言程序设计的基本步骤: 1.分析题意,确定数据结构和算法 2.根据算法绘制程序流程图 3.根据流程图编写程序 4.调试程序
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个)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档