- 3
- 0
- 约2.12千字
- 约 5页
- 2017-02-07 发布于北京
- 举报
ch11-高级汇语编言程序设计
高级汇编语言程序设计
结构
结构的定义
格式:
结构名 STRUC
…
字段名 DB/DW/DD … ;字段定义
…
结构名 ENDS
*结构定义是一种对存储形式的描述,并不真正分配存储空间,只是定义了一种新的数据类型,类似定义了一个类(面向对象技术的思考方法)。类是结构的进化。
例:定义一个学生成绩结构
STUDENT STRUC
NUM1 DB ? ;学号
NAME1 DB ‘ABCDEFGHIJ’ ;姓名
SEX1 DB ? ;性别
MATH1 DB ?
COMPU1 DB ?
ADDRESS1 DB 20 DUP(?) ;地址
STUDENT ENDS
结构变量的定义
格式:
变量名 结构名 字段初值表
变量名 结构名 n DUP (字段初值表)
*定义了变量后才分配了存储空间,变量类似面对象技术中的一个实例。
例:
S1 STUDENT
S2 STUDENT 02, ‘Lisi’, ‘W’, 100, 70, ‘Shanghai’
S3 STUDENT 02, ‘Li’, ‘M’
S3 STUDENT 30 DUP( ) ;定义了含有30个学生元素的结构数组。
结构变量及字段的访问
访问格式:
变量名.字段名
[地址寄存器].字段名
例1:
MOV AL,S2.SEX1
MOV AL, S2[11]
MOV BX, OFFSET S2 ; LEA BX,S2
MOV AL, [BX].SEX1
例2:自己看。
记录
记录与结构相似,差别在于结构用于定义以字节为基本单位的信息,而记录用于定义以二进制为基本单位的信息。
C中的struct
记录的定义
格式:
记录名 RECORD 字段名:宽度[=表达式][, …]
*所有字段宽度之和不能大于16,宽度大于8按16处理。
例:
STUF RECORD NO:8, SEX:1 , MARRIAGE:1, WORK:5, HELTH:1
记录变量的定义及初始化
格式:
变量名 记录名字段值表
例:
PP1 STUF , 1B, 0B, 01011B, 0B
记录的运算
记录或记录字段宽度运算符WIDTH
MOV AX, WIDTH STUF
MOV DL, WIDTH SEX
记录屏蔽运算符MASK
返回8位或16位,只对应记录段名为1,其它位为0.
MOV AX, MASK SEX
对记录及字段的访问
用MASK
宏汇编
宏定义
C中的 inline
格式:
(1)带参宏定义
宏指令名 MACRO 形参1,形参2,……
宏体
ENDM
(2)无参宏定义
宏指令名 MACRO
宏体
ENDM
例:
PRINT MACRO buf1
LEA DX,buf1
MOV AH,9
INT 21H
ENDM
宏调用
格式:
宏指令名 [实参1,实参2,……]
例如:对上面的宏定义的三种调用形式为:
┆
PRINT BUF1
┆
PRINT BUF2
┆
PRINT BUF3
┆
7.7 汇编语言与C连接
Xxxasm.asm--?xxxasm.obj
xxxc.c --?xxxc.obj
link obj文件 生成exe文件。
两种连接方法:C中插入asm(直接插入法); C调用asm.(模块连接法)
#include stdlib.h
extern int maxx(int ,int );
int main(int argc, char *argv[]){
int x;
{
_asm mov ah,1
_asm int 21h
}
x= maxx(8,9);
printf(%d,x);
{ _asm mov ah,1
_asm int 21h
}
x= maxx(10,7);
printf(%d,x);
{
_asm mov ah,1
_asm int 21h
}
return 1;
}
.MODEL LARGE
.CODE
public _maxx
_maxx proc far
push bp
mov bp,sp
mov ax,[bp+6]
原创力文档

文档评论(0)