汇编--学习笔记(五)-组织数据
来源:互联网 发布:短暂的婚姻 知乎 编辑:程序博客网 时间:2024/06/05 16:03
一、基本概念
程序中大量的数据、除立即数、由指令产生的数和从键盘等读入的外,其他的要在程序中预置和分配。
- 1、预置和分配
- 在一定逻辑段中,将这些数据以一定的形式存放起来,并给出访问的原则。而对于那些最终的结果单元,只需要给出访问形式和预留出一定空间就可以了。
- 2、如何访问数据
- 逻辑段中有数据,而逻辑段由段寄存器指定。所以,基址+位移(及数据长度:字节、字、双字等),即可访问数据。
- 3、缺点及解决
- 上述访问数据的方法对程序设计者不方便,故汇编语言提供了以变量命名数据的方式,供程序使用,方便用户。
二、变量的定义和预置
1、定义方法
通过DB、DW、DD定义和预置以字节、字、双字为存储单位的变量。
定义格式:变量名 DB|DW|DD 表达式|表达式|表达式
变量定义举例:
A DB 100 ;变量A为一个字节,赋初始值为100B DB 100,2*3 ;变量B初始值为100,B+1值为6,B是作为一个开始地址C DB 'ABCD' ;C值41H,C+1值42H,C+2值43H,C+3值44HD DB ? ;变量D是一个字节,值不固定E DB 23 DUP(0) ;23个0,每个占一个字节,DUP--连续的意思
变量定义举例二:
F DB 3 DUP (1,2,0) ;9个数顺序为:1,2,0,1,2,0,1,2,0G DW 'AB','CD' ;按BADC的ASCII顺序存放,即42H,41H,44H,43H(先低字节)H DW 2*3 ;变量H一个字即06H& 0FABH ;&续行标志,FABH-个字,记得加0I DW G ;G是前面定义的一个变量,存放在段中的位移J DD G ;G是前面定义的一个变量,这里是双字,G作为一个地址,低字存放G在段中的位移,高字存放G所在的段基K DW ? ;K 中预留一个字L DB 5 DUP ('Hello',0DH,0AH);5+1+1=7个字节重复5次,分配35个字节值
1、定义说明
(1)变量名是一个非保留字的标识符,可有可无。若没有则表示无名变量;
(2)DB、DW、DD只能任选其一,分别表示按字节、字、双字分配存储;
(3)表达式可以是以下6种之一:
- 常数项表达式
- 保留符号‘?’
- 地址表达式(DB不能用,因为地址至少要是“字”)
- 两个以上的ASCII码字符串(只能用DB定义,因为字或双字会打乱字符串顺序)
- 预置数据表格
- 重复值(一个DUP语句)
三、变量的访问
1、变量的5个属性
由于变量是在逻辑段中定义的,它具有如下5个属性:
- (1)段(SEGMENT)
- 说明变量属于哪个段,段基是什么。
- (2)位移(OFFSET)
- 即相对段基的位移是多少。
- (3)类型(TYPE)
- 由DB、DW、DD决定它是字节、字、双字存储形式。对于特定的存储形式,除非临时改变访问形式,否则应按指定类型访问。
- (4)长度(LENGTH)
- 它是指按DB、DW、DD分配时分别按照字节、字、双字为单位对应给出变量所占字节数、字数和双字数。(根据类型不同)
X DW 10 DUP(0);X长度为10
- (5)大小(SIZE)
- 指变量所占字节数。
- 说明:
- (1)SIZE = LENGTH*TYPE
- 上述属性均可能作为操作数,这时可以通过各种操作符得到
2、取值操作符的使用
格式:
SEG 变量名 ;取变量的段基地址OFFSET 变量名 ;取变量的位移值TYPE 变量名 ;取类型长度,DB、DW、DD变量分别为1、 2、 4LENGTH 变量名 ;取变量长度SIZE 变量名 ;取以字节为单位的单元数
例子:
DATAS SEGMENT A DB '2345' B DW A ;位移 ;C DD A ;位移和基址 D DW 123H,0F5H E DW 10 DUP(0) DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:SEG A;取A所在段DATA(其实就是DATA)START: MOV AX,SEG A ;DATA => AX MOV DS,AX MOV AL,LENGTH A ;1 => AL --一个字节 MOV AH,SIZE A ;1 => AH ;MOV BH,TYPE C ;4 => BH ;MOV BP,OFFSET C ;6 => BP MOV CX,LENGTH E ;10 => CX MOV DX,SIZE E ;20 =>DX MOV AH,4CH INT 21HCODES ENDS END START
类型不一致的例子:
DATAS SEGMENT A DB 52 B DW 'AB'DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX MOV AH,A ;A用DB定义只能作为字节操作数 MOV BX,B ;B用DW定义只能作为字操作数 ;MOV CX,A ;出错,类型不一致 ;MOV CL,B ;出错,类型不一致 MOV AH,4CH INT 21HCODES ENDS END START
3、修改属性操作符
(1)修改类型(PTR)–(C语言中的强制类型转换)
格式:类型 PTR 地址表达式
其中类型可以是BYTE、WORD、DWORD。地址表达式可以是用变量名给出的有效地址、其他形式的有效地址,或能给出一个地址的表达式。
功能:在使用者一操作符的指令中,临时按指定类型操作。
修改类型PTR(指针)访问变量的例子:
DATAS SEGMENT A DB 'ABCDEF' B DW 'BA' DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX MOV AL,A ;按字节访问A MOV AX,WORD PTR A ;按字节访问A,'AB'=>AX MOV AH,BYTE PTR B ;按字节B,'A'=>AH MOV AH,4CH INT 21HCODES ENDS END START
(2)修改段(段超越)
格式:
段寄存器名: 地址表达式 逻辑段名: 地址表达式
功能:临时指定该有效地址相对指定段寻址。
例如:
MOV BX,SS:[SI+3] ;SI临时相对SS变址MOV BX,DATA2:WORD PTR[100] ;将DATA2逻辑段中位移100的一个字送到BX
四、数组的定义和访问
采用DUP重复句定义的变量可看成数组。
例如:
BARR DB 100 DUP(0) ;具有100个元素的字节数组,值均为0WORR DW 256 DUP(?) ;具有256个元素的字数组,元素值不定MOV AL,BARR ;第一个元素送ALMOV AL,BARR[0] ;第一个元素送ALMOV AL,BARR[9];第十个元素送ALMOV AL,BARR+9;第十个元素送ALMOV AX,WARR[8];第5个元素,字节=字除以2,WARR是字,AX是字节,8除以2 = 4即第五个元素
阅读全文
0 0
- 汇编--学习笔记(五)-组织数据
- 汇编学习笔记(五)
- 8086汇编学习笔记3-程序组织
- R语言学习笔记(R对象和数据组织)
- 如何用汇编编写程序——汇编学习笔记(五)
- 组织行为学(学习笔记)
- 大数据学习笔记(五)-HBase
- mmc子系统学习笔记五 mmc子系统的代码组织
- mmc子系统学习笔记五 mmc子系统的代码组织
- mmc子系统学习笔记五 mmc子系统的代码组织
- 汇编--学习笔记(七)-数据传送指令
- 【汇编学习笔记01】数据进制
- 【汇编学习笔记02】数据表示
- 汇编学习(五)8086汇编拾遗 (4)
- inder学习笔记(三)—— binder客户端是如何组织checkService数据的 ?
- Binder学习笔记(六)—— binder服务端是如何组织addService数据的?
- Accelerated C++学习笔记5—<组织程序和数据>
- 汇编入门学习笔记 (五)—— 包含多个段的程序
- Submit a Spark job to YARN from code
- 欢迎使用CSDN-markdown编辑器
- Windows下Nginx的启动、停止等命令
- jQuery:改进图像
- MyBatis的执行过程总结
- 汇编--学习笔记(五)-组织数据
- (MySql)distinct、group by去重
- Oracle ADF MenuDemo 案例
- Java基础之泛型
- 图像增强之频域增强
- Android Studio报错:Error[*,*]Could not find method android() for arguments [……]
- 设计模式say you na la
- 搜索专题 L
- HTML+CSS编写静态网站-16 使用div