找回密码
 register

QQ登录

只需一步,快速开始

查看: 70|回复: 0

[汇编语言] [零基础入门学习]·38·数据处理的两个基本问题·bx、si、di和bp· 机器指令处理的数据在什么地方·汇编语言中数据位置的表达

[复制链接]

[汇编语言] [零基础入门学习]·38·数据处理的两个基本问题·bx、si、di和bp· 机器指令处理的数据在什么地方·汇编语言中数据位置的表达

[复制链接]
  • 打卡等级:热心大叔
  • 打卡总天数:122
  • 打卡月天数:18
  • 打卡总奖励:121
  • 最近打卡:2025-02-22 14:24:44
Waylee

主题

0

回帖

1万

积分

仙帝

积分
14008
Waylee 2025-1-12 14:35 | 显示全部楼层 |阅读模式 | Google Chrome | Windows 10

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?register

×


第8章 数据处理的两个基本问题

本章对前面的所有内容是具有总结性的。我们知道,计算机是进行数据处理、运算的机器,那么有两个基本的问题就包括在其中:
(1)处理的数据在什么地方?
(2)要处理的数据有多长?

这两个问题,在机器指令中必须要明确或隐含的说明,否则计算机就无法工作。本章中,我们就要针对8086CPU对这两个基础问题进行讨论。虽然讨论是在8086CPU的基础上进行的,但是这两个基本问题确实普遍的,对任何一个处理机都存在的。

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

reg的集合包括:ax、bx、cx、dx、ah、al、bh、bl、ch、cl、dh、dl、sp、bp、si、si;
sreg的集合包括:ds、ss、cs、es。

8.1 bx、si、di和bp

前3个寄存器我们已经用过了,现在我们进行一下总结。
(1)在8086CPU中,只有这4个寄存器可以用在“[...]”中来进行内存单元的寻址。比如下面的指令都是正确的:

mov ax,[bx]
mov ax,[bx+si]
mov ax,[bx+di]
mov ax,[bp]
mov ax,[bp+si]
mov ax,[bx+di]

而下面的指令是错误的:

mov ax,[cx]
mov ax,[ax]
mov ax,[dx]
mov ax,[ds]

(2)在[...]中,这4个寄存器可以单个出现,或只能以4种组合出现:bx和si、bx和di和si、bp和di。比如下面的指令是正确的:

mov ax,[bx]
mov ax,[si]
mov ax,[di]
mov ax,[bp]
mov ax,[bx+si]
mov ax,[bx+di]
mov ax,[bp+si]
mov ax,[bp+di]
mov ax,[bx+si+idata]
mov ax,[bx+di+idata]
mov ax,[bp+si+idata]
mov ax,[bp+di+idata]

下面的指令是错误的:

mov ax,[bx+bp]
mov ax,[si+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 机器指令处理的数据在什么地方

绝大部分机器指令都是进行数据处理的指令,处理大致分为3类:读取、写入、运算。在机器指令这一层来讲,并不关心数据的值是多少,而关心指令执行前一刻,它将要处理的数据所在的为黑车。指令在执行前,所要处理的数据可以在3个地方:CPU内存、内存、端口(端口将在后面的课程中进行讨论),比如表8.1中所列的指令。

表8.1 指令举例

机器码 汇编指令 指令执行前数据的位置
8E1E0000 mov bx,[0] 内存,ds:0单元
89C3 mov bx,ax CPU内存,ax寄存器
BB0100 mov bx,1 CPU内存,指令缓冲器

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

在汇编语言中如何表达数据的位置?汇编语言中用3个概念来表达数据的位置。
(1)立即数(idata)
对于直接包含在机器指令中的数据(执行前在CPU的指令缓冲器),在汇编语言中称为:立即数(idata),在汇编指令中直接给出。
例:

mov ax,1
add bx,2000h
or bx,00010000b

(2)寄存器
指令要处理的数据在寄存器中,在汇编指令中给出相应的寄存器名。
例:

mov ax,bx
mov ds,ax
push bx
mov ds:[0],bx
push ds
mov ss,ax
mov sp,ax

(3)段地址(SA)和偏移地址(EA)
指令要处理的数据在内存中,在汇编指令中用[X]的格式给出EA,SA在某个寄存器中。
存放段地址的寄存器快是默认的,比如:

mov ax,[0]
mov ax,[di]
mov ax[bx+8]
mov ax[bx+si]
mov ax[bx+si+8]

等指令,段地址默认在ds中;

mov ax,[bp]
mov ax,[bp+8]
mov ax,[bp+si]
mov ax,[bp+si+8]

等指令,段地址默认在ss中。

存放段地址的寄存器也快是显性给出的,比如以下的指令。

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,ss:[bx+si+8] 含义:(ax)=((ss)*16+(bx)+(si)+8)
您需要登录后才可以回帖 登录 | register

本版积分规则

雪舞知识库 | 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 |天天打卡

GMT+8, 2025-2-22 16:43 , Processed in 0.102188 second(s), 8 queries , Redis On.

Powered by XueWu Licensed

Copyright © Tencent Cloud.

快速回复 返回顶部 返回列表