汇编语言第四章_(1,2)
合集下载
4第四章 ARM汇编语言程序设计

2、 DCD(或DCDU,DCD也可用“&”代替) DCD( DCDU,DCD也可用“ 代替) 也可用 代替
语法格式: 语法格式:
标号
DCD( DCDU) DCD(或DCDU)
表达式
DCD( DCDU) DCD ( 或 DCDU ) 伪指令用于分配一片连续 的字存储单元并用伪指令中指定的表达式初 始化。 其中, 始化 。 其中 , 表达式可以为程序标号或数字 表达式。 表达式。 DCD分配的字存储单元是字对齐的 分配的字存储单元是字对齐的, 用DCD分配的字存储单元是字对齐的,而 DCDU分配的字存储单元并不严格字对齐 分配的字存储单元并不严格字对齐。 用DCDU分配的字存储单元并不严格字对齐。
使用示例: 使用示例:
DataTest DCD 4,5,6 ; 分 配 一 片连续的字存储单元并初始化。 片连续的字存储单元并初始化。
SPACE(SPACE也可用 也可用“ 代替) 3、 SPACE(SPACE也可用“%”代替)
语法格式: 语法格式:
标号
SPACE
表达式
SPACE伪指令用于分配一片连续 SPACE伪指令用于分配一片连续 的存储区域并初始化为0 其中, 的存储区域并初始化为 0 。 其中 , 表 达式为要分配的字节数。 达式为要分配的字节数。
1、 GBLA、GBLL和GBLS
语法格式: 语法格式: GBLA(GBLL或GBLS) 全局变量名
GBLA、GBLL和GBLS伪指令用于定义一个 、 伪指令用于定义一个ARM程 和 伪指令用于定义一个 程 序中的全局变量,并将其初始化。 序中的全局变量,并将其初始化。 GBLA伪指令用于定义一个全局的数字变量, 并初始 伪指令用于定义一个全局的数字变量, 伪指令用于定义一个全局的数字变量 化为0; 化为 ; GBLL伪指令用于定义一个全局的逻辑变量, 并初始 伪指令用于定义一个全局的逻辑变量, 伪指令用于定义一个全局的逻辑变量 化为F( 化为 (假); GBLS伪指令用于定义一个全局的字符串变量 , 并初 伪指令用于定义一个全局的字符串变量, 伪指令用于定义一个全局的字符串变量 始化为空; 始化为空;
第四章 汇编语言

DATA_BYTE
0A 05 10 DATA_WORD 00 01 64 00 FC FF 3C DATA_DW 00 00 00 FB FF 00 00
10 5 10H 100H 100 -4
60
0FFFBH
2.?表达式: ?表达式预置任何内容, 只分配存储单元,无确切的初值 AB1 DB ? AB2 DW ? 3.Dup表达式:定义重复数据 初值(确定或不确定)初始化n个存储单元,n表示要重复的次数, 以是n>0的数值表达式或常数; 初值必须以圆括号括起来,表示要重复的内容 ARRAY2 ARRAY1 ARRAY3 例: 与 DO-2 DO-2 DW 100 DUP(?) DB 2 DUP(0,1,?) DB 20 DUP(0,1,4 DUP(2),5) DB DB 2 DUP(0,1,2,?) 0,1,2,?,0,1,2,? 等价
1.一个简单程序实例
;THE FORM OF AN ASSEMBLY LANGUAGE PROGRAM STACK SEGMENT DB 64 DUP(?) 段定义伪指令 STACK ENDS ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -SEGMENT/ENDS ---------DATA SEGMENT DATA1 DB 36H DATA2 DB 4BH SUM DB ? DATA ENDS ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MAIN PROC FAR CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK
汇编语言 第四章 汇编语言

4.1.4 特殊运算符
1.属性替换运算符
(3)短取代运算符SHORT 告诉汇编程序,目标标号在本条指令的 -128~+127 个字节的范 围内,生成节省一个字节的机器指令。一般情况下可以不用。 例如: JMP SHORT NEXTBRACH … NEXTBRACH: MOV EAX,ECX
4.1.4 特殊运算符
4.1.4 特殊运算符
1.属性替换运算符
(2)段地址取代运算符“:” 又称为段地址运算或者跨段前缀。用于临时给定变量,标号或 者地址表达式指定一个段属性,地址表达式EA和类型保持不变。在 指令中替代默认的段以形成物理地址。 例如: MOV DX,ES:[BX + DI];EA = BX +DI,PA =ES ;*16 + EA,临时替换默认的DS
4.1.4 特殊运算符
2.属性分离运算符
TYPE运算符 格式:TYPE 变量或标号 功能:分离出其后变量或标号的类型。如果是变量,将返回该变 量的类型对应字节数;如果是标号,则返回代表标号类型的数值。 MOV CL,TYPE ARRAYW ;若变量ARRAYW为字类型,则CL=2
4.1.4 特殊运算符
(1)LENGTH运算符 功能:当变量由数据定义伪指令定义,并且表达式带有一个DUP项 时,LENGTH取DUP项前面的重复系数;如果表达式有多个DUP项 嵌套时,仍然取第一个DUP项前的数字,LENGTH变量的取值为1. DATA SEGMENT A DB ‘ABCDEF’ B DW 10 DUP(1,2DUP(2)) C DB 4,20 DUP(0) DATA ENDS ┆ MOV AX,LENGTH A ;1→AX MOV BX,LENGTH B ;10→BX MOV CX,LENGTH C ;1→CX
汇编语言第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
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
《汇编语言》第四章 课件01

更多精彩资编程源请关注:
4.2 源程序
伪指令 没有对应的机器码的指令,最终不被CPU所执 行。
谁来执行伪指令呢? 伪指令是由编译器来执行的指令,编译器根据 伪指令来进行相关的编译工作。
更多精彩资编程源请关注:
定义一个对使用的伪指令,这 是在写可被编译器编译的汇编程序时,必须要 用到的一对伪指令。 segment和ends的功能是定义一个段,segment 说明一个段开始,ends 说明一个段结束。 一个段必须有一个名称来标识,使用格式为: 段名 segment 段名 ends
一个汇编语言程序从写出到最终执行的 简要过程:
编写 编译 连接 执 行
更多精彩资编程源请关注:
4.2 源程序
汇编指令
伪指令 XXX segment XXX ends end assume
更多精彩资编程源请关注:
4.2 源程序
汇编指令
有对应的机器码的指令,可以被编译为 机器指令,最终为CPU所执行。
通过assume说明这种关联,在需要的情 况下 ,编译程序可以将段寄存器和某一 个具体的段相联系。
更多精彩资编程源请关注:
源程序中的“程序”
汇编源程序: 伪指令 (编译器处理) 汇编指令(编译为机器码)
程序:源程序中最终由计算机执行、处 理的指令或数据。
更多精彩资编程源请关注:
更多精彩资编程源请关注:
引言
现在我们将开始编写完整的汇编语言程 序,用编译器将它们编译成为可执行文 件(如:*.exe文件),在操作系统中运 行。
这一章,我们将编写第一个这样的程序。
更多精彩资编程源请关注:
4.1 一个源程序从写出到执行的过程
汇编语言学习第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
第4章汇编语言程序设计知识

图4-1 分支程序结构
例4-1
JMP_128:MOV RL MOV JMP JMPTAB:AJMP AJMP ┇ AJMP A,R3 A DPTR,#JMPTAB @A+DPTR ROUT00 ROUT01 ┇ ROUT7F
128个子程序首址
二、分支程序
说明:此程序要求128个转移目的地址(ROUT00 ~
三、反汇编
将二进制机器语言程序翻译成汇编语言程序的过程 称反汇编。
汇编和反汇编的过程如图4-3所示。
汇编(汇编程序)
源程序 (汇编语言)
反汇编(汇编程序)
目标码 (机器语言)
图4-3 汇编和反汇编过程
§4.2.3 伪指令
伪指令不是真正的指令,无对应的机器码,在汇编 时不产生目标程序,只是用来对汇编过程进行某种 控制。
格式:字符名称
DATA
表达式
功能:与EQU类似,但有以下差别:
1、EQU定义的字符名必须先定义后使用,而DATA定义的 字符名可以后定义先使用。
ORG START
2000H MOV R0,#21H ;21H→(R0) MOV A,20H ; (20H)→(A) ANL A,#0FH ;A^#0FH→(A),取低位 MOV @R0,A ; (A)→((R0))),低 位置 21H 中 INC R0 ;R0+1→(R0) MOV A,20H ; (20H)→(A) SWAP A, ;A0~3-((A4~7),低位 与高位交换 ANL A,#0FH ;A^#0FH,取高位 MOV @R0,A ; (A)→((R0)),高位 置 22H
序执行程序。
分支程序又分为单分支和多分支结构。 多分支程序是首先把分支程序按序号排列,然后按序号值进 行转移。
《汇编语言》第四章 课件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)等所有工 具,而这些工具都是在操作系统之上运 行的程序,所以我们的学习过程必须在 操作系统的环境中进行。
连接的作用有以下几个(续):
一个源程序编译后,得到了存有机器码的目标文件, 目标文件中的有些内容还不能直接用来生成可执行 文件,连接程序将这此内容处理为最终的可执行信 息。 所以,在只有一个源程序文件,而又不需要调用某 个库中的子程序的情况下,也必须用连接程序对目 标文件进行处理,生成可执行文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
确定各段的类型
START: MOV AX,DATA MOV DS,AX …….. ………. MOV AX,4C00H INT 21H ……… CODE ENDS END START
程序开始点, 装入数据段 程序代码 程序结束
子程序代码 代码段结束
汇编结束,程序开 始点为标号
例. 编程实现123+456→SUM单元的功能。(程序4.1)
说明:它并不为该存储器操作数分配空间。
与LABEL伪指令的功能有相似之处,而LABEL 是一条独立使用的伪指令。
例.
REDEW EQU THIS WORD
DEBYTE DB
25H,32H,56H,42H
REDEW和DEBYTE的段基址和偏移量均相 同,但类型不同.
前者是字型,后者是字节型。
判断对错
Mov cl,count ;(CL)=MSG的串长=21
判断下列语句段是否正确: CT EQU 1 ……. mov ax,bx …… CT EQU 5
3. 地址计数器 $
使用地址计数器保存当前正在汇编的伪指 令或指令的地址。当前地址计数器的值用$ 表示。一般用于表达式。 如 ORG $+6 表示跳过6个字节
功能号送AH寄存器, 调用参数送所要求的位置,
然后发INT 21H系统功能调用中断。
1.单字符输入
功能号:1 返回参数:AL=输入字符的ASCII值
说明:等待从标准输入设备(通常为
键盘)输入一个字符,把接收到的字符的 ASCII值送给AL,并显示到显示器的当前
光标位置。
例. 输入一个字符到CHAR变量中。 CHAR DB ? MOV AH,1 INT 21H MOV CHAR,AL
M1+3指的是 ? ;(AL)= ;(BX)= ;(M3)= ;(AL)= ;(BL)=
15 20 26
’1’=31H ’A’=41H
;(M1+3)= 41H
4.2.3其他伪指令
赋值伪指令: EQU
模块定义伪指令: END 地址计数器: $ 设置偏移地址伪指令:ORG
1.等值EQU伪指令 格式:符号名 值。 说明:表达式可以是任何有效的操作数 格式。例如常数、数值表达式、另一符号名 或助记符。 注意:用EQU定义的符号在同一个程序中 不能再定义。 EQU 表达式
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
4、设置偏移地址伪指令 ORG 数值表达式
功能:设置地址计数器内容为数值表达 式的值。 例1.ORG 100H ;设地址计数器值为100H
例2.ORG
$+6
;跳过6个字节的存储区
5.操作符
(1)算术操作符 包括+ 、 - 、 *、/和MOD(取模)
例. X CT MOV MOV ADD DW 12,34,56 EQU ($-X)/2 CX ,CT ;(CX)=? AX ,X AX ,X+2 ;(AX)=?
...
含回车键在内的 M个字节缓冲区
表 输入缓冲区格式
例. 定义60个字符的缓冲区,并输入 一串字符。 BUFFER DB 60 ;定义缓冲区长度 DB ? DB 60 DUP(?)
这3步不能省略 ;设DS已是BUFFER的段基址
MOV LEA INT
AH,0AH ;接收一串字符 DX,BUFFER 21H
STSG SEGMENT
DW 32
‘S’
DUP(?)
;①
STSG ENDS
DATA SEGMENT A B SUM DW DW DW 123 456 ?
DATA ENDS
CODE SEGMENT ASSUME cs:CODE,DS:DATA,SS:STASG,ES:NOTHING ;②
Start: MOV MOV MOV ADD MOV
3.操作数 操作数可以是数字常量、数值表达
式、字符串常量、地址表达式、?、<n>
DUP(操作数,……)形式。
1).数字常量及数值表达式
操作数可以是数值表达式。数字中若出 现字母形式,不区分大小写。如下所示: 十进制数:以D结尾.
2). 字符串常量
在汇编语言中字符需要用单引号 括起来,其值为字符的ASCII值。
1.变量名是可选的,需要时由用户 自己起。它是该数据区的符号地址,也
是其中第一个数据项的偏移量。
2.助记符是数据类型的符号表示。
助记符 DB(BYTE) DW(WORD) DD(DWORD) DQ(QWORD) DF(FWORD) DT(TBYTE) 数据类型 字节型 字型 双字型 四字型 六字节型 10字节型
MOV [DI],6
CMP 15,BX
EQU、PTR、THIS 都为变量分配存
储空间
4.4
屏幕显示和键盘输入
4.4.1 DOS系统功能调用
在DOS环境下,汇编语言通过调用 ROM BIOS中断使用输入输出设备,还可
以通过DOS系统功能调用中断(INT 21H)
使用它们。
INT 21H系统功能调用方法:
综合举例:编程实现输出“What is your name”的提示信息,并等待从键盘输入一串字符 送给BUFFER缓冲区,见程序4.7 why1.asm 。
扩展程序:why2.asm
使用DOS功能调用比ROM BIOS中断调 用简单方便。 BIOS提供的功能INT 10H中断可以更全 面地控制屏幕,并且运行速度也要快得多。
汇编程序,如 (MASM.EXE)
汇 编
错误
目标模块:文件名.obj
连接程序,如 LINK.EXE
连 接
错误
可执行文件:文件名.exe
调试程序,如 DEBUG.EXE
调 试 应用程序
错误
4.2
伪操作(伪指令) Directives
伪指令是汇编程序对源程序进行汇编时处
理的操作,完成程序分段、存储模式定义、数 据定义、存储器分配、指示程序开始、结束等 功能。
格式。其功能是把( )中的内容复制n次。DUP 可以嵌套。如: N DB 5 DUP(1,2)
例. 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开始存放,则为:
AX, DATA DS, AX AX, AX, A B
;③
SUM, AX ;⑤
MOV AH,4CH
INT 21H
CODE ENDS
END start
;④
4.2.2、数据定义伪指令 数据定义伪指令用来定义程序中使用
的数据。 格式:[变量名] 助记符 操作数
功能:为变量(存储单元名)分配单
元,并为其初始化或者只预留空间。
第四章 汇编语言程序设计
本章要求: ① 能够编写简单的、完整的汇编语言源程序。
② 掌握上机操作,以验证程序设计及编码的 正确性。 主要内容:
汇编源程序结构、常用伪指令及基本指令、汇 编语言程序上机过程、数据的输入输出等。
4.1 汇编语言程序的开发过程
文本编辑器,如
编 辑
错误
源程序:文件名.asm
例.
BUF DB
31H,32H
;(AL)=?
MOV AL,BUF
MOV BX,WORD PTR BUF
;临时指定BUF为字型,(BX)=3231H
LEA DI,BUF * MOV BYTE PTR [DI],6
;必须明确指出DI指向字节型单元
或字型单元,否则汇编时出错
2)THIS操作符
格式:THIS 类型 功能:为存储器操作数指定类型。该操作数 地址与下一个存储单元具有相同的段基址和偏移 量。
例.输出字符串 (exa.asm) PRINT DB ’What is your name$’
;以$结尾的要输出的字符串 ;设DS已指向PRINT的段基址
MOV AH,9
MOV DX,OFFSET PRINT
INT 21H
;输出“字符串”到显示器
4.输入字符串(**) 功能号:0AH
调用参数:DS:DX指向自定义的输入
2.输出一个字符 功能号:2
调用参数:DL=字符的ASCII值
说明:该输出功能使光标跟随移动。
例. 输出一个字符Y。
MOV MOV AH ,2 DL ,’Y’
INT
21H
3.显示字符串 功能号:9
调用参数:DS:DX指向要输出的以$
结尾的字符串首地址 功能:输出字符串到ቤተ መጻሕፍቲ ባይዱ准输出设备
说明:要输出的字符串必须以$结束
3、属性操作符 属性操作符指定操作数的属性。 包括PTR、THIS、SHORT、HIGH和LOW操
作符。
1)PTR操作符
格式:类型 PTR 地址表达式
功能:指定地址表达式的类型。
说明: 若是变量的地址表达式,则类型可以是BYTE、 WORD、DWORD等。 若是标号的地址表达式,则类型可以是FAR、 NEAR。
LENGTH 变量 SIZE 变量
SEG SEG
变量 标号
OFFSET 变量 OFFSET 标号
注[1]:若使用TYPE 变量,则返回一个数据项占用的字节数。 例若变量用DB定义,则返回1;用DW定义返回2……。若使用 TYPE 标号,则NEAR型标号返回-1,FAR型标号返回-2。 注[2]:SIZE=TYPE*LENGTH,只有在变量用<n> dup (操作 数,…)时表示该变量占用的字节数。其它情况失去实际意义。
START: MOV AX,DATA MOV DS,AX …….. ………. MOV AX,4C00H INT 21H ……… CODE ENDS END START
程序开始点, 装入数据段 程序代码 程序结束
子程序代码 代码段结束
汇编结束,程序开 始点为标号
例. 编程实现123+456→SUM单元的功能。(程序4.1)
说明:它并不为该存储器操作数分配空间。
与LABEL伪指令的功能有相似之处,而LABEL 是一条独立使用的伪指令。
例.
REDEW EQU THIS WORD
DEBYTE DB
25H,32H,56H,42H
REDEW和DEBYTE的段基址和偏移量均相 同,但类型不同.
前者是字型,后者是字节型。
判断对错
Mov cl,count ;(CL)=MSG的串长=21
判断下列语句段是否正确: CT EQU 1 ……. mov ax,bx …… CT EQU 5
3. 地址计数器 $
使用地址计数器保存当前正在汇编的伪指 令或指令的地址。当前地址计数器的值用$ 表示。一般用于表达式。 如 ORG $+6 表示跳过6个字节
功能号送AH寄存器, 调用参数送所要求的位置,
然后发INT 21H系统功能调用中断。
1.单字符输入
功能号:1 返回参数:AL=输入字符的ASCII值
说明:等待从标准输入设备(通常为
键盘)输入一个字符,把接收到的字符的 ASCII值送给AL,并显示到显示器的当前
光标位置。
例. 输入一个字符到CHAR变量中。 CHAR DB ? MOV AH,1 INT 21H MOV CHAR,AL
M1+3指的是 ? ;(AL)= ;(BX)= ;(M3)= ;(AL)= ;(BL)=
15 20 26
’1’=31H ’A’=41H
;(M1+3)= 41H
4.2.3其他伪指令
赋值伪指令: EQU
模块定义伪指令: END 地址计数器: $ 设置偏移地址伪指令:ORG
1.等值EQU伪指令 格式:符号名 值。 说明:表达式可以是任何有效的操作数 格式。例如常数、数值表达式、另一符号名 或助记符。 注意:用EQU定义的符号在同一个程序中 不能再定义。 EQU 表达式
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
4、设置偏移地址伪指令 ORG 数值表达式
功能:设置地址计数器内容为数值表达 式的值。 例1.ORG 100H ;设地址计数器值为100H
例2.ORG
$+6
;跳过6个字节的存储区
5.操作符
(1)算术操作符 包括+ 、 - 、 *、/和MOD(取模)
例. X CT MOV MOV ADD DW 12,34,56 EQU ($-X)/2 CX ,CT ;(CX)=? AX ,X AX ,X+2 ;(AX)=?
...
含回车键在内的 M个字节缓冲区
表 输入缓冲区格式
例. 定义60个字符的缓冲区,并输入 一串字符。 BUFFER DB 60 ;定义缓冲区长度 DB ? DB 60 DUP(?)
这3步不能省略 ;设DS已是BUFFER的段基址
MOV LEA INT
AH,0AH ;接收一串字符 DX,BUFFER 21H
STSG SEGMENT
DW 32
‘S’
DUP(?)
;①
STSG ENDS
DATA SEGMENT A B SUM DW DW DW 123 456 ?
DATA ENDS
CODE SEGMENT ASSUME cs:CODE,DS:DATA,SS:STASG,ES:NOTHING ;②
Start: MOV MOV MOV ADD MOV
3.操作数 操作数可以是数字常量、数值表达
式、字符串常量、地址表达式、?、<n>
DUP(操作数,……)形式。
1).数字常量及数值表达式
操作数可以是数值表达式。数字中若出 现字母形式,不区分大小写。如下所示: 十进制数:以D结尾.
2). 字符串常量
在汇编语言中字符需要用单引号 括起来,其值为字符的ASCII值。
1.变量名是可选的,需要时由用户 自己起。它是该数据区的符号地址,也
是其中第一个数据项的偏移量。
2.助记符是数据类型的符号表示。
助记符 DB(BYTE) DW(WORD) DD(DWORD) DQ(QWORD) DF(FWORD) DT(TBYTE) 数据类型 字节型 字型 双字型 四字型 六字节型 10字节型
MOV [DI],6
CMP 15,BX
EQU、PTR、THIS 都为变量分配存
储空间
4.4
屏幕显示和键盘输入
4.4.1 DOS系统功能调用
在DOS环境下,汇编语言通过调用 ROM BIOS中断使用输入输出设备,还可
以通过DOS系统功能调用中断(INT 21H)
使用它们。
INT 21H系统功能调用方法:
综合举例:编程实现输出“What is your name”的提示信息,并等待从键盘输入一串字符 送给BUFFER缓冲区,见程序4.7 why1.asm 。
扩展程序:why2.asm
使用DOS功能调用比ROM BIOS中断调 用简单方便。 BIOS提供的功能INT 10H中断可以更全 面地控制屏幕,并且运行速度也要快得多。
汇编程序,如 (MASM.EXE)
汇 编
错误
目标模块:文件名.obj
连接程序,如 LINK.EXE
连 接
错误
可执行文件:文件名.exe
调试程序,如 DEBUG.EXE
调 试 应用程序
错误
4.2
伪操作(伪指令) Directives
伪指令是汇编程序对源程序进行汇编时处
理的操作,完成程序分段、存储模式定义、数 据定义、存储器分配、指示程序开始、结束等 功能。
格式。其功能是把( )中的内容复制n次。DUP 可以嵌套。如: N DB 5 DUP(1,2)
例. 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开始存放,则为:
AX, DATA DS, AX AX, AX, A B
;③
SUM, AX ;⑤
MOV AH,4CH
INT 21H
CODE ENDS
END start
;④
4.2.2、数据定义伪指令 数据定义伪指令用来定义程序中使用
的数据。 格式:[变量名] 助记符 操作数
功能:为变量(存储单元名)分配单
元,并为其初始化或者只预留空间。
第四章 汇编语言程序设计
本章要求: ① 能够编写简单的、完整的汇编语言源程序。
② 掌握上机操作,以验证程序设计及编码的 正确性。 主要内容:
汇编源程序结构、常用伪指令及基本指令、汇 编语言程序上机过程、数据的输入输出等。
4.1 汇编语言程序的开发过程
文本编辑器,如
编 辑
错误
源程序:文件名.asm
例.
BUF DB
31H,32H
;(AL)=?
MOV AL,BUF
MOV BX,WORD PTR BUF
;临时指定BUF为字型,(BX)=3231H
LEA DI,BUF * MOV BYTE PTR [DI],6
;必须明确指出DI指向字节型单元
或字型单元,否则汇编时出错
2)THIS操作符
格式:THIS 类型 功能:为存储器操作数指定类型。该操作数 地址与下一个存储单元具有相同的段基址和偏移 量。
例.输出字符串 (exa.asm) PRINT DB ’What is your name$’
;以$结尾的要输出的字符串 ;设DS已指向PRINT的段基址
MOV AH,9
MOV DX,OFFSET PRINT
INT 21H
;输出“字符串”到显示器
4.输入字符串(**) 功能号:0AH
调用参数:DS:DX指向自定义的输入
2.输出一个字符 功能号:2
调用参数:DL=字符的ASCII值
说明:该输出功能使光标跟随移动。
例. 输出一个字符Y。
MOV MOV AH ,2 DL ,’Y’
INT
21H
3.显示字符串 功能号:9
调用参数:DS:DX指向要输出的以$
结尾的字符串首地址 功能:输出字符串到ቤተ መጻሕፍቲ ባይዱ准输出设备
说明:要输出的字符串必须以$结束
3、属性操作符 属性操作符指定操作数的属性。 包括PTR、THIS、SHORT、HIGH和LOW操
作符。
1)PTR操作符
格式:类型 PTR 地址表达式
功能:指定地址表达式的类型。
说明: 若是变量的地址表达式,则类型可以是BYTE、 WORD、DWORD等。 若是标号的地址表达式,则类型可以是FAR、 NEAR。
LENGTH 变量 SIZE 变量
SEG SEG
变量 标号
OFFSET 变量 OFFSET 标号
注[1]:若使用TYPE 变量,则返回一个数据项占用的字节数。 例若变量用DB定义,则返回1;用DW定义返回2……。若使用 TYPE 标号,则NEAR型标号返回-1,FAR型标号返回-2。 注[2]:SIZE=TYPE*LENGTH,只有在变量用<n> dup (操作 数,…)时表示该变量占用的字节数。其它情况失去实际意义。