汇编语言课件07MASM语法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

bvar2
wvar1
64H 64H 64H 64H -1(0ffh) 5 0ah ? 20h 20h 10h 20h 10h 00h
DL: bvar1
‘d’ 64H 64H 64H 64H -1(0ffh) 5 0ah ? 20h 20h 10h 20h 10h 00h
mov dl,bvar1 ; bvar1表示它的第1个数据,故 DL←100=’d’ dec bvar2+1 ; bvar2位移量为1的字节数据 (minint=5)减1,故为4 mov abc[3],dl ; abc位移量为3的字节单元赋值 ‘d’,字符串成为 ‘abcd’
段值(SEG):变量所在段的段址 偏移量(OFFSET):变量所在段相对0的存储位置(字 节数) 类型(TYPE):变量占用的字节数

1. 变量的定义 变量名 伪指令 初值表 变量名为用户自定义标识符,表示初值 表首元素的逻辑地址。变量名也可以没 有,在这种情况下,汇编程序将直接为 初值表分配空间,无符号地址。
4字节、8字节或10字节

例如:

21.42 -4.55E+2

字符串
字符串常量是用单引号或双引号括起来的单
个字符或多个字符,其数值是每个字符对应 的ASCII码值。

例如
‘d’=64H ‘AB’=4142H, ‘Hello,
Assembly !’
符号常量
符号常量是指使用标识符表达一个数值。 常量若使用有意义的符号名来表示,就可 以提高程序的可读性,同时更具有通用性。 MASM提供等价机制,用来为常量定义符号 名,符号定义伪指令有“等价EQU”和“等 号=”伪指令。
bvar2
wvar1
mov dl,bvar1 ; bvar1表示它的第1个数据, 故DL←100=’d’ dec bvar2+1 ; bvar2位移量为1的字节数据 (minint=5)减1,故为4 mov abc[3],dl ; abc位移量为3的字节单元赋 值‘d’,字符串成为 ‘abcd’
DL: ‘d’
string
A B C D E F G H I J 13 10 ‘$’
00h
2 3 4 4 2 3 4 4
共20字节
bvar1
mov dl,bvar1 ; bvar1表示它的第1个数据,故 bvar2 DL←100=’d’ dec bvar2+1 ; bvar2位移量为1的字节数据(minint wvar1 =5)减1,故为4 mov abc[3],dl ; abc位移量为3的字节单元赋值‘d’, 字符串成为 ‘abcd’
64H 64H 64H 64H -1(0ffh) 5 0ah ? 20h 20h 10h 20h 10h 00h
bvar1
mov dl,bvar1 ; bvar1表示它的第1个数据,故 DL←100=’d’ dec bvar2+1 ; bvar2位移量为1的字节数据 (minint=5)减1,故为4 mov abc[3],dl ; abc位移量为3的字节单元赋值 ‘d’,字符串成为 ‘abcd’
变量名 伪指令 初值表 变量定义伪指令有DB,DW,DD,DF,DQ, DT,它们根据申请的主存空间单位分类 DB:字节 DW:字(16位) DD:双字(32位) DQ:4字节 存实型数 DT:10字节,BCD码

除了 DB,DW ,DD等定义的简单变量, 汇编语言还支持复杂的数据变量,如结构 (Structure)、记录(Record)、联合 (Union)等
.RADIX 10
.model small .stack 1024 .data string db ‘Hello, world’ ,0dh,0ah ,‘$’ .code start: mov ax,@data mov ds,ax mov dx,offset string mov ah,9 int 21h mov ah,4ch int 21h end start
[操作数序列]
[;注释]
语句标号——标识符后加 : ,提供转移地址,开始地 址
[语句标号:] 指令名
[操作数序列]
[;注释]
三类:机器指令、伪指令和宏指令。
机器指令:指令系统中的硬指令,程序运行时由CPU执行 伪指令:汇编程序执行的操作,规定汇编程序如何按要求 进行汇编及分配内存 宏指令:由一系列指令或伪指令构成,汇编时展开成若干 条机器指令,用于提高编程效率 (伪指令和宏指令由汇编程序在汇编期间处理 )
string db ‘ABCDEFGHIJ’ ;定义字符串:使用字节定义DB伪指令 crlfs db 13,10,'$' ;回车符0D H、换行符0AH和字符'$'=24H maxint equ 0ah crlfs array1 dw maxint dup(0) ; 10个初值为0的字量,可以认为是数组 array1 array db 2 dup(2,3,2 dup(4)) ; 8个字节内容依次为:2 3 4 4 2 3 4 4 array
DL: ‘d’
dvar
abc
00h ? 77h 77h 34H 12H 11h 11h 65h 87h ‘a’ ‘b’ ‘c’ ‘d’
wvar2
mov ax,word ptr dvar[0]
bvar2
wvar1
DL: bvar1
‘d’ 64H 64H 64H 64H -1(0ffh) 4 0ah ? 20h 20h 10h 20h 10h 00h
mov dl,bvar1 ; bvar1表示它的第1个数据, 故DL←100=’d’ dec bvar2+1 ; bvar2位移量为1的字节数据 (minint=5)减1,故为4 mov abc[3],dl ; abc位移量为3的字节单元赋 值‘d’,字符串成为 ‘abcd’

EQU用于数值等价时不能重复定义符号名, 但“=”允许重复赋值, 例如:

X
= 7 X = X+5
;同样 X EQU 7 是正确的 ;但是 X EQU X+5 是错误的
数值表达式
数值表达式一般是指由运算符(MASM统称 为操作符Operator)连接的各种常量所构 成的表达式。汇编程序在汇编过程中计算 表达式,最终得到一个确定的数值,所以 也是常量。 由于表达式是在程序运行前的汇编阶段计 算,所以组成表达式的各部分必须在汇编 时就能确定。
wvar2
wvar2 dw ? ;wvar2是没有初值的字变量 dvar dd 12347777h,87651111h ;双字变量:2个双字数据 abc db 'a','b','c',? 等效于abc db ‘abc’,? ;定义字符,实际是字节变量 abc+2?
dvar
abc
00h ? 77h 77h 34H 12H 11h 11h 65h 87h ‘a’ ‘b’ ‘c’ ?
汇编语言课件07 MASM语法(1)
汇编语言语句格式与分类
标识符: 用来为变量、段、标号、过程等命名 命名规则:

最长31个字符 第一个字符不能是数字 ? - $@可出现在任意位置,但? $不能单独使用
汇编语言语句一般格式为:
[语句标号:] 指令名 [操作数序列] [;注释]
[语句标号:] 指令名
常量
其中,n为2-16范围内任何数值。例如指 令“ .RADIX 16”,将缺省基数改为 16, 即没有后缀的数值表示16进制数,非16 进制数均应使用后缀字母,包括10进制 数 例如

10101100B 0a4h,56acH 35D 357Q

实数:
±整数.小数E±指数
bvaபைடு நூலகம்2
wvar1
DL: bvar1
‘d’ 64H 64H 64H 64H -1(0ffh) 4 0ah ? 20h 20h 10h 20h 10h 00h
mov dl,bvar1 ; bvar1表示它的第1个数据,故 DL←100=’d’ dec bvar2+1 ; bvar2位移量为1的字节数据 (minint=5)减1,故为4 mov abc[3],dl ; abc位移量为3的字节单元赋值 ‘d’,字符串成为 ‘abcd’

符号定义伪指令
符号名 EQU 数值表达式 符号名 EQU <字符串> ;MASM 5.x不支持 符号名 = 数值表达式 等价伪指令EQU给符号名定义一个数值或定 义成另一个字符串,这个字符串甚至可以 是一条处理器指令。
例如: DosWriteChar equ 2 CarriageReturn = 13 CallDOS equ <int 21h> 应用上述符号定义,下列左边的程序段 可以写成右侧的等价形式: mov ah,DosWriteChar ;mov ah,2 mov dl,CarriageReturn ;mov dl,13 CallDOS ;int 21h
[语句标号:] 指令名
[操作数序列]
[;注释]
可以是常量、变量、表达式、寄存器名 或标号等,用逗号隔开。
[语句标号:] 指令名
[操作数序列]
[;注释]
“;”后可给出语句注释,提高可读性和可理解性。
常量、变量、标号、运算符和表达式
常量表示一个固定的数值,又可分成多种形式。 1. 常数 这里指由10,16,2和8进制形式表达的数值 各种进制的数据以后缀字母区分,默认不加后缀 字母的是十进制数 基数控制. RADIX伪指令可以改变默认进制: .RADIX n
变量名 伪指令 初值表 • 初值表是用逗号分隔的参数,主要由常 量、数值表达式或“?”组成。其中 “?”表示初值不确定,即未赋初值。 另外,多个存储单元如果初值相同,可 以用复制操作符 DUP进行定义。DUP的格 式为: 重复次数 DUP (重复参数) 例:stack1 db 100 dup(?)
bvar2
wvar1
DL: bvar1
‘d’ 64H 64H 64H 64H -1(0ffh) 5 0ah ? 20h 20h 10h 20h 10h 00h
mov dl,bvar1 ; bvar1表示它的第1个数据,故 DL←100=’d’ dec bvar2+1 ; bvar2位移量为1的字节数据 (minint=5)减1,故为4 mov abc[3],dl ; abc位移量为3的字节单元赋值 ‘d’,字符串成为 ‘abcd’


汇编语言支持多种运算符 P46 表3-2
mov ax,3*4+5 ;等价于 mov ax,17 or al,03h AND 45h ;等价于 or al,01H mov al,0101b SHL (2*2) ;等价于 mov al,01010000b
变量

变量实质上是指内存单元的数据,因而 可以改变。变量需要事先定义才能使用。 变量的三种属性:
2. 变量的应用 变量具有逻辑地址。在程序代码中,通 过变量名引用其指向的第一个数据,通 过变量名加减位移量存取以第一个数据 为基地址的前后数据。 变量名后用“+n”或“[n] ”作用相同, 都表示后移n个字节存储单元。
例 变量的定义和应用
bvar1 bvar1 db 100,01100100b,64h,’d’ ;字节变量:不同进制表达同一个数值,内存中有 4个64H bvar2 minint= 5 ;符号常量:minint数值为5,不占内存空间 bvar2 db -1,minint,minint+5 ;内存中数值依次为0FFH , 5 , 0AH wvar1 db ?,2 dup(20h) ;预留一个字节空间,重复定义了2个数值20H wvar1 dw 2010h,4*4 ;字变量:两个数据是2010H、10H,共占4个字节 64H 64H 64H 64H -1(0ffh) 5 0ah ? 20h 20h 10h 20h 10h 00h
wvar2 dvar
abc
00h ? 77h 77h 34H 12H 11h 11h 65h 87h ‘a’ ‘b’ ‘c’ ?
wvar2
mov dl,bvar1 ; bvar1表示它的第1个数据, 故DL←100=’d’ dec bvar2+1 ; bvar2位移量为1的字节数据 (minint=5)减1,故为4 mov abc[3],dl ; abc位移量为3的字节单元赋 值‘d’,字符串成为 ‘abcd’
相关文档
最新文档