汇编语言第四章_(1,2)

合集下载

第四章-汇编语言程序的设计

第四章-汇编语言程序的设计

第四章汇编语言程序设计本章的汇编语言程序设计的主要容有:汇编语言程序设计概述、汇编语言程序的结构形式、汇编语言的伪指令。

(一个单片机应用系统和其它计算机系统一样,在完成一项具体工作的时候,它要按照一定的次序,去执行操作,这些操作实际上就是由设计人员,以单片机能够接受的指令编制的程序,那么无论计算机也好,单片机也好,实际上编制程序的过程,就是用计算机来反映设计者的编程思想,那么这一章中,我们将向大家介绍怎样使用单片机指令系统来编制一些应用程序。

在介绍之前,我们还是来学习汇编语言的一些基础知识)4.1 汇编语言程序设计概述1、计算机的汇编语言以助记符表示的指令,每一条指令就是汇编语言的一条语句。

(汇编语言程序设计实际上就是使用汇编指令来编写计算机程序。

汇编语言的语句有严格的格式要求)2、汇编语言的语句格式MCS-51汇编语言的语句格式表示如下:[<标号>]: <操作码> [<操作数>]; [<注释>]标号:指令的符号地址,有了标号,程序中的其它语句才能访问该语句。

①标号是由1~8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。

②不能使用汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。

(同一个标号在程序中只能定义一次,不能重复定义;一条语句可以有标号,也可以没有标号,所以是否有标号,取决于程序中是否需要访问该语句。

)操作码:规定语句执行的操作容,操作码是以指令助记符表示的,是汇编指令格式中唯一不能空缺的部分。

操作数:给指令的操作提供数据或地址。

注释:是对语句或程序段的解释说明。

(在单片机中,这四个部分怎么加以区分呢?使用分界符)分界符(分隔符):用于把语句格式中的各部分隔开,以便于编译程序区分不同的指令段。

冒号(:)用于标号之后空格()用于操作码和操作数之间逗号(,)用于操作数之间,分割两个以上的操作数分号(;)用于注释之前。

汇编语言第4章PPT课件

汇编语言第4章PPT课件
3
2. 汇编语言程序设计与执行过程
输入汇编语言源程序(EDIT) 汇编(MASM) 链接(LINK) 调试(TD)
源文件 . ASM 目标文件 .OBJ 可执行文件.EXE 最终程序
4
3. 汇编语言源程序结构
由多个逻辑段组成,包含: 代码段:存放源程序的所有
数据段名 SEGMENT …
数据段名 ENDS
26
一、数据定义伪指令
用途:定义变量类型,给存储器赋初值,或仅给变量分配存储单 元,而不赋予特定的值。
格式: [变量名] DB 操作数;定义字节 [变量名] DW 操作数;定义字 [变量名] DD 操作数;定义双字 [变量名] DQ 操作数;定义8个字节 [变量名] DT 操作数;定义10个字节
操作数——是赋给变量的初始值,可以有一个,也可以有多个, 但不能超出数据类型范围。操作数可以是数值、字 符串、?、或者DUP。
CLC
;CF=0
LPER:MOV AL,DATA2[SI]
ADC DATA1[SI],AL
INC SI
DEC CX
JNZ LPER
MOV AH,4CH
INT 21H
;返回DOS
CODE ENDS
END START
7
二、汇编语言语句类型及格式
1. 汇编语言语句分类
指令性语句
CPU执行的语句, 能够生成目标代码
段 值 变量所在段的段地址 偏移量 变量单元地址与段首地址之
间的位移量。 类 型 字节型、字型和双字型
14
3)表达式
组成:操作数:常量、寄存器名字、存储器操作数 运算符:
算术运算 逻辑运算 关系运算 取值运算和属性运算 其它运算
15

汇编语言第4章汇编语言

汇编语言第4章汇编语言

4 8 汇编语言第4章汇编语言
10
近类型 (NEAR)
-1
远类型 (FAR)
-2
2. 操作符
操作符可以是指令助记符, 伪指令助记符, 宏指令符号。
3. 操作数
操作数是操作符操作的对象,可以是数据 本身,也可以是标号、寄存器名或算术表达式。
4. 注释
注释是对指令功能的说明,目的实施自 己或他人在阅读分析程序是方便。
第四章 汇编语言
4.1 汇编语句格式 4.2 汇编语言中数据的表示方法 4.3 运算符号 4.4 伪指令 4.5 汇编语言的上机过程
汇编语言第4章汇编语言
4.1 汇编语句格式
4.1.1 字符集 4.1.2 汇编语句格式
汇编语言第4章汇编语言
4.1.1 字符集
Microsoft的宏汇编语言由下列字符组成: (1)英文字母:A~Z和a~z。 (2)数字字符:0~9。 (3)算术运算符:+,-,*,/。 (4)关系运算符:<,=,>。 (5)分隔符:,,:,;,(,),[,], (空格),TAB(制表符)。 (6)控制符:CR(回车),LF(换行),FF(换页)。 (7)其它字符:$,&,_(下划线),.,@,%,!。
SIZE LAB= (L汇E编N语G言T第H4章汇L编A语B言) * (TYPE LAB)
4.3.5 组合算符
1. PTR 用来建立或临时改变存储器操作数的类型。 2. THIS 用来为一个标号建立一个新的类型。
MOV [BX],10H MOV BYTE PTR[BX],10H MOV WORD PTR[BX],10H A1 DB 10H,20H MOV AX,A1 MOV AX,WORD PTR A1 B1 EQU THIS WORD A2 DB 21H,34H MOV AX,B1

汇编语言学习第4章

汇编语言学习第4章

不同而不同。
(名字项,常称为标号) 标号是程序设计人员自己定义的表示符号,用来表示本语句的符号地址
(即该指令的偏移地址,也就是该单元与其所处段基址的偏移量)是可有
可无的,只有当需要用符号地址来访问该语句时才需要。 2.operation(操作符)
操作符项可以是指令、伪操作或宏指令的助记符。对于指令,作用是指出
1.等价语句EQU
等价语句的一般使用格式如下: SYMBOL EQU EXPRESSION
作用是用左边的符号名代表右边的表达式。
注意:等价语句不会给符号名分配存储空间,符号名不能与其它符号同名, 也不能被重新定义。
(1)用符号名代表常量或表达式
例4.14 (2)用符号名代表字符串 例4.15 (3)用符号名代表关键字或指令助记符 例4.16
例4.21
2.定义字变量的伪指令为DW
一个变量占一个字空间
例4.22:WORD1 DW DW 89H, 1909H, -1 0ABCDH, ?, 0
上面的定义语句经汇编后所产生出的内存单元分配情况如下:
… 89 00 09 19 FF FF CD AB --00 00 …
例4.23
3.双字变量定义伪指令DD 每个双字变量占用二个连续的字单元(四个字节)。
功能和作用,而不应该只写出指令的动作。
4.2运算符号
4.2.1算术运算符
算术运算符有:+、-、*、/和MOD。 其中: +、-、*、/就是我们算术中常用的加、减、乘、除。 MOD算符是模运算。指除法运算后得到的余数。 例如:5 MOD 2为1。 注意:算术运算符可以用于数字表达式或地址表达式中,但当它用于地址 表达式时,只有当其结果有明确的物理意义时才是有效的。 例如:将两个地址相乘或相除是无意义的。地址可以做加减运算,但也必 须注意物理意义。例如把两个不同段的地址相加减也是无意义的。 例4.1 例4.2

《汇编语言》第四章 课件02

《汇编语言》第四章 课件02

4.2 源程序

程序返回

应该在程序的末尾添加返回的程序段。
mov ax,4c00H int 21H 这两条指令所实现的功能就是程序返回。

几个和结束相关的内容 - - >>
段结束、程序结束、程序返回
语法错误和逻辑错误

语法错误


程序在编译时被编译 器发现的错误; 容易发现。 aume cs:abc abc segment mov ax,2 add ax,ax add ax,ax end

连接的作用有以下几个(续):

一个源程序编译后,得到了存有机器码的目标文件, 目标文件中的有些内容还不能直接用来生成可执行 文件,连接程序将这此内容处理为最终的可执行信 息。 所以,在只有一个源程序文件,而又不需要调用某 个库中的子程序的情况下,也必须用连接程序对目 标文件进行处理,生成可执行文件。

注意,对于连接的过程,可执行文件是我们要 得到的最终结果。
关于编译和链接
强调!!
这里再次强调一下,我们学习汇编的主 要目的,就是通过用汇编语言进行编程 而深入地理解计算机底层的基本工作机 理,达到可以随心所欲地控制计算机的 目的。
关于编译和链接
我们用汇编语言编程,就要用到 :编辑 器(Edit)、编译器(masm)、连接器 (link)、调试工具(debug)等所有工 具,而这些工具都是在操作系统之上运 行的程序,所以我们的学习过程必须在 操作系统的环境中进行。

连接的作用有以下几个(续):

一个源程序编译后,得到了存有机器码的目标文件, 目标文件中的有些内容还不能直接用来生成可执行 文件,连接程序将这此内容处理为最终的可执行信 息。 所以,在只有一个源程序文件,而又不需要调用某 个库中的子程序的情况下,也必须用连接程序对目 标文件进行处理,生成可执行文件。

汇编语言第四章答案

汇编语言第四章答案
(4) MOV AX, WORD_OP1[DX];错,DX不能用于存储器寻址
(5) MOV SADATA_WORD [BX][SI]
(7) MOV [BX][SI], 2;错,[BX][SI]未指出数据类型
(8) MOV AX, WORD_OP1+WORD_OP2
STACK_SEG SEGMENT PARA STACK ‘STACK’
DW 100H DUP (?)
TOS LABEL WORD
STACK_SEG ENDS;以上定义堆栈段
;----------------------------------------------------------------
(7) FLD7B为零件名(ASCII码)及其数量(十进制数)的表格:
PART1 20
PART2 50
PART3 14
(8) FLD1W为十六进制数字变量:FFF0;
(9) FLD2W为二进制数的字变量:01011001;
(10) FLD3W为(7)零件表的地址变量;
(11) FLD4W为包括5个十进制数的字变量:5,6,7,8,9;
(5) MOV CX, LENGTH TABLEB;(CX)=0001H
答:见注释。
4.15指出下列伪操作表达方式的错误,并改正之。
(1) DATA_SEG SEG;DATA_SEG SEGMENT(伪操作错)
(2) SEGMENT ‘CODE’;SEGNAME SEGMENT ‘CODE’(缺少段名字)
4.9有符号定义语句如下:
BUFF DB 1, 2, 3, ‘123’
EBUFF DB 0
L EQU EBUFF - BUFF
问L的值是多少?

汇编语言第四章

汇编语言第四章

; (DL)变为ASCII码
分支程序设计注意
选择合适的转移指令
如:CMP AX,1
JL L1
JL为有符号转移指令,(AX)<1则转移。若JL换为JB, 则为无符号转移指令,该转移的反而不转移。
4.2 分支程序设计注意
为每个分支安排出口
如:实现(AL)≥0,′+′→DL; (AL)<0,′-′→DL;
4.3.3 循环程序设计
开始 取数→BX 初始化循环计数值 LOOP1 BX循环左移4位 最右边的4位转为ASCII码 N
ASCII在A~F? Y ASCII码再加7 显示一个字符 循环计数值减1 N 循环计数=0? 结束
Y
4.3.3 循环程序设计
STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT BUF DW 1234H DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA, SS: STACK BEGIN:MOV AX, DATA MOV DS, AX MOV BX, BUF; 取要显示 的数 MOV CH, 4; 循环次数 LOOP1: MOV CL, 4 ROL BX, CL; 高4位到低4 位 MOV AL, BL AND AL, 0FH ADD AL, 30H; 得到数的 ASCII CMP AL, 3AH; 数>9? JL DISP; 在0~9之间 ADD AL, 7; 在A~F之间 MOV DL, AL; 显示 MOV AH, 2 INT 21H DEC CH JNZ LOOP1 MOV AH,4CH INT 21H ENDS END BEGIN
… MOV BL, 0; BL中存放1的个数 MOV CL, 16 L1: SAL AX, 1; 算术左移,b15→CF JNC L2 INC BL; CF=1,(BL)+1→CL L2: DEC CL JNZ L1 … 上述方法必须循环16次。

第四章1-2讲 汇编语言程序设计ppt课件

第四章1-2讲 汇编语言程序设计ppt课件

精选ppt课件2021
25
天津工业大学
(4)带DUP的表达式
• 在表达式中使用重复数据操作符DUP,可以为连 续的存储单元提供重复数据,其格式为:
• N DUP(表达式)
• 其中N为重复因子,只能取正整数,表示定义了N 个重复数据存储单元,其类型由它前面的数据定 义伪指令确定,而每个数据存储单元中的初值由 DUP后面圆括号中的表达式给定。
随机数
DB 3 DUP(22H,11H,?)
精选ppt课件2021
27
天津工业大学
09FF:0000 22 11 ? 22 11 ? 22 11
09FF:0008 ?
0F99:000B
精选ppt课件2021
28
天津工业大学
用?预留存储空间
• MEM1 DB 34H,’A’,?,?,?

DW 20 DUP(?)
• LENGTH 变量 * TYPE 变量
精选ppt课件2021
40
天津工业大学
– LENGTH和SIZE运算符的具体运算规则是:如果变量是用重复操 作符DUP定义的,那么运算符LENGTH的运算结果是外层DUP的 给定值 (即外层重复次数),如果没有用DUP定义的变量,运算 结果总是1。
而运算符SIZE是LENGTH和TYPE两个运算结果的乘积。
天津工业大学
第4章 汇编语言程序设计
4.1 汇编语言源程序 4.2 伪指令 4.3 DOS系统功能调用 4.4 汇编语言程序设计基础 4.5 综合举例
精选ppt课件2021
1
天津工业大学
4.1 汇编语言源程序
了解:
• 计算机的三种语言 • 源程序的结构 • 汇编语言语句格式

汇编语言第四章_(1,2)

汇编语言第四章_(1,2)

A db 'A','B' B dw A+1 ;思考:b单元存储的值?
4).
? 在程序中使用“?”为变量预留空间而不
赋初值。例如 SUM 5). DB ?
<n> DUP(操作数,……) 若要对某些数据重复多次,可以使用这种
格式。其功能是把( )中的内容复制n次。DUP 可以嵌套。如: N DB 5 DUP(1,2)
SEG SEG
变量 标号
OFFSET 变量 OFFSET 标号
注[1]:若使用TYPE 变量,则返回一个数据项占用的字节数。 例若变量用DB定义,则返回1;用DW定义返回2……。若使用 TYPE 标号,则NEAR型标号返回-1,FAR型标号返回-2。 注[2]:SIZE=TYPE*LENGTH,只有在变量用<n> dup (操作 数,…)时表示该变量占用的字节数。其它情况失去实际意义。
判断对错
MOV [DI],6
CMP 15,BX
EQU 、 PTR 、 THIS 都为变量分配存
储空间
思考:此段代码执行后AX的值为多少?
TAB
DW
10,20,30,40,50
NUM DW 3 : MOV BX,OFFSET TAB ADD BX, NUM MOV AX, [BX]
4.4
屏幕显示和键盘输入(83页)
3.操作数 操作数可以是数字常量、数值表达
式、字符串常量、地址表达式、?、<n>
DUP(操作数,……)形式。
1).数字常量及数值表达式 操作数可以是数值表达式。数字中
若出现字母形式,不区分大小写。
如下所示: 十进制数:以D结尾。
2). 字符串常量 在汇编语言中字符需要用单引号括起
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

判断对错
MOV [DI],6
CMP 15,BX
EQU 、 PTR 、 THIS 都为变量分配存
储空间
思考:此段代码执行后AX的值为多少?
TAB
DW
10,20,30,40,50
NUM DW 3 : MOV BX,OFFSET TAB ADD BX, NUM MOV AX, [BX]
4.4
屏幕显示和键盘输入(83页)
3.操作数 操作数可以是数字常量、数值表达
式、字符串常量、地址表达式、?、<n>
DUP(操作数,……)形式。
1).数字常量及数值表达式 操作数可以是数值表达式。数字中
若出现字母形式,不区分大小写。
如下所示: 十进制数:以D结尾。
2). 字符串常量 在汇编语言中字符需要用单引号括起
来,其值为字符的ASCII值。
4.4.1 DOS系统功能调用
在 DOS 环境下 , 汇编语言通过调用 ROM BIOS中断使用输入输出设备,还可
以通过DOS系统功能调用中断(INT 21H)
使用它们。
INT 21H系统功能调用方法:
功能号送AH寄存器, 调用参数送所要求的位置,
然后发INT 21H系统功能调用中断。
通常用 DB 助记符定义字符串。例如: STR1 DB ‟A‟,‟B‟ :值为41H,42H。
STR2 DW ‟AB‟
:值为4142H (A为高字节)
;上机演示
STR2 DW ‟A‟,‟B‟
3).
地址表达式 将常量、变量、标号、寄存器内容和
运算符、操作符组成的有意义的式子称为
地址表达式。 操作数可以是地址符号。
A db 'A','B' B dw A+1 ;思考:b单元存储的值?
4).
? 在程序中使用“?”为变量预留空间而不
赋初值。例如 SUM 5). DB ?
<n> DUP(操作数,……) 若要对某些数据重复多次,可以使用这种
格式。其功能是把( )中的内容复制n次。DUP 可以嵌套。如: N DB 5 DUP(1,2)
1.将字符串“INPUT”保存到存储单元 MESS,正确的伪 指令是_______。 A.INPUT DB MESS B. MESS DB “INPUT” C. INPUT DB “MESS” D. MESS DB INPUT 2. X已经定义为字节型,可以用_______改变为字型。 A.OFFSET X B. LABEL X C. TYPE X D. WORD PTR X 3.INC BYTE PTR [BX ] 指令中的操作数的数据类型是 _______。 A.字节 B. 字形 C. 双字 D. 四字 4. ABC DW 1 , 5 , $+2 , 7 , 其 中 $ 代 表 的 值 为 _______。 A.1 B. 3 C. 4 D. 5
汇编程序,如 (MASM.EXE)
汇 编
错误
目标模块:文件名.obj
连接程序,如 LINK.EXE
连 接
错误
可执行文件:文件名.exe
调试程序,如 DEBUG.EXE
调 试 应用程序
错误
4.2
伪操作(伪指令) Directives
伪指令是汇编程序对源程序进行汇编时处
理的操作,完成程序分段、存储模式定义、数 据定义、存储器分配、指示程序开始、结束等 功能。
Mov cl,count ;(CL)=MSG的串长=21
判断下列语句段是否正确: CT EQU 1 ……. mov ax,bx …… CT EQU 5
3. 地址计数器 $
使用地址计数器保存当前正在汇编的伪指 令或指令的地址。当前地址计数器的值用 $ 表示。一般用于表达式。 如 ORG $+6 表示跳过6个字节

TYPE TYPE

变量 标号


返回变量或者标号的类型代码[1] 返回由 <n> dup ( 操作数 ,…) 格式定义的 n 值, 其它情况回送1 返回分配给变量的字节数,只对由<n> dup (操 作数,…)格式定义的变量有实际意义[2] 返回变量或者标号的段基址 返回变量或者标号的偏移量
LENGTH 变量 SIZE 变量
SEG SEG
变量用TYPE 变量,则返回一个数据项占用的字节数。 例若变量用DB定义,则返回1;用DW定义返回2……。若使用 TYPE 标号,则NEAR型标号返回-1,FAR型标号返回-2。 注[2]:SIZE=TYPE*LENGTH,只有在变量用<n> dup (操作 数,…)时表示该变量占用的字节数。其它情况失去实际意义。
1.变量名是可选的,需要时由用户 自己起。它是该数据区的符号地址,也
是其中第一个数据项的偏移量。
2.助记符是数据类型的符号表示。
助记符 DB(BYTE) DW(WORD) DD(DWORD) DQ(QWORD) DF(FWORD) DT(TBYTE) 数据类型 字节型 字型 双字型 四字型 六字节型 10字节型
例.
ARY DW 4,5,6 COUNT EQU $-OFFSET ARY ;COUNT=?6 VAR DW 50 DUP(12) MOV AX, SEG VAR VAR的段基址→DS MOV DS, AX ; ?→DS ; 2→SI mov SI, TYPE ARY ; ?→SI MOV CX, LENGTH VAR; ?→CX ; 50→CX ; 100→cx MOV CX, SIZE VAR ; ?→CX ; 1→cx MOV CX, LENGTH ARY; ?→CX ; 2→cx MOV CX, SIZE ARY ; ?→CX
4、设置偏移地址伪指令 ORG 数值表达式
功能:设置地址计数器内容为数值表达 式的值。 例1.ORG 100H ;设地址计数器值为100H
例2.ORG
$+6
;跳过6个字节的存储区
5.操作符
(1)算术操作符 包括+ 、 - 、 * 、/和 MOD (取模)
例.
X
CT
DW
EQU
12 ,34 ,56
($-X)/2 ;(CX)=? ;(AX)=?
MOV CX ,CT
MOV AX ,X
ADD AX ,X+2
2)数值回送操作符 这组操作符可以把一些特征或内存 单元地址的组成部分作为数值返回。
它们是 TYPE 、 LENGTH 、 SIZE 、 SEG 、
OFFSET和$,PTR,其格式和功能见下表。
1.单字符输入
功能号:1 返回参数:AL=输入字符的ASCII值
说明:等待从标准输入设备 (通常为
键盘)输入一个字符,把接收到的字符的 ASCII值送给AL,并显示到显示器的当前
4.2.1
段定义伪指令
汇编程序两种基本格式: 1、完整段定义 2、简化段定义
一、完整段定义典型格式 Stack segment db 1024 dup (0) 堆栈段 Stack ends Data segment 数据段 ……. Data ends 代码段 Code segment assume cs:code,ds:data,ss:stack
例. M1 DB 15,67H,11110000B,? M2 DB „15‟,‟AB$‟ M3 DW 4*5 等同20 M4 DD 1234H M5 DB 2 DUP(5,‟A‟) M6 DW M2 ;M2的偏移量 M7 DD M2 ;M2的偏移量、段基址 设以上数据自1470:0000开始存放,则为:
确定各段的类型
START: MOV AX,DATA MOV DS,AX …….. ………. MOV AX,4C00H INT 21H ……… CODE ENDS END START
程序开始点, 装入数据段 程序代码 程序结束
子程序代码 代码段结束
汇编结束,程序开 始点为标号
例. 编程实现123+456→SUM单元的功能。(程序4.1)
说明:它并不为该存储器操作数分配空间。
与LABEL 伪指令的功能有相似之处,而LABEL 是一条独立使用的伪指令。
x label byte
例.
REDEW EQU THIS WORD
DEBYTE DB
25H,32H,56H,42H
REDEW 和 DEBYTE 的段基址和偏移量均相 同,但类型不同.
前者是字型,后者是字节型。
3、属性操作符 属性操作符指定操作数的属性。 包括PTR、THIS、SHORT、HIGH和LOW操
作符。
1)PTR操作符
格式:类型 PTR 地址表达式
功能:指定地址表达式的类型。
说明: 若是变量的地址表达式 , 则类型可以是 BYTE 、 WORD、DWORD等。 若是标号的地址表达式,则类型可以是 FAR 、 NEAR。
功能:用符号名代表表达式或表达式的
例. CR
EQU
0DH
;回车符的ASCII值
程序中可以通过符号引用这些值. 例如:
MOV AL,CR
;等价于 MOV AL, 0DH
EQU伪指令经常与$配合, 得到变量分 配的字节数。
如下所示:
MSG DB Count „This is first string.‟ equ $-MSG
0F 67 F0 00 31 35 41 42 24 14 00 34 12 00 00 05 41 05 41 04 00 04 00 70 14 。
可直接通过变量名引用变量,但要注意类 型匹配。例如继续完成以下程序片段: MOV AL,M1 MOV BX,M3 ADD M3,6 MOV AL,M2 MOV BL,M2+2 MOV M1+3,BL
第四章 汇编语言程序设计
相关文档
最新文档