前言
写程序的过程中,我们会用到许多数据,包括图片、视频、长文本等,这些数据在程序运行前就应该同代码一起暂存至内存中,同时,栈空间也需要预先分配。今天我们来学习一下汇编中存放数据的方式。
操作符X ptr
8086CPU支持处理尺寸为1byte或1word。在汇编指令中,如果存在寄存器,那么可以由寄存器名直接指明操作数据的尺寸。例如:
mov ax,[0];字操作(ax为16位寄存器) mov al,[0];字节操作(al为8位寄存器)
但是如果没有寄存器名存在,那我们可以用操作符X ptr指明内存单元长度,例:
mov word ptr [0],1 inc word ptr [0] add word ptr [0],1 ;用word ptr指明操作的是一个字
mov byte ptr [0],1 inc byte ptr [0] add byte ptr [0],2 ;用byte ptr指明操作的是一个字节
伪指令db、dw、dd
这三个指令都是伪指令,为了方便程序员快速向内存中写入数据而存在,格式:
db/dw/dd 数据1,数据2,...;可以写入任意个数字节型/字型/双字型数据
同时,dw也可以用于写入字符串,每个字符占1个字,例:
dw 'faryou'
dup操作符
dup操作符的存在可以让我们更方便地写入重复数据,它在使用时与db/dw/dd联用,格式:
db/dw/dd 重复次数 dup (重复的数据)
例如:
db 5 dup (0);相当于:db 0,0,0,0,0
db 5 dup (0,1,2,3,4);相当于:db 0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,0,1,2,3,4
dw 5 dup ('faryou ','HJCBBS ');相当于:dw 'faryou HJCBBS faryou HJCBBS faryou HJCBBS faryou HJCBBS faryou HJCBBS'div除法指令
div是除法指令,但是其格式与add、sub不同,其需要与ax寄存器或dx&ax寄存器联合使用,格式:
div 寄存器名/内存单元
div可以进行两种除法:
第一种(在div指令中用byte ptr指明):
被除数(16位):存放于ax寄存器中
除数(8位):存放于div指令中指明的寄存器/内存单元中
商(8位):存放于al寄存器中
余数(8位):存放在ah寄存器中
第二种(在div指令中用word ptr指明):
被除数(32位):存放于dx&ax寄存器中,其中dx存放高16位,ax存放低16位
除数(16位):存放于div指令中指明的寄存器/内存单元中
商(16位):存放于ax寄存器中
余数(16位):存放于dx寄存器中
下面举个例子:
计算114514/123
代码如下:
;先将114514转到16进制:19842H mov dx,0001H mov ax,9852H mov bx,123 div bx
执行后,ax=007cH,dx=0001H
结语
本文介绍了汇编语言中存数据的一些方式与格式,希望能帮到读者。我是faryou,下次见!
发表评论