《汇编语言》学习笔记3——内存储器

1.地址:分为物理地址、逻辑地址

  1.物理地址:内存单元的真实地址

  2.逻辑地址:用于编程的地址

    分为:段地址、偏移地址

  逻辑地址的形式:段地址:偏移地址

2.逻辑地址转换为物理地址:  物理地址  =  段地址*10H  +  偏移地址

  分析:转换时先将段地址左移4位,相当于乘以16或16进制的10H,再加上偏移量、其中移位后的地址就是在段地址后加一个0(如:段地址:2000H  则段地址*10H就是20000H)

3.存储单元

  1.一个字节=8位二进制,1个字=2个字节

  2.存储单元中的数据为存储单元内容,用括号括起来表示,不括起来的表示地址

  3.存储单元分为:欧地址单元、奇地址单元

      一般的,字放在偶地址单元,字节可随意

4.分段:

  1.将存储器分为若干个逻辑段,每段最大为64K字节单元,最少为16个字节单元。段内单元的地址可用16位二进制数表示,成为偏移地址,每段的偏移地址可从0000H~FFFFH。段地址也是16位,用于表示哪一个段,用段地址和偏移地址可确定一个逻辑地址。

  2.规定:16个字节分为一小段,每个小段的第一个单元的物理地址为小段的首地址。存储分段时,各段的起始地址不必须是小段的首地址,即逻辑段必须从任一小段的首单元开始。

5.段的类型

  1.逻辑段分为:代码段、数据段、附加段、堆栈段

    代码段    用于存放指令,段地址存放在段寄存器CS

    数据段    用于存放数据,段地址存放在段寄存器DS

    附加段    用于辅助存放数据,段地址存放在段寄存器ES

    堆栈段    重要的数据结构,用来保存数据、地址和系统参数,段地址存放在段寄存器SS

    数据段和附加段的偏移地址也称为有效地址EA

6.堆栈

  1.堆栈区是一个特殊的存储区,末单元为栈底,数据从栈底开始存放,最后存放的数据单元为栈顶。当堆栈去为空时,栈顶和栈底重合。

  2.数据在在堆栈去存放时,必须以字存入,每存入一个字,后存入的数据依次放入栈的低地址单元中。

  3.栈指针SP每次减2,由栈指针SP指出当前栈顶的位置,数据存取时采用后进先出

时间: 2024-11-24 12:37:35

《汇编语言》学习笔记3——内存储器的相关文章

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

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

小甲鱼零基础汇编语言学习笔记第五章之[BX]和loop指令

这一章主要介绍什么是[BX]以及loop(循环)指令怎么使用,loop和[BX]又怎么样相结合,段前缀又是什么鬼,以及如何使用段前缀. 1.[BX]的概念 [BX]和[0]类似,[0]表示内存单元的偏移地址是0.要完整描述一个内存单元,需要两种信息:内存单元的地址,内存单元的长度(类型).[BX]同样也表示一个内存单元,它的偏移地址在bx中,比如指令:mov ax,[bx].这里我们以一个程序为例: 1 assume cs:codesg 2 codesg segment 3 start: mov

小甲鱼零基础汇编语言学习笔记第四章之第一个汇编程序

1.使用工具 代码编写:NotePad++,代码编译器:MASM 2.一个源程序从写出到执行的过程 第一步,使用文本编辑器,用汇编语言编写汇编源程序,这一步产生一个存储源程序的文本文件. 第二步,对源程序进行编译,连接.使用MASM.exe对源程序文件进行编译,产生目标文件,再使用LINK.exe对目标文件进行连接,生成可在操作系统中直接运行的可执行文件.可执行文件包括两个部分,程序(从源程序的汇编指令翻译过来的机器码)和数据(源程序中定义的数据):相关的描述信息 (程序有多大,要占多少内存空间

汇编语言学习笔记(8)——数据处理的基本问题

1.只有"bx.si.di. bp"四个寄存器可以用在[-]中来进行内存单元的寻址 2.这四个寄存器可以单个出现也可以以[by+zi]形式出现,其中y=x或p,z = s或d ,其他格式均为错误的. 3.当使用bp时,如果没有显性地给出段地址,则段地址默认在ss段寄存器中. 4.汇编语言中用三个概念来表达数据的位置: 立即数(idata): 直接包含在机器指令中的[数据](执行前在CPU的[指令缓冲器中]),在汇编指令中直接给出 寄存器 指令要处理的[数据]在[寄存器]中,在汇编指令中

汇编语言学习笔记(二)

六.选择结构 if-then结构 C语言版本 if(count == 10) { count --; i++; } MASM汇编 .if count==10 dec count inc i .endif cmp指令,该指令用于比较两个参数大小 cmp mem, imm 比较内存mem和立即数imm大小 cmp reg, imm 比较寄存器reg和立即数imm大小 cmp reg, mem 比较寄存器reg和内存mem大小 cmp mem, reg 比较内存mem和寄存器reg大小 cmp imm

汇编语言学习笔记(五)

十六.数组 数组的基本表示方法 numary sdword 2,5,7 numary数组中有三个元素,为sdword类型,分别为2,5,7 empary sdword ?, ?,? empary数组为sdword类型元素,未初始化. 如果数组元素很多可通过 zeroary sdword 100 dup(0) zeroary数组中有100个0 empary sdword 3 dup(?) empary 数组中有3个未初始化的sdword类型数据 mov eax, numary+8; 表示把数组nu

汇编语言学习笔记(三)

八.逻辑运算指令 数字在计算机中以二进制存储,每个位数字为0或者1,当两个二进制数字进行逻辑按位&,逻辑按位|,逻辑异或^操作, 可以采用汇编语言提供的逻辑运算指令and,or, xor,not等指令. and指令: C语言&操作,将0110&1101得出结果为0100 C语言代码为 if(flag & maskit) count++; 汇编语言高级指令可实现: mov eax, flag .if eax & maskit inc count .endif 不采用高

汇编语言学习笔记2

1.严格来说汇编语是由以下三部分组成: 1.汇编指令:助记符,即用英语字符替换机器码 2.伪指令:由编译器编译执行,即Mov等控制指令 3.其它符号:由编译器编译执行,计算机是不能识别"+","-"等符号,所以需要编译器编译成机器语言 2.汇编语言的核心是汇编指令,他决定汇编语言的特性 3.我们都知道CPU是计算器的核心部分,想让CPU工作,必须向他提供指令和数据,指令即告诉计算机让它做什么,数据是告诉计算机,让它拿哪些数据做 4.指令和数据在存储器中存放,也就是平

汇编语言学习笔记(六)

十八.字符串处理 前文介绍过字符串的处理,字符串是byte类型 的数组,现在实现一段代码,将字符串string1数据copy到字符串string2中 代码如下 .data string1 byte "Hello World!", 0 string2 byte 12 dup(?), 0 .code mov ecx, 12 mov ebx,0 .repeat mov al, string1[ebx] mov string2[ebx], al inc ebx .untilcxz 通过ecx递