★ 相同点:
1. 都是地址的概念;
指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。
★ 区别:
1. 指针是一个实体,而引用仅是个别名;
2. 引用使用时无需解引用(*),指针需要解引用;
3. 引用只能在定义时被初始化一次,之后不可变;指针可变;
4. 引用没有 const,指针有 const;
5. 引用不能为空,指针可以为空;
6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;
7. 指针和引用的自增(++)运算意义不一样;
8.从内存分配上看:程序为指针变量分配内存区域,而引用不需要分配内存区域。
汇编语言
编写程序,判断一个年份是否是闰年。
DATA SEGMENT
INFON DB 0DH,0AH,'Please input a year: $'
Y DB 0DH,0AH,'This is a leap year! $'
N DB 0DH,0AH,'This is not a leap year! $'
W DW 0
BUF DB 8
DB ?
DB 8 DUP(?)
DATA ENDS
STACK SEGMENT 'stack'
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
START: MOV AX,DATA
MOV DS,AX
LEA DX,INFON
MOV AH,9
INT 21H
LEA DX,BUF
MOV AH,10
INT 21H
MOV CL, [BUF+1]
LEA DI,BUF+2
CALL DATACATE
CALL IFYEARS
JC A1
LEA DX,N
MOV AH,9
INT 21H
JMP EXIT
A1: LEA DX,Y
MOV AH,9
INT 21H
EXIT: MOV AH,4CH
INT 21H
DATACATE PROC NEAR
LEA SI,BUF+2
MOV BX,0
X3:
MOV AL ,[SI]
SUB AL ,30H
MOV AH,0
XCHG AX,BX
MOV DX,10D
MUL DX
XCHG AX,BX
ADD BX,AX
INC SI
LOOP X3
MOV W,BX
RET
DATACATE ENDP
IFYEARS PROC NEAR
PUSH BX
PUSH CX
PUSH DX
MOV AX,W
MOV CX,AX
MOV DX,0
MOV BX,4
DIV BX
CMP DX,0
JNZ LAB1
MOV AX,CX
MOV BX,100
DIV BX
CMP DX,0
JNZ LAB2
MOV AX,CX
MOV BX,400
DIV BX
CMP DX,0
JZ LAB2
LAB1: CLC
JMP LAB3
LAB2: STC
LAB3: POP DX
POP CX
POP BX
RET
IFYEARS ENDP
CODE ENDS
END START
打开 运行 输入 cmd 打开.asm 文件 例如 f: -----> cd a------>masm abc.asm ----开始编译 编译完成 再打 masm abc
link masm 然后就可以执行 输入 abc 就可以执行
还有书中398页 例10-4程序
DATA SEGMENT
RABBITNUM DW 650
MONTHNUM DB ?
DATA ENDS
STACK1 SEGMENT PARASTACN
DW 20 DUP (?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DAT
START : MOV AX,DATA
MOV DS,AX
XOR CX,CX
MOV AX,0
MOV BX,1
NEXT : XCHG AX,BX
ADD AX,BX
INC CL
CMP AX,RABBITNUM
JAE RESULT
JMP NEXT
RESULT: MOV MONTHUNM,CL
MOV AH,4CH
INT 21H
CODE ENDS
END START