惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
爱范儿
爱范儿
P
Proofpoint News Feed
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Tailwind CSS Blog
J
Java Code Geeks
宝玉的分享
宝玉的分享
Jina AI
Jina AI
B
Blog
N
Netflix TechBlog - Medium
Recent Announcements
Recent Announcements
aimingoo的专栏
aimingoo的专栏
腾讯CDC
C
Check Point Blog
The Cloudflare Blog
阮一峰的网络日志
阮一峰的网络日志
博客园 - Franky
罗磊的独立博客
B
Blog RSS Feed
WordPress大学
WordPress大学
小众软件
小众软件
博客园 - 叶小钗
M
MIT News - Artificial intelligence
GbyAI
GbyAI

faryou的博客

faryou的博客 faryou的博客 faryou的博客 faryou的博客 faryou的博客 faryou的博客-福建行小记 faryou的博客 faryou的博客 faryou的博客 faryou的博客 faryou的博客-夏令营小记 faryou的博客 faryou的博客 faryou的博客 faryou的博客-暑假阶段总结与展望 faryou的博客 faryou的博客 faryou的博客 faryou的博客 台风进行时 faryou的博客 limbo虚拟机初体验&安装Windows NT 4.0 faryou的博客 台风将来时 faryou的博客 faryou的博客 faryou的博客 faryou的博客 出租车上的对话 faryou的博客
【汇编基础教程】来存一些数据!
作者: faryou · 2026-01-30 · via faryou的博客

前言

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

操作符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寄存器中。