【汇编基础教程】来存一些数据!

时间:2026-01-30 21:43:00


前言

写程序的过程中,我们会用到许多数据,包括图片、视频、长文本等,这些数据在程序运行前就应该同代码一起暂存至内存中,同时,栈空间也需要预先分配。今天我们来学习一下汇编中存放数据的方式。

操作符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,...;可以写入任意个数字节型/字型/双字型数据

同时,db也可以用于写入字符串,每个字符占1个字节,例:

db 'faryou';从该处开始的6个内存单元存放字符串'faryou'的ASCLL码

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。

mul乘法指令

使用格式与div类似,这里不详细介绍了。说明一下各寄存器的存放内容:
如果是8位乘法,则乘数一个在al寄存器中,另一个在指定的8位寄存器或内存单元中,结果在ax寄存器中。如果是16位乘法,则乘数一个在ax寄存器中,另一个在指定的16位寄存器或内存单元中,结果高16位在dx寄存器中,低16位在ax寄存器中。


评论

还没有评论,来说两句吧!

发表评论