杨3-8

inc dec 指令不影响 CF标志位
汇编语言中可以有表达式,表达式又分为数值表达式和地址表达式
数值表达式分为:
常数
算术运算符(+ - * / mod)
关系运算符(eq ne lt gt le ge)
逻辑运算符(and or xor not shl shr)
操作符:high low length size seg offset type width mask




变量表示存储单元,这种存储单元中存放数值。
标号表示存储单元,这种存储单元中存放机器指令。


符号定义语句:
等价语句:
count equ 100
buff_len equ 4*count
等价语句不另外给符号分配存储单元。
相当于c语言中的宏
等号语句(=):
XX = 10,等号语句可以被重新定义。
定义符号名语句:
符号名 label 类型
类型可以为byte word dword near far
该语句的功能是定义由符号名指定的符号,使该符号的段属性和偏移属性与下一个紧接着的存储单元的段属性和偏移属性相同,使该符号的类型为参数所规定的类型。
buffer label word
buff db 100 dup (0)


下面的语句表示跳过8个字节的存储区:
org $+8
汇编语言用"$"表示地址计数器的值。


查表指令:
xlat;该指令将寄存器bx的内容作为表的首地址,把寄存器al的值作为下标,取出表项内容再送回al寄存器。


过程定义伪指令语句:
过程名 proc [near | far]
...
过程名 endp


字符串装入指令:
lodsb lodsw
lodsb 相当于 mov, al, [si],然后根据df改变si
lodsw 相当于 mov ax, [si],然后根据df改变si
不影响标志位.


字符串存储指令:
stosb stosw


字符串传送指令:
movsb movsw


字符串扫描指令:
scasb scasw
scasb: 类似于 cmp al, [di], 然后根据df改变di


字符串比较指令:
cmpsb cmpsw


重复前缀可加在串操作指令之前,达到重复执行其后的串操作指令的目的.
rep repe repz repne repnz


8086/8088的十进制数算术运算调整指令所认可的十进制数是以8421BCD码表示的,它分为未组合(或非压缩)的和组合(或压缩)的两种。组合的BCD码是指一字节含两位BCD码;未组合的BCD码是指一字节含一位BCD码,字节的高四位无意义。




组合bcd码的加减调整指令:daa das
未组合bcd码的加减乘除调整指令: aaa, aas, aam, aad


程序段前缀是DOS加载一个外部命令或应用程序时,在程序段之前设置的一个具有256字节信息区。
当DOS把控制权转给外部命令或应用程序之时,数据段寄存器DS和附加段寄存器ES均指向其PSP,即均含有PSP的段值,并不指向程序的数据段和附加段。这样应用程序可方便地使用到PSP中的有关信息。


PSP的偏移80H处含命令行参数的长度,从PSP的偏移81H开始存放命令行参数。


结构:
struc是MASM支持的一种伪操作
结构名 struc
数据定义语句序列(DB DW DD等伪操作)
结构名 ends


结构变量的定义:
[变量名] 结构名 <[字段值表]>




宏指令在使用之前要先定义。
宏指令的定义如下:
宏指令名 MACRO [形式参数表]
。。。
ENDM
注意endm前没有宏指令名


特殊的宏运算符:
1.强迫替换运算符&
jump macro con, lab
  j&con lab
         endm
jump nz, here
jump z, there


2.字符串原样传递运算符<>


3.文字字符运算符!
该运算符使用其后的一个字符只作为一般字符。


4.表达式运算%
调用时如,mess %(12+3-4)


5.宏注释
在宏定义中,如果注释以两个分号引号,那么宏扩展时该注释不出现。


局部变量说明伪指令local
汇编程序在每次展开宏时,总把由LOCAL伪指令说明的标号用唯一的符号(??0000至??ffff)代替。
htoasc macro
local isdecm
and al, 0fh
cmp al, 9
jbe isdecm
add al, 7
isdecm:
add al, 30h
endm


清除宏定义的伪指令purge
purge 宏名表


中止宏扩展的伪指令exitm


重复汇编:
rept 表达式
  需重复的语句组
endm
宏汇编程序将把“需重复的语句组”连续地重复汇编由表达式值所决定的次数。


伪指令irp
irp 形式参数,<实参1,实参2,,,实参n>
  需重复的语句
endm


quart label byte
irp X, <0,1,2,3,4,5>
db X*X
endm


伪指令irpc与伪指令irp相似,但实参列表是一个字符串。字符串的长度规定了重复的次数。


完整的段定义
段名 segment [定位类型] [组合类型] ['类别']
。。。
段名 ends
定位类型:para byte word dword page
组合类型:public common stack memory at表达式 private
类别,实际上只有类别相同的同名段才根据组合类型进行组合。


link程序会把组合类型为stack的段的有关信息写入可执行程序文件中。设置的ss值是组合类型为stack的段的段值,设置的sp值是堆栈段的大小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值