news 2026/7/4 1:17:17

汇编语言入门-第八章 数据处理的两个基本问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
汇编语言入门-第八章 数据处理的两个基本问题

本章对前面内容是具有总结性的,我们知道,计算机时进行数据处理,运算的机器,那么有两个进本的问题就包含在其中:

1)处理的数据在什么地方?

2)要处理的数据有多长?

我们定义的描述性符号:reg和sreg

reg:ax bx cx dx ex si di sp bp

sreg: ds cs ss es

8.1 bx,si,di,bp

1)

mov ax,[bx]

mov ax,[bx+si]

mov ax,[bx+di]

mov ax,[bp]

mov ax,[bp+si]

mov ax,[bp+di]

2) 在[...]中,这4个寄存器可以单个出现,或只能以四种组合出现:bx和si,bx和di,bp

和si,bp 和di .

3)只要在【...】中使用寄存器bp ,而指令中没有显性得给出段地质,段地址就默认在

ss中,比如:

mov ax,[bp] 含义: (ax)=((ss)*16+(bp))

mov ax,[bp+idata] 含义: (ax) =((ss)*16+(bp)+idata)

mov ax,[bp+si] 含义:(ax)=((ss)*16+(bp)+(si))

mov ax,[bp+si+idata] 含义:(ax)=((ss)*16+(bp)+(si)+idata)

8.2 机器指令处理的数据所在得位置

所要处理的数据可以在三个地方: cpu内部,内存,端口

mov bx,[0] 内存,ds:0 单元

mov bx,ax cpu 内部,ax寄存器

mov bx,1 cpu 内部,指令缓冲器

8.3 汇编语言中数据位置的表达

1)立即数(idata)

mov ax,1

add bx,2000h

or bx,0001000b

mov al,'a'

2)寄存器

mov ax,bx

mov ds,ax

push bx

mov ds:[0],bx

push ds

mov ss,ax

mov sp,ax

3)段地址(SA)和偏移地址(EA)

mov ax,[0] 段地址ds

存放段地址的寄存器也可以是显性给出的,比如:

mov ax,ds:[bp] 含义:(ax)=((ds)*16+(bp))

mov ax,es:[bx] 含义:(ax)=((es)*16+(bx))

mov ax,ss:[bx+si] 含义:(ax)=((ss)*16+(bx)+(si))

mov ax,cs:[bx+si+8] 含义:(ax)=((cs)*16+(bx)+(si)+8)

8.4 寻址方式

【idata】 EA=idata;SA=(ds) 直接寻址

【bx】 EA=(bx);SA=(ds) 寄存器间接寻址

[si] EA=(si);SA=(ds) 寄存器间接寻址

[di] EA=(di);SA=(ds) 寄存器间接寻址

[bp] EA=(bp);SA=(SS) 寄存器间接寻址

【bx+idata】 EA=(bx)+idata;SA=(ds) 寄存器相对寻址

【si+idata】 EA=(bx)+idata;SA=(ds) 寄存器相对寻址

[di+idata] EA=(di)+idata;SA=(ds) 寄存器相对寻址

[bp+idata] EA=(bp)+idata;SA=(ss) 寄存器相对寻址

[bx+si] EA=(bx)+(si); SA=(ds) 基址变址寻址 用于二维数组

[bx+di] EA=(bx)+(di); SA=(ds) 基址变址寻址

[bp+si] EA=(bp)+(si);SA=(ss)

[bp+di] EA=(bp)+(di);SA=(ss)

[bx+si+idata] EA=(bx)+(si)+idata ; SA=(ds)

[bx+di+idata] EA=(bx)+(di)+idata; SA=(ds)

[bp+si+idata] EA=(bp)+(si)+idata; SA=(ss)

[bp+di+idata] EA=(bp)+(di)+idata; SA=(ss)

8.5 指令要处理的数据有多长?

1) 通过寄存器名指明要处理的数据的尺寸。

2) 在没有寄存器名存在的情况下,用操作符X ptr 指明内存单元的长度,X在汇编指令中指明指明操作数是word 还是byte 。

mov word ptr ds:[0],1

mov byte ptr ds:[0],1

在没有寄存器参与的对于内存的运算中,显示的指明内存单元的长度是很有必要的。

3)其他方法

有些指令默认了访问的是字单元还是字节单元,比如:push [1000H] 就不用指明访问的是字单元还是字节单元,因为push 指令只进行字操作。

8.6 寻址方式的综合应用

8.7 div 指令

div是除法指令,使用div做除法的时候:

1)除数:有8位和16位两种,在一个寄存器或内存中。

2)被除数,默认在ax或dx和AX中,如果除数为8位,被除数则为16位,默认在AX中存放。如果除数为16位,被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位。

3)结果:如果除数为8位,则AL存储除法操作的商,AH存储除法操作的余数,如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数。

格式如下:

div reg

div 内存单元

现在,我们可以用多种方法来表示一个内存单元了,比如:

div byte ptr ds:[0]

含义为: (al)=(ax)/((ds)*16+0)

(ah)=(ax)/((ds)*16+0) 的余数

div word ptr es:[0]

含义为:(al)=(ax)/((ds)*16+(bx)+(si)+8) 的商

(ah) = (ax)/((ds)*16+(bx)+(si)+8) 的余数

div word ptr [bx+si+8]

含义为:(ax)=[(dx)*10000H+(ax)]/((ds)*16+(bx)+(si)+8) 的商

(dx)=[(dx)*10000h+(ax)]/((ds)*16+(bx)+(si)+8)的余数

编程:利用除法指令计算100001/100.

被除数是32位,186a1H ,高16位在DX中,低16位在AX中。

除数是100 64H ,可以把64h,看作是16位数,商放在AX,dx放余数。

编程:利用除法指令计算1001/100.

mov ax,3e9h mov bl,64h div bl

结果为ax=010A AH =0A 低位AL=01;

8.8 伪指令dd

dd 用来定义dword(double word,双子)型数据的,比如:

data segment db 1 dw 1 dd 1 data ends

问题8.1

用div 计算data中的第一个数据除以第二个数据后的结果,商存放在第三个数据的存储单元中。

data segment dd 100001 dw 100 dw 0 data ends

思考后分析:data 段中的第一个数据是被除数,为DWORD型,32位,所以再做除法之前,用dx和ax存储。应将data:0 字单元中的低16位存储在AX中,data:2 字单元中的高16位存储在DX中。

8.9 dup

dup 是一个操作符,在汇编语言中同db,dw,dd等一样,也是由编译器识别处理的符号。它是和db,dw,dd等数据定义伪指令配合使用的,用来进行数据的重复。比如:

db 3 dup (0) db 3 dup(0,1,2) db 3 dup('abc','ABC')

db 重复的次数dup(重复的字节型数据)

dw重复的次数dup (重复的字型数据)

dd 重复的次数dup (重复的双子数据)

实验7 寻址方式在结构化数据访问中的应用

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/30 23:35:30

【JAVA毕设源码分享】基于springboot二手车销售平台设计与实现的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/6/30 23:32:18

基因突变VCF分析系统

项目背景 ANU研究生专题项目,给定VCF基因突变文件和评分算法,写Python脚本分析致病风险,开发包括数据库、ETL管道、API服务和前端看板的数据平台。GitHub 仓库:https://github.com/LuckLuffy/gene-mutation-platform项目流程 读取…

作者头像 李华
网站建设 2026/6/30 23:30:34

如何零基础掌握文本分析:KH Coder的完整新手指南

如何零基础掌握文本分析:KH Coder的完整新手指南 【免费下载链接】khcoder KH Coder: for Quantitative Content Analysis or Text Mining 项目地址: https://gitcode.com/gh_mirrors/kh/khcoder 你是否曾面对海量文本数据感到无从下手?当同事用P…

作者头像 李华
网站建设 2026/7/3 3:29:36

ps怎么调整图片大小?ps调整图片大小快捷键

在日常修图、平面设计与新媒体配图制作中,调整图片尺寸是最基础的高频操作。Photoshop提供了多种调整图片大小的路径,分别适配不同的使用需求。本文详细讲解图像大小、画布大小、裁剪工具三种常用方法,附带对应快捷键与场景说明,新…

作者头像 李华