安防监控知识
电气知识|变量和标号的属性
2017-01-13  浏览:68
安防之家讯:1. 标号由一组放在语句前头的标识符后跟一个 " : " 来定义,用以指定相应程序段在内存的首地址位置。

任何一个标号一经定义就具有 3 种属性:

标号的段地址;

标号的偏移地址;

标号的类型; 1 ) NEAR-- 该标号只能在段内转移; 2 ) FAR-- 在段间使用;

标号和名字一经定义便具有以下两类三种属性:

① 段值

标号和名字对应存储单元的段地址

② 偏移值

标号和名字对应存储单元的偏移地址

③ 类型

标号、子程序名的类型可以是 NEAR (近)和 FAR (远),分别表示段内或段间



2 . 变量的属性:

变量一经定义,通常具有 5 种属性(即特征):

1 ) 变量的段地址( SEG ); 2 ) 变量的偏移地址( OFFSET );

3 ) 变量类型( TYPE ):所定义变量所占字节数;由 DB 、 DW 、 DD 、 DQ 、 DT 伪指令定义的变量类型分别为 1 , 2 , 4 , 8 , 10 。前 3 种类型又分别称为 BYTE 类、 WORD 类、 DWORD 类。

4 ) 变量长度( LENGTH ):所定义变量的个数;

5 ) 变量大小( SIZE ):定义中分配给同一变量名所有变量的总字节数;

变量定义实质上是对数据区内存的一种安排,这种安排对汇编语言编程是非常重要的,它是在汇编过程中完成的。编写程序时,直接引用变量的名字,而汇编过程中,对任何变量的引用,都自动转换为变量相应的偏移地址。

变量名的类型可以是 BYTE (字节)、 WORD (字)和 DWORD (双字)等

地址操作符

取得名字或标号的段地址和偏移地址两个属性

[ ] 将括起的表达式作为存储器地址

$ 当前偏移地址

: 采用指定的段地址寄存器

OFFSET 名字 / 标号

返回名字或标号的偏移地址

SEG 名字 / 标号



返回名字或标号的段地址

org $+10

array db 45,45h

.code

mov ax,seg array

mov ds,ax

mov bx,offset array

; 等价于 lea bx,array

mov cl,array+4

; 等效于 mov cl,array[4]

mov ax,es:[2000h]

mov al,byte ptr w_var ;w_var 是一个字变量

jmp far ptr n_label ;n_label 是一个标号

使用 PTR 操作符,可以临时改变名字或标号的类型

THIS 类型名

利用 THIS 说明的操作数具有汇编时的当前逻辑地址,但具有指定的类型

b_var equ THIS byte

; 按字节访问变量 b_var ,但与 w_var 的地址相同

w_var dw 10 dup(0) ; 按字访问变量 w_var

f_jump equ THIS far

; 用 f_jump 为段间转移( f_jump label far )

n_jump: mov ax,w_var

; 用 n_jump 为段内近转移,但两者指向同一条指令

LABEL 伪指令的功能等同于“ EQU THIS ”

SHORT 标名

指定标号作为 -128 ~ +127 字节范围内的短转移

jmp short n_jump

当然,如果标号实际上超出了这个范围,则出错。

TYPE 名字 / 标名

返回表明名字或标号类型的一个字量数值

对字节、字和双字变量依次返回 1 、 2 和 4 ;

对短、近和远转移依次返回 ff01h 、 ff02h 和 ff05h

mov ax,TYPE w_var ; 汇编结果为 mov ax,2

mov ax,TYPE n_jump

; 汇编结果为 mov ax,0ff02h ( near 标号)

操作符 SIZEOF 返回整个变量占用的字节数

LENGTHOF 返回整个变量的数据项数(即元素数)

SIZEOF = LENGTHOF × TYPE

.model small

.stack

.data

v_byte equ this byte

;v_byte 是字节类型,与变量 v_word 的地址相同

v_word dw 3332h,3735h

;v_word 是字类型的变量

target dw 5 dup(20h)

; 分配数据空间 2 × 5 = 10 字节

crlf db 0dh,0ah,'$'

flag db 0

n_point dw offset s_label

; 取得标号 s_label 的偏移地址

例:属性及其应用

.code

.startup

mov al,byte ptr v_word

; 用 PTR 改变 v_word 的类型,否则类型不匹配

dec al

mov v_byte,al

; 对 v_word 的头一个字节操作,原为 32H 、现为 31H

n_label: cmp flag,1

jz s_label ;flag 单元为 1 转移

inc flag

jmp short n_label ; 进行短转移

s_label: cmp flag,2

jz next ;flag 单元为 2 转移

inc flag

jmp n_point

; 段内的存储器间接寻址,转移到 s_label 标号处

next: mov ax,type v_word

; 汇编结果为 mov ax,2

mov cx,lengthof target

; 汇编结果为 mov cx,5

mov si,offset target

w_again: mov [si],ax ; 对字单元操作

inc si ;SI 指针加 2

inc si

loop w_again ; 循环

mov cx,sizeof target

; 汇编结果为 mov cx,0ah

mov al,'?'

mov di,offset target

b_again: mov [di],al ; 对字节单元操作

inc di ;DI 指针加 1

loop b_again ; 循环

mov dx,offset v_word

; 显示结果: 1357??????????

mov ah,9

int 21h

.exit 0

End安防之家专注于各种家居的安防,监控,防盗,安防监控,安防器材,安防设备的新闻资讯和O2O电商导购服务,敬请登陆安防之家:http://anfang.jc68.com/
更多»您可能感兴趣的文章:
更多»有关 安防监控 的产品:
  • 安防监控资讯
  • 发表评论 | 0评
  • 评论登陆
  • 移动社区 天花之家 木门之家 灯具之家 铁艺之家 幕墙之家 五金头条 楼梯头条 墙纸头条 壁纸头条 玻璃头条 老姚之家 灯饰之家 电气之家 全景头条 照明之家 防水之家 防盗之家 区快洞察 建材 枣庄建材 临沂建材 南昌建材 上饶建材 抚州建材 宜春建材 吉安建材 赣州建材 鹰潭建材 新余建材 九江建材 萍乡建材 景德镇陶瓷 石家庄建材 衡水建材 廊坊建材 沧州建材 承德建材 建材之家 企业之家 720全景
    (c)2015-2017 Bybc.cn SYSTEM All Rights Reserved