汇编语言——寄存器(内存访问 ds数据段寄存器,ss栈段寄存器)

在内存中字的存储

这段话的主要意思是:一个字=2B=16bit,CPU中是用两个内存单元储存一个字(假如获取0地址存放的字型数据,就是获取它的高位字节0+1位低位字节0位的数据,数据由高地址位向低地址位读)

问题:

(1)0地址单元中存放的字节型数据是多少?  #  20H
(2)0地址字单元中存放的字型数据是多少?  # 4e20H
(3)2地址字单元中存放的字节型数据是多少? # 12H
(4)2地址单元中存放的字型数据是多少?      #  0012H
(5)1地址字单元中存放的字型数据是多少?  # 12aEH

结论:就是我上面说的,字型数据就是它和它的下一位地址单元的数据(数据由高地址位向低地址位读)

数据段寄存器DS和偏移量[address]

用法和cs和ip差不多,都是段寄存器的值*16+偏移量的值

为给DS数据段寄存器值

因为CPU的段寄存器都比较害羞,没法给他们直接赋值(cs代码寄存器用的是jmp cs:ip),所以段寄存器采用以下方法赋值

mov ax,1234H    # 将ax寄存器赋值为1234H

mov ds,ax    # 通过ax寄存器 间接赋值

字的传送

mov ax,[1]    # []中的是偏移量 意思是将12341内存位置的字形数据赋给ax寄存器

mov al,[1]    # 将12341内存位置的字节形数据赋给al(低位)寄存器

mov  [1],ax    # 将ax寄存器字形数据赋给12341内存位置的值

mov [1],al    # 将al寄存器的字节形数据赋给12341内存位置

问题1:

内存中的情况如下图,写出下面指令执行后寄存器ax,bx,cx中的值?

解析:

问题2:

内存中的情况如下图,写出下面指令执行后寄存器ax,bx,cx中的值?

解析:

NB的move指令

mov 通用寄存器,数据		# mov ax,1234H
mov 通用寄存器,寄存器		# mov bx,ax / mov bx,ds(将段寄存器的值赋给通用寄存器)
mov 段寄存器,寄存器		# mov ds,ax(因为无法直接给段寄存器赋值,所以用通用寄存器当中介)
mov 内存单元,寄存器		# mov [0],ax(将ax寄存器中的值赋给ds*16+0这个内存单元)
mov 内存单元,寄存器		# mov ax,[0](内存单元ds*16+0的值赋给ax寄存器)

sub,add指令

数据段

我们上面操作的实际上就是数据段,具体来看下是怎样操作数据段的

累加123B0H~123BAH的内存单元的操作

小结:

(1)字在内存中存储时 ,要用两个地址连续的内存单元来存放,字的低位字节存放在低地址单元中,高位字节存放再高地址单元中。
(2)用 mov 指令要访问内存单元,可以在mov指令中只给出单元的偏移地址,此时,段地址默认在DS寄存器中。
(3)[address]表示一个偏移地址为address的内存单元。
(4)在内存和寄存器之间传送字型数据时,高地址单元和高8位寄存器、低地址单元和低8位寄存器相对应。
(5)mov、add、sub是具有两个操作对象的指令。jmp是具有一个操作对象的指令。

(2) 内存中的情况如图3.6所示

各寄存器的初始值:cs=2000h,ip=0,ds=1000h,ax=0,bx=0;

①   写出CPU执行的指令序列(用汇编指令写出)。

②   写出CPU执行每条指令后,CS、IP和相关寄存器的数值。

③   再次体会:数据和程序有区别吗?如何确定内存中的信息哪些是数据,哪些是程序?

答案:我以为jmp了以后cp的值也会改变,实际上就是它jmp的内个CP:IP


指令序列


CS


IP


DS


AX


BX


初始值


2000h


0


0


0


0


1


mov ax,6622h


2000h


3h


0


6622h


0


2


jmp 0ff0:0100


ff0h


100h


0


6622h


0


3


mov ax,2000h


ff0h


103h


0


2000h


0


4


mov ds,ax


ff0h


105h


2000h


2000h


0


5


mov ax,[8]


ff0h


108h


2000h


c389h


0


6


mov ax,[2]


ff0h


10bh


2000h


ea66h


0

时间: 2024-10-08 16:36:21

汇编语言——寄存器(内存访问 ds数据段寄存器,ss栈段寄存器)的相关文章

3.寄存器(内存访问)

寄存器(内存访问) 看到标题才发现,第二章是寄存器直接与常量(数字)进行交互 内存中字的存储假设读取字节(流)为从左向右读对字的处理为从又向左正是因为不同,所以才会发问吧 DS与偏移地址:通用的获取地址的方式(CS:IP这个是给程序用的)类似于通用寄存器,但不能使用move ds,1:单纯的说指令太少了的话也对(jmp 不也就省2指令,还多出N多种),应该是跟指令流程相关(intel 指令手册,我的第一反应其实是是使用灵活的方式进行修改还是使用通用的方式进行修改...小学语文学太多了,自动升华)

汇编语言(王爽) 第3章寄存器(内存访问)

3.1 内存中的字 内存中的字是16位的,以2个内存单元存储 地址大的存高位(字的左边8位),地址小的存低位(字的右边8位) 字单元:存放1个字形数据的内存单元,由2个内存单元组成,共16位 3.2 DS 一个寄存器的名字,用来放数据段的段地址 mov 指令可以把数据转到寄存器,一个寄存器的内容转到另一个寄存器,内存单元(字单元)转到寄存器 但是一般会mov ax,1000h;mov ds,ax而不是直接mov ds,1000h 因为8086CPU不支持直接把内存单元的东西转到段寄存器上面 3.

汇编语言:第三章 寄存器(内存访问)

3.1内存中字的存储 CPU中寄存器是16位的,可以用高低字节存储一个字,但是每个内存单元是8位的,只能存储一个字节, 所以内存中用相邻2个内存单元存储一个字的高低字节 如:20000数值(4E20H)在地址0的内存单元数值为20H,在地址1的内存单元数值为4EH 两个内存单元存储一个字型数据叫做一个字单元, 字单元的起始地址为N就叫N地址字单元,表示一个字的低字节在地址N的内存单元,高字节在地址N+1的内存单元 任意连续的2个内存单元都可以组成一个字单元 3.2 DS和 [address] C

汇编学习笔记03(寄存器内存访问)

1. 字在内存中存储时, 要有两个地址连续的内存单元来存放. 字的低位字节存放在低地址单元中, 高位字节存放在高地址单元中. 2. DS: 存放段地址的寄存器, 这个段是存放数据的. [address]: 偏移地址 mov指令在访问内存单元时, 只给出偏移地址, 段地址默认在DS段寄存器中 3. mov ax, 1000 mov ds, ax 8086CPU不支持将数据直接送入段寄存器, 所以只能通过通用寄存器来进行中转. 4. 字的传送 80806CPU是16位结构, 有16根数据线, 所以一

寄存器(内存访问)

1.内存访问 CPU要读写一个内存单元的时候,必须先给出这个内存单元的地址,在8086CPU中,内存地址由段地址和偏移地址组成.8086中有一个DS寄存器,通常用来存放要访问数据的段地址.例如我们要读取10000H单元的内容,可以用如下的程序段进行. mov bx,1000H mov ds,bx mov al,[0] [...]表示一个内存单元,其中的0表示内存单元的偏移地址.段地址从ds中获取. 8086CPU不支持将数据直接送入段寄存器的操作,所以使用寄存器bx作个中转. 2.几个指令 mo

第三章 寄存器(内存访问)

在第五章的学习之后,因为实验课在老师的抽查之后发现前面的知识很多都忘了,便对之前的知识进行了一遍系统的复习,对汇编的基础知识基本都已经掌握,也有了更加深刻的认识. 在第三章中我们主要从内存访问的角度来继续学习CPU执行指令的原理,并进一步的学习上一章的寄存器. <1>内存中字的存储 字由高位字节和低位字节组成,用16位寄存器来存储.高八位存放高位字节,低八位存放低位字节.字需要两个地址连续的内存单元(一个字节)来存储,字的低位字节存放在低地址单元中,高位字节存放在高地址单元中.如下图,我们想要

小甲鱼零基础汇编语言学习笔记第六章之包含多个段的程序

在前面的几个章节中,我们的程序都是只有一个代码段,本章我们开始学习如何编写包含多个段的程序. 1.在代码段中使用数据 首先考虑这样一个问题,计算以下8个数据的和,结果存放在ax寄存器中: 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H 在前面的课程中,我们都是累加某些内存单元中的数据,并不关心数据本身,可现在我们要累加就是已经给定了数值的数据. 代码如下: 1 assume cs:codesg 2 codesg segment 3 dw 0123H

汇编语言--寄存器(内存访问)

本文主要从CPU如何执行指令的角度讲解了8086CPU的逻辑结构.形成物理地址的方法.相关的寄存器以及一些指令 本文地址:http://www.cnblogs.com/archimedes/p/assembly-register-memory.html,转载请注明源地址. 内存中字的存储 在cpu中,用16位来存储一个字,高8位存放高字节,低8位存放低位字节.在内存中时,由于内存单元是字节单元,刚一个字要用2个地址连续的内存单元来存放,字的低位字节存在低地址单元. 字单元--存放一个字型数据(1

汇编语言第三章——寄存器(内存访问)

1.内存中字的存储 高位字节存放在高地址单元中,地位字节存放在低地址单元中. 将起始地址为N的字单元简称为N地址字单元. 2.DS和[address] 8086CPU自动取DS中的数据为内存单元的段地址. 8086CPU不支持将数据直接送入段寄存器的操作. 3.字的传送 mov ax,[0]:字型数据传送 mov al,[0]:字节数据传送 原因:高位字节存放在高地址单元中,地位字节存放在低地址单元中. 4.mov,add,sub指令 mov指令的几种形式: mov 寄存器,数据 mov 内存单