汇编语言程序设计 第3章概念梳理

汇编语言程序设计

第3章概念梳理

基础概念部分:{

字数据在内存当中的存储:高-高 低-低
     字数据的低位字节存放在低地址内存单元
     字数据的高位字节存放在高地址内存单元

取低地址内存单元地址作为字数据地址,例如数据124EH:
    12H存储在偏移量为"2"的字节单元,4EH存储在偏移量为"1"的字节单元
    则从地址为"1"的地址单元取出的一个字数据为124EH

  12为高位,故存储在高位“2”单元,4E为低位存储在低位”1“单元

数据在内存和CPU之间的传送:
    执行指令时,默认情况下,8086自动取寄存器DS中的值为内存单元的段地址
    DS:数据段段寄存器,用于存放数据段的[段地址]
    mov,add,sub等汇编指令中,访问内存单元是,默认情况下指的是数据段。

关于常数(立即数运算):
    不能作为第1个操作数(目的操作数)
    第2个操作数(源操作数)时,如果最高位是十六位制的a~f或A~F,前面要加零。

例如不能写成 mov 4000H,ax,应当写成mov ax,4000H

不能写成 mov ax,A400H,应当写成mov ax,0A400H

两个内存单元之间不能直接传送数据:
     mov [1],[2]

不能使用mov指令修改CS和IP的值

关于段寄存器:

  • 两个段寄存器之间不能直接传送
  • 不能把常数送到段寄存器

关于add指令:

  • 操作数是内存单元时,指令中只给出[偏移地址]。默认,[段地址]在ds中

错误点:

  • add指令的操作数不能同时是内存单元
  • add [1],[2]

add指令的操作数不能是段寄存器,例如:
    add ax,[2]
    add ds,[2]

关于sub指令:

  • 同add指令一样,操作数是内存单元时,指令中只给出[偏移地址]。默认,[段地址]在ds中

错误点:

  • 两个内存单元不能直接使用sub指令相减,例如:
  • sub[1],[2]

sub指令的操作数不能是段寄存器

栈的概念:

栈的特性:先进后出

  • 两个概念:栈底、栈顶
  • 两个操作:入栈、出栈

栈顶:最后入栈的字数据所对应的地址单元
   栈底:固定的一端,栈区最高地址单元的前一个单元

入栈:把数据存入栈
   出栈:从栈取出数据

与栈相关的寄存器SS和SP
   SS:栈段段寄存器,用于存放栈段的[段地址]
   SP:栈指针寄存器,用于存放栈顶的偏移指针

SS:SP对应的物理地址是栈顶的物理地址
  (SS)*16+(SP)=栈顶的物理地址

[栈]的操作指令:push和pop

push ax 将ax的值压入栈顶
   pop ax 将栈顶的元素值弹出到ax寄存器

push [0] 将ds:0对应的内存单元字数据压入栈
   pop [0] 将栈顶的元素弹出到ds:0对应的内存单元

push和pop指令的注意点:
   入栈和出栈均以字为单元
   操作对象不能是常数

pop段寄存器当中,段寄存器不能是CS和SS

可以利用栈的定义完成如下两个操作:
   1、利用栈"保护现场"

保护现场原理: 先将寄存器bx,cx的值压入栈,然后无论对cx与bx寄存器的值进行如何的操作,都能通过栈先进后出的原则,把两个寄存器的值弹出返回。
   2、利用栈实现数据交换


同样利用先进后出的原则,先将两个寄存器的值压入,而后根据它们压入栈的顺序相同的进行弹出,即可实现两个寄存器数据的交换。

关于[段]的小结

一段内存可以同时用作代码段、数据段、栈段
   在8086CPU中,每个段的最大长度不能超过64KB,即 0000H~FFFFH

原文地址:https://www.cnblogs.com/cymwn-com/p/10176720.html

时间: 2024-08-01 06:31:05

汇编语言程序设计 第3章概念梳理的相关文章

汇编语言程序设计 第2章概念梳理

汇编语言程序设计 第2章概念梳理 8086 14个寄存器: AX,BX,CX,DX (通用寄存器) SI,DI,BP,SP (基址和变址寄存器) CS,SS,DS,ES (段寄存器) IP,FLAGS (指令指针和标志寄存器) 通用寄存器: AX,BX,CX,DX通常用于存放一般性数据 称为通用寄存器 一般存储的数据范围为0 ~ 2^16-1 且为了与早期CPU操作兼容,这4个寄存器均可拆分成2个8位寄存器单独使用 {             AX分为AH和AL            BX分为B

汇编语言程序设计 第5~8章概念梳理

汇编语言程序设计第5~8章小结: 第5章: 直接寻址和间接寻址问题: 直接寻址:mov dl,[0]; dl=((ds)*16+0)间接寻址:mov bx,0 mov dl,[bx];dl=((ds)*16+bx) assume cs:codecode segment mov ax,1 mov cx,8s: add ax,ax loop s mov ax,4c00h int 21hcode endsend 循环操作 段前缀标记所指的部分代码,直到cx寄存器当中的值变为零 t命令.p命令.g命令小

汇编语言程序设计第三章

第三章 寄存器(内存访问) 1 内存中字的存储 1个字=2个字节,如从0开始存放20000(4E20H),20.4E分别表示1个字节,内存中字的存储如下图所示: 任何两个地址连续的内存单元(0.1.2......),N号单元和N+1号单元,可以看成两个内存单元.比如说上图中的0内存单元(字节单元),存放的是字节型数据,就是20H(十进制的32):0地址字单元,存放字型数据,就是4E20H. 任何两个地址连续的内存单元,N号单元和N+1号单元,也可以看成一个地址为N的字单元中的高位字节单元和低位字

汇编语言程序设计第五章

5.1 [BX] mov ax,[bx]  功能:bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将SA:EA处的数据送入ax中.即:(ax)=((ds)*16+(bx)). mov [bx],ax 功能:bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将ax中的数据送入内存SA:EA中.即:((ds)*16+(bx))=(ax). 5.2 Loop指令 loop指令的格式:loop 标号.CPU执行loop指令有两个步骤:①(cx)=(cx)-1②判断cx中的值,不

Javascript高级程序设计——第三章:基本概念

javascript高级程序设计——第三章:基本概念 一.语法 EMCA-262通过叫做ECMAScript的“伪语言”为我们描述了javascript实现的基本概念 javascript借鉴了C的语法,区分大小写,标示符以字母.下划线.或美元符号($)开头,注释可以用 // 或者/* */ 严格模式: ECMAScript 5引入了严格模式,在严格模式下不确定的行为将得到处理,通过在顶部添加 “use strict”来启用严格模式: function fuc(){ "use strict&qu

javascript高级程序设计 第十三章--事件

javascript高级程序设计 第十三章--事件js与HTML的交互就是通过事件实现的,事件就是文档或浏览器窗口中发生的一些特定的交互瞬间. 事件流:事件流描述的是从页面中接收事件的顺序,IE的是事件冒泡流,Netscape的是事件捕获流,这个两个是完全相反的事件流概念. 事件冒泡:由最具体的元素接收,然后逐级向上传播到更高级的节点,即事件沿DOM树向上传播,直到document对象. 事件捕获:不大具体的节点应该更早接收到事件,相当于沿DOM节点树向下级传播直到事件的实际目标,在浏览器中,是

《windows程序设计》第一章,建议想学API的每天看一章

开始 壹佰软件开发小组  整理编译   本书介绍了在Microsoft Windows 98.Microsoft Windows NT 4.0和Windows NT 5.0下程序写作的方法.这些程序用C语言编写并使用原始的Windows Application Programming Interface(API).如在本章稍后所讨论的,这不是写作Windows程序的唯一方法.然而,无论最终您使用什么方式写作程序,了解Windows API都是非常重要的. 正如您可能知道的,Windows 98已

汇编语言程序设计读书笔记(3)- 程序范例

主要描述三方面的内容:第一是汇编语言的程序模版,以及模版涉及到的一些知识点:第二是如何调试汇编语言:第三是如何在汇编语言中调用C库函数. 1. 汇编语言的组成 汇编语言由段(section)组成,一个程序中执行的代码,叫文本段(text),程序还可能有定义变量,有付给初始值的变量放在数据段(data)中,没有赋初值或者付给零初值的放在bss段中.text段一定是要有的,data和bss可以没有. 2. 段的定义 用.section语法定义段.比如: .section .text定义文本段, .s

《80X86汇编语言程序设计教程》二十五 结语(读后感:这本书怎么样)

这本书的推荐星级是:5星.毕竟是经典书籍,没什么好说的. 就汇编本身而言,在编写高效率程序以及对程序的优化,调试,工程的逆向都是一门基础:就理论上的操作系统而言,汇编让你了解CPU,了解计算机的体系结构,它是阅读操作系统源码的前提,这也是<80X86汇编语言程序设计教程>做得比较好的一点,它对386的保护方式下的编程写得比较详实,读完整本书,会发现这学的不仅仅是汇编语言,还有CPU的体系架构,它让你基本猜测得到在编写基于80386CPU的操作系统时,大概要做一些什么事情. 阅读前,我选过几本书