[汇编语言笔记篇]二:数据的表示

目录

 

数据表示

常量的表达

常数

字符和字符串

符号常量

数值表达式

数据表达程序:

变量定义

 变量定义结构:

变量定义伪指令:

变量定义的初值表

总结:

 字节变量程序一(8位 byte):

字节变量程序二(16位 word):

字节变量程序三(32位 dword):

变量的应用

多字节变量存储顺序

变量属性


数据表示


常量的表达

常量是汇编程序中使用的一个确定的数值

汇编语言支持多种常量的表达形式:

常数

十、十六和二进制表达的数值

以后缀字母(D,H和B)来进行区分,十进制可不加

注:以字母A-F开头的十六进制常数,要加前导0

以便于区分以字母开头的标识符

例如:“AH”是指寄存器

           “0AH”是指十六进制常数

                               [汇编语言笔记篇]二:数据的表示_第1张图片

字符和字符串

单个字符或多个字符用单引号或双引号括起来即可

每个字符的数值使对应的ASCII值

                             [汇编语言笔记篇]二:数据的表示_第2张图片

符号常量

使用一个标识符来表达一个数值

符号名 = 数值表达式

符号名 equ 数值表达式

符号名 equ <字符串>

                    [汇编语言笔记篇]二:数据的表示_第3张图片

数值表达式

 用运算符连接各种常量构成的算式

常用的运算符:+(加)   -(减)   *(乘)  /(除)

 数值用作地址,数值表达式就成为地址表达式

地址表达式只能使用加减

地址移动的表示:

地址 ± 常量

                        

 

数据表达程序:

;eg0201.asm
	include io32.inc
	.data
const1	byte 100,100d,01100100b,64h, 'd'
const2	byte 1,+127,128,-128,255,-1
const3	byte 105,-105,32,-32,32h,-32h
const4	byte '0123456789', 'abcxyz', 'ABCXYZ'
crlf	byte 0dh,0ah,0
minint	= 10 
maxint	equ 0ffh
const5	byte minint,minint+5,maxint-5,maxint-minint
const6	byte 4*4,34h+34,67h-52h,52h-67h
	.code
start:
	mov eax,offset const4
	call dispmsg

	exit 0
	end start

byte :  字节变量定义伪指令(8位) 

                              [汇编语言笔记篇]二:数据的表示_第4张图片 

这里我们主要分析的是数据段,这是运行结果:输出的是常量const4的值


变量定义

变量:

随程序运行会发生变化的数据

保存在可读可写的主存空间

注:变量必须事先定义才可使用

[汇编语言笔记篇]二:数据的表示_第5张图片

 变量定义结构:

[汇编语言笔记篇]二:数据的表示_第6张图片

变量定义伪指令:

[汇编语言笔记篇]二:数据的表示_第7张图片

注:汇编语言的基本单位是以字节位存储单元

一个字 = 两个字节

变量定义的初值表

变量的定义需要申请存储空间

同时用初值表赋予变量初值

初值表可以有一个或多个参数,多个参数用逗号隔开

各种形式的常量

使用 “?” 表示初值不定

使用复制操作符DUP表示多个同样的数值

复制操作符格式: 重复次数 DUP(重复参数)

列如:2 DUP(20h)

总结:

[汇编语言笔记篇]二:数据的表示_第8张图片

 字节变量程序一(8位 byte):

;eg0202.asm
	include io32.inc
	.data
minint	= 10
bvar1	byte 0,128,255,-128,0,+127
bvar2	byte 1,-1,38,-38,38h,-38h
bvar3	byte ?
bvar4	byte 5 dup ('$')
bvar5	byte minint dup(0),minint dup(minint,?)
	byte 2 dup(2,3,2 dup(4))
	.code
start:
	exit 0
	end start

分析:

[汇编语言笔记篇]二:数据的表示_第9张图片

 下面我们直观的感受一下这些变量在主存中的具体形式

[汇编语言笔记篇]二:数据的表示_第10张图片

 8位变量定义,使用byte伪指令

每个数据是一个字节量,占用1个存储单元

可以是无符号数,也可以是有符号数


字节变量程序二(16位 word):

;eg0203.asm
	include io32.inc
	.data
minint	= 10
wvar1	word 0,32768,65535,-32768,0,+32767
wvar2	word 1,-1,38,-38,38h,-38h
wvar3	word ?
wvar4	word 2010h,1020h
	word 5 dup(minint,?)
wvar6	word 3139h,3832h
bvar6	byte 39h,31h,32h,38h
	byte 0
	.code
start:
	mov eax,offset wvar6
	call dispmsg
	exit 0
	end start

分析同上8位自己变量程序;

我们主要来看一下他们在主存中的表现

[汇编语言笔记篇]二:数据的表示_第11张图片

 16位变量定义,使用word伪指令

每个数据是一个字量,占用2个存储单元

可以是无符号数,也可以是有符号数


字节变量程序三(32位 dword):

;eg0204.asm
	include io32.inc
	.data
minint	= 10
dvar1	dword 0,80000000h,0ffffffffh,-80000000h,0,7fffffffh
dvar2	dword 1,-1,38,-38,38h,-38h
dvar3	dword ?
	dword 2010h,1020h
dvar5	dword minint dup(minint,?)
dvar6	dword 38323139h
bvar6	byte 39h,31h,32h,38h
	byte 0
	.code
start:
	mov eax,offset dvar6
	call dispmsg
	exit 0
	end start

同样,我们来看一下主存中的表现

[汇编语言笔记篇]二:数据的表示_第12张图片

32位变量定义,使用dword伪指令

每个数据是一个双字量,占用4个存储单元

可以是无符号数,也可以是有符号数


变量的应用

多字节变量存储顺序

变量保存与字节编址的主存储器中

  • 一个存储单元保存一个字节量数据
  • 一个存储单元对应一个存储器地址

小端方式

  • [汇编语言笔记篇]二:数据的表示_第13张图片

大端方式

[汇编语言笔记篇]二:数据的表示_第14张图片

我们现在用的处理器80x86它采用的是小端方式


变量属性

1、地址属性:首个字节变量所在存储单元的逻辑地址

含有段基地址和偏移地址

[汇编语言笔记篇]二:数据的表示_第15张图片

可以通过地址操作符来获得变量的地址属性

[汇编语言笔记篇]二:数据的表示_第16张图片


变量地址属性程序

;eg0206.asm
	include io32.inc
	.data
bvar	byte 12h,34h
	org $+10 
array	word 1,2,3,4,5,6,7,8,9,10
wvar	word 5678h
arr_size	= $-array
arr_len	= arr_size/2
dvar	dword 9abcdef0h
	.code
start:
	mov al,bvar
	mov ah,bvar+1
	mov bx,wvar[2]
	mov ecx,arr_len
	mov edx,$
	mov esi,offset dvar
	mov edi,[esi]
	mov ebp,dvar
	call disprd

	exit 0
	end start

org 参数     指定下一条汇编语句的位置

 分析:

[汇编语言笔记篇]二:数据的表示_第17张图片

运行结果:

2、类型属性:变量定义的数据单位

通过类型操作符获得变量的类型属性值

[汇编语言笔记篇]二:数据的表示_第18张图片

 类型操作符使用变量名的类型属性

[汇编语言笔记篇]二:数据的表示_第19张图片


变量类型属性程序

;eg0207.asm
	include io32.inc
	.data
bvar	byte 12h,34h
	org $+10 
array	word 1,2,3,4,5,6,7,8,9,10
wvar	word 5678h
arr_size	= $-array
arr_len	= arr_size/2
dvar	dword 9abcdef0h
	.code
start:
	mov eax,dword ptr array
	mov ebx,type bvar
	mov ecx,type wvar
	mov edx,type dvar
	mov esi,lengthof array
	mov edi,sizeof array
	mov ebp,arr_size
	call disprd
	
	exit 0
	end start

分析

数据段和前面一样,我们就不做分析了

重点来看代码段

[汇编语言笔记篇]二:数据的表示_第20张图片

运行结果:

 

你可能感兴趣的:(汇编语言篇,字符串,编程语言,运维)