打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
MASM入门(二)MASM基本语法qq(前面有小数点.CODE段名创建一个代码段)

(前面有小数点.CODE段名创建一个代码段)

文章目录

1.变量和标号

1.4.1属性

1.4.2定义:在指令码前面加上标识符和冒号":";

1.3.1四种属性

1.3.2定义

1.1标识符

1.2保留字

1.3变量

1.4标号

2.常量

2.1伪指令EQU

2.2伪指令 name = expression

2.3伪指令ORG

2.4数制

2.5常量运算

3.类型指示

3.1操作符PTR (强制类型转换)

3.2操作符THIS(当前地址)

3.3操作符LENGTH,TYPE,SIZE(SIZE=LENGTH*TYPE),WIDTH

3.4HIGH,LOW

3.5SEG,OFFSET

4.段定义

5.过程定义

6.结构类型

7.记录类型

8.宏

9.条件汇编

10.简化段定义

11.Reference

1.变量和标号

1.1标识符

以字母和特殊字符(_, $, ?, @)开头的字母数字和特殊符号串

1.2保留字

具有特定用途的标识符,用户不能改变其含义

1.3变量

1.3.1四种属性

偏移量 是相对于段起始地址(0)的字节距离

类型 有字节(BYTE)、字(WORD)和双字(DWORD)等基本类型,还有结构(struct)等复合类型

段地址 是在程序装入给定的基址

值 为实际表示的

内容,可以改变

1.3.2定义

[变量名] DB/DW/DD 表达式  例:   msg DB "How are you?",0 ;//共13个字节,DB表示以byte类型(1个字节)定义变量      magic DB 50 dup('1','2','3')       DB '1','2','3'; 共占53字节,并初始化为字符串"123123…";50表示容量;dup重复数据        DATA7  DB ?  ; 占1字节;'?’,表示该变量的值不确定,即:该变量所表示的内存单元中的内容是不确定的,或者说是,当表达式为问号时,变量所对应的内存区中并没有存入新的值,而只是预留出了相应的存储空间;      num dw 1,2,3,4,5,6,7,8,9,10 ;共20字节                               ;相当于C风格的 WORD num[10]={1,2,3,4,5,6,7,8,9,10};

1.4标号

1.4.1属性

段地址 是指该标号所对应的指令所在段的段地址

偏移地址 段内偏移地址

类型有两种:NEAR和FAR

NEAR 类型,表示该标号在段内使用

FAR 类型则表示该标号可以在段间使用

1.4.2定义:在指令码前面加上标识符和冒号":";

例如 :START: PUSH DS

2.常量

2.1伪指令EQU

PI EQU 31415926 ; 类似C语言#define PI 31415926

2.2伪指令 name = expression

PIX = PI+2 //编译器在预处理阶段将出现name换成expression

2.3伪指令ORG

规定程序的起始地址

默认从0000H开始

ORG 2000H;规定程序指令从地址2000H开始存放

2.4数制

二进制: 11101011B

八进制: 345Q

十进制: 8097D, 8097

十六进制: 1234H, 0EFDAH

2.5常量运算+ - * \  AND OR XOR NOT  SHL SHR //shift left  \  shift right EQ NE   //equal  \ not equal LT LE   //lower than  \lower equal小于等于 GT GE   //greater than  \greater equal大于等于

例: MOV AL, ((11110000B AND 64) +5) GT 32 //将后边比较结果的值传到AL上

3.类型指示

3.1操作符PTR (强制类型转换)

MOV BYTE PTR AGE, 20 ;//指示AGE的类型

mov ax,bx ;是把 BX寄存器里的值赋予AX,由于二者都是word型,所以没有必要加“WORD”

mov ax,word ptr [bx];是把内存地址等于“BX寄存器的值”的地方所存放的数据,赋予ax。由于只是给出一个内存地址,不知道希望赋予ax的,是 byte还是 word,所以需要用 word明确指出!

PTR的作用域只在当前语句中

3.2操作符THIS(当前地址)COUNTW EQU THIS WORD COUNTB DB 51,96,78,90 AGAINF EQU THIS FAR   AGAINN: MOV AL, 90

3.3操作符LENGTH,TYPE,SIZE(SIZE=LENGTH*TYPE),WIDTH

LENGTH

LENGTH 变量名

取出变量的长度

TYPE

TYPE 变量名或标号

取出变量名或标号的类型(变量所占用的字节数)

TYPE的值:BYTE:1, WORD:2, DWORD:4,NEAR:-1, FAR:-2

SIZE

SIZE 变量名

取出变量的大小

WIDTH

WIDTH 变量名

取出记录字段的宽度

3.4HIGH,LOW

MOV AL, HIGH 56761 ;取常量的高位字节

MOV AL, LOW 56761 ;取常量的低位字节

3.5SEG,OFFSET

SEG

SEG 变量名或标号

取出变量名或标号所在段的段地址

OFFSET

OFFSET 变量名或标号

取出变量名或标号所在段内的偏移地址

例如:

MOV AX, SEG COUNT //取出COUNT所在段的段地址放入AX寄存器中

MOV AX, OFFSET COUNT /取出COUNT所在段内的偏移地址放入AX寄存器中

4.段定义

END 指示整个汇编源程序结束,并给出第一条指令的执行位置()

END STARTDATA 1 SEGMENTS ;一段的开始     name1 DB 50DUP(?)           DB 2,3,4,5   DATA 1 ENDS ;一段的结束 DATA 2 SEGMENTS ;一段的开始      name2 DB 50DUP(?)   DATA 2 ENDS ;一段的结束   STACK SEGMENTS ;一段的开始         DB 5000 DUP(?) STACK ENDS ;一段的结束   CODE SEGMENT       ;把段与段寄存器相关连       ASSUME CS:CODE, SS: STACK; DS:DATA1, ES:DATA2   START: MOV AX,DATA1          MOV DS,AX          MOV AX,DATA2          MOV ES,AX          MOV AL,name1 ;name1隐含使用DS          MOV BL,name2 ;name2隐含使用ES。这里需要段超越。            …… CODE ENDS     END START

5.过程定义

定义

过程名 PROC [FAR或NEAR] ; 默认为NEAR

……

RET

过程名 ENDP

调用

例:

call delay ;调延时子程序

……

delay proc near ;延时子程序定义

mov bx,200

lll: mov cx,0

ll: loop ll

dec bx

jne lll

ret

delay endp

CALL 过程名

6.结构类型

定义

结构类型名 STRUC [对齐类型Alignment][,NONUNIQUE]     Field1 Type1 Exp1     Field2 Type2 Exp2     ......     FieldN TypeN ExpN  结构类型名 ENDS

FieldN:变量名,可以不取,无变量名是通过在结构体中偏移量访问

使用

[变量名] 结构类型名 <[字段值列表]>

字段值列表没有重新初始化的使用默认值,用“,”隔开

7.记录类型

记录名 RECORD 字段[,字段,…]

字段 字段名:宽度[=初始值表达式] //宽度:二进制位数,没有初始化默认为0

使用

[变量名] 结构类型名 <[字段值列表]>

变量名.字段名WEATHER RECORD A:5=10, B:2=3, C:3 ;按位,不能超过16位。 TOR WEATHER <1, ,3> MOV AL, TOR.B

8.宏

定义 宏名 MACRO 参数 ;用相应内容替换到调用位置       ...;宏定义体       ENDM  ;结束定义

使用

宏名 参数[,参数]

如:NAME PARA,PARA2…

取消宏

PURGE 宏名1,宏名2, …… ;

9.条件汇编例:SHOWCHAR MACRO X ;显示一个字符                IF X GE 35H                   MOV AL, X                ELSE                   MOV AL, '0'                ENDIF                MOV AH, 2                INT 21H                ENDM

10.简化段定义.8086 .MODEL SMALL ;SMALL采用小模式内存,一个代码段,一个数据段;      ;TINY:都在一个段  ;MEDIUM:多个代码段,一个数据段 DOSSEG ;采用DOS方法排列段 .DATA ;数据段 S1 DB 1,2,3 S2 DW 500 .STACK 100H ;堆栈段,指定大小为100,通常默认为1KB .CODE ;代码段 MAIN PROC FAR MOV AX,@DATA ; 数据段基址@DATA MOV DS,AX … RET MAIN ENDP END MAIN

简化段伪指令功 能注释

.CODE [段名]

创建一个代码段

段名为可选项,如不给出段名,则采用默认段名。对于多个代码段的模型,则应为每个代码段指定段名。

.DATA

创建一个数据段

段名是:_DATA

.DATA?

创建无初值变量的数据段

段名是:_BSS

.FARDATA [段名]

建立有初值的远调用数据段

可指定段名,如不指定,则将以FAR_DATA命名。

.FARDATA? [段名]

建立无初值的远调用数据段

可指定段名,如不指定,则将以FAR_BSS命名。

.CONST

建立只读的常量数据段

段名是:CONST

.STACK [大小]

创建一个堆栈段并指定堆栈段大小

段名是:stack。如不指定堆栈段大小,则缺省值为1KB

11.Reference

1 http://blog.sina.com.cn/s/blog_84ee1fff0102xbeb.html

2 http://bdxnote.blog.163.com/blog/static/844423520096137403605/

3 https://www.cnblogs.com/galano/p/8721350.html

4 http://www.voidcn.com/article/p-pjmhoonz-yp.html

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
C51汇编伪指令(转载) equ data bit ds
80X86 汇编指令符号大全(下)
常用的汇编指令都有哪些?
学习linux内核时常碰到的汇编指令(2)
【转】ARM汇编 MOV PC,LR
A51汇编器的解释
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服