微机原理与接口技术 南京信息工程大学第4章-汇编语言程序设计

合集下载

微机原理与接口技术-第4-1章

微机原理与接口技术-第4-1章

例4-3 用键盘最多输入10个字符,并存 入内存变量Buff中,若按“Enter”键,则 表示输入结束。
用BIOS层功能调用实现 层功能调用实现 的源程序: 的源程序: .MODEL SMALL CR EQU 0DH .STACK 200H .DATA Buff DB 10 DUP(?) .CODE .STARTUP MOV CX, 0AH LEA BX, Buff
Windows层功能模块的调用
Win32 API使用堆栈来传递参数 API函数调用 C语言的消息框函数的声明: int MessageBox( HWND hWnd, // handle to owner window LPCTSTR lpText, // text in message box LPCTSTR lpCaption, // message box title UINT uType // message box style );//参数 最后还有一句说明: Library: Use User32.lib.//说明这个函数的位置
API 函数的返回值
有的API 函数有返回值,如MessageBox 定义 函数有返回值, 有的 的返回值是int类型的数,返回值的类型对汇编 的返回值是 类型的数, 类型的数 程序来说也只有dword 一种类型,它永远放在 一种类型, 程序来说也只有 eax 中。如果要返回的内容不是一个 如果要返回的内容不是一个eax所能 所能 容纳的, 容纳的,Win32 API 采用的方法一般是返回一 个指针, 个指针,或者在调用参数中提供一个缓冲区地 干脆把数据直接返回到缓冲区中去。 址,干脆把数据直接返回到缓冲区中去。
.REPEAT MOV AH, 0H INT 16H .BREAK .IF AL==CR MOV [BX],AL INC BX .UNTILCXZ .EXIT 0 END

微机原理与接口技术汇编语言程序设计

微机原理与接口技术汇编语言程序设计

⑴汇编语言是机器语言的符号表示语言,因此,程序设 计人员可以充分利用机器硬件的全部功能,发挥机器的 长处。
⑵现在的微机系统中,底层的一些功能仍然靠 汇编语言程序来实现。例如机器的自检、系统初始化、 实际的输入输出操作,至今仍然是用汇编语言编制的 程序来完成。 ⑶汇编语言程序的效率通常高于高级语言程序。 所以在节省内存空间和提高程序运行速度的重要场合, 如实时控制,常常使用汇编语言来编制的。 鉴于以上理由,现在许多高级语言都设置有与 汇编语言程序接口的功能,以便于提高高级语言程序 的效率。
§4.3伪指令(伪操作)
伪指令是一种说明性语句,它本身不产生对应的机
器目标代码,它仅仅是告诉汇编程序,对后面的指令语 句和伪指令语句的操作数应该如何产生机器目标代码, 每条伪指令共分四边个字段:
伪致可以分为以下几类:
一、数据定义伪指令
[变量名] DB DW DD 操作数
变量也有三种属性:段、偏移量和类型。 ① 变量的段属性是变量所代表的数据区所在段的段
地址。由于数据区一般在存储器的数据段中,因此变
量的段地址常常在DS和ES寄存器中。 ② 变量的偏移量属性是该变量所在段的起始地址与 变量的地址之间的字节数。 ③ 变 量 的 类 型 属 性 有 BYTE( 字 节 ) 、 WORD
四、段定义伪指令 SEGMENT
段名 SEGMENT [定位类型][组合类型][‘类别名’] …... 段名 ENDS
段名:是逻辑段的标识符,不可缺省,表示逻辑段在存储器中
的地址, SEGMENT 和ENDS前的段名相同。
定位类型:
BYTE 表示该段起始地址可以在存储单元的任何字节地址; WORD 表示该段起始地址必须是偶数即地址末1位为0 ; PARA 表示该段起始地址在节的边界整数上,每16存储单元 为1节即地址末4位为0,定位类型缺省则默认为PARA ; PAGE 表示该段起始地址在页首,每256存储单元为1页即地 址末8位为0 。

微机原理和接口技术_第4章1

微机原理和接口技术_第4章1
4.时,LENGTH返回此变量所包含的单元数,对其 它变量则返回1。

M1 DW 100 DUP(?)
M2 DW 1, 2, 3
M3 DB ‘ A, B, C, D ‘
MOV CX,LENGTH M1
MOV BL,LENGTH M2
MOV AL,LENGTH M3
4
§4-1 汇编语言程序格式——伪指令语句
二、伪指令语句/指示性语句
伪指令语句:无对应的机器指令,汇编时对伪指令进行处理,可完成数据定义、
存储区分配、段定义、段分配、指示程序结束等功能。
语句的格式:
名字 伪指令指示符 操作数,操作数
;注释
▲名字:名字后不允许带冒号“:”,但可以省略。 •通常是变量名、段名、过程名、符号名等。
M2 DW 1, 2, 3
M3 DB ‘ A, B, C, D ‘
MOV CX,SIZE M1
ADD BL, SIZE M2
MOV AL, SIZE M3
汇编时,计算表达式形成指令为:
MOV CX,200
;返回变量所包含的200个字单元
MOV BL,2
MOV AL,1
24
§4-2 MASM中的表达式 ——修改属性运算符
五、修改属性运算符
修改属性运算符也称作综合运算符(Synthetic operators)。 包括6种: 段操作符、PTR、THIS、HIGH、LOW、SHORT 功能: 在程序运行过程中,修改变量或标号的属性,包括段属性、偏移地址属 性、类型属性等。
汇编时,计算表达式形成指令为:
MOV CX,100
;返回变量所包含的100个字单元
MOV BL,1
MOV AL,1
23

微机原理与接口技术(第二版)-第4章

微机原理与接口技术(第二版)-第4章

不允许对同一个 符号重复定义!
– ADDR
EQU ES:[DI+2]
– STRINGW EQU WORD PTR STRING
微电机子原信理息与学接口院技术 25
数据定义语句
• 用途:定义变量, 为变量分配存储空间, 也 可给存储单元赋初值。
• 主要有:
–定义字节 DB → –定义字 DW → –定义双字 DD →
表达式和运算符
• 表达式是由常量、变量、标号通过运算符 连接而成。
• 表达式分类
–数值表达式, 结果是一个确定的数值。 –地址表达式, 结果是一个存储器地址。
• 任何表达式都是在源程序汇编过程中由汇 编程序进行计算的, 而不是在程序运行时 计算。
• 因此, 在程序被执行时, 表达式本身已经是 一个有确定值的操作数。
• 定义BYTE类型变量, 每个操作数占1个字 节, 可以是:
–可以是0 ~ 255的无符号数 –或是-128 ~ +127带符号数 –也可以是字符串常数
微电机子原信理息与学接口院技术 27
定义字DW
• DW伪指令用于分配一个或多个字单元, 并 可以给它们赋初值。
• 定义WORD类型变量, 每个操作数占2个字 节, 可以是:
• 伪指令不是计算机指令系统的一部分, 而 是汇编程序提供的服务工具, 用以完成汇 编的辅助性工作。
• 指示性语句在汇编时被解释执行, 除了部 分语句可以申请存储空间外, 不产生任何 目标代码。
• 主要讲解:
–数据定义、符号定义、段定义、过程定义
微电机子原信理息与学接口院技术 23
符号定义语句
• 用途:给一个符号重新命名。 • 主要有:
微电机子原信理息与学接口院技术 4

微机原理与接口技术PPT_第4章 汇编语言程序设计

微机原理与接口技术PPT_第4章 汇编语言程序设计

分段结构 程序按段编写, 内存分段编址相对应。 程序按段编写 与8086内存分段编址相对应。 内存分段编址相对应 每段由伪操作SEGMENT开始、由ENDS结束。 开始、 结束。 每段由伪操作 开始 结束 程序可由多个段构成,至少有一个代码段。 程序可由多个段构成,至少有一个代码段。 程序最后为END结束语句,后跟一启动地址。 程序最后为 结束语句,后跟一启动地址。 结束语句 启动地址指示程序开始执行的第一条语句。 启动地址指示程序开始执行的第一条语句。 程序中设有返回DOS的功能。 的功能。 程序中设有返回 的功能 使程序执行完后返回DOS系统的命令接受状态。 系统的命令接受状态。 使程序执行完后返回 系统的命令接受状态 程序中用到内存操作数时, 程序中用到内存操作数时, 应按操作数的寻址方式,给相应的段寄存器赋值 应按操作数的寻址方式 给相应的段寄存器赋值
根据语句功能的不同, 名字项可用来表示段名、 根据语句功能的不同, 名字项可用来表示段名、变量名 标号、过程名等。 、 标号、过程名等。 • 名字项用一个符号表示。 名字项用一个符号表示。 对符号的规定: 对符号的规定 ① 由字符 由字符A~Z ,a~z ,0~9及符号 、$、下划线 等组成 及符号@、 、下划线_ 及符号 最长31个字符 超出部分忽略。 个字符, ,最长 个字符,超出部分忽略。 不能用数字打头,以免与十六进制数相混。 ② 不能用数字打头,以免与十六进制数相混。 不使用汇编程序中的保留字。 如指令的助记符等 如指令的助记符等) ③ 不使用汇编程序中的保留字。 (如指令的助记符等 对定义的符号不区分大小写。但为便于记忆, ④ 对定义的符号不区分大小写。但为便于记忆,名字的定 义应该做到见名知意。 义应该做到见名知意。
例 4-1 给出一个完整的汇编语言源程序 完成两个字节数据相加。 完成两个字节数据相加。

微机原理与接口技术第四章汇编语言程序设计

微机原理与接口技术第四章汇编语言程序设计

汇编语言程序设计
2
汇编语言
汇编指令是由助记符号表示的机器指令,它与机器指令 一一对应。 伪指令是向汇编程序提供如何进行汇编工作的命令。 汇编指令、伪指令、宏指令和汇编程序一起组成了汇编 语言。
用汇编语言编制的用户程序称为汇编语言源程序。
补充例题
汇编语言程序设计
4.1.2 汇编与连接
将一个汇编指令翻译成机器语言的过程称为汇编。
汇编语言程序设计
2. 操作项
操作项表示语句要实现的的具体操作,可以是指令、宏指令语 句、伪指令的助记符,操作项是汇编语句中不可缺少的部分。汇编 程序对上述三类语句会作不同的处理。
对指令语句,汇编程序会将它翻译成二进制代码;
对于宏指令语句,汇编程序将其展开,也就是用宏体替代原来的 宏指令语句,并翻译成机器指令。 对于伪指令语句,汇编程序会按其指定的伪操作进行处理。
汇编语言程序设计
标识项的书写有严格的规定,这可使用下列字符;
字母 A~Z、a~z; 数字 0~9; 特殊符号 ?、· 、@、$等。 标识项的第1个字符不可以是数字,必须是字母或特殊字符,但是问号 本身不能单独作为标识,标识中如果用到“·”,则必须是第一个字 符。标识最多31个字符组成,多则无效。
注意:标识不能使用汇编语言的专用保留字。寄存器名,8086、 8088汇编语言中的指令助记符,伪指令名,表达式中使用的运算符 和属性运算符等均不能作为标识项,否则汇编时会给出错误信息; 标识项在程序中不能重复定义。
汇编语言源程序由若干语句组成,这些语句可分为三类: 指令语句。用助记符表示的机器指令,它们由汇编程序汇编成相应 的能被CPU直接识别并执行的目标代码。 宏指令语句。允许用户为多次重复使用的程序段命一个名字,然后 可在程序中用这个名字代替该程序段,将定义的过程称为宏定义。 将该程序段称为宏。 宏指令语句就是宏的引用。 伪指令语句。向汇编程序提供汇编过程要求的一些辅助信息。如: 给变量分配内存单元地址、定义各种符号、实现分段等。 伪指令与指令性语句最大区别是:伪指令语句经汇编后不产生任何机 器代码,而指令性语句经汇编后会产生相应的机器代码;其次,伪指 令语句所指示的操作是在程序汇编时就完成了的,而指令性语句的操 作必须在程序运行时才能完成。

微机原理与接口技术4章

微机原理与接口技术4章

段名 ENDS
(1)定位类型:用来规定段起始边界的要求,可以为以下四种,缺省为 PARA) PAGE: 16位段地址的最低8位必须为0,即从一页的起点开始。 PARA: 16位段地址的最低4位必须为0,即从一段的起点开始。 WORD: 16位段地址的最低1位必须为0,即从偶地址开始。 BYTE: 16位段地址可以为任意值,即段可以从任何字节开始
;伪指令,5个操作数 MOV AX,[BP十4] ;二个操作数
1.标号(名字):是给指令或某一存 储单元地址所起的名字。可由下列字
符组成: 字母:A ~ z ; 数字:0 ~ 9 ; 特殊字符:?、· 、@、一、$ 。
当标识符后跟冒号时,表示是标 号。它代表该行指令的起始地址;当 标识符后不带冒号时,表示变量;伪 指令前的标识符不加冒号。
;转至CYCLE
2021/6/12
MY_CODE ENDS END GO
;码段结束 ;整个程序结束
7
4.2汇编语言源程序的结构
一、 汇编语言的语句格式
[标号:] 指令助记符 [操作数][;注解]
[名字] 伪指令助记符 [参数][;注解]
例如: COUNT: INC CX ;一个操作数 COST DB 3,4,5,6,7
微机原理与接口技术
第四章 汇编语言程序设计
2021/6/12
1
第四章 汇编语言程序设计 主要内容
• 汇编语言程序的结构 • 汇编语言语句类型和组成 • 汇编语言程序设计
2021/6汇编语言程序的开发过程
文件名.ASM
汇编语言 源程序
汇编
文件名.OBJ
目标 程序
连接
连接程序能把一个或多个目标文件和库文件合成一个可执行程序 (.EXE、.COM文件):

微机原理与接口技术 第4章 汇编语言程序设计

微机原理与接口技术  第4章 汇编语言程序设计

5
系统功能调用入口 (同INT 21H)
4
程序终止处理程序地 址(INT 22H)
CTRL_BREAK中 断
4
出 口 地 址 ( INT
•SP指向程序尾部,栈长度256字 节。
+12H
23H)
4
标准错误出口地址 (INT 24H)
+16H
22
保留
+2CH
48
DOS专 用 ( 前 两 个 字 节环境块段地址)
PUSH DS
-D 159B:0 0F
159B:0000 48 65 6C 6C 6F 20 57 6F-72 6C 64 21 0A 0D 24 00 Hello World!..$.
-U 159C:0 4
159C:0000 1E
PUSH DS
159C:0001 33C0
XOR AX, AX
159C:0003 50
1、定位类型
指明内存中以何种类型的边界开始该段
PAGE
段起始地址的最低8数必须为0
PARA(默认) 段起始地址的最低4位必须为0
WORD
该段必须从字的边界开始,地址必须为偶数
BYTE
从任何地址开始
2、连接方式
本段与其它段的关系
NONE(默认)本段与其它段逻辑上无关,每段都有自己的基地址
PUBLIC
与其他同名同‘类别’的段连接在一起,使用一个共同的基地址
4.2 汇编语言源程序的结构
4.2.1 汇编语言的语句格式 两类汇编语言语句: 1、执行性语句(一般性执行性语言和宏指令),产生机器
指令代码
[标号:] 指令助记符 [操作数] [;注释] • 标号代表该行指令的起始地址 • 注释可以省略

微机原理与接口技术第四章 汇编语言程序设计说明

微机原理与接口技术第四章 汇编语言程序设计说明

格式: 格式: 名字 伪指令指示符
操作数, 操作数,操作数 ;注释
关于汇编语言程序的几点说明
标号、名字与标识符 标号——用于硬指令的标识符,后跟冒号分隔。 标号——用于硬指令的标识符,后跟冒号分隔。 ——用于硬指令的标识符 名字——用于伪指令的标识符,后跟空格或制表符分隔,后面没有冒号。 名字——用于伪指令的标识符,后跟空格或制表符分隔,后面没有冒号。 ——用于伪指令的标识符 标识符(Identifier)——最多由31个字母、数字及规定的特殊符号(如 _、 标识符(Identifier)——最多由31个字母、数字及规定的特殊符号( 最多由31个字母 $、?、@)组成,不能以数字开头。默认情况下,汇编程序不区别标识符中 组成,不能以数字开头。默认情况下, 的字母大小写。 的字母大小写。 在一个程序中,每个标识符具有唯一的定义, 在一个程序中,每个标识符具有唯一的定义,并不能采用该汇编语言所定义的 保留字。 保留字。
关于汇编语言程序的几点说明
操作数与参数
处理器指令的操作数可以是立即数、寄存器和存储单元。 处理器指令的操作数可以是立即数、寄存器和存储单元。 伪指令的参数可以是常数、变量名、表达式等,可以有多个, 伪指令的参数可以是常数、变量名、表达式等,可以有多个, 参数之间用逗号分隔。 参数之间用逗号分隔。
关于汇编语言程序的几点说明
START:
NEXT:
MOV AX,DATA ;送数据段段地址 MOV DS,AX MOV AX,STACK ;送堆栈段段地址 MOV SS,AX MOV SP, OFFSET TOP ;堆栈段偏移量送SP MOV BX,OFFSET TABLE ;平方表有效地址送BX MOV DX,OFFSET BUF ;提示输入一个数 MOV AH,9 ; 9号功能调用,(显示字符串) INT 21 MOV AH,1 ;1号功能调用,(输入字符并显示) INT 21 ;键入数送入AL MOV AH,0 AND AL, 0FH ;屏蔽高四位 ADD BX,AX ;表首加偏移量 MOV AL,[BX] ;查表得平方值送AL MOV AH,4CH INT 21H RET ENDP ENDS END START ;带参数返回DOS ;返回DOS ;过程MAIN结束 ;代码段结束 ;汇编结束

微机原理与接口技术习题答案4

微机原理与接口技术习题答案4

第4章汇编语言程序设计1.已知在BUF的起始处保存有N个字符的ASCII码,编写汇编语言程序实现,将这组字符串传送到缓冲区BUFR中,并且使字符串的顺序与原来的顺序相反。

解:BUF DB "BONJOUR_BELLE"BUFR DB 100 DUP(?)MOV CX, NLEA SI, BUFLEA DI, BUFRADD DI,CXDEC DIL1:MOV AL,[SI]MOV [DI],ALINC SIDEC DILOOP L12.利用移位、传送和相加指令实现AX的内容扩大10倍。

解:将扩大后的结果放在DX:AX中,注意到10×AX=8×AX+2×AX。

XOR DX,DXSHL AX, 1RCL DX, 1MOV BX,AXMOV CX,DXSHL AX, 1RCL DX, 1SHL AX, 1RCL DX, 1ADD AX, BXADC DX, CX3.在缓冲区V AR中连续存放着3个16位的无符号数,编写程序实现将其按递增关系排列;如果V AR中保存的为有符号数,则再编写程序实现将其按递减关系排列。

解:V AR DW 1236,-432,3900XOR SI,,SIMOV AX,V AR[SI]CMP AX, V AR[SI+2]JAE L1XCHG AX, V AR[SI+2]L1:CMP AX, V AR[SI+4]JAE L2XCHG AX, V AR[SI+4]L2:MOV V AR[SI], AXMOV AX,V AR[SI+2]CMP AX, V AR[SI+4]JAE L3XCHG AX, V AR[SI+4]L3:MOV V AR[SI+2], AX4.编写程序段实现将AL和BL中的每一位依次交叉,得到的16位字保存在DX中,例如(AL)=01100101B,(BL)=11011010B,则得到的(DX)=10110110 10011001B。

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

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

2. 等号伪指令“=”
“=”伪操作与EQU相类似。区别是:EQU不允许重复 定义,而“=” 则允许重复定义。
EMP=7 EMP=EMP+1 对
EMP EQU 7
EMP EQU 8 错
实际上EQU定义的是常量,而“=”定义的是变量
3. 解除定义伪指令PURGE
格式:PURGE <符号1,符号2,…,符号N> 功能:解除指定符号的定义。解除符号定义后, 可用EQU重新进行定义。如: Y1 EQU 7 ;定义Y1的值为7
OPERATOR)
(OPERAND,…,OPERAND)
其中,REPEAT_COUNT用来指定括号中的操作数的重复 次数,它的值应该是一个正整数。
ARRAY1
00
【例4-5】 使用DUP实现重复定义。
01
02
ARRAY1 DB 2
ARRAY2 DB 100
DUP(0,1,2,?)
DUP( ? )
-00 01 02
34H
2AH ?
就是伪指令语句,其功能是在内存中开辟3个名字 分别为BUF1、BUF2、SUM的字节存储单元。
4.1.2 汇编语言的语句格式
[名字] 指令助记符,操作数 [;注释] 例如: BUF: MOV AX, BX ; 令AX等于BX JMP BUF
其中带方括号的项可以省略
名字的定义方式和C语言一样,这里不再重复。
其中,段寄存器名必须是CS、DS、ES和SS,而段名 则必须是由SEGMENT定义的段中的段名。ASSUME NOTHING 则可取消前面由ASSUME所指定的段寄存器。
例如,下面是一个的对应关系标准的汇编源程序段定义。
DATE_SEG1 SEGMENT … DATE_SEG1 ENDS DATA_SEG2 SEGMENT ;数据段结束 ;定义数据附加段 DATA_SEG2 ENDS ;定义数据段

微机原理与接口技术4-1汇编语言程序设计

微机原理与接口技术4-1汇编语言程序设计

1.指出下列指令的错误:

(1) MOV AX,[SI][DI]
(2) MOV [BX],[SI] (3) ADD AX,BYTE PTR[BX] (4) JMP BYTE PTR[BX] (5) OUT 230H, AX
2.堆栈指针寄存器SP的初值为1000H,(AX)=2000H,(BX)=3000H, 试问:
============================
4.3 伪指令—— 4.3.1 常量
1.常量的类型
(1)数值型常量
二进制数:以字母B结尾,例:10101001B。 十进制数:以字母D结尾(或省略),例:5678。 十六进制数:以字母H结尾,由0~9,A~F 所组成,以字母A~F开头的十六进制数,须在字 母前加上数字0。
第4章汇编语言程序设计
机器语言、汇编语言和高级语言比较一览表
名 称 特 点 缺 点 优 点 适用场合

计算机可以 用机器码书 不易被人们识别和读写。 机器语言 直接识别和 写指令 难写、难读、难交流 执行 用符号书写 指令(用助 记符表示操 汇编语言 作码,特殊 符号表示操 作数) 机器不能直接识别;程 序员必须了解机器的结 构和指令系统,不易推 广和普及;不能移植, 不具备通用性 易为人们识 别、记忆和 读写 易于推广和 交流;不依 赖于机器, 具有通用性
4.3 伪指令—— 4.3.3 段定义
============================
内存是分段管理的,程序的不同部分应放在特定 的段中。段定义伪指令就是为程序的分段而设置的。
段名 SEGMENT
…… 段名 ENDS 任何逻辑段总是从SEGMNT语句开始,以ENDS 语句结束,成对出现。

《微机原理与接口技术》课件——第4章微机原理与接口技术

《微机原理与接口技术》课件——第4章微机原理与接口技术

出错
连接 程序
LINK
出错 文件
XXX.EXE XXX.MAP XXX.LIB
出错
DEBUG
.OBJ:目标文件,.LST:列表文件,.CRF:交叉引用文件 .MAP:映像文件,LIB:库文件
说明:
操作使用的工具
操作得到的文件
4
4.2汇编语言格式
一个简单的8086系统下的汇编语言程序:
DATA SEGMENT
6
4.2汇编语言格式
➢ 指令语句
[标号:] 指令助记符 [操作数,操作数] [;注释]
例如: mov cx,8 ;2操作数指令
s: nop
;0操作数指令(nop空操作)
loop s
;1操作数指令
➢ 伪指令语句
[名字] 伪指令助记符 参数,参数… [;注释] 例如: data1 db 0,1,2 ;数据定义伪指令DB,在内存中定义
➢ 例如,对于代码段中的一条指令:
2000H:1234H ADDR: INC CX ;段地址=2000H 偏移量=1234H
则有:
MOV AX,SEG ADDR
;AX←2000H
MOV AX,OFFSET ADDR
;AX←1234H;与指令 “LEA
AX,ADDR” 等价
21
(2)TYPE、LENTH、SIZE
;3个连续的字节单元,初值是0,1,2 ;data1表示第一个数据0的偏移地址
7
4.3 汇编语言的基本数据
➢ห้องสมุดไป่ตู้汇编语言程序的语句中包含的元素 : 字符集 保留字与标识符 常量、变量与标号 表达式及运算符
8
一、字符集
➢ 允许使用的字符: 字母,包括大写字母A~Z和小写字母a~z; 数字,包括0~9; 特殊字符,包括:+ - * / =()[ ] < > ; , ‘ “ . — :? @ $ & 及空格、制表符、回车、换行等。

微机原理和接口技术-4-1汇编语言程序设计

微机原理和接口技术-4-1汇编语言程序设计

2015.10 Zuo
12
微机原理与接口技术
Chapter 4汇编语言程序设计
2. 变量、标号与地址表达式——变量
②变量的定义
一般在数据段或附加数据段中使用数据定义伪指令 DB、DW、DD、DQ和DT来定义 格式: [变量名] 数据定义伪指令 表达式[,…] 功能: 定义了一变量,并开辟了由变量属性所决定 的一 片连续存储区,其存储区
段的段首址 例: A DD B ;B为变量,则A的初始值为B的偏移地址,
段首址
2015.10 Zuo
16
微机原理与接口技术
重复子句:n DUP(表达式)
Chapter 4汇编语言程序设计
例: DB 3 DUP(‘A’, 12H)
‘A’, 12H, ‘A’, 12H, ‘A’, 12H
DUP可以嵌套,从里向外展开
? X 02H 00H 13H 14H
• 段属性:定义变量所在段的段首址,当访问该变量时,该段首 址应在某一段寄存器中,即为CPU当前可访问段;
• 偏移地址:该变量所占存储单元到所在段的段首址的字节距离; • 数据类型:类型是指存取该变量中的数据所需要的字节数,变 量的类型由定义该变量时所使用的伪指令确定。
汇编期间进行,运算的结果为一数值常量,汇编程 序将数值表达式直接替换为结果数值常量。
MOV AX, 1+2
2015.10 Zuo
9
微机原理与接口技术
数值表达式
Chapter 4汇编语言程序设计
算符的优先级?
3 GT 2 AND 4 + 8 LT 10
0FF
12
* / MOD SHL SHR
+-
EQ NE LT LE GT GE
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MOV BYTE PTR [1200H], 01H MOV WORD PTR [1200H], 01H
25
MOV [1200H], 01H
4.1 汇编语言基础
1
2 3 4 汇编语言的语句组成 常数与表达式 标识符 数据定义
5
6
与数据相关的操作符
符号定义
26
符号定义
符号 通过将标识符(标号)与整数表达式或文本联系起来而 创建的。 符号常量不占用任何实际的存储空间。符号常量仅在编 译期间编译器扫描程序时使用,在运行期间不能修改。 等号伪指令 将符号名与整数表达式联系起来 COUNT = 500 MOV AX,COUNT
27
MOV AX, 500
同一程序中以“=”定义的符号可以重定义
符号定义
$运算符
$运算符(当前地址计数器)返回当前程序语句的地址偏移值 利用$可以方便的计算数组或字符串的大小
值为5
ARRAY DB 10, 20, 30 , 40, 50 ARRSize = ($ARRAY) ARRAY DW 10, 20, 30 , 40, 50 ARRSize = ($ARRAY)/2
NUIST
第4章 汇编语言程序设计
主要内容
1 汇编语言基础 2 顺序程序设计
3
4 5
分支程序设计 循环程序设计 DOS系统功能调用 子程序设计
6
7
字符串处理
8
码转换程序设计
2 NUIST
主要内容
1 汇编语言基础 2 顺序程序设计
3பைடு நூலகம்
4 5
分支程序设计 循环程序设计 DOS系统功能调用 子程序设计
6
13
4.1 汇编语言基础
1
2 3 4 汇编语言的语句组成 常数与表达式 标识符 数据定义
5
6
与数据相关的操作符
符号定义
14
标识符
标识符可以包含1~31个字符;
标识符对大小写不敏感
标识符的第一个字符必须是字母、下划线、@、?或者$ 后继字符可以是数字。 标识符不能与汇编器的保留字相同。 VAR1 $sum _4567 count _mainMIN
0105H 0106H 0107H 0108H
DB
7, 8, CNT, 9
06H
则执行指令MOV AX,ARY+2 $(当前地址) 和MOV BX, ARY+10后 (AX)= 0106H, (BX)= 0908H.
31
00H
07H 08H
0109H 010AH 010BH
08H 09H

主要内容
1000:0009H ABH
1000:000AH 1000:000BH 1000:000CH …
00H
19
数据定义
1000:000BH 1000:000CH 1000:000DH
31H 32H 33H 34H DATA5
例4-1 DATA5 DB „1234‟ DATA6 DW „AB‟,‟C‟, „D‟ DATA7 DB ?
顺序程序设计
程序4-1 CODE SEGMENT ASSUME CS:CODE MOV AX, 0123H ADD AX, 0456H ADD AX, 0789H ADD AX, 0ABCH MOV AX, 4C00H INT 21H CODE ENDS END END标志着一个汇编源程 序的结束,编译器在编译 汇编源程序的过程中,如 果遇到END伪指令,就停 止对源程序的编译。
OFFSET 变量名或标号 取出变量名或标号所 在段内的偏移地址 TYPE 变量名或标号 取出变量名或标号的 类型 取出变量的长度
LENGTH LENGTH 变量名 SIZE SIZE 变量名
取出变量的大小
23
属性操作符
对于例4-1定义的各变量 SEG TYPE SIZE SIZE DATA1 DATA3 DATA5 DATA9 ;结果为1000H ;结果为0001H ;结果为1 ;结果为1 ;结果为1 ;结果为3 ;结果为3
代码标号:程序代码区中的标号必须以冒号(:)结尾。通常 用于做跳转和循环指令的目标地址。 CYCLE: CMP SUM, 100 ;SUM单元与100比较 ……. JMP CYCLE
5
汇编语句的组成
[标号:]
助记符
空格
操作数
[;注释]
指出语句的基本功能,是语句的必要部分,即每条语句都 必须有助记符 。 SUM DB 0 DB是定义字节变量的伪指令助记符
17
数据定义
格式中的表达式可以有以下几种情况:
一个或多个常数或表达式。常数之间、表达式之间用逗 号隔开。
带引号的字符串。 一个问号“?”。 重复方式。此时表达式部分的格式为:重复次数 表达式) DUP(
18
数据定义
1000:0000H
30H 34H DATA1 DATA2
例4-1
1000:0001H 1000:0002H
1000:001DH 1000:001EH
?
? ?
1000:001FH
1000:0020H
21

4.1 汇编语言基础
1
2 3 4 汇编语言的语句组成 常数与表达式 标识符 数据定义
5
6
与数据相关的操作符
符号定义
22
属性操作符
操作符 SEG OFFSET TYPE
表达式 SEG 变量名或标号
意义 取出变量名或标号所 在的段地址
12
表达式
关系运算符
EQ、NE、LT、GT、LE、GE
关系运算符的操作数要么都是数字操作数,要么是同一 段内两个存储单元的地址。当结果成立时,其结果为全1, 否则为全0。
汇编语言中的表达式不能成单独语句,只能是语句的一个部分 MOV AX, SUM+2 JMP AGAIN+5 MOV BL, VB GE VA
? ? 00H 00H 00H ? ? DATA9 DATA8
例4-1
1000:0017H 1000:0018H 1000:0019H 1000:001AH 1000:001BH
DATA8 DW ? DATA9 DB 3 DUP(0) DATA10 DB 5 DUP(?)
DATA10
1000:001CH
9
常数
出现在汇编源程序中的固定值,即其在运行期间不会变化 字符串常数 是由单引号括起来的一串字符。汇编程序把它们表示成 一个字符序列,一个字节对应一个字符,把引号内的字符翻 译成ASCII码 。 ’218‟——32H,31H,38H
10
表达式
由操作数和运算符组合的序列,它在汇编时能产生一个值。 算术运算符 +、-、*、/、MOD
OFFSET DATA2 LENGTH DATA4 LENGTH DATA9
24
PTR 运算符
合成运算符PTR可以由已存在的存储器操作数声名一个 段和偏移量相同,而类型不同的新的存储器操作数,格式如 下: 类型 PTR 表达式 类型可以是BYTE,WORD,DWORD等。表达式可以 为变量名、标号或其他表达式。 MOV AX, WORD PTR DATA3
CYCLE: CMP SUM, 100 ;SUM单元与100比较 ……. JMP CYCLE CMP是比较指令的助记符
6
汇编语句的组成
[标号:]
助记符
空格
操作数
[;注释]
操作数部分可以是数据本身(立即寻址),或者是以其他某 种寻址方式给出的存放操作数的地址。 操作数不是每条指令所必须的。 注释仅用作语句或程序段的说明,注释必须以“;”开头 ,可以作为语句的一个部分,也可以作为一个单独的语句
值为5
28
符号定义
EQU伪指令 给符号名定义一个值,或者别的符号名,甚至可以定 义成一条可执行的指令 BSIZE EQU 100 COUNT EQU CX CBD EQU AAD 用EQU定义的符号不能在同一源文件中重定义
29
其他伪指令
ORG伪指令 ORG伪指令的功能是说明该语句下面的程序在段内的 起始地址。 ORG 0200H 该伪指令下一条语句在段内起始地址为0200H。
注意ENDS和END的区别
35
顺序程序设计
程序4-1 CODE SEGMENT ASSUME CS:CODE MOV AX, 0123H ADD AX, 0456H ADD AX, 0789H ADD AX, 0ABCH MOV AX, 4C00H INT 21H CODE ENDS END
15
4.1 汇编语言基础
1
2 3 4 汇编语言的语句组成 常数与表达式 标识符 数据定义
5
6
与数据相关的操作符
符号定义
16
数据定义
变量
存放在存储单元中的操作数是变量,它们的值是可以改变的 变量的类型 字节(BYTE)、字(WORD)、双字(DOUBLEWORD)等 数据定义语句 变量名 DB 表达式; 定义字节变量 变量名 DW 表达式;定义字变量 变量名 DD 表达式; 定义双字变量
12H
78H 56H 08H DATA3
DATA1 DATA2 DATA3 DATA4
DB 30H DW 1234H, 5678H DB (2*4),(9/3) DD 0ABCDEFH
1000:0003H 1000:0004H 1000:0005H
1000:0006H
03H
DATA4
1000:0007H EFH 1000:0008H CDH
顺序程序设计
程序4-1 CODE SEGMENT ASSUME CS:CODE MOV AX, 0123H ADD AX, 0456H ADD AX, 0789H ADD AX, 0ABCH MOV AX, 4C00H INT 21H CODE ENDS END
相关文档
最新文档